Mirror von
https://github.com/ViaVersion/ViaBackwards.git
synchronisiert 2024-11-20 06:50:10 +01:00
♻ Rewrite Entity 1.13.1 the ViaBackwards way & remove incorrect metadata & 1.13 rewrite
Dieser Commit ist enthalten in:
Ursprung
99ffbc1bfa
Commit
8477e20725
@ -465,13 +465,8 @@ public class EntityPackets1_13 extends EntityRewriter<Protocol1_12_2To1_13> {
|
|||||||
// Remove boat splash timer
|
// Remove boat splash timer
|
||||||
registerMetaHandler().filter(EntityType.BOAT, 12).removed();
|
registerMetaHandler().filter(EntityType.BOAT, 12).removed();
|
||||||
|
|
||||||
//Remove shooter UUID
|
|
||||||
registerMetaHandler().filter(EntityType.ABSTRACT_ARROW, true, 7).removed();
|
|
||||||
|
|
||||||
registerMetaHandler().filter(EntityType.SPECTRAL_ARROW, 8).handleIndexChange(7);
|
|
||||||
|
|
||||||
// Remove Trident special loyalty level
|
// Remove Trident special loyalty level
|
||||||
registerMetaHandler().filter(EntityType.TRIDENT, 8).removed();
|
registerMetaHandler().filter(EntityType.TRIDENT, 7).removed();
|
||||||
|
|
||||||
// Handle new wolf colors
|
// Handle new wolf colors
|
||||||
registerMetaHandler().filter(EntityType.WOLF, 17).handle(e -> {
|
registerMetaHandler().filter(EntityType.WOLF, 17).handle(e -> {
|
||||||
|
@ -1,48 +0,0 @@
|
|||||||
package nl.matsv.viabackwards.protocol.protocol1_13to1_13_1;
|
|
||||||
|
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_13to1_13_1.packets.InventoryPackets;
|
|
||||||
import us.myles.ViaVersion.api.Via;
|
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
|
||||||
import us.myles.ViaVersion.api.entities.Entity1_13Types;
|
|
||||||
import us.myles.ViaVersion.api.entities.Entity1_13Types.EntityType;
|
|
||||||
import us.myles.ViaVersion.api.minecraft.item.Item;
|
|
||||||
import us.myles.ViaVersion.api.minecraft.metadata.Metadata;
|
|
||||||
import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_13;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class MetadataRewriter {
|
|
||||||
|
|
||||||
public static void handleMetadata(int entityId, Entity1_13Types.EntityType type, List<Metadata> metadatas, UserConnection connection) {
|
|
||||||
for (Metadata metadata : new ArrayList<>(metadatas)) {
|
|
||||||
try {
|
|
||||||
// 1.13 changed item to flat item (no data)
|
|
||||||
if (metadata.getMetaType() == MetaType1_13.Slot) {
|
|
||||||
InventoryPackets.toClient((Item) metadata.getValue());
|
|
||||||
} else if (metadata.getMetaType() == MetaType1_13.BlockID) {
|
|
||||||
// Convert to new block id
|
|
||||||
int data = (int) metadata.getValue();
|
|
||||||
metadata.setValue(Protocol1_13To1_13_1.getNewBlockStateId(data));
|
|
||||||
}
|
|
||||||
if (type == null) continue;
|
|
||||||
if (type.isOrHasParent(Entity1_13Types.EntityType.MINECART_ABSTRACT) && metadata.getId() == 9) {
|
|
||||||
// New block format
|
|
||||||
int data = (int) metadata.getValue();
|
|
||||||
metadata.setValue(Protocol1_13To1_13_1.getNewBlockStateId(data));
|
|
||||||
}
|
|
||||||
if(type.is(EntityType.ITEM)){
|
|
||||||
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
metadatas.remove(metadata);
|
|
||||||
if (!Via.getConfig().isSuppressMetadataErrors() || Via.getManager().isDebug()) {
|
|
||||||
Via.getPlatform().getLogger().warning("An error occurred with entity metadata handler");
|
|
||||||
Via.getPlatform().getLogger().warning("Metadata: " + metadata);
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,6 +1,7 @@
|
|||||||
package nl.matsv.viabackwards.protocol.protocol1_13to1_13_1;
|
package nl.matsv.viabackwards.protocol.protocol1_13to1_13_1;
|
||||||
|
|
||||||
import nl.matsv.viabackwards.api.BackwardsProtocol;
|
import nl.matsv.viabackwards.api.BackwardsProtocol;
|
||||||
|
import nl.matsv.viabackwards.api.entities.storage.EntityTracker;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_13to1_13_1.packets.EntityPackets;
|
import nl.matsv.viabackwards.protocol.protocol1_13to1_13_1.packets.EntityPackets;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_13to1_13_1.packets.InventoryPackets;
|
import nl.matsv.viabackwards.protocol.protocol1_13to1_13_1.packets.InventoryPackets;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_13to1_13_1.packets.WorldPackets;
|
import nl.matsv.viabackwards.protocol.protocol1_13to1_13_1.packets.WorldPackets;
|
||||||
@ -12,14 +13,13 @@ import us.myles.ViaVersion.api.remapper.PacketRemapper;
|
|||||||
import us.myles.ViaVersion.api.remapper.ValueTransformer;
|
import us.myles.ViaVersion.api.remapper.ValueTransformer;
|
||||||
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.protocol1_13to1_12_2.storage.EntityTracker;
|
|
||||||
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
||||||
|
|
||||||
public class Protocol1_13To1_13_1 extends BackwardsProtocol {
|
public class Protocol1_13To1_13_1 extends BackwardsProtocol {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
EntityPackets.register(this);
|
new EntityPackets().register(this);
|
||||||
InventoryPackets.register(this);
|
InventoryPackets.register(this);
|
||||||
WorldPackets.register(this);
|
WorldPackets.register(this);
|
||||||
|
|
||||||
@ -214,9 +214,15 @@ public class Protocol1_13To1_13_1 extends BackwardsProtocol {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(UserConnection userConnection) {
|
public void init(UserConnection user) {
|
||||||
userConnection.put(new EntityTracker(userConnection));
|
// Register EntityTracker if it doesn't exist yet.
|
||||||
if (!userConnection.has(ClientWorld.class))
|
if (!user.has(EntityTracker.class))
|
||||||
userConnection.put(new ClientWorld(userConnection));
|
user.put(new EntityTracker(user));
|
||||||
|
|
||||||
|
// Init protocol in EntityTracker
|
||||||
|
user.get(EntityTracker.class).initProtocol(this);
|
||||||
|
|
||||||
|
if (!user.has(ClientWorld.class))
|
||||||
|
user.put(new ClientWorld(user));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,25 +1,30 @@
|
|||||||
package nl.matsv.viabackwards.protocol.protocol1_13to1_13_1.packets;
|
package nl.matsv.viabackwards.protocol.protocol1_13to1_13_1.packets;
|
||||||
|
|
||||||
import com.google.common.base.Optional;
|
import nl.matsv.viabackwards.ViaBackwards;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_13to1_13_1.MetadataRewriter;
|
import nl.matsv.viabackwards.api.entities.storage.MetaStorage;
|
||||||
|
import nl.matsv.viabackwards.api.entities.types.EntityType1_12;
|
||||||
|
import nl.matsv.viabackwards.api.entities.types.EntityType1_13;
|
||||||
|
import nl.matsv.viabackwards.api.entities.types.EntityType1_13.EntityType;
|
||||||
|
import nl.matsv.viabackwards.api.rewriters.EntityRewriter;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_13to1_13_1.Protocol1_13To1_13_1;
|
import nl.matsv.viabackwards.protocol.protocol1_13to1_13_1.Protocol1_13To1_13_1;
|
||||||
import us.myles.ViaVersion.api.PacketWrapper;
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
import us.myles.ViaVersion.api.entities.Entity1_13Types;
|
import us.myles.ViaVersion.api.minecraft.item.Item;
|
||||||
import us.myles.ViaVersion.api.entities.Entity1_13Types.EntityType;
|
import us.myles.ViaVersion.api.minecraft.metadata.Metadata;
|
||||||
import us.myles.ViaVersion.api.protocol.Protocol;
|
import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_13;
|
||||||
import us.myles.ViaVersion.api.remapper.PacketHandler;
|
import us.myles.ViaVersion.api.remapper.PacketHandler;
|
||||||
import us.myles.ViaVersion.api.remapper.PacketRemapper;
|
import us.myles.ViaVersion.api.remapper.PacketRemapper;
|
||||||
import us.myles.ViaVersion.api.type.Type;
|
import us.myles.ViaVersion.api.type.Type;
|
||||||
import us.myles.ViaVersion.api.type.types.version.Types1_13;
|
import us.myles.ViaVersion.api.type.types.version.Types1_13;
|
||||||
import us.myles.ViaVersion.packets.State;
|
import us.myles.ViaVersion.packets.State;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.storage.EntityTracker;
|
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
||||||
|
|
||||||
public class EntityPackets {
|
public class EntityPackets extends EntityRewriter<Protocol1_13To1_13_1> {
|
||||||
|
|
||||||
public static void register(Protocol protocol) {
|
@Override
|
||||||
|
protected void registerPackets(Protocol1_13To1_13_1 protocol) {
|
||||||
|
|
||||||
//spawn entity
|
// Spawn Object
|
||||||
protocol.registerOutgoing(State.PLAY, 0x0, 0x0, new PacketRemapper() {
|
protocol.out(State.PLAY, 0x00, 0x00, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
map(Type.VAR_INT); // 0 - Entity id
|
||||||
@ -32,28 +37,74 @@ public class EntityPackets {
|
|||||||
map(Type.BYTE); // 7 - Yaw
|
map(Type.BYTE); // 7 - Yaw
|
||||||
map(Type.INT); // 8 - Data
|
map(Type.INT); // 8 - Data
|
||||||
|
|
||||||
// Track Entity
|
|
||||||
handler(new PacketHandler() {
|
handler(new PacketHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
int entityId = wrapper.get(Type.VAR_INT, 0);
|
int entityId = wrapper.get(Type.VAR_INT, 0);
|
||||||
byte type = wrapper.get(Type.BYTE, 0);
|
byte type = wrapper.get(Type.BYTE, 0);
|
||||||
Entity1_13Types.EntityType entType = Entity1_13Types.getTypeFromId(type, true);
|
EntityType entType = EntityType1_13.getTypeFromId(type, true);
|
||||||
|
if (entType == null) {
|
||||||
if (entType != null) {
|
ViaBackwards.getPlatform().getLogger().warning("Could not find 1.13 entity type " + type);
|
||||||
if (entType.is(Entity1_13Types.EntityType.FALLING_BLOCK)) {
|
return;
|
||||||
int data = wrapper.get(Type.INT, 0);
|
|
||||||
wrapper.set(Type.INT, 0, Protocol1_13To1_13_1.getNewBlockStateId(data));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// Register Type ID
|
|
||||||
wrapper.user().get(EntityTracker.class).addEntity(entityId, entType);
|
// Rewrite falling block
|
||||||
|
if (entType.is(EntityType.FALLING_BLOCK)) {
|
||||||
|
int data = wrapper.get(Type.INT, 0);
|
||||||
|
wrapper.set(Type.INT, 0, Protocol1_13To1_13_1.getNewBlockStateId(data));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Track Entity
|
||||||
|
addTrackedEntity(
|
||||||
|
wrapper.user(),
|
||||||
|
entityId,
|
||||||
|
entType
|
||||||
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// Spawn mob packet
|
|
||||||
protocol.registerOutgoing(State.PLAY, 0x3, 0x3, new PacketRemapper() {
|
// Spawn Experience Orb
|
||||||
|
protocol.out(State.PLAY, 0x01, 0x01, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.VAR_INT);
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
addTrackedEntity(
|
||||||
|
wrapper.user(),
|
||||||
|
wrapper.get(Type.VAR_INT, 0),
|
||||||
|
EntityType.XP_ORB
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Spawn Global Entity
|
||||||
|
protocol.out(State.PLAY, 0x02, 0x02, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.VAR_INT);
|
||||||
|
map(Type.BYTE);
|
||||||
|
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
addTrackedEntity(
|
||||||
|
wrapper.user(),
|
||||||
|
wrapper.get(Type.VAR_INT, 0),
|
||||||
|
EntityType.LIGHTNING_BOLT
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Spawn Mob
|
||||||
|
protocol.out(State.PLAY, 0x3, 0x3, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
@ -70,25 +121,47 @@ public class EntityPackets {
|
|||||||
map(Type.SHORT); // 11 - Velocity Z
|
map(Type.SHORT); // 11 - Velocity Z
|
||||||
map(Types1_13.METADATA_LIST); // 12 - Metadata
|
map(Types1_13.METADATA_LIST); // 12 - Metadata
|
||||||
|
|
||||||
|
// Track Entity
|
||||||
handler(new PacketHandler() {
|
handler(new PacketHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
int entityId = wrapper.get(Type.VAR_INT, 0);
|
|
||||||
int type = wrapper.get(Type.VAR_INT, 1);
|
int type = wrapper.get(Type.VAR_INT, 1);
|
||||||
|
|
||||||
Entity1_13Types.EntityType entType = Entity1_13Types.getTypeFromId(type, false);
|
EntityType entityType = EntityType1_13.getTypeFromId(type, false);
|
||||||
|
addTrackedEntity(
|
||||||
|
wrapper.user(),
|
||||||
|
wrapper.get(Type.VAR_INT, 0),
|
||||||
|
entityType
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Register Type ID
|
// Rewrite Metadata
|
||||||
wrapper.user().get(EntityTracker.class).addEntity(entityId, entType);
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
MetaStorage storage = new MetaStorage(wrapper.get(Types1_13.METADATA_LIST, 0));
|
||||||
|
handleMeta(
|
||||||
|
wrapper.user(),
|
||||||
|
wrapper.get(Type.VAR_INT, 0),
|
||||||
|
storage
|
||||||
|
);
|
||||||
|
|
||||||
MetadataRewriter.handleMetadata(entityId, entType, wrapper.get(Types1_13.METADATA_LIST, 0), wrapper.user());
|
// Don't handle new ids / base meta since it's not used for this version
|
||||||
|
|
||||||
|
// Rewrite Metadata
|
||||||
|
wrapper.set(
|
||||||
|
Types1_13.METADATA_LIST,
|
||||||
|
0,
|
||||||
|
storage.getMetaDataList()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Spawn player packet
|
// Spawn player packet
|
||||||
protocol.registerOutgoing(State.PLAY, 0x05, 0x05, new PacketRemapper() {
|
protocol.out(State.PLAY, 0x05, 0x05, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
@ -100,21 +173,107 @@ public class EntityPackets {
|
|||||||
map(Type.BYTE); // 6 - Pitch
|
map(Type.BYTE); // 6 - Pitch
|
||||||
map(Types1_13.METADATA_LIST); // 7 - Metadata
|
map(Types1_13.METADATA_LIST); // 7 - Metadata
|
||||||
|
|
||||||
|
// Track Entity
|
||||||
handler(new PacketHandler() {
|
handler(new PacketHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
int entityId = wrapper.get(Type.VAR_INT, 0);
|
addTrackedEntity(
|
||||||
|
wrapper.user(),
|
||||||
|
wrapper.get(Type.VAR_INT, 0),
|
||||||
|
EntityType.PLAYER
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
Entity1_13Types.EntityType entType = Entity1_13Types.EntityType.PLAYER;
|
// Rewrite Metadata
|
||||||
// Register Type ID
|
handler(new PacketHandler() {
|
||||||
wrapper.user().get(EntityTracker.class).addEntity(entityId, entType);
|
@Override
|
||||||
MetadataRewriter.handleMetadata(entityId, entType, wrapper.get(Types1_13.METADATA_LIST, 0), wrapper.user());
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
wrapper.set(
|
||||||
|
Types1_13.METADATA_LIST,
|
||||||
|
0,
|
||||||
|
handleMeta(
|
||||||
|
wrapper.user(),
|
||||||
|
wrapper.get(Type.VAR_INT, 0),
|
||||||
|
new MetaStorage(wrapper.get(Types1_13.METADATA_LIST, 0))
|
||||||
|
).getMetaDataList()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//Spawn Painting
|
||||||
|
protocol.out(State.PLAY, 0x04, 0x04, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.VAR_INT);
|
||||||
|
map(Type.UUID);
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
addTrackedEntity(
|
||||||
|
wrapper.user(),
|
||||||
|
wrapper.get(Type.VAR_INT, 0),
|
||||||
|
EntityType.PAINTING
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Join Game
|
||||||
|
protocol.registerOutgoing(State.PLAY, 0x25, 0x25, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.INT); // 0 - Entity ID
|
||||||
|
map(Type.UNSIGNED_BYTE); // 1 - Gamemode
|
||||||
|
map(Type.INT); // 2 - Dimension
|
||||||
|
|
||||||
|
// Track Entity
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
addTrackedEntity(
|
||||||
|
wrapper.user(),
|
||||||
|
wrapper.get(Type.INT, 0),
|
||||||
|
EntityType1_12.EntityType.PLAYER
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Save dimension
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
ClientWorld clientChunks = wrapper.user().get(ClientWorld.class);
|
||||||
|
int dimensionId = wrapper.get(Type.INT, 1);
|
||||||
|
clientChunks.setEnvironment(dimensionId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Respawn
|
||||||
|
protocol.out(State.PLAY, 0x38, 0x38, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.INT); // 0 - Dimension ID\
|
||||||
|
|
||||||
|
// Save dimension
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
||||||
|
int dimensionId = wrapper.get(Type.INT, 0);
|
||||||
|
clientWorld.setEnvironment(dimensionId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Destroy entities
|
// Destroy entities
|
||||||
protocol.registerOutgoing(State.PLAY, 0x35, 0x35, new PacketRemapper() {
|
protocol.out(State.PLAY, 0x35, 0x35, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.VAR_INT_ARRAY); // 0 - Entity IDS
|
map(Type.VAR_INT_ARRAY); // 0 - Entity IDS
|
||||||
@ -123,7 +282,7 @@ public class EntityPackets {
|
|||||||
@Override
|
@Override
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
for (int entity : wrapper.get(Type.VAR_INT_ARRAY, 0))
|
for (int entity : wrapper.get(Type.VAR_INT_ARRAY, 0))
|
||||||
wrapper.user().get(EntityTracker.class).removeEntity(entity);
|
getEntityTracker(wrapper.user()).removeEntity(entity);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -131,22 +290,71 @@ public class EntityPackets {
|
|||||||
|
|
||||||
|
|
||||||
// Metadata packet
|
// Metadata packet
|
||||||
protocol.registerOutgoing(State.PLAY, 0x3F, 0x3F, new PacketRemapper() {
|
protocol.out(State.PLAY, 0x3F, 0x3F, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
map(Types1_13.METADATA_LIST); // 1 - Metadata list
|
map(Types1_13.METADATA_LIST); // 1 - Metadata list
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
handler(new PacketHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
int entityId = wrapper.get(Type.VAR_INT, 0);
|
wrapper.set(
|
||||||
|
Types1_13.METADATA_LIST,
|
||||||
Optional<EntityType> type = wrapper.user().get(EntityTracker.class).get(entityId);
|
0,
|
||||||
MetadataRewriter.handleMetadata(entityId, type.orNull(), wrapper.get(Types1_13.METADATA_LIST, 0), wrapper.user());
|
handleMeta(
|
||||||
|
wrapper.user(),
|
||||||
|
wrapper.get(Type.VAR_INT, 0),
|
||||||
|
new MetaStorage(wrapper.get(Types1_13.METADATA_LIST, 0))
|
||||||
|
).getMetaDataList()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void registerRewrites() {
|
||||||
|
|
||||||
|
// Rewrite items & blocks
|
||||||
|
registerMetaHandler().handle(e -> {
|
||||||
|
Metadata meta = e.getData();
|
||||||
|
|
||||||
|
if (meta.getMetaType() == MetaType1_13.Slot) {
|
||||||
|
InventoryPackets.toClient((Item) meta.getValue());
|
||||||
|
} else if (meta.getMetaType() == MetaType1_13.BlockID) {
|
||||||
|
// Convert to new block id
|
||||||
|
int data = (int) meta.getValue();
|
||||||
|
meta.setValue(Protocol1_13To1_13_1.getNewBlockStateId(data));
|
||||||
|
}
|
||||||
|
|
||||||
|
return meta;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Remove shooter UUID
|
||||||
|
registerMetaHandler().
|
||||||
|
filter(EntityType.ABSTRACT_ARROW, true, 7)
|
||||||
|
.removed();
|
||||||
|
|
||||||
|
// Move colors to old position
|
||||||
|
registerMetaHandler().filter(EntityType.SPECTRAL_ARROW, 8)
|
||||||
|
.handleIndexChange(7);
|
||||||
|
|
||||||
|
// Move loyalty level to old position
|
||||||
|
registerMetaHandler().filter(EntityType.TRIDENT, 8)
|
||||||
|
.handleIndexChange(7);
|
||||||
|
|
||||||
|
// Rewrite Minecart blocks
|
||||||
|
registerMetaHandler()
|
||||||
|
.filter(EntityType.MINECART_ABSTRACT, true, 9)
|
||||||
|
.handle(e -> {
|
||||||
|
Metadata meta = e.getData();
|
||||||
|
|
||||||
|
int data = (int) meta.getValue();
|
||||||
|
meta.setValue(Protocol1_13To1_13_1.getNewBlockStateId(data));
|
||||||
|
|
||||||
|
return meta;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -118,42 +118,6 @@ public class WorldPackets {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
//join game
|
|
||||||
protocol.registerOutgoing(State.PLAY, 0x25, 0x25, new PacketRemapper() {
|
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.INT); // 0 - Entity ID
|
|
||||||
map(Type.UNSIGNED_BYTE); // 1 - Gamemode
|
|
||||||
map(Type.INT); // 2 - Dimension
|
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
// Store the player
|
|
||||||
ClientWorld clientChunks = wrapper.user().get(ClientWorld.class);
|
|
||||||
int dimensionId = wrapper.get(Type.INT, 1);
|
|
||||||
clientChunks.setEnvironment(dimensionId);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
//respawn
|
|
||||||
protocol.registerOutgoing(State.PLAY, 0x38, 0x38, new PacketRemapper() {
|
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.INT); // 0 - Dimension ID
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
|
||||||
int dimensionId = wrapper.get(Type.INT, 0);
|
|
||||||
clientWorld.setEnvironment(dimensionId);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
//spawn particle
|
//spawn particle
|
||||||
protocol.registerOutgoing(State.PLAY, 0x24, 0x24, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x24, 0x24, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren