mirror of https://github.com/Minestom/Minestom.git
More packets, just missing ChunkDataPacket
This commit is contained in:
parent
07ab4ac090
commit
930054385f
|
@ -17,6 +17,7 @@ import net.minestom.server.entity.Player;
|
|||
import net.minestom.server.event.player.PlayerCommandEvent;
|
||||
import net.minestom.server.network.packet.server.play.DeclareCommandsPacket;
|
||||
import net.minestom.server.utils.ArrayUtils;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import net.minestom.server.utils.callback.CommandCallback;
|
||||
import net.minestom.server.utils.validate.Check;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
@ -379,7 +380,7 @@ public final class CommandManager {
|
|||
true, false, tracking);
|
||||
tabNode.name = tracking ? "tab_completion" : "args";
|
||||
tabNode.parser = "brigadier:string";
|
||||
tabNode.properties = packetWriter -> packetWriter.writeVarInt(2); // Greedy phrase
|
||||
tabNode.properties = BinaryWriter.makeArray(packetWriter -> packetWriter.writeVarInt(2)); // Greedy phrase
|
||||
tabNode.children = new int[0];
|
||||
if (tracking) {
|
||||
tabNode.suggestionsType = "minecraft:ask_server";
|
||||
|
@ -597,7 +598,6 @@ public final class CommandManager {
|
|||
|
||||
literalNode.children = ArrayUtils.toArray(cmdChildren);
|
||||
return literalNode;
|
||||
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
|
|
@ -5,6 +5,7 @@ import net.minestom.server.command.builder.NodeMaker;
|
|||
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
|
||||
import net.minestom.server.command.builder.suggestion.SuggestionCallback;
|
||||
import net.minestom.server.network.packet.server.play.DeclareCommandsPacket;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import net.minestom.server.utils.callback.validator.StringArrayValidator;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
@ -47,9 +48,9 @@ public class ArgumentDynamicStringArray extends Argument<String[]> {
|
|||
DeclareCommandsPacket.Node argumentNode = simpleArgumentNode(this, executable, false, true);
|
||||
|
||||
argumentNode.parser = "brigadier:string";
|
||||
argumentNode.properties = packetWriter -> {
|
||||
argumentNode.properties = BinaryWriter.makeArray(packetWriter -> {
|
||||
packetWriter.writeVarInt(2); // Greedy phrase
|
||||
};
|
||||
});
|
||||
argumentNode.suggestionsType = "minecraft:ask_server";
|
||||
|
||||
nodeMaker.addNodes(new DeclareCommandsPacket.Node[]{argumentNode});
|
||||
|
|
|
@ -6,6 +6,7 @@ import net.minestom.server.command.builder.arguments.minecraft.SuggestionType;
|
|||
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
|
||||
import net.minestom.server.command.builder.suggestion.SuggestionCallback;
|
||||
import net.minestom.server.network.packet.server.play.DeclareCommandsPacket;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import net.minestom.server.utils.callback.validator.StringValidator;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
@ -56,9 +57,9 @@ public class ArgumentDynamicWord extends Argument<String> {
|
|||
final SuggestionType suggestionType = this.getSuggestionType();
|
||||
|
||||
argumentNode.parser = "brigadier:string";
|
||||
argumentNode.properties = packetWriter -> {
|
||||
argumentNode.properties = BinaryWriter.makeArray(packetWriter -> {
|
||||
packetWriter.writeVarInt(0); // Single word
|
||||
};
|
||||
});
|
||||
argumentNode.suggestionsType = suggestionType.getIdentifier();
|
||||
|
||||
nodeMaker.addNodes(new DeclareCommandsPacket.Node[]{argumentNode});
|
||||
|
|
|
@ -4,6 +4,7 @@ import io.netty.util.internal.StringUtil;
|
|||
import net.minestom.server.command.builder.NodeMaker;
|
||||
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
|
||||
import net.minestom.server.network.packet.server.play.DeclareCommandsPacket;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.apache.commons.text.StringEscapeUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -35,9 +36,9 @@ public class ArgumentString extends Argument<String> {
|
|||
DeclareCommandsPacket.Node argumentNode = simpleArgumentNode(this, executable, false, false);
|
||||
|
||||
argumentNode.parser = "brigadier:string";
|
||||
argumentNode.properties = packetWriter -> {
|
||||
argumentNode.properties = BinaryWriter.makeArray(packetWriter -> {
|
||||
packetWriter.writeVarInt(1); // Quotable phrase
|
||||
};
|
||||
});
|
||||
|
||||
nodeMaker.addNodes(new DeclareCommandsPacket.Node[]{argumentNode});
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package net.minestom.server.command.builder.arguments;
|
|||
|
||||
import net.minestom.server.command.builder.NodeMaker;
|
||||
import net.minestom.server.network.packet.server.play.DeclareCommandsPacket;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -29,9 +30,9 @@ public class ArgumentStringArray extends Argument<String[]> {
|
|||
DeclareCommandsPacket.Node argumentNode = simpleArgumentNode(this, executable, false, false);
|
||||
|
||||
argumentNode.parser = "brigadier:string";
|
||||
argumentNode.properties = packetWriter -> {
|
||||
argumentNode.properties = BinaryWriter.makeArray(packetWriter -> {
|
||||
packetWriter.writeVarInt(2); // Greedy phrase
|
||||
};
|
||||
});
|
||||
|
||||
nodeMaker.addNodes(new DeclareCommandsPacket.Node[]{argumentNode});
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package net.minestom.server.command.builder.arguments;
|
|||
import net.minestom.server.command.builder.NodeMaker;
|
||||
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
|
||||
import net.minestom.server.network.packet.server.play.DeclareCommandsPacket;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import net.minestom.server.utils.validate.Check;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
@ -90,9 +91,9 @@ public class ArgumentWord extends Argument<String> {
|
|||
// Can be any word, add only one argument node
|
||||
DeclareCommandsPacket.Node argumentNode = simpleArgumentNode(this, executable, false, false);
|
||||
argumentNode.parser = "brigadier:string";
|
||||
argumentNode.properties = packetWriter -> {
|
||||
argumentNode.properties = BinaryWriter.makeArray(packetWriter -> {
|
||||
packetWriter.writeVarInt(0); // Single word
|
||||
};
|
||||
});
|
||||
nodeMaker.addNodes(new DeclareCommandsPacket.Node[]{argumentNode});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import net.minestom.server.entity.EntityType;
|
|||
import net.minestom.server.entity.GameMode;
|
||||
import net.minestom.server.network.packet.server.play.DeclareCommandsPacket;
|
||||
import net.minestom.server.registry.Registries;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import net.minestom.server.utils.entity.EntityFinder;
|
||||
import net.minestom.server.utils.math.IntRange;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
@ -75,7 +76,7 @@ public class ArgumentEntity extends Argument<EntityFinder> {
|
|||
public void processNodes(@NotNull NodeMaker nodeMaker, boolean executable) {
|
||||
DeclareCommandsPacket.Node argumentNode = simpleArgumentNode(this, executable, false, false);
|
||||
argumentNode.parser = "minecraft:entity";
|
||||
argumentNode.properties = packetWriter -> {
|
||||
argumentNode.properties = BinaryWriter.makeArray(packetWriter -> {
|
||||
byte mask = 0;
|
||||
if (this.isOnlySingleEntity()) {
|
||||
mask += 1;
|
||||
|
@ -84,7 +85,7 @@ public class ArgumentEntity extends Argument<EntityFinder> {
|
|||
mask += 2;
|
||||
}
|
||||
packetWriter.writeByte(mask);
|
||||
};
|
||||
});
|
||||
|
||||
nodeMaker.addNodes(new DeclareCommandsPacket.Node[]{argumentNode});
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package net.minestom.server.command.builder.arguments.number;
|
|||
import net.minestom.server.command.builder.NodeMaker;
|
||||
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
|
||||
import net.minestom.server.network.packet.server.play.DeclareCommandsPacket;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ArgumentDouble extends ArgumentNumber<Double> {
|
||||
|
@ -45,13 +46,13 @@ public class ArgumentDouble extends ArgumentNumber<Double> {
|
|||
DeclareCommandsPacket.Node argumentNode = simpleArgumentNode(this, executable, false, false);
|
||||
|
||||
argumentNode.parser = "brigadier:double";
|
||||
argumentNode.properties = packetWriter -> {
|
||||
argumentNode.properties = BinaryWriter.makeArray(packetWriter -> {
|
||||
packetWriter.writeByte(getNumberProperties());
|
||||
if (this.hasMin())
|
||||
packetWriter.writeDouble(this.getMin());
|
||||
if (this.hasMax())
|
||||
packetWriter.writeDouble(this.getMax());
|
||||
};
|
||||
});
|
||||
|
||||
nodeMaker.addNodes(new DeclareCommandsPacket.Node[]{argumentNode});
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package net.minestom.server.command.builder.arguments.number;
|
|||
import net.minestom.server.command.builder.NodeMaker;
|
||||
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
|
||||
import net.minestom.server.network.packet.server.play.DeclareCommandsPacket;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ArgumentFloat extends ArgumentNumber<Float> {
|
||||
|
@ -45,13 +46,13 @@ public class ArgumentFloat extends ArgumentNumber<Float> {
|
|||
DeclareCommandsPacket.Node argumentNode = simpleArgumentNode(this, executable, false, false);
|
||||
|
||||
argumentNode.parser = "brigadier:float";
|
||||
argumentNode.properties = packetWriter -> {
|
||||
argumentNode.properties = BinaryWriter.makeArray(packetWriter -> {
|
||||
packetWriter.writeByte(getNumberProperties());
|
||||
if (this.hasMin())
|
||||
packetWriter.writeFloat(this.getMin());
|
||||
if (this.hasMax())
|
||||
packetWriter.writeFloat(this.getMax());
|
||||
};
|
||||
});
|
||||
|
||||
nodeMaker.addNodes(new DeclareCommandsPacket.Node[]{argumentNode});
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package net.minestom.server.command.builder.arguments.number;
|
|||
import net.minestom.server.command.builder.NodeMaker;
|
||||
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
|
||||
import net.minestom.server.network.packet.server.play.DeclareCommandsPacket;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ArgumentInteger extends ArgumentNumber<Integer> {
|
||||
|
@ -36,13 +37,13 @@ public class ArgumentInteger extends ArgumentNumber<Integer> {
|
|||
DeclareCommandsPacket.Node argumentNode = simpleArgumentNode(this, executable, false, false);
|
||||
|
||||
argumentNode.parser = "brigadier:integer";
|
||||
argumentNode.properties = packetWriter -> {
|
||||
argumentNode.properties = BinaryWriter.makeArray(packetWriter -> {
|
||||
packetWriter.writeByte(getNumberProperties());
|
||||
if (this.hasMin())
|
||||
packetWriter.writeInt(this.getMin());
|
||||
if (this.hasMax())
|
||||
packetWriter.writeInt(this.getMax());
|
||||
};
|
||||
});
|
||||
|
||||
nodeMaker.addNodes(new DeclareCommandsPacket.Node[]{argumentNode});
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package net.minestom.server.command.builder.arguments.number;
|
|||
import net.minestom.server.command.builder.NodeMaker;
|
||||
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
|
||||
import net.minestom.server.network.packet.server.play.DeclareCommandsPacket;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ArgumentLong extends ArgumentNumber<Long> {
|
||||
|
@ -38,13 +39,13 @@ public class ArgumentLong extends ArgumentNumber<Long> {
|
|||
// TODO maybe use ArgumentLiteral/ArgumentWord and impose long restriction server side?
|
||||
|
||||
argumentNode.parser = "brigadier:integer";
|
||||
argumentNode.properties = packetWriter -> {
|
||||
argumentNode.properties = BinaryWriter.makeArray(packetWriter -> {
|
||||
packetWriter.writeByte(getNumberProperties());
|
||||
if (this.hasMin())
|
||||
packetWriter.writeInt(this.getMin().intValue());
|
||||
if (this.hasMax())
|
||||
packetWriter.writeInt(this.getMax().intValue());
|
||||
};
|
||||
});
|
||||
|
||||
nodeMaker.addNodes(new DeclareCommandsPacket.Node[]{argumentNode});
|
||||
}
|
||||
|
|
|
@ -4,13 +4,14 @@ import net.minestom.server.entity.Player;
|
|||
import net.minestom.server.item.ItemStack;
|
||||
import net.minestom.server.network.packet.client.ClientPlayPacket;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ClientEditBookPacket extends ClientPlayPacket {
|
||||
|
||||
public ItemStack book;
|
||||
public ItemStack book = ItemStack.getAirItem();
|
||||
public boolean isSigning;
|
||||
public Player.Hand hand;
|
||||
public Player.Hand hand = Player.Hand.MAIN;
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
|
@ -18,4 +19,11 @@ public class ClientEditBookPacket extends ClientPlayPacket {
|
|||
this.isSigning = reader.readBoolean();
|
||||
this.hand = Player.Hand.values()[reader.readVarInt()];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeItemStack(book);
|
||||
writer.writeBoolean(isSigning);
|
||||
writer.writeVarInt(hand.ordinal());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,12 +2,13 @@ package net.minestom.server.network.packet.client.play;
|
|||
|
||||
import net.minestom.server.network.packet.client.ClientPlayPacket;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ClientEntityActionPacket extends ClientPlayPacket {
|
||||
|
||||
public int playerId;
|
||||
public Action action;
|
||||
public Action action = Action.START_SNEAKING;
|
||||
public int horseJumpBoost;
|
||||
|
||||
@Override
|
||||
|
@ -17,6 +18,13 @@ public class ClientEntityActionPacket extends ClientPlayPacket {
|
|||
this.horseJumpBoost = reader.readVarInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeVarInt(playerId);
|
||||
writer.writeVarInt(action.ordinal());
|
||||
writer.writeVarInt(horseJumpBoost);
|
||||
}
|
||||
|
||||
public enum Action {
|
||||
START_SNEAKING,
|
||||
STOP_SNEAKING,
|
||||
|
|
|
@ -3,11 +3,12 @@ package net.minestom.server.network.packet.client.play;
|
|||
import net.minestom.server.network.packet.client.ClientPlayPacket;
|
||||
import net.minestom.server.utils.BlockPosition;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ClientGenerateStructurePacket extends ClientPlayPacket {
|
||||
|
||||
public BlockPosition blockPosition;
|
||||
public BlockPosition blockPosition = new BlockPosition(0,0,0);
|
||||
public int level;
|
||||
public boolean keepJigsaws;
|
||||
|
||||
|
@ -17,4 +18,11 @@ public class ClientGenerateStructurePacket extends ClientPlayPacket {
|
|||
this.level = reader.readVarInt();
|
||||
this.keepJigsaws = reader.readBoolean();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeBlockPosition(blockPosition);
|
||||
writer.writeVarInt(level);
|
||||
writer.writeBoolean(keepJigsaws);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,16 +3,17 @@ package net.minestom.server.network.packet.client.play;
|
|||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.network.packet.client.ClientPlayPacket;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ClientInteractEntityPacket extends ClientPlayPacket {
|
||||
|
||||
public int targetId;
|
||||
public Type type;
|
||||
public Type type = Type.INTERACT;
|
||||
public float x;
|
||||
public float y;
|
||||
public float z;
|
||||
public Player.Hand hand;
|
||||
public Player.Hand hand = Player.Hand.MAIN;
|
||||
public boolean sneaking;
|
||||
|
||||
@Override
|
||||
|
@ -36,6 +37,27 @@ public class ClientInteractEntityPacket extends ClientPlayPacket {
|
|||
this.sneaking = reader.readBoolean();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeVarInt(targetId);
|
||||
writer.writeVarInt(type.ordinal());
|
||||
|
||||
switch (type) {
|
||||
case INTERACT:
|
||||
writer.writeVarInt(hand.ordinal());
|
||||
break;
|
||||
case ATTACK:
|
||||
break;
|
||||
case INTERACT_AT:
|
||||
writer.writeFloat(x);
|
||||
writer.writeFloat(y);
|
||||
writer.writeFloat(z);
|
||||
writer.writeVarInt(hand.ordinal());
|
||||
break;
|
||||
}
|
||||
writer.writeBoolean(sneaking);
|
||||
}
|
||||
|
||||
public enum Type {
|
||||
INTERACT,
|
||||
ATTACK,
|
||||
|
|
|
@ -2,6 +2,7 @@ package net.minestom.server.network.packet.client.play;
|
|||
|
||||
import net.minestom.server.network.packet.client.ClientPlayPacket;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ClientPlayerAbilitiesPacket extends ClientPlayPacket {
|
||||
|
@ -12,4 +13,9 @@ public class ClientPlayerAbilitiesPacket extends ClientPlayPacket {
|
|||
public void read(@NotNull BinaryReader reader) {
|
||||
this.flags = reader.readByte();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeByte(flags);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,13 +5,14 @@ import net.minestom.server.instance.block.BlockFace;
|
|||
import net.minestom.server.network.packet.client.ClientPlayPacket;
|
||||
import net.minestom.server.utils.BlockPosition;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ClientPlayerBlockPlacementPacket extends ClientPlayPacket {
|
||||
|
||||
public Player.Hand hand;
|
||||
public BlockPosition blockPosition;
|
||||
public BlockFace blockFace;
|
||||
public Player.Hand hand = Player.Hand.MAIN;
|
||||
public BlockPosition blockPosition = new BlockPosition(0,0,0);
|
||||
public BlockFace blockFace = BlockFace.TOP;
|
||||
public float cursorPositionX, cursorPositionY, cursorPositionZ;
|
||||
public boolean insideBlock;
|
||||
|
||||
|
@ -26,4 +27,14 @@ public class ClientPlayerBlockPlacementPacket extends ClientPlayPacket {
|
|||
this.insideBlock = reader.readBoolean();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeVarInt(hand.ordinal());
|
||||
writer.writeBlockPosition(blockPosition);
|
||||
writer.writeVarInt(blockFace.ordinal());
|
||||
writer.writeFloat(cursorPositionX);
|
||||
writer.writeFloat(cursorPositionY);
|
||||
writer.writeFloat(cursorPositionZ);
|
||||
writer.writeBoolean(insideBlock);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,13 +4,14 @@ import net.minestom.server.instance.block.BlockFace;
|
|||
import net.minestom.server.network.packet.client.ClientPlayPacket;
|
||||
import net.minestom.server.utils.BlockPosition;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ClientPlayerDiggingPacket extends ClientPlayPacket {
|
||||
|
||||
public Status status;
|
||||
public BlockPosition blockPosition;
|
||||
public BlockFace blockFace;
|
||||
public Status status = Status.SWAP_ITEM_HAND;
|
||||
public BlockPosition blockPosition = new BlockPosition(0,0,0);
|
||||
public BlockFace blockFace = BlockFace.TOP;
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
|
@ -19,6 +20,13 @@ public class ClientPlayerDiggingPacket extends ClientPlayPacket {
|
|||
this.blockFace = BlockFace.values()[reader.readByte()];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeVarInt(status.ordinal());
|
||||
writer.writeBlockPosition(blockPosition);
|
||||
writer.writeByte((byte) blockFace.ordinal());
|
||||
}
|
||||
|
||||
public enum Status {
|
||||
STARTED_DIGGING,
|
||||
CANCELLED_DIGGING,
|
||||
|
|
|
@ -3,16 +3,17 @@ package net.minestom.server.network.packet.client.play;
|
|||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.network.packet.client.ClientPlayPacket;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ClientSettingsPacket extends ClientPlayPacket {
|
||||
|
||||
public String locale;
|
||||
public String locale = "";
|
||||
public byte viewDistance;
|
||||
public Player.ChatMode chatMode;
|
||||
public Player.ChatMode chatMode = Player.ChatMode.ENABLED;
|
||||
public boolean chatColors;
|
||||
public byte displayedSkinParts;
|
||||
public Player.MainHand mainHand;
|
||||
public Player.MainHand mainHand = Player.MainHand.RIGHT;
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
|
@ -23,4 +24,16 @@ public class ClientSettingsPacket extends ClientPlayPacket {
|
|||
this.displayedSkinParts = reader.readByte();
|
||||
this.mainHand = Player.MainHand.values()[reader.readVarInt()];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
if(locale.length() > 128)
|
||||
throw new IllegalArgumentException("Locale cannot be longer than 128 characters.");
|
||||
writer.writeSizedString(locale);
|
||||
writer.writeByte(viewDistance);
|
||||
writer.writeVarInt(chatMode.ordinal());
|
||||
writer.writeBoolean(chatColors);
|
||||
writer.writeByte(displayedSkinParts);
|
||||
writer.writeVarInt(mainHand.ordinal());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,16 +4,19 @@ import net.minestom.server.network.packet.client.play.ClientPlayerDiggingPacket;
|
|||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.BlockPosition;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class AcknowledgePlayerDiggingPacket implements ServerPacket {
|
||||
|
||||
public BlockPosition blockPosition;
|
||||
public BlockPosition blockPosition = new BlockPosition(0,0,0);
|
||||
public int blockStateId;
|
||||
public ClientPlayerDiggingPacket.Status status;
|
||||
public ClientPlayerDiggingPacket.Status status = ClientPlayerDiggingPacket.Status.STARTED_DIGGING;
|
||||
public boolean successful;
|
||||
|
||||
public AcknowledgePlayerDiggingPacket() {}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeBlockPosition(blockPosition);
|
||||
|
@ -22,6 +25,14 @@ public class AcknowledgePlayerDiggingPacket implements ServerPacket {
|
|||
writer.writeBoolean(successful);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
blockPosition = reader.readBlockPosition();
|
||||
blockStateId = reader.readVarInt();
|
||||
status = ClientPlayerDiggingPacket.Status.values()[reader.readVarInt()];
|
||||
successful = reader.readBoolean();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.ACKNOWLEDGE_PLAYER_DIGGING;
|
||||
|
|
|
@ -2,11 +2,15 @@ package net.minestom.server.network.packet.server.play;
|
|||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.minestom.server.advancements.FrameType;
|
||||
import net.minestom.server.chat.ColoredText;
|
||||
import net.minestom.server.chat.JsonMessage;
|
||||
import net.minestom.server.item.ItemStack;
|
||||
import net.minestom.server.network.packet.server.ComponentHoldingServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import net.minestom.server.utils.binary.Readable;
|
||||
import net.minestom.server.utils.binary.Writeable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -19,9 +23,11 @@ import java.util.function.UnaryOperator;
|
|||
public class AdvancementsPacket implements ComponentHoldingServerPacket {
|
||||
|
||||
public boolean resetAdvancements;
|
||||
public AdvancementMapping[] advancementMappings;
|
||||
public String[] identifiersToRemove;
|
||||
public ProgressMapping[] progressMappings;
|
||||
public AdvancementMapping[] advancementMappings = new AdvancementMapping[0];
|
||||
public String[] identifiersToRemove = new String[0];
|
||||
public ProgressMapping[] progressMappings = new ProgressMapping[0];
|
||||
|
||||
public AdvancementsPacket() {}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
|
@ -39,6 +45,27 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
resetAdvancements = reader.readBoolean();
|
||||
|
||||
int mappingCount = reader.readVarInt();
|
||||
advancementMappings = new AdvancementMapping[mappingCount];
|
||||
for (int i = 0; i < mappingCount; i++) {
|
||||
advancementMappings[i] = new AdvancementMapping();
|
||||
advancementMappings[i].read(reader);
|
||||
}
|
||||
|
||||
identifiersToRemove = reader.readSizedStringArray(Integer.MAX_VALUE);
|
||||
|
||||
int progressCount = reader.readVarInt();
|
||||
progressMappings = new ProgressMapping[progressCount];
|
||||
for (int i = 0; i < progressCount; i++) {
|
||||
progressMappings[i] = new ProgressMapping();
|
||||
progressMappings[i].read(reader);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.ADVANCEMENTS;
|
||||
|
@ -73,7 +100,7 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket {
|
|||
/**
|
||||
* AdvancementMapping maps the namespaced ID to the Advancement.
|
||||
*/
|
||||
public static class AdvancementMapping implements Writeable {
|
||||
public static class AdvancementMapping implements Writeable, Readable {
|
||||
|
||||
public String key;
|
||||
public Advancement value;
|
||||
|
@ -84,13 +111,19 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket {
|
|||
value.write(writer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
key = reader.readSizedString(Integer.MAX_VALUE);
|
||||
value = new Advancement();
|
||||
value.read(reader);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Advancement implements Writeable {
|
||||
public static class Advancement implements Writeable, Readable {
|
||||
public String parentIdentifier;
|
||||
public DisplayData displayData;
|
||||
public String[] criterions;
|
||||
public Requirement[] requirements;
|
||||
public String[] criterions = new String[0];
|
||||
public Requirement[] requirements = new Requirement[0];
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
|
@ -114,15 +147,42 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket {
|
|||
requirement.write(writer);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
boolean hasParent = reader.readBoolean();
|
||||
if(hasParent) {
|
||||
parentIdentifier = reader.readSizedString(Integer.MAX_VALUE);
|
||||
} else {
|
||||
parentIdentifier = null;
|
||||
}
|
||||
|
||||
boolean hasDisplay = reader.readBoolean();
|
||||
if(hasDisplay) {
|
||||
displayData = new DisplayData();
|
||||
displayData.read(reader);
|
||||
} else {
|
||||
displayData = null;
|
||||
}
|
||||
|
||||
criterions = reader.readSizedStringArray(Integer.MAX_VALUE);
|
||||
|
||||
int requirementCount = reader.readVarInt();
|
||||
requirements = new Requirement[requirementCount];
|
||||
for (int i = 0; i < requirementCount; i++) {
|
||||
requirements[i] = new Requirement();
|
||||
requirements[i].read(reader);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class DisplayData implements Writeable {
|
||||
public Component title; // Only text
|
||||
public Component description; // Only text
|
||||
public ItemStack icon;
|
||||
public FrameType frameType;
|
||||
public static class DisplayData implements Writeable, Readable {
|
||||
public Component title = Component.empty(); // Only text
|
||||
public Component description = Component.empty(); // Only text
|
||||
public ItemStack icon = ItemStack.getAirItem();
|
||||
public FrameType frameType = FrameType.TASK;
|
||||
public int flags;
|
||||
public String backgroundTexture;
|
||||
public String backgroundTexture = "";
|
||||
public float x;
|
||||
public float y;
|
||||
|
||||
|
@ -140,34 +200,58 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket {
|
|||
writer.writeFloat(y);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class Requirement implements Writeable {
|
||||
|
||||
public String[] requirements;
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeVarInt(requirements.length);
|
||||
for (String requirement : requirements) {
|
||||
writer.writeSizedString(requirement);
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
title = reader.readComponent(Integer.MAX_VALUE);
|
||||
description = reader.readComponent(Integer.MAX_VALUE);
|
||||
icon = reader.readItemStack();
|
||||
frameType = FrameType.values()[reader.readVarInt()];
|
||||
flags = reader.readInt();
|
||||
if((flags & 0x1) != 0) {
|
||||
backgroundTexture = reader.readSizedString(Integer.MAX_VALUE);
|
||||
} else {
|
||||
backgroundTexture = null;
|
||||
}
|
||||
x = reader.readFloat();
|
||||
y = reader.readFloat();
|
||||
}
|
||||
}
|
||||
|
||||
public static class ProgressMapping implements Writeable {
|
||||
public String key;
|
||||
public AdvancementProgress value;
|
||||
public static class Requirement implements Writeable, Readable {
|
||||
|
||||
public String[] requirements = new String[0];
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeStringArray(requirements);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
requirements = reader.readSizedStringArray(Integer.MAX_VALUE);
|
||||
}
|
||||
}
|
||||
|
||||
public static class ProgressMapping implements Writeable, Readable {
|
||||
public String key = "";
|
||||
public AdvancementProgress value = new AdvancementProgress();
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeSizedString(key);
|
||||
value.write(writer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
key = reader.readSizedString(Integer.MAX_VALUE);
|
||||
value = new AdvancementProgress();
|
||||
value.read(reader);
|
||||
}
|
||||
}
|
||||
|
||||
public static class AdvancementProgress implements Writeable {
|
||||
public Criteria[] criteria;
|
||||
public static class AdvancementProgress implements Writeable, Readable {
|
||||
public Criteria[] criteria = new Criteria[0];
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
|
@ -176,11 +260,21 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket {
|
|||
criterion.write(writer);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
int count = reader.readVarInt();
|
||||
criteria = new Criteria[count];
|
||||
for (int i = 0; i < count; i++) {
|
||||
criteria[i] = new Criteria();
|
||||
criteria[i].read(reader);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class Criteria implements Writeable {
|
||||
public String criterionIdentifier;
|
||||
public CriterionProgress criterionProgress;
|
||||
public static class Criteria implements Writeable, Readable {
|
||||
public String criterionIdentifier = "";
|
||||
public CriterionProgress criterionProgress = new CriterionProgress();
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
|
@ -188,19 +282,32 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket {
|
|||
criterionProgress.write(writer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
criterionIdentifier = reader.readSizedString(Integer.MAX_VALUE);
|
||||
criterionProgress = new CriterionProgress();
|
||||
criterionProgress.read(reader);
|
||||
}
|
||||
}
|
||||
|
||||
public static class CriterionProgress implements Writeable {
|
||||
public static class CriterionProgress implements Writeable, Readable {
|
||||
public boolean achieved;
|
||||
public long dateOfAchieving;
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeBoolean(achieved);
|
||||
if (dateOfAchieving != 0)
|
||||
if (achieved)
|
||||
writer.writeLong(dateOfAchieving);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
achieved = reader.readBoolean();
|
||||
if(achieved) {
|
||||
dateOfAchieving = reader.readLong();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -6,6 +6,7 @@ import net.minestom.server.adventure.AdventurePacketConvertor;
|
|||
import net.minestom.server.network.packet.server.ComponentHoldingServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -16,15 +17,17 @@ import java.util.function.UnaryOperator;
|
|||
|
||||
public class BossBarPacket implements ComponentHoldingServerPacket {
|
||||
|
||||
public UUID uuid;
|
||||
public Action action;
|
||||
public UUID uuid = new UUID(0, 0);
|
||||
public Action action = Action.ADD;
|
||||
|
||||
public Component title; // Only text
|
||||
public Component title = Component.empty(); // Only text
|
||||
public float health;
|
||||
public BossBar.Color color;
|
||||
public BossBar.Overlay overlay;
|
||||
public BossBar.Color color = BossBar.Color.BLUE;
|
||||
public BossBar.Overlay overlay = BossBar.Overlay.PROGRESS;
|
||||
public byte flags;
|
||||
|
||||
public BossBarPacket() {}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeUuid(uuid);
|
||||
|
@ -57,6 +60,38 @@ public class BossBarPacket implements ComponentHoldingServerPacket {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
uuid = reader.readUuid();
|
||||
action = Action.values()[reader.readVarInt()];
|
||||
|
||||
switch (action) {
|
||||
case ADD:
|
||||
title = reader.readComponent(Integer.MAX_VALUE);
|
||||
health = reader.readFloat();
|
||||
color = BossBar.Color.values()[reader.readVarInt()];
|
||||
overlay = BossBar.Overlay.values()[reader.readVarInt()];
|
||||
flags = reader.readByte();
|
||||
break;
|
||||
case REMOVE:
|
||||
|
||||
break;
|
||||
case UPDATE_HEALTH:
|
||||
health = reader.readFloat();
|
||||
break;
|
||||
case UPDATE_TITLE:
|
||||
title = reader.readComponent(Integer.MAX_VALUE);
|
||||
break;
|
||||
case UPDATE_STYLE:
|
||||
color = BossBar.Color.values()[reader.readVarInt()];
|
||||
overlay = BossBar.Overlay.values()[reader.readVarInt()];
|
||||
break;
|
||||
case UPDATE_FLAGS:
|
||||
flags = reader.readByte();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.BOSS_BAR;
|
||||
|
|
|
@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component;
|
|||
import net.minestom.server.network.packet.server.ComponentHoldingServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
@ -24,6 +25,10 @@ public class ChatMessagePacket implements ComponentHoldingServerPacket {
|
|||
public Position position;
|
||||
public UUID uuid;
|
||||
|
||||
public ChatMessagePacket() {
|
||||
this(Component.empty(), Position.CHAT);
|
||||
}
|
||||
|
||||
public ChatMessagePacket(Component message, Position position, UUID uuid) {
|
||||
this.message = message;
|
||||
this.position = position;
|
||||
|
@ -41,6 +46,13 @@ public class ChatMessagePacket implements ComponentHoldingServerPacket {
|
|||
writer.writeUuid(uuid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
message = reader.readComponent(Integer.MAX_VALUE);
|
||||
position = Position.values()[reader.readByte()];
|
||||
uuid = reader.readUuid();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.CHAT_MESSAGE;
|
||||
|
|
|
@ -6,6 +6,7 @@ import net.minestom.server.entity.Player;
|
|||
import net.minestom.server.network.packet.server.ComponentHoldingServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -19,7 +20,7 @@ import java.util.function.UnaryOperator;
|
|||
*/
|
||||
public class CombatEventPacket implements ComponentHoldingServerPacket {
|
||||
|
||||
private EventType type;
|
||||
private EventType type = EventType.ENTER_COMBAT;
|
||||
private int duration;
|
||||
private int opponent;
|
||||
private int playerID;
|
||||
|
@ -72,6 +73,27 @@ public class CombatEventPacket implements ComponentHoldingServerPacket {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
type = EventType.values()[reader.readVarInt()];
|
||||
switch (type) {
|
||||
case ENTER_COMBAT:
|
||||
// nothing to add
|
||||
break;
|
||||
|
||||
case END_COMBAT:
|
||||
duration = reader.readVarInt();
|
||||
opponent = reader.readInt();
|
||||
break;
|
||||
|
||||
case DEATH:
|
||||
playerID = reader.readVarInt();
|
||||
opponent = reader.readInt();
|
||||
deathMessage = reader.readComponent(Integer.MAX_VALUE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.COMBAT_EVENT;
|
||||
|
|
|
@ -2,7 +2,9 @@ package net.minestom.server.network.packet.server.play;
|
|||
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import net.minestom.server.utils.binary.Readable;
|
||||
import net.minestom.server.utils.binary.Writeable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -10,7 +12,7 @@ import java.util.function.Consumer;
|
|||
|
||||
public class DeclareCommandsPacket implements ServerPacket {
|
||||
|
||||
public Node[] nodes;
|
||||
public Node[] nodes = new Node[0];
|
||||
public int rootIndex;
|
||||
|
||||
@Override
|
||||
|
@ -22,20 +24,31 @@ public class DeclareCommandsPacket implements ServerPacket {
|
|||
writer.writeVarInt(rootIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
int nodeCount = reader.readVarInt();
|
||||
nodes = new Node[nodeCount];
|
||||
for (int i = 0; i < nodeCount; i++) {
|
||||
nodes[i] = new Node();
|
||||
nodes[i].read(reader);
|
||||
}
|
||||
rootIndex = reader.readVarInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.DECLARE_COMMANDS;
|
||||
}
|
||||
|
||||
public static class Node implements Writeable {
|
||||
public static class Node implements Writeable, Readable {
|
||||
|
||||
public byte flags;
|
||||
public int[] children;
|
||||
public int[] children = new int[0];
|
||||
public int redirectedNode; // Only if flags & 0x08
|
||||
public String name; // Only for literal and argument
|
||||
public String parser; // Only for argument
|
||||
public Consumer<BinaryWriter> properties; // Only for argument
|
||||
public String suggestionsType; // Only if flags 0x10
|
||||
public String name = ""; // Only for literal and argument
|
||||
public String parser = ""; // Only for argument
|
||||
public byte[] properties; // Only for argument
|
||||
public String suggestionsType = ""; // Only if flags 0x10
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
|
@ -54,14 +67,74 @@ public class DeclareCommandsPacket implements ServerPacket {
|
|||
if (isArgument()) {
|
||||
writer.writeSizedString(parser);
|
||||
if (properties != null) {
|
||||
properties.accept(writer);
|
||||
writer.writeBytes(properties);
|
||||
}
|
||||
}
|
||||
|
||||
if ((flags & 0x10) != 0) {
|
||||
writer.writeSizedString(suggestionsType);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
flags = reader.readByte();
|
||||
children = reader.readVarIntArray();
|
||||
if ((flags & 0x08) != 0) {
|
||||
redirectedNode = reader.readVarInt();
|
||||
}
|
||||
|
||||
if (isLiteral() || isArgument()) {
|
||||
name = reader.readSizedString(Integer.MAX_VALUE);
|
||||
}
|
||||
|
||||
if(isArgument()) {
|
||||
parser = reader.readSizedString(Integer.MAX_VALUE);
|
||||
properties = getProperties(reader, parser);
|
||||
}
|
||||
|
||||
if ((flags & 0x10) != 0) {
|
||||
suggestionsType = reader.readSizedString(Integer.MAX_VALUE);
|
||||
}
|
||||
}
|
||||
|
||||
private byte[] getProperties(BinaryReader reader, String parser) {
|
||||
switch (parser) {
|
||||
case "brigadier:double":
|
||||
return reader.extractBytes(() -> {
|
||||
byte flags = reader.readByte();
|
||||
if((flags & 0x01) == 0x01) {
|
||||
reader.readDouble(); // min
|
||||
}
|
||||
if((flags & 0x02) == 0x02) {
|
||||
reader.readDouble(); // max
|
||||
}
|
||||
});
|
||||
|
||||
case "brigadier:integer":
|
||||
return reader.extractBytes(() -> {
|
||||
byte flags = reader.readByte();
|
||||
if((flags & 0x01) == 0x01) {
|
||||
reader.readInt(); // min
|
||||
}
|
||||
if((flags & 0x02) == 0x02) {
|
||||
reader.readInt(); // max
|
||||
}
|
||||
});
|
||||
|
||||
case "brigadier:string":
|
||||
return reader.extractBytes(reader::readVarInt);
|
||||
|
||||
case "brigadier:entity":
|
||||
case "brigadier:score_holder":
|
||||
return reader.extractBytes(reader::readByte);
|
||||
|
||||
case "brigadier:range":
|
||||
return reader.extractBytes(reader::readBoolean); // https://wiki.vg/Command_Data#minecraft:range, looks fishy
|
||||
|
||||
default:
|
||||
return new byte[0]; // unknown
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isLiteral() {
|
||||
|
|
|
@ -20,6 +20,8 @@ import java.io.IOException;
|
|||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.UUID;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
* Class used to read from a byte array.
|
||||
|
@ -210,4 +212,19 @@ public class BinaryReader extends InputStream {
|
|||
public NBT readTag() throws IOException, NBTException {
|
||||
return nbtReader.read();
|
||||
}
|
||||
|
||||
/**
|
||||
* Records the current position, runs the given Runnable, and then returns the bytes between the position before
|
||||
* running the runnable and the position after.
|
||||
* Can be used to extract a subsection of this reader's buffer with complex data
|
||||
* @param extractor the extraction code, simply call the reader's read* methods here.
|
||||
*/
|
||||
public byte[] extractBytes(Runnable extractor) {
|
||||
int startingPosition = getBuffer().readerIndex();
|
||||
extractor.run();
|
||||
int endingPosition = getBuffer().readerIndex();
|
||||
byte[] output = new byte[endingPosition-startingPosition];
|
||||
getBuffer().getBytes(startingPosition, output);
|
||||
return output;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -341,4 +341,13 @@ public class BinaryWriter extends OutputStream {
|
|||
public void writeUnsignedShort(int yourShort) {
|
||||
buffer.writeShort(yourShort & 0xFFFF);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a byte[] with the contents written via BinaryWriter
|
||||
*/
|
||||
public static byte[] makeArray(Consumer<BinaryWriter> writing) {
|
||||
BinaryWriter writer = new BinaryWriter();
|
||||
writing.accept(writer);
|
||||
return writer.toByteArray();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,8 +2,10 @@ package readwritepackets;
|
|||
|
||||
import com.google.common.reflect.ClassPath;
|
||||
import net.minestom.server.MinecraftServer;
|
||||
import net.minestom.server.item.ItemStack;
|
||||
import net.minestom.server.network.packet.client.ClientPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.play.EntityEquipmentPacket;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import net.minestom.server.utils.binary.Readable;
|
||||
|
@ -58,7 +60,19 @@ public class ReadWritePackets {
|
|||
BinaryWriter writer = new BinaryWriter();
|
||||
Constructor<?> constructor = clazz.getDeclaredConstructor();
|
||||
constructor.setAccessible(true);
|
||||
T packet = (T) constructor.newInstance();
|
||||
T packet;
|
||||
|
||||
// exceptions
|
||||
if(clazz.getSimpleName().equals("EntityEquipmentPacket")) {
|
||||
// requires at least one slot and one item
|
||||
EntityEquipmentPacket p = new EntityEquipmentPacket();
|
||||
p.itemStacks = new ItemStack[] { ItemStack.getAirItem() };
|
||||
p.slots = new EntityEquipmentPacket.Slot[] { EntityEquipmentPacket.Slot.MAIN_HAND };
|
||||
packet = (T) p;
|
||||
}
|
||||
else {
|
||||
packet = (T) constructor.newInstance();
|
||||
}
|
||||
|
||||
// write packet
|
||||
packet.write(writer);
|
||||
|
|
Loading…
Reference in New Issue