Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-12-27 00:22:51 +01:00
Fix spawneggs
Dieser Commit ist enthalten in:
Ursprung
03cc48c991
Commit
8c4b5b613c
@ -0,0 +1,44 @@
|
|||||||
|
package us.myles.ViaVersion.protocols.protocolsnapshotto1_10;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.spacehq.opennbt.tag.builtin.CompoundTag;
|
||||||
|
import org.spacehq.opennbt.tag.builtin.StringTag;
|
||||||
|
import us.myles.ViaVersion.api.minecraft.item.Item;
|
||||||
|
|
||||||
|
public class ItemRewriter {
|
||||||
|
public static void toClient(Item item) {
|
||||||
|
if (hasEntityTag(item)) {
|
||||||
|
CompoundTag entityTag = item.getTag().get("EntityTag");
|
||||||
|
if (entityTag.get("id") instanceof StringTag) {
|
||||||
|
StringTag id = entityTag.get("id");
|
||||||
|
id.setValue("minecraft:" + id.getValue().toLowerCase());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void toServer(Item item) {
|
||||||
|
if (hasEntityTag(item)) {
|
||||||
|
CompoundTag entityTag = item.getTag().get("EntityTag");
|
||||||
|
if (entityTag.get("id") instanceof StringTag) {
|
||||||
|
StringTag id = entityTag.get("id");
|
||||||
|
|
||||||
|
String value = id.getValue().replaceAll("minecraft:", "");
|
||||||
|
if (value.length() > 1)
|
||||||
|
value = value.substring(0, 1).toUpperCase() + value.substring(1);
|
||||||
|
id.setValue(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean hasEntityTag(Item item) {
|
||||||
|
if (item != null && item.getId() == Material.MONSTER_EGG.getId()) {
|
||||||
|
CompoundTag tag = item.getTag();
|
||||||
|
if (tag != null && tag.contains("EntityTag") && tag.get("EntityTag") instanceof CompoundTag) {
|
||||||
|
if (((CompoundTag) tag.get("EntityTag")).get("id") instanceof StringTag) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
@ -7,10 +7,13 @@ import us.myles.ViaVersion.api.remapper.PacketRemapper;
|
|||||||
import us.myles.ViaVersion.api.remapper.ValueCreator;
|
import us.myles.ViaVersion.api.remapper.ValueCreator;
|
||||||
import us.myles.ViaVersion.api.type.Type;
|
import us.myles.ViaVersion.api.type.Type;
|
||||||
import us.myles.ViaVersion.packets.State;
|
import us.myles.ViaVersion.packets.State;
|
||||||
|
import us.myles.ViaVersion.protocols.protocolsnapshotto1_10.packets.InventoryPackets;
|
||||||
|
|
||||||
public class ProtocolSnapshotTo1_10 extends Protocol {
|
public class ProtocolSnapshotTo1_10 extends Protocol {
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
|
InventoryPackets.register(this);
|
||||||
|
|
||||||
// Spawn mob packet
|
// Spawn mob packet
|
||||||
registerOutgoing(State.PLAY, 0x03, 0x03, new PacketRemapper() {
|
registerOutgoing(State.PLAY, 0x03, 0x03, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -0,0 +1,147 @@
|
|||||||
|
package us.myles.ViaVersion.protocols.protocolsnapshotto1_10.packets;
|
||||||
|
|
||||||
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
|
import us.myles.ViaVersion.api.minecraft.item.Item;
|
||||||
|
import us.myles.ViaVersion.api.remapper.PacketHandler;
|
||||||
|
import us.myles.ViaVersion.api.remapper.PacketRemapper;
|
||||||
|
import us.myles.ViaVersion.api.type.Type;
|
||||||
|
import us.myles.ViaVersion.packets.State;
|
||||||
|
import us.myles.ViaVersion.protocols.protocolsnapshotto1_10.ItemRewriter;
|
||||||
|
import us.myles.ViaVersion.protocols.protocolsnapshotto1_10.ProtocolSnapshotTo1_10;
|
||||||
|
|
||||||
|
public class InventoryPackets {
|
||||||
|
public static void register(ProtocolSnapshotTo1_10 protocol) {
|
||||||
|
/*
|
||||||
|
Incoming packets
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Set slot packet
|
||||||
|
protocol.registerOutgoing(State.PLAY, 0x16, 0x16, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.BYTE); // 0 - Window ID
|
||||||
|
map(Type.SHORT); // 1 - Slot ID
|
||||||
|
map(Type.ITEM); // 2 - Slot Value
|
||||||
|
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
Item stack = wrapper.get(Type.ITEM, 0);
|
||||||
|
ItemRewriter.toClient(stack);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Window items packet
|
||||||
|
protocol.registerOutgoing(State.PLAY, 0x14, 0x14, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.UNSIGNED_BYTE); // 0 - Window ID
|
||||||
|
map(Type.ITEM_ARRAY); // 1 - Window Values
|
||||||
|
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
Item[] stacks = wrapper.get(Type.ITEM_ARRAY, 0);
|
||||||
|
for (Item stack : stacks)
|
||||||
|
ItemRewriter.toClient(stack);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Entity Equipment Packet
|
||||||
|
protocol.registerOutgoing(State.PLAY, 0x3C, 0x3C, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
|
map(Type.VAR_INT); // 1 - Slot ID
|
||||||
|
map(Type.ITEM); // 2 - Item
|
||||||
|
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
Item stack = wrapper.get(Type.ITEM, 0);
|
||||||
|
ItemRewriter.toClient(stack);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Plugin message Packet -> Trading
|
||||||
|
protocol.registerOutgoing(State.PLAY, 0x18, 0x18, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.STRING); // 0 - Channel
|
||||||
|
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
if (wrapper.get(Type.STRING, 0).equalsIgnoreCase("MC|TrList")) {
|
||||||
|
wrapper.passthrough(Type.INT); // Passthrough Window ID
|
||||||
|
|
||||||
|
int size = wrapper.passthrough(Type.BYTE);
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
ItemRewriter.toClient(wrapper.read(Type.ITEM)); // Input Item
|
||||||
|
ItemRewriter.toClient(wrapper.read(Type.ITEM)); // Output Item
|
||||||
|
|
||||||
|
boolean secondItem = wrapper.passthrough(Type.BOOLEAN); // Has second item
|
||||||
|
if (secondItem)
|
||||||
|
ItemRewriter.toClient(wrapper.read(Type.ITEM)); // Second Item
|
||||||
|
|
||||||
|
wrapper.passthrough(Type.BOOLEAN); // Trade disabled
|
||||||
|
wrapper.passthrough(Type.INT); // Number of tools uses
|
||||||
|
wrapper.passthrough(Type.INT); // Maximum number of trade uses
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
Incoming packets
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Click window packet
|
||||||
|
protocol.registerIncoming(State.PLAY, 0x07, 0x07, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.UNSIGNED_BYTE); // 0 - Window ID
|
||||||
|
map(Type.SHORT); // 1 - Slot
|
||||||
|
map(Type.BYTE); // 2 - Button
|
||||||
|
map(Type.SHORT); // 3 - Action number
|
||||||
|
map(Type.VAR_INT); // 4 - Mode
|
||||||
|
map(Type.ITEM); // 5 - Clicked Item
|
||||||
|
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
Item item = wrapper.get(Type.ITEM, 0);
|
||||||
|
ItemRewriter.toServer(item);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// Creative Inventory Action
|
||||||
|
protocol.registerIncoming(State.PLAY, 0x18, 0x18, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.SHORT); // 0 - Slot
|
||||||
|
map(Type.ITEM); // 1 - Clicked Item
|
||||||
|
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
Item item = wrapper.get(Type.ITEM, 0);
|
||||||
|
ItemRewriter.toServer(item);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren