- инвентарь работает :D, осталось отладить
This commit is contained in:
@@ -227,14 +227,14 @@ public class Network {
|
||||
public void processBatch(BatchPacket packet, Player player) {
|
||||
List<DataPacket> packets = new ObjectArrayList<>();
|
||||
try {
|
||||
processBatch(packet.payload, packets);
|
||||
processBatch(packet.payload, packets, player);
|
||||
} catch (ProtocolException e) {
|
||||
player.close("", e.getMessage());
|
||||
log.error("Unable to process player packets ", e);
|
||||
}
|
||||
}
|
||||
|
||||
public void processBatch(byte[] payload, Collection<DataPacket> packets) throws ProtocolException {
|
||||
public void processBatch(byte[] payload, Collection<DataPacket> packets, Player player) throws ProtocolException {
|
||||
byte[] data;
|
||||
try {
|
||||
data = Network.inflateRaw(payload);
|
||||
@@ -262,6 +262,7 @@ public class Network {
|
||||
int packetId = header & 0x3ff;
|
||||
|
||||
DataPacket pk = this.getPacket(packetId);
|
||||
pk.client_player = player;
|
||||
|
||||
if (pk != null) {
|
||||
pk.setBuffer(buf, buf.length - bais.available());
|
||||
|
||||
@@ -282,7 +282,7 @@ public class RakNetInterface implements RakNetServerListener, AdvancedSourceInte
|
||||
buffer.readBytes(packetBuffer);
|
||||
|
||||
try {
|
||||
RakNetInterface.this.network.processBatch(packetBuffer, this.inbound);
|
||||
RakNetInterface.this.network.processBatch(packetBuffer, this.inbound, player);
|
||||
} catch (ProtocolException e) {
|
||||
this.disconnect("Sent malformed packet");
|
||||
log.error("Unable to process batch packet", e);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package cn.nukkit.network.protocol;
|
||||
|
||||
import cn.nukkit.Player;
|
||||
import cn.nukkit.Server;
|
||||
import cn.nukkit.network.Network;
|
||||
import cn.nukkit.utils.Binary;
|
||||
@@ -14,6 +15,7 @@ public abstract class DataPacket extends BinaryStream implements Cloneable {
|
||||
|
||||
public volatile boolean isEncoded = false;
|
||||
private int channel = 0;
|
||||
public Player client_player;
|
||||
|
||||
public RakNetReliability reliability = RakNetReliability.RELIABLE_ORDERED;
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.zhekasmirnov.apparatus.adapter.innercore.game.item.ItemStack;
|
||||
import com.zhekasmirnov.horizon.runtime.logger.Logger;
|
||||
import lombok.Value;
|
||||
|
||||
import java.awt.event.ContainerAdapter;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.*;
|
||||
|
||||
@@ -30,7 +31,7 @@ public class ItemStackRequestPacket extends DataPacket {
|
||||
public void slotInfoRead(String prefix){
|
||||
info.put(prefix+"byte1", self.getByte());
|
||||
info.put(prefix+"slot_id", self.getByte());
|
||||
info.put(prefix+"id", self.getVarInt());
|
||||
info.put(prefix+"_network_id", self.getVarInt());
|
||||
}
|
||||
|
||||
public void transferBaseRead(boolean readSecondSlotInfo, boolean requiresReadByte){
|
||||
@@ -39,17 +40,14 @@ public class ItemStackRequestPacket extends DataPacket {
|
||||
boolean result = false;
|
||||
if (requiresReadByte) {
|
||||
firstByte = self.getByte();
|
||||
result = (firstByte - 1 < 0x40); // ?
|
||||
result = (firstByte - 1 < 0x40);
|
||||
} else
|
||||
result = true;
|
||||
info.put("result", result);
|
||||
|
||||
slotInfoRead(""); // first
|
||||
if (readSecondSlotInfo) {
|
||||
slotInfoRead("second_");// second
|
||||
} else {
|
||||
// reset second ItemStackRequestSlotInfo
|
||||
}
|
||||
slotInfoRead("");
|
||||
if (readSecondSlotInfo)
|
||||
slotInfoRead("second_");
|
||||
}
|
||||
|
||||
public void take(){
|
||||
@@ -177,14 +175,14 @@ public class ItemStackRequestPacket extends DataPacket {
|
||||
}
|
||||
|
||||
public static class ArrayData {
|
||||
public int hz;
|
||||
public int id_event;
|
||||
public ArrayList<ItemInfo> items;
|
||||
public ArrayList<String> slots;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ArrayData{" +
|
||||
"\nhz=" + hz +
|
||||
"\nid_event=" + id_event +
|
||||
", \nitems=" + items +
|
||||
", \nslots=" + slots +
|
||||
'}';
|
||||
@@ -202,7 +200,7 @@ public class ItemStackRequestPacket extends DataPacket {
|
||||
|
||||
public ArrayData DataRead(){
|
||||
ArrayData result = new ArrayData();
|
||||
result.hz = this.getVarInt();
|
||||
result.id_event = this.getVarInt();
|
||||
ItemStackRequestPacket self = this;
|
||||
result.items = this.<ItemInfo>readVectorList(() -> {
|
||||
ItemInfo item = new ItemInfo(self);
|
||||
@@ -216,9 +214,16 @@ public class ItemStackRequestPacket extends DataPacket {
|
||||
@Override
|
||||
public void decode() {
|
||||
BatchRead();
|
||||
Map<UUID, Player> players = Server.getInstance().getOnlinePlayers();
|
||||
players.forEach((k, v) -> Logger.debug(k.toString()+":"+v.getName()+":"+v.getId()));
|
||||
Logger.debug(list.toString());
|
||||
|
||||
list.forEach((v) -> v.items.forEach((item_info) -> {
|
||||
Integer slot_id = (Integer) item_info.info.get("slot_id");
|
||||
Integer second_slot_id = (Integer) item_info.info.get("second_slot_id");
|
||||
|
||||
Item item = this.client_player.getInventory().getItem(slot_id);
|
||||
this.client_player.getInventory().clear(slot_id);
|
||||
if(second_slot_id != null)
|
||||
this.client_player.getInventory().setItem(second_slot_id, item);
|
||||
}));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user