Mirror von
https://github.com/ViaVersion/ViaBackwards.git
synchronisiert 2024-09-07 21:32:52 +02:00
Cleanup entity tracking and rewrites, cleanup 1.14.1->1.14 protocol (#148)
Dieser Commit ist enthalten in:
Ursprung
6a0e553c96
Commit
1d12eb0b95
@ -19,6 +19,7 @@ import nl.matsv.viabackwards.api.entities.storage.EntityData;
|
|||||||
import nl.matsv.viabackwards.api.entities.storage.EntityTracker;
|
import nl.matsv.viabackwards.api.entities.storage.EntityTracker;
|
||||||
import nl.matsv.viabackwards.api.entities.storage.MetaStorage;
|
import nl.matsv.viabackwards.api.entities.storage.MetaStorage;
|
||||||
import nl.matsv.viabackwards.api.exceptions.RemovedValueException;
|
import nl.matsv.viabackwards.api.exceptions.RemovedValueException;
|
||||||
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
import us.myles.ViaVersion.api.Via;
|
import us.myles.ViaVersion.api.Via;
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
import us.myles.ViaVersion.api.entities.EntityType;
|
import us.myles.ViaVersion.api.entities.EntityType;
|
||||||
@ -26,7 +27,11 @@ import us.myles.ViaVersion.api.entities.ObjectType;
|
|||||||
import us.myles.ViaVersion.api.minecraft.metadata.MetaType;
|
import us.myles.ViaVersion.api.minecraft.metadata.MetaType;
|
||||||
import us.myles.ViaVersion.api.minecraft.metadata.Metadata;
|
import us.myles.ViaVersion.api.minecraft.metadata.Metadata;
|
||||||
import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_9;
|
import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_9;
|
||||||
|
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.exception.CancelException;
|
import us.myles.ViaVersion.exception.CancelException;
|
||||||
|
import us.myles.ViaVersion.packets.State;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -175,6 +180,82 @@ public abstract class EntityRewriter<T extends BackwardsProtocol> extends Rewrit
|
|||||||
return storage;
|
return storage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper method to handle a metadata list packet.
|
||||||
|
*/
|
||||||
|
protected void registerMetadataRewriter(int oldPacketId, int newPacketId, Type<List<Metadata>> oldMetaType, Type<List<Metadata>> newMetaType) {
|
||||||
|
getProtocol().registerOutgoing(State.PLAY, oldPacketId, newPacketId, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
|
if (oldMetaType != null) {
|
||||||
|
map(oldMetaType, newMetaType);
|
||||||
|
} else {
|
||||||
|
map(newMetaType);
|
||||||
|
}
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
List<Metadata> metadata = wrapper.get(newMetaType, 0);
|
||||||
|
wrapper.set(newMetaType, 0,
|
||||||
|
handleMeta(wrapper.user(), wrapper.get(Type.VAR_INT, 0), new MetaStorage(metadata)).getMetaDataList());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void registerMetadataRewriter(int oldPacketId, int newPacketId, Type<List<Metadata>> metaType) {
|
||||||
|
registerMetadataRewriter(oldPacketId, newPacketId, null, metaType);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper method to handle player, painting, or xp orb trackers without meta changes.
|
||||||
|
*/
|
||||||
|
protected void registerExtraTracker(int packetId, EntityType entityType, Type intType) {
|
||||||
|
getProtocol().registerOutgoing(State.PLAY, packetId, packetId, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(intType); // 0 - Entity id
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
addTrackedEntity(wrapper.user(), (int) wrapper.get(intType, 0), entityType);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void registerExtraTracker(int packetId, EntityType entityType) {
|
||||||
|
registerExtraTracker(packetId, entityType, Type.VAR_INT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper method to handle the destroy entities packet.
|
||||||
|
*/
|
||||||
|
protected void registerEntityDestroy(int oldPacketId, int newPacketId) {
|
||||||
|
getProtocol().registerOutgoing(State.PLAY, oldPacketId, newPacketId, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.VAR_INT_ARRAY); // 0 - Entity ids
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
EntityTracker.ProtocolEntityTracker tracker = getEntityTracker(wrapper.user());
|
||||||
|
for (int entity : wrapper.get(Type.VAR_INT_ARRAY, 0)) {
|
||||||
|
tracker.removeEntity(entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void registerEntityDestroy(int packetId) {
|
||||||
|
registerEntityDestroy(packetId, packetId);
|
||||||
|
}
|
||||||
|
|
||||||
protected EntityTracker.ProtocolEntityTracker getEntityTracker(UserConnection user) {
|
protected EntityTracker.ProtocolEntityTracker getEntityTracker(UserConnection user) {
|
||||||
return user.get(EntityTracker.class).get(getProtocol());
|
return user.get(EntityTracker.class).get(getProtocol());
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ public abstract class Rewriter<T extends BackwardsProtocol> {
|
|||||||
*
|
*
|
||||||
* @param protocol Protocol instance
|
* @param protocol Protocol instance
|
||||||
*/
|
*/
|
||||||
public void register(T protocol) {
|
public final void register(T protocol) {
|
||||||
this.protocol = protocol;
|
this.protocol = protocol;
|
||||||
registerPackets(protocol);
|
registerPackets(protocol);
|
||||||
registerRewrites();
|
registerRewrites();
|
||||||
|
@ -107,45 +107,10 @@ public class EntityPackets1_11 extends EntityRewriter<Protocol1_10To1_11> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Spawn Experience Orb
|
// Spawn Experience Orb
|
||||||
protocol.registerOutgoing(State.PLAY, 0x01, 0x01, new PacketRemapper() {
|
registerExtraTracker(0x01, Entity1_11Types.EntityType.EXPERIENCE_ORB);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
|
||||||
|
|
||||||
// Track entity
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
addTrackedEntity(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
Entity1_11Types.ObjectType.THROWN_EXP_BOTTLE.getType()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Spawn Global Entity
|
// Spawn Global Entity
|
||||||
protocol.registerOutgoing(State.PLAY, 0x02, 0x02, new PacketRemapper() {
|
registerExtraTracker(0x02, Entity1_11Types.EntityType.WEATHER);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
|
||||||
map(Type.BYTE); // 1 - Type
|
|
||||||
|
|
||||||
// Track entity
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
addTrackedEntity(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
Entity1_11Types.EntityType.WEATHER // Always thunder according to wiki.vg
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Spawn Mob
|
// Spawn Mob
|
||||||
protocol.registerOutgoing(State.PLAY, 0x03, 0x03, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x03, 0x03, new PacketRemapper() {
|
||||||
@ -211,24 +176,7 @@ public class EntityPackets1_11 extends EntityRewriter<Protocol1_10To1_11> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Spawn Painting
|
// Spawn Painting
|
||||||
protocol.registerOutgoing(State.PLAY, 0x04, 0x04, new PacketRemapper() {
|
registerExtraTracker(0x04, Entity1_11Types.EntityType.PAINTING);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
|
||||||
|
|
||||||
// Track entity
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
addTrackedEntity(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
Entity1_11Types.EntityType.PAINTING
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Join game
|
// Join game
|
||||||
protocol.registerOutgoing(State.PLAY, 0x23, 0x23, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x23, 0x23, new PacketRemapper() {
|
||||||
@ -320,44 +268,10 @@ public class EntityPackets1_11 extends EntityRewriter<Protocol1_10To1_11> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Destroy entities
|
// Destroy entities
|
||||||
protocol.registerOutgoing(State.PLAY, 0x30, 0x30, new PacketRemapper() {
|
registerEntityDestroy(0x30);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT_ARRAY); // 0 - Entity IDS
|
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
for (int entity : wrapper.get(Type.VAR_INT_ARRAY, 0))
|
|
||||||
getEntityTracker(wrapper.user()).removeEntity(entity);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Metadata packet
|
// Metadata packet
|
||||||
protocol.registerOutgoing(State.PLAY, 0x39, 0x39, new PacketRemapper() {
|
registerMetadataRewriter(0x39, 0x39, Types1_9.METADATA_LIST);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
|
||||||
map(Types1_9.METADATA_LIST); // 1 - Metadata list
|
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
wrapper.set(
|
|
||||||
Types1_9.METADATA_LIST,
|
|
||||||
0,
|
|
||||||
handleMeta(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
new MetaStorage(wrapper.get(Types1_9.METADATA_LIST, 0))
|
|
||||||
).getMetaDataList()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Entity Status
|
// Entity Status
|
||||||
protocol.registerOutgoing(State.PLAY, 0x1B, 0x1B, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x1B, 0x1B, new PacketRemapper() {
|
||||||
|
@ -107,45 +107,10 @@ public class EntityPackets1_12 extends EntityRewriter<Protocol1_11_1To1_12> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Spawn Experience Orb
|
// Spawn Experience Orb
|
||||||
protocol.registerOutgoing(State.PLAY, 0x01, 0x01, new PacketRemapper() {
|
registerExtraTracker(0x01, Entity1_12Types.EntityType.EXPERIENCE_ORB);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
|
||||||
|
|
||||||
// Track entity
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
addTrackedEntity(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
Entity1_12Types.ObjectType.THROWN_EXP_BOTTLE.getType()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Spawn Global Entity
|
// Spawn Global Entity
|
||||||
protocol.registerOutgoing(State.PLAY, 0x02, 0x02, new PacketRemapper() {
|
registerExtraTracker(0x02, Entity1_12Types.EntityType.WEATHER);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
|
||||||
map(Type.BYTE); // 1 - Type
|
|
||||||
|
|
||||||
// Track entity
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
addTrackedEntity(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
Entity1_12Types.EntityType.WEATHER // Always thunder according to wiki.vg
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Spawn Mob
|
// Spawn Mob
|
||||||
protocol.registerOutgoing(State.PLAY, 0x03, 0x03, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x03, 0x03, new PacketRemapper() {
|
||||||
@ -212,24 +177,7 @@ public class EntityPackets1_12 extends EntityRewriter<Protocol1_11_1To1_12> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Spawn Painting
|
// Spawn Painting
|
||||||
protocol.registerOutgoing(State.PLAY, 0x04, 0x04, new PacketRemapper() {
|
registerExtraTracker(0x04, Entity1_12Types.EntityType.PAINTING);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
|
||||||
|
|
||||||
// Track entity
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
addTrackedEntity(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
Entity1_12Types.EntityType.PAINTING
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Spawn Player
|
// Spawn Player
|
||||||
protocol.registerOutgoing(State.PLAY, 0x05, 0x05, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x05, 0x05, new PacketRemapper() {
|
||||||
@ -343,44 +291,10 @@ public class EntityPackets1_12 extends EntityRewriter<Protocol1_11_1To1_12> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Destroy entities
|
// Destroy entities
|
||||||
protocol.registerOutgoing(State.PLAY, 0x31, 0x30, new PacketRemapper() {
|
registerEntityDestroy(0x31, 0x30);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT_ARRAY); // 0 - Entity IDS
|
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
for (int entity : wrapper.get(Type.VAR_INT_ARRAY, 0))
|
|
||||||
getEntityTracker(wrapper.user()).removeEntity(entity);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Metadata packet
|
// Metadata packet
|
||||||
protocol.registerOutgoing(State.PLAY, 0x3B, 0x39, new PacketRemapper() {
|
registerMetadataRewriter(0x3B, 0x39, Types1_12.METADATA_LIST);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
|
||||||
map(Types1_12.METADATA_LIST); // 1 - Metadata list
|
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
wrapper.set(
|
|
||||||
Types1_12.METADATA_LIST,
|
|
||||||
0,
|
|
||||||
handleMeta(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
new MetaStorage(wrapper.get(Types1_12.METADATA_LIST, 0))
|
|
||||||
).getMetaDataList()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -82,45 +82,10 @@ public class EntityPackets1_11_1 extends EntityRewriter<Protocol1_11To1_11_1> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Spawn Experience Orb
|
// Spawn Experience Orb
|
||||||
protocol.registerOutgoing(State.PLAY, 0x01, 0x01, new PacketRemapper() {
|
registerExtraTracker(0x01, Entity1_11Types.EntityType.EXPERIENCE_ORB);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
|
||||||
|
|
||||||
// Track entity
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
addTrackedEntity(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
Entity1_11Types.ObjectType.THROWN_EXP_BOTTLE.getType()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Spawn Global Entity
|
// Spawn Global Entity
|
||||||
protocol.registerOutgoing(State.PLAY, 0x02, 0x02, new PacketRemapper() {
|
registerExtraTracker(0x02, Entity1_11Types.EntityType.WEATHER);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
|
||||||
map(Type.BYTE); // 1 - Type
|
|
||||||
|
|
||||||
// Track entity
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
addTrackedEntity(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
Entity1_11Types.EntityType.WEATHER // Always thunder according to wiki.vg
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Spawn Mob
|
// Spawn Mob
|
||||||
protocol.registerOutgoing(State.PLAY, 0x03, 0x03, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x03, 0x03, new PacketRemapper() {
|
||||||
@ -187,24 +152,7 @@ public class EntityPackets1_11_1 extends EntityRewriter<Protocol1_11To1_11_1> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Spawn Painting
|
// Spawn Painting
|
||||||
protocol.registerOutgoing(State.PLAY, 0x04, 0x04, new PacketRemapper() {
|
registerExtraTracker(0x04, Entity1_11Types.EntityType.PAINTING);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
|
||||||
|
|
||||||
// Track entity
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
addTrackedEntity(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
Entity1_11Types.EntityType.PAINTING
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Join game
|
// Join game
|
||||||
protocol.registerOutgoing(State.PLAY, 0x23, 0x23, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x23, 0x23, new PacketRemapper() {
|
||||||
@ -296,44 +244,10 @@ public class EntityPackets1_11_1 extends EntityRewriter<Protocol1_11To1_11_1> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Destroy entities
|
// Destroy entities
|
||||||
protocol.registerOutgoing(State.PLAY, 0x30, 0x30, new PacketRemapper() {
|
registerEntityDestroy(0x30);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT_ARRAY); // 0 - Entity IDS
|
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
for (int entity : wrapper.get(Type.VAR_INT_ARRAY, 0))
|
|
||||||
getEntityTracker(wrapper.user()).removeEntity(entity);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Metadata packet
|
// Metadata packet
|
||||||
protocol.registerOutgoing(State.PLAY, 0x39, 0x39, new PacketRemapper() {
|
registerMetadataRewriter(0x39, 0x39, Types1_9.METADATA_LIST);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
|
||||||
map(Types1_9.METADATA_LIST); // 1 - Metadata list
|
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
wrapper.set(
|
|
||||||
Types1_9.METADATA_LIST,
|
|
||||||
0,
|
|
||||||
handleMeta(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
new MetaStorage(wrapper.get(Types1_9.METADATA_LIST, 0))
|
|
||||||
).getMetaDataList()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -26,7 +26,6 @@ import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
|||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.Particle;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.Particle;
|
||||||
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;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class EntityPackets1_13 extends EntityRewriter<Protocol1_12_2To1_13> {
|
public class EntityPackets1_13 extends EntityRewriter<Protocol1_12_2To1_13> {
|
||||||
@ -97,42 +96,11 @@ public class EntityPackets1_13 extends EntityRewriter<Protocol1_12_2To1_13> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
//Spawn Experience Orb
|
// Spawn Experience Orb
|
||||||
protocol.out(State.PLAY, 0x01, 0x01, new PacketRemapper() {
|
registerExtraTracker(0x01, Entity1_13Types.EntityType.XP_ORB);
|
||||||
@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),
|
|
||||||
Entity1_13Types.EntityType.XP_ORB
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
//Spawn Global Entity
|
// Spawn Global Entity
|
||||||
protocol.out(State.PLAY, 0x02, 0x02, new PacketRemapper() {
|
registerExtraTracker(0x02, Entity1_13Types.EntityType.LIGHTNING_BOLT);
|
||||||
@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),
|
|
||||||
Entity1_13Types.EntityType.LIGHTNING_BOLT
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
//Spawn Mob
|
//Spawn Mob
|
||||||
protocol.out(State.PLAY, 0x03, 0x03, new PacketRemapper() {
|
protocol.out(State.PLAY, 0x03, 0x03, new PacketRemapper() {
|
||||||
@ -328,41 +296,10 @@ public class EntityPackets1_13 extends EntityRewriter<Protocol1_12_2To1_13> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Destroy Entities Packet
|
// Destroy Entities Packet
|
||||||
protocol.registerOutgoing(State.PLAY, 0x35, 0x32, new PacketRemapper() {
|
registerEntityDestroy(0x35, 0x32);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT_ARRAY); // 0 - Entity IDS
|
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
for (int entity : wrapper.get(Type.VAR_INT_ARRAY, 0))
|
|
||||||
getEntityTracker(wrapper.user()).removeEntity(entity);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Entity Metadata packet
|
// Entity Metadata packet
|
||||||
protocol.registerOutgoing(State.PLAY, 0x3F, 0x3C, new PacketRemapper() {
|
registerMetadataRewriter(0x3F, 0x3C, Types1_13.METADATA_LIST, Types1_12.METADATA_LIST);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
|
||||||
map(Types1_13.METADATA_LIST, Types1_12.METADATA_LIST); // 1 - Metadata list
|
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
final List<Metadata> metaDataList = handleMeta(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
new MetaStorage(wrapper.get(Types1_12.METADATA_LIST, 0))
|
|
||||||
).getMetaDataList();
|
|
||||||
wrapper.set(Types1_12.METADATA_LIST, 0, metaDataList);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -22,6 +22,7 @@ import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_13_2;
|
|||||||
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_2;
|
import us.myles.ViaVersion.api.type.types.version.Types1_13_2;
|
||||||
import us.myles.ViaVersion.api.type.types.version.Types1_14;
|
import us.myles.ViaVersion.api.type.types.version.Types1_14;
|
||||||
import us.myles.ViaVersion.packets.State;
|
import us.myles.ViaVersion.packets.State;
|
||||||
@ -205,48 +206,13 @@ public class EntityPackets1_14 extends EntityRewriter<Protocol1_13_2To1_14> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Spawn Experience Orb
|
// Spawn Experience Orb
|
||||||
protocol.registerOutgoing(State.PLAY, 0x01, 0x01, new PacketRemapper() {
|
registerExtraTracker(0x01, Entity1_14Types.EntityType.XP_ORB);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
|
||||||
|
|
||||||
// Track entity
|
// Spawn Global Object
|
||||||
handler(new PacketHandler() {
|
registerExtraTracker(0x02, Entity1_14Types.EntityType.LIGHTNING_BOLT);
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
addTrackedEntity(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
Entity1_14Types.EntityType.XP_ORB
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Spawn painting
|
// Spawn painting
|
||||||
protocol.registerOutgoing(State.PLAY, 0x04, 0x04, new PacketRemapper() {
|
registerExtraTracker(0x04, Entity1_14Types.EntityType.PAINTING);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT);
|
|
||||||
map(Type.UUID);
|
|
||||||
map(Type.VAR_INT);
|
|
||||||
map(Type.POSITION1_14, Type.POSITION);
|
|
||||||
map(Type.BYTE);
|
|
||||||
|
|
||||||
// Track entity
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
addTrackedEntity(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
Entity1_14Types.EntityType.PAINTING
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Spawn player packet
|
// Spawn player packet
|
||||||
protocol.registerOutgoing(State.PLAY, 0x05, 0x05, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x05, 0x05, new PacketRemapper() {
|
||||||
@ -282,43 +248,10 @@ public class EntityPackets1_14 extends EntityRewriter<Protocol1_13_2To1_14> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Destroy entities
|
// Destroy entities
|
||||||
protocol.registerOutgoing(State.PLAY, 0x37, 0x35, new PacketRemapper() {
|
registerEntityDestroy(0x37, 0x35);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT_ARRAY); // 0 - Entity IDS
|
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
// Entity Metadata packet
|
||||||
@Override
|
registerMetadataRewriter(0x43, 0x3F, Types1_14.METADATA_LIST, Types1_13.METADATA_LIST);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
for (int entity : wrapper.get(Type.VAR_INT_ARRAY, 0))
|
|
||||||
getEntityTracker(wrapper.user()).removeEntity(entity);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Metadata packet
|
|
||||||
protocol.registerOutgoing(State.PLAY, 0x43, 0x3F, new PacketRemapper() {
|
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
|
||||||
map(Types1_14.METADATA_LIST, Types1_13_2.METADATA_LIST); // 1 - Metadata list
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
int entityId = wrapper.get(Type.VAR_INT, 0);
|
|
||||||
|
|
||||||
wrapper.set(Types1_13_2.METADATA_LIST, 0,
|
|
||||||
handleMeta(
|
|
||||||
wrapper.user(),
|
|
||||||
entityId,
|
|
||||||
new MetaStorage(wrapper.get(Types1_13_2.METADATA_LIST, 0))
|
|
||||||
).getMetaDataList()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
//join game
|
//join game
|
||||||
protocol.registerOutgoing(State.PLAY, 0x25, 0x25, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x25, 0x25, new PacketRemapper() {
|
||||||
|
@ -65,42 +65,10 @@ public class EntityPackets1_13_1 extends EntityRewriter<Protocol1_13To1_13_1> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Spawn Experience Orb
|
// Spawn Experience Orb
|
||||||
protocol.out(State.PLAY, 0x01, 0x01, new PacketRemapper() {
|
registerExtraTracker(0x01, Entity1_13Types.EntityType.XP_ORB);
|
||||||
@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),
|
|
||||||
Entity1_13Types.EntityType.XP_ORB
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Spawn Global Entity
|
// Spawn Global Entity
|
||||||
protocol.out(State.PLAY, 0x02, 0x02, new PacketRemapper() {
|
registerExtraTracker(0x02, Entity1_13Types.EntityType.LIGHTNING_BOLT);
|
||||||
@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),
|
|
||||||
Entity1_13Types.EntityType.LIGHTNING_BOLT
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Spawn Mob
|
// Spawn Mob
|
||||||
protocol.out(State.PLAY, 0x3, 0x3, new PacketRemapper() {
|
protocol.out(State.PLAY, 0x3, 0x3, new PacketRemapper() {
|
||||||
@ -203,23 +171,7 @@ public class EntityPackets1_13_1 extends EntityRewriter<Protocol1_13To1_13_1> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
//Spawn Painting
|
//Spawn Painting
|
||||||
protocol.out(State.PLAY, 0x04, 0x04, new PacketRemapper() {
|
registerExtraTracker(0x04, Entity1_13Types.EntityType.PAINTING);
|
||||||
@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),
|
|
||||||
Entity1_13Types.EntityType.PAINTING
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Join Game
|
// Join Game
|
||||||
protocol.registerOutgoing(State.PLAY, 0x25, 0x25, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x25, 0x25, new PacketRemapper() {
|
||||||
@ -272,45 +224,10 @@ public class EntityPackets1_13_1 extends EntityRewriter<Protocol1_13To1_13_1> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Destroy entities
|
// Destroy entities
|
||||||
protocol.out(State.PLAY, 0x35, 0x35, new PacketRemapper() {
|
registerEntityDestroy(0x35);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT_ARRAY); // 0 - Entity IDS
|
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
// Entity Metadata packet
|
||||||
@Override
|
registerMetadataRewriter(0x3F, 0x3F, Types1_13.METADATA_LIST);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
for (int entity : wrapper.get(Type.VAR_INT_ARRAY, 0))
|
|
||||||
getEntityTracker(wrapper.user()).removeEntity(entity);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
// Metadata packet
|
|
||||||
protocol.out(State.PLAY, 0x3F, 0x3F, new PacketRemapper() {
|
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
|
||||||
map(Types1_13.METADATA_LIST); // 1 - Metadata list
|
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
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()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
package nl.matsv.viabackwards.protocol.protocol1_14to1_14_1;
|
|
||||||
|
|
||||||
import us.myles.ViaVersion.api.Via;
|
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
|
||||||
import us.myles.ViaVersion.api.entities.Entity1_14Types;
|
|
||||||
import us.myles.ViaVersion.api.minecraft.metadata.Metadata;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by Marco Neuhaus on 15.05.2019 for the Project ViaBackwardsFoorcee.
|
|
||||||
*/
|
|
||||||
public class MetadataRewriter {
|
|
||||||
|
|
||||||
public static void handleMetadata(int entityId, Entity1_14Types.EntityType type, List<Metadata> metadatas, UserConnection connection) {
|
|
||||||
if (type == null) return;
|
|
||||||
|
|
||||||
for (Metadata metadata : new ArrayList<>(metadatas)) {
|
|
||||||
try {
|
|
||||||
if (type.is(Entity1_14Types.EntityType.VILLAGER) || type.is(Entity1_14Types.EntityType.WANDERING_TRADER)) {
|
|
||||||
if (metadata.getId() >= 16) {
|
|
||||||
metadata.setId(metadata.getId() - 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} 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,22 +1,24 @@
|
|||||||
package nl.matsv.viabackwards.protocol.protocol1_14to1_14_1;
|
package nl.matsv.viabackwards.protocol.protocol1_14to1_14_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_14to1_14_1.packets.EntityPackets;
|
import nl.matsv.viabackwards.protocol.protocol1_14to1_14_1.packets.EntityPackets;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_14to1_14_1.storage.EntityTracker;
|
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by Marco Neuhaus on 15.05.2019 for the Project ViaBackwardsFoorcee.
|
|
||||||
*/
|
|
||||||
public class Protocol1_14To1_14_1 extends BackwardsProtocol {
|
public class Protocol1_14To1_14_1 extends BackwardsProtocol {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets() {
|
protected void registerPackets() {
|
||||||
EntityPackets.register(this);
|
new EntityPackets().register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@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 (!user.has(EntityTracker.class))
|
||||||
|
user.put(new EntityTracker(user));
|
||||||
|
|
||||||
|
// Init protocol in EntityTracker
|
||||||
|
user.get(EntityTracker.class).initProtocol(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,24 +1,44 @@
|
|||||||
package nl.matsv.viabackwards.protocol.protocol1_14to1_14_1.packets;
|
package nl.matsv.viabackwards.protocol.protocol1_14to1_14_1.packets;
|
||||||
|
|
||||||
import com.google.common.base.Optional;
|
import nl.matsv.viabackwards.api.entities.storage.MetaStorage;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_14to1_14_1.MetadataRewriter;
|
import nl.matsv.viabackwards.api.rewriters.EntityRewriter;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_14to1_14_1.storage.EntityTracker;
|
import nl.matsv.viabackwards.protocol.protocol1_14to1_14_1.Protocol1_14To1_14_1;
|
||||||
import us.myles.ViaVersion.api.PacketWrapper;
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
import us.myles.ViaVersion.api.entities.Entity1_14Types;
|
import us.myles.ViaVersion.api.entities.Entity1_14Types;
|
||||||
import us.myles.ViaVersion.api.entities.Entity1_14Types.EntityType;
|
|
||||||
import us.myles.ViaVersion.api.protocol.Protocol;
|
|
||||||
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_14;
|
import us.myles.ViaVersion.api.type.types.version.Types1_14;
|
||||||
import us.myles.ViaVersion.packets.State;
|
import us.myles.ViaVersion.packets.State;
|
||||||
|
|
||||||
/**
|
public class EntityPackets extends EntityRewriter<Protocol1_14To1_14_1> {
|
||||||
* Created by Marco Neuhaus on 15.05.2019 for the Project ViaBackwardsFoorcee.
|
|
||||||
*/
|
|
||||||
public class EntityPackets {
|
|
||||||
|
|
||||||
public static void register(Protocol protocol) {
|
@Override
|
||||||
|
protected void registerPackets(Protocol1_14To1_14_1 protocol) {
|
||||||
|
registerExtraTracker(0x01, Entity1_14Types.EntityType.XP_ORB);
|
||||||
|
registerExtraTracker(0x02, Entity1_14Types.EntityType.LIGHTNING_BOLT);
|
||||||
|
registerExtraTracker(0x04, Entity1_14Types.EntityType.PAINTING);
|
||||||
|
registerExtraTracker(0x05, Entity1_14Types.EntityType.PLAYER);
|
||||||
|
registerExtraTracker(0x25, Entity1_14Types.EntityType.PLAYER, Type.INT); // Join game
|
||||||
|
registerEntityDestroy(0x37);
|
||||||
|
|
||||||
|
// Spawn Object
|
||||||
|
protocol.registerOutgoing(State.PLAY, 0x00, 0x00, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.VAR_INT); // 0 - Entity id
|
||||||
|
map(Type.UUID); // 1 - UUID
|
||||||
|
map(Type.VAR_INT); // 2 - Type
|
||||||
|
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
int type = wrapper.get(Type.VAR_INT, 1);
|
||||||
|
addTrackedEntity(wrapper.user(), wrapper.get(Type.VAR_INT, 0), Entity1_14Types.getTypeFromId(type));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Spawn Mob
|
// Spawn Mob
|
||||||
protocol.registerOutgoing(State.PLAY, 0x03, 0x03, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x03, 0x03, new PacketRemapper() {
|
||||||
@ -44,40 +64,11 @@ public class EntityPackets {
|
|||||||
int entityId = wrapper.get(Type.VAR_INT, 0);
|
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_14Types.EntityType entType = Entity1_14Types.getTypeFromId(type);
|
|
||||||
|
|
||||||
// Register Type ID
|
// Register Type ID
|
||||||
wrapper.user().get(EntityTracker.class).addEntity(entityId, entType);
|
addTrackedEntity(wrapper.user(), entityId, Entity1_14Types.getTypeFromId(type));
|
||||||
|
|
||||||
MetadataRewriter.handleMetadata(entityId, entType, wrapper.get(Types1_14.METADATA_LIST, 0), wrapper.user());
|
MetaStorage storage = new MetaStorage(wrapper.get(Types1_14.METADATA_LIST, 0));
|
||||||
}
|
handleMeta(wrapper.user(), entityId, storage);
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Spawn Player
|
|
||||||
protocol.registerOutgoing(State.PLAY, 0x05, 0x05, new PacketRemapper() {
|
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
|
||||||
map(Type.UUID); // 1 - Player UUID
|
|
||||||
map(Type.DOUBLE); // 2 - X
|
|
||||||
map(Type.DOUBLE); // 3 - Y
|
|
||||||
map(Type.DOUBLE); // 4 - Z
|
|
||||||
map(Type.BYTE); // 5 - Yaw
|
|
||||||
map(Type.BYTE); // 6 - Pitch
|
|
||||||
map(Types1_14.METADATA_LIST); // 7 - Metadata
|
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
int entityId = wrapper.get(Type.VAR_INT, 0);
|
|
||||||
|
|
||||||
Entity1_14Types.EntityType entType = Entity1_14Types.EntityType.PLAYER;
|
|
||||||
|
|
||||||
// Register Type ID
|
|
||||||
wrapper.user().get(EntityTracker.class).addEntity(entityId, entType);
|
|
||||||
MetadataRewriter.handleMetadata(entityId, entType, wrapper.get(Types1_14.METADATA_LIST, 0), wrapper.user());
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -89,18 +80,22 @@ public class EntityPackets {
|
|||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
map(Types1_14.METADATA_LIST); // 1 - Metadata list
|
map(Types1_14.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);
|
int entityId = wrapper.get(Type.VAR_INT, 0);
|
||||||
|
wrapper.set(Types1_14.METADATA_LIST, 0,
|
||||||
Optional<EntityType> type = wrapper.user().get(EntityTracker.class).get(entityId);
|
handleMeta(wrapper.user(), entityId, new MetaStorage(wrapper.get(Types1_14.METADATA_LIST, 0))).getMetaDataList());
|
||||||
MetadataRewriter.handleMetadata(entityId, type.orNull(), wrapper.get(Types1_14.METADATA_LIST, 0), wrapper.user());
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void registerRewrites() {
|
||||||
|
registerMetaHandler().filter(Entity1_14Types.EntityType.VILLAGER, 15).removed();
|
||||||
|
registerMetaHandler().filter(Entity1_14Types.EntityType.VILLAGER, 16).handleIndexChange(15);
|
||||||
|
registerMetaHandler().filter(Entity1_14Types.EntityType.WANDERING_TRADER, 15).removed();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,49 +0,0 @@
|
|||||||
package nl.matsv.viabackwards.protocol.protocol1_14to1_14_1.storage;
|
|
||||||
|
|
||||||
import com.google.common.base.Optional;
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.Setter;
|
|
||||||
import us.myles.ViaVersion.api.data.ExternalJoinGameListener;
|
|
||||||
import us.myles.ViaVersion.api.data.StoredObject;
|
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
|
||||||
import us.myles.ViaVersion.api.entities.Entity1_14Types;
|
|
||||||
import us.myles.ViaVersion.api.entities.Entity1_14Types.EntityType;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by Marco Neuhaus on 15.05.2019 for the Project ViaBackwardsFoorcee.
|
|
||||||
*/
|
|
||||||
public class EntityTracker extends StoredObject implements ExternalJoinGameListener {
|
|
||||||
private final Map<Integer, EntityType> clientEntityTypes = new ConcurrentHashMap<>();
|
|
||||||
@Getter
|
|
||||||
@Setter
|
|
||||||
private int clientEntityId;
|
|
||||||
|
|
||||||
public EntityTracker(UserConnection user) {
|
|
||||||
super(user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void removeEntity(int entityId) {
|
|
||||||
clientEntityTypes.remove(entityId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addEntity(int entityId, Entity1_14Types.EntityType type) {
|
|
||||||
clientEntityTypes.put(entityId, type);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean has(int entityId) {
|
|
||||||
return clientEntityTypes.containsKey(entityId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Optional<EntityType> get(int id) {
|
|
||||||
return Optional.fromNullable(clientEntityTypes.get(id));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onExternalJoinGame(int playerEntityId) {
|
|
||||||
clientEntityId = playerEntityId;
|
|
||||||
clientEntityTypes.put(playerEntityId, Entity1_14Types.EntityType.PLAYER);
|
|
||||||
}
|
|
||||||
}
|
|
@ -110,45 +110,10 @@ public class EntityPackets1_10 extends EntityRewriter<Protocol1_9_4To1_10> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Spawn Experience Orb
|
// Spawn Experience Orb
|
||||||
protocol.registerOutgoing(State.PLAY, 0x01, 0x01, new PacketRemapper() {
|
registerExtraTracker(0x01, Entity1_10Types.EntityType.EXPERIENCE_ORB);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
|
||||||
|
|
||||||
// Track entity
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
addTrackedEntity(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
Entity1_10Types.ObjectType.THROWN_EXP_BOTTLE.getType()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Spawn Global Entity
|
// Spawn Global Entity
|
||||||
protocol.registerOutgoing(State.PLAY, 0x02, 0x02, new PacketRemapper() {
|
registerExtraTracker(0x02, Entity1_10Types.EntityType.WEATHER);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
|
||||||
map(Type.BYTE); // 1 - Type
|
|
||||||
|
|
||||||
// Track entity
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
addTrackedEntity(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
Entity1_10Types.EntityType.WEATHER // Always thunder according to wiki.vg
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Spawn Mob
|
// Spawn Mob
|
||||||
protocol.registerOutgoing(State.PLAY, 0x03, 0x03, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x03, 0x03, new PacketRemapper() {
|
||||||
@ -215,24 +180,7 @@ public class EntityPackets1_10 extends EntityRewriter<Protocol1_9_4To1_10> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Spawn Painting
|
// Spawn Painting
|
||||||
protocol.registerOutgoing(State.PLAY, 0x04, 0x04, new PacketRemapper() {
|
registerExtraTracker(0x04, Entity1_10Types.EntityType.PAINTING);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
|
||||||
|
|
||||||
// Track entity
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
addTrackedEntity(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
Entity1_10Types.EntityType.PAINTING
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Join game
|
// Join game
|
||||||
protocol.registerOutgoing(State.PLAY, 0x23, 0x23, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x23, 0x23, new PacketRemapper() {
|
||||||
@ -324,44 +272,10 @@ public class EntityPackets1_10 extends EntityRewriter<Protocol1_9_4To1_10> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Destroy entities
|
// Destroy entities
|
||||||
protocol.registerOutgoing(State.PLAY, 0x30, 0x30, new PacketRemapper() {
|
registerEntityDestroy(0x30);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT_ARRAY); // 0 - Entity IDS
|
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
for (int entity : wrapper.get(Type.VAR_INT_ARRAY, 0))
|
|
||||||
getEntityTracker(wrapper.user()).removeEntity(entity);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Metadata packet
|
// Metadata packet
|
||||||
protocol.registerOutgoing(State.PLAY, 0x39, 0x39, new PacketRemapper() {
|
registerMetadataRewriter(0x39, 0x39, Types1_9.METADATA_LIST);
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
|
||||||
map(Types1_9.METADATA_LIST); // 1 - Metadata list
|
|
||||||
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
wrapper.set(
|
|
||||||
Types1_9.METADATA_LIST,
|
|
||||||
0,
|
|
||||||
handleMeta(
|
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
new MetaStorage(wrapper.get(Types1_9.METADATA_LIST, 0))
|
|
||||||
).getMetaDataList()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren