mirror of
https://github.com/Melledy/LunarCore.git
synced 2025-12-23 18:54:37 +01:00
Implement mail attachments
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package emu.lunarcore.game.mail;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@@ -55,6 +56,13 @@ public class Mail {
|
||||
}
|
||||
}
|
||||
|
||||
public void addAttachment(GameItem item) {
|
||||
if (this.attachments == null) {
|
||||
this.attachments = new ArrayList<>();
|
||||
}
|
||||
this.attachments.add(item);
|
||||
}
|
||||
|
||||
// Database
|
||||
|
||||
public void save() {
|
||||
@@ -75,8 +83,16 @@ public class Mail {
|
||||
.setSender(this.getSender())
|
||||
.setTime(this.getTime())
|
||||
.setExpireTime(this.getExpiry())
|
||||
.setIsRead(this.isRead())
|
||||
.setAttachment(ItemList.newInstance());
|
||||
.setIsRead(this.isRead());
|
||||
|
||||
// Add attachments
|
||||
ItemList list = ItemList.newInstance();
|
||||
|
||||
if (this.attachments != null) {
|
||||
this.attachments.stream().map(GameItem::toProto).forEach(list::addItemList);
|
||||
}
|
||||
|
||||
proto.setAttachment(list);
|
||||
|
||||
return proto;
|
||||
}
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
package emu.lunarcore.game.mail;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import emu.lunarcore.LunarRail;
|
||||
import emu.lunarcore.game.inventory.GameItem;
|
||||
import emu.lunarcore.game.player.BasePlayerManager;
|
||||
import emu.lunarcore.game.player.Player;
|
||||
import emu.lunarcore.server.packet.send.PacketNewMailScNotify;
|
||||
@@ -56,6 +59,28 @@ public class Mailbox extends BasePlayerManager implements Iterable<Mail> {
|
||||
// Send packet
|
||||
this.getPlayer().sendPacket(new PacketNewMailScNotify(mail));
|
||||
}
|
||||
|
||||
public synchronized List<GameItem> takeMailAttachments(RepeatedInt idList) {
|
||||
List<GameItem> attachments = new ArrayList<>();
|
||||
|
||||
for (int id : idList) {
|
||||
Mail mail = getMap().get(id);
|
||||
if (mail == null || mail.isRead() || mail.getAttachments() == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Add attachments to inventory
|
||||
for (GameItem item : mail.getAttachments()) {
|
||||
getPlayer().getInventory().addItem(item);
|
||||
attachments.add(item);
|
||||
}
|
||||
|
||||
// Set read
|
||||
mail.setRead();
|
||||
}
|
||||
|
||||
return attachments;
|
||||
}
|
||||
|
||||
public synchronized IntList deleteMail(RepeatedInt idList) {
|
||||
IntList deleteList = new IntArrayList();
|
||||
@@ -91,4 +116,5 @@ public class Mailbox extends BasePlayerManager implements Iterable<Mail> {
|
||||
|
||||
stream.forEach(this::putMail);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package emu.lunarcore.server.packet.recv;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import emu.lunarcore.game.inventory.GameItem;
|
||||
import emu.lunarcore.proto.TakeMailAttachmentCsReqOuterClass.TakeMailAttachmentCsReq;
|
||||
import emu.lunarcore.server.game.GameSession;
|
||||
import emu.lunarcore.server.packet.CmdId;
|
||||
import emu.lunarcore.server.packet.Opcodes;
|
||||
import emu.lunarcore.server.packet.PacketHandler;
|
||||
import emu.lunarcore.server.packet.send.PacketTakeMailAttachmentScRsp;
|
||||
|
||||
@Opcodes(CmdId.TakeMailAttachmentCsReq)
|
||||
public class HandlerTakeMailAttachmentCsReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] data) throws Exception {
|
||||
var req = TakeMailAttachmentCsReq.parseFrom(data);
|
||||
|
||||
List<GameItem> attachments = session.getPlayer().getMailbox().takeMailAttachments(req.getMailIdList());
|
||||
|
||||
session.send(new PacketTakeMailAttachmentScRsp(req.getMailIdList(), attachments));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package emu.lunarcore.server.packet.send;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import emu.lunarcore.game.inventory.GameItem;
|
||||
import emu.lunarcore.proto.TakeMailAttachmentScRspOuterClass.TakeMailAttachmentScRsp;
|
||||
import emu.lunarcore.server.packet.BasePacket;
|
||||
import emu.lunarcore.server.packet.CmdId;
|
||||
import us.hebi.quickbuf.RepeatedInt;
|
||||
|
||||
public class PacketTakeMailAttachmentScRsp extends BasePacket {
|
||||
|
||||
public PacketTakeMailAttachmentScRsp(RepeatedInt idList, Collection<GameItem> items) {
|
||||
super(CmdId.TakeMailAttachmentScRsp);
|
||||
|
||||
var data = TakeMailAttachmentScRsp.newInstance();
|
||||
|
||||
for (int id : idList) {
|
||||
data.addSuccMailIdList(id);
|
||||
}
|
||||
|
||||
for (GameItem item : items) {
|
||||
data.getMutableAttachment().addItemList(item.toProto());
|
||||
}
|
||||
|
||||
this.setData(data);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user