Mirror von
https://github.com/ViaVersion/ViaBackwards.git
synchronisiert 2024-09-19 02:30:03 +02:00
20w09a (missing: sounds, items)
Dieser Commit ist enthalten in:
Ursprung
0f1f9328ae
Commit
91f784f3f3
@ -28,6 +28,7 @@ import nl.matsv.viabackwards.protocol.protocol1_14_3to1_14_4.Protocol1_14_3To1_1
|
|||||||
import nl.matsv.viabackwards.protocol.protocol1_14_4to1_15.Protocol1_14_4To1_15;
|
import nl.matsv.viabackwards.protocol.protocol1_14_4to1_15.Protocol1_14_4To1_15;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_14to1_14_1.Protocol1_14To1_14_1;
|
import nl.matsv.viabackwards.protocol.protocol1_14to1_14_1.Protocol1_14To1_14_1;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_15_1to1_15_2.Protocol1_15_1To1_15_2;
|
import nl.matsv.viabackwards.protocol.protocol1_15_1to1_15_2.Protocol1_15_1To1_15_2;
|
||||||
|
import nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.Protocol1_15_2To1_16;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_15to1_15_1.Protocol1_15To1_15_1;
|
import nl.matsv.viabackwards.protocol.protocol1_15to1_15_1.Protocol1_15To1_15_1;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_9_4to1_10.Protocol1_9_4To1_10;
|
import nl.matsv.viabackwards.protocol.protocol1_9_4to1_10.Protocol1_9_4To1_10;
|
||||||
import us.myles.ViaVersion.api.Via;
|
import us.myles.ViaVersion.api.Via;
|
||||||
@ -74,6 +75,7 @@ public interface ViaBackwardsPlatform {
|
|||||||
registerProtocol(new Protocol1_14_4To1_15(), ProtocolVersion.v1_14_4, ProtocolVersion.v1_15);
|
registerProtocol(new Protocol1_14_4To1_15(), ProtocolVersion.v1_14_4, ProtocolVersion.v1_15);
|
||||||
registerProtocol(new Protocol1_15To1_15_1(), ProtocolVersion.v1_15, ProtocolVersion.v1_15_1);
|
registerProtocol(new Protocol1_15To1_15_1(), ProtocolVersion.v1_15, ProtocolVersion.v1_15_1);
|
||||||
registerProtocol(new Protocol1_15_1To1_15_2(), ProtocolVersion.v1_15_1, ProtocolVersion.v1_15_2);
|
registerProtocol(new Protocol1_15_1To1_15_2(), ProtocolVersion.v1_15_1, ProtocolVersion.v1_15_2);
|
||||||
|
registerProtocol(new Protocol1_15_2To1_16(), ProtocolVersion.v1_15_2, ProtocolVersion.v1_16);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -178,7 +178,7 @@ public abstract class EntityRewriter<T extends BackwardsProtocol> extends Rewrit
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper method to handle a metadata list packet.
|
* Helper method to handle a metadata list packet and its full initial meta rewrite.
|
||||||
*/
|
*/
|
||||||
protected void registerMetadataRewriter(int oldPacketId, int newPacketId, Type<List<Metadata>> oldMetaType, Type<List<Metadata>> newMetaType) {
|
protected void registerMetadataRewriter(int oldPacketId, int newPacketId, Type<List<Metadata>> oldMetaType, Type<List<Metadata>> newMetaType) {
|
||||||
getProtocol().registerOutgoing(State.PLAY, oldPacketId, newPacketId, new PacketRemapper() {
|
getProtocol().registerOutgoing(State.PLAY, oldPacketId, newPacketId, new PacketRemapper() {
|
||||||
@ -190,53 +190,21 @@ public abstract class EntityRewriter<T extends BackwardsProtocol> extends Rewrit
|
|||||||
} else {
|
} else {
|
||||||
map(newMetaType);
|
map(newMetaType);
|
||||||
}
|
}
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int entityId = wrapper.get(Type.VAR_INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
EntityType type = getEntityType(wrapper.user(), entityId);
|
||||||
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 register1_15MetadataRewriter(int oldPacketId, int newPacketId, Type<List<Metadata>> metaType) {
|
MetaStorage storage = new MetaStorage(wrapper.get(newMetaType, 0));
|
||||||
register1_15MetadataRewriter(oldPacketId, newPacketId, null, metaType);
|
handleMeta(wrapper.user(), entityId, storage);
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
EntityData entityData = getEntityData(type);
|
||||||
* Helper method to handle a metadata list packet and its full initial meta rewrite.
|
if (entityData != null) {
|
||||||
*/
|
if (entityData.hasBaseMeta()) {
|
||||||
protected void register1_15MetadataRewriter(int oldPacketId, int newPacketId, Type<List<Metadata>> oldMetaType, Type<List<Metadata>> newMetaType) {
|
entityData.getDefaultMeta().handle(storage);
|
||||||
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 {
|
|
||||||
int entityId = wrapper.get(Type.VAR_INT, 0);
|
|
||||||
EntityType type = getEntityType(wrapper.user(), entityId);
|
|
||||||
|
|
||||||
MetaStorage storage = new MetaStorage(wrapper.get(newMetaType, 0));
|
|
||||||
handleMeta(wrapper.user(), entityId, storage);
|
|
||||||
|
|
||||||
EntityData entityData = getEntityData(type);
|
|
||||||
if (entityData != null) {
|
|
||||||
if (entityData.hasBaseMeta()) {
|
|
||||||
entityData.getDefaultMeta().handle(storage);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wrapper.set(newMetaType, 0, storage.getMetaDataList());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wrapper.set(newMetaType, 0, storage.getMetaDataList());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -246,6 +214,32 @@ public abstract class EntityRewriter<T extends BackwardsProtocol> extends Rewrit
|
|||||||
registerMetadataRewriter(oldPacketId, newPacketId, null, metaType);
|
registerMetadataRewriter(oldPacketId, newPacketId, null, metaType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper method to handle a metadata list packet.
|
||||||
|
*/
|
||||||
|
protected void registerLegacyMetadataRewriter(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(wrapper -> {
|
||||||
|
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 registerLegacyMetadataRewriter(int oldPacketId, int newPacketId, Type<List<Metadata>> metaType) {
|
||||||
|
registerLegacyMetadataRewriter(oldPacketId, newPacketId, null, metaType);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper method to handle player, painting, or xp orb trackers without meta changes.
|
* Helper method to handle player, painting, or xp orb trackers without meta changes.
|
||||||
*/
|
*/
|
||||||
@ -254,12 +248,7 @@ public abstract class EntityRewriter<T extends BackwardsProtocol> extends Rewrit
|
|||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(intType); // 0 - Entity id
|
map(intType); // 0 - Entity id
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> addTrackedEntity(wrapper, (int) wrapper.get(intType, 0), entityType));
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
addTrackedEntity(wrapper, (int) wrapper.get(intType, 0), entityType);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -276,13 +265,10 @@ public abstract class EntityRewriter<T extends BackwardsProtocol> extends Rewrit
|
|||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.VAR_INT_ARRAY_PRIMITIVE); // 0 - Entity ids
|
map(Type.VAR_INT_ARRAY_PRIMITIVE); // 0 - Entity ids
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
EntityTracker.ProtocolEntityTracker tracker = getEntityTracker(wrapper.user());
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
for (int entity : wrapper.get(Type.VAR_INT_ARRAY_PRIMITIVE, 0)) {
|
||||||
EntityTracker.ProtocolEntityTracker tracker = getEntityTracker(wrapper.user());
|
tracker.removeEntity(entity);
|
||||||
for (int entity : wrapper.get(Type.VAR_INT_ARRAY_PRIMITIVE, 0)) {
|
|
||||||
tracker.removeEntity(entity);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -294,21 +280,13 @@ public abstract class EntityRewriter<T extends BackwardsProtocol> extends Rewrit
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected PacketHandler getObjectTrackerHandler() {
|
protected PacketHandler getObjectTrackerHandler() {
|
||||||
return new PacketHandler() {
|
return wrapper -> addTrackedEntity(wrapper, wrapper.get(Type.VAR_INT, 0), getObjectTypeFromId(wrapper.get(Type.BYTE, 0)));
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
addTrackedEntity(wrapper, wrapper.get(Type.VAR_INT, 0), getObjectTypeFromId(wrapper.get(Type.BYTE, 0)));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected PacketHandler getTrackerHandler(Type intType, int typeIndex) {
|
protected PacketHandler getTrackerHandler(Type intType, int typeIndex) {
|
||||||
return new PacketHandler() {
|
return wrapper -> {
|
||||||
@Override
|
Number id = (Number) wrapper.get(intType, typeIndex);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
addTrackedEntity(wrapper, wrapper.get(Type.VAR_INT, 0), getTypeFromId(id.intValue()));
|
||||||
Number id = (Number) wrapper.get(intType, typeIndex);
|
|
||||||
addTrackedEntity(wrapper, wrapper.get(Type.VAR_INT, 0), getTypeFromId(id.intValue()));
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -317,60 +295,46 @@ public abstract class EntityRewriter<T extends BackwardsProtocol> extends Rewrit
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected PacketHandler getTrackerHandler(EntityType entityType, Type intType) {
|
protected PacketHandler getTrackerHandler(EntityType entityType, Type intType) {
|
||||||
return new PacketHandler() {
|
return wrapper -> addTrackedEntity(wrapper, (int) wrapper.get(intType, 0), entityType);
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
addTrackedEntity(wrapper, (int) wrapper.get(intType, 0), entityType);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected PacketHandler getMobSpawnRewriter(Type<List<Metadata>> metaType) {
|
protected PacketHandler getMobSpawnRewriter(Type<List<Metadata>> metaType) {
|
||||||
return new PacketHandler() {
|
return wrapper -> {
|
||||||
@Override
|
int entityId = wrapper.get(Type.VAR_INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
EntityType type = getEntityType(wrapper.user(), entityId);
|
||||||
int entityId = wrapper.get(Type.VAR_INT, 0);
|
|
||||||
EntityType type = getEntityType(wrapper.user(), entityId);
|
|
||||||
|
|
||||||
MetaStorage storage = new MetaStorage(wrapper.get(metaType, 0));
|
MetaStorage storage = new MetaStorage(wrapper.get(metaType, 0));
|
||||||
handleMeta(wrapper.user(), entityId, storage);
|
handleMeta(wrapper.user(), entityId, storage);
|
||||||
|
|
||||||
EntityData entityData = getEntityData(type);
|
EntityData entityData = getEntityData(type);
|
||||||
if (entityData != null) {
|
if (entityData != null) {
|
||||||
int replacementId = getOldEntityId(entityData.getReplacementId());
|
int replacementId = getOldEntityId(entityData.getReplacementId());
|
||||||
wrapper.set(Type.VAR_INT, 1, replacementId);
|
wrapper.set(Type.VAR_INT, 1, replacementId);
|
||||||
if (entityData.hasBaseMeta()) {
|
if (entityData.hasBaseMeta()) {
|
||||||
entityData.getDefaultMeta().handle(storage);
|
entityData.getDefaultMeta().handle(storage);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rewrite Metadata
|
|
||||||
wrapper.set(metaType, 0, storage.getMetaDataList());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Rewrite Metadata
|
||||||
|
wrapper.set(metaType, 0, storage.getMetaDataList());
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
protected PacketHandler getTrackerAndMetaHandler(Type<List<Metadata>> metaType, EntityType entityType) {
|
protected PacketHandler getTrackerAndMetaHandler(Type<List<Metadata>> metaType, EntityType entityType) {
|
||||||
return new PacketHandler() {
|
return wrapper -> {
|
||||||
@Override
|
addTrackedEntity(wrapper, wrapper.get(Type.VAR_INT, 0), entityType);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
addTrackedEntity(wrapper, wrapper.get(Type.VAR_INT, 0), entityType);
|
|
||||||
|
|
||||||
List<Metadata> metaDataList = handleMeta(wrapper.user(), wrapper.get(Type.VAR_INT, 0),
|
List<Metadata> metaDataList = handleMeta(wrapper.user(), wrapper.get(Type.VAR_INT, 0),
|
||||||
new MetaStorage(wrapper.get(metaType, 0))).getMetaDataList();
|
new MetaStorage(wrapper.get(metaType, 0))).getMetaDataList();
|
||||||
wrapper.set(metaType, 0, metaDataList);
|
wrapper.set(metaType, 0, metaDataList);
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
protected PacketHandler getDimensionHandler(int index) {
|
protected PacketHandler getDimensionHandler(int index) {
|
||||||
return new PacketHandler() {
|
return wrapper -> {
|
||||||
@Override
|
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
int dimensionId = wrapper.get(Type.INT, index);
|
||||||
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
clientWorld.setEnvironment(dimensionId);
|
||||||
int dimensionId = wrapper.get(Type.INT, index);
|
|
||||||
clientWorld.setEnvironment(dimensionId);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,7 +229,7 @@ public class EntityPackets1_11 extends EntityRewriter<Protocol1_10To1_11> {
|
|||||||
registerEntityDestroy(0x30);
|
registerEntityDestroy(0x30);
|
||||||
|
|
||||||
// Metadata packet
|
// Metadata packet
|
||||||
registerMetadataRewriter(0x39, 0x39, Types1_9.METADATA_LIST);
|
registerLegacyMetadataRewriter(0x39, 0x39, Types1_9.METADATA_LIST);
|
||||||
|
|
||||||
// Entity Status
|
// Entity Status
|
||||||
protocol.registerOutgoing(State.PLAY, 0x1B, 0x1B, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x1B, 0x1B, new PacketRemapper() {
|
||||||
|
@ -200,7 +200,7 @@ public class EntityPackets1_12 extends EntityRewriter<Protocol1_11_1To1_12> {
|
|||||||
registerEntityDestroy(0x31, 0x30);
|
registerEntityDestroy(0x31, 0x30);
|
||||||
|
|
||||||
// Metadata packet
|
// Metadata packet
|
||||||
registerMetadataRewriter(0x3B, 0x39, Types1_12.METADATA_LIST);
|
registerLegacyMetadataRewriter(0x3B, 0x39, Types1_12.METADATA_LIST);
|
||||||
|
|
||||||
// Entity Properties
|
// Entity Properties
|
||||||
protocol.registerOutgoing(State.PLAY, 0x4D, 0x4A, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x4D, 0x4A, new PacketRemapper() {
|
||||||
|
@ -151,7 +151,7 @@ public class EntityPackets1_11_1 extends EntityRewriter<Protocol1_11To1_11_1> {
|
|||||||
registerEntityDestroy(0x30);
|
registerEntityDestroy(0x30);
|
||||||
|
|
||||||
// Metadata packet
|
// Metadata packet
|
||||||
registerMetadataRewriter(0x39, 0x39, Types1_9.METADATA_LIST);
|
registerLegacyMetadataRewriter(0x39, 0x39, Types1_9.METADATA_LIST);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -223,7 +223,7 @@ public class EntityPackets1_13 extends EntityRewriter<Protocol1_12_2To1_13> {
|
|||||||
registerEntityDestroy(0x35, 0x32);
|
registerEntityDestroy(0x35, 0x32);
|
||||||
|
|
||||||
// Entity Metadata packet
|
// Entity Metadata packet
|
||||||
registerMetadataRewriter(0x3F, 0x3C, Types1_13.METADATA_LIST, Types1_12.METADATA_LIST);
|
registerLegacyMetadataRewriter(0x3F, 0x3C, Types1_13.METADATA_LIST, Types1_12.METADATA_LIST);
|
||||||
|
|
||||||
// Face Player (new packet)
|
// Face Player (new packet)
|
||||||
protocol.out(State.PLAY, 0x31, -1, new PacketRemapper() {
|
protocol.out(State.PLAY, 0x31, -1, new PacketRemapper() {
|
||||||
|
@ -282,7 +282,7 @@ public class EntityPackets1_14 extends EntityRewriter<Protocol1_13_2To1_14> {
|
|||||||
registerEntityDestroy(0x37, 0x35);
|
registerEntityDestroy(0x37, 0x35);
|
||||||
|
|
||||||
// Entity Metadata packet
|
// Entity Metadata packet
|
||||||
registerMetadataRewriter(0x43, 0x3F, Types1_14.METADATA_LIST, Types1_13_2.METADATA_LIST);
|
registerLegacyMetadataRewriter(0x43, 0x3F, Types1_14.METADATA_LIST, Types1_13_2.METADATA_LIST);
|
||||||
|
|
||||||
// Join game
|
// Join game
|
||||||
protocol.registerOutgoing(State.PLAY, 0x25, 0x25, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x25, 0x25, new PacketRemapper() {
|
||||||
|
@ -153,7 +153,7 @@ public class EntityPackets1_13_1 extends EntityRewriter<Protocol1_13To1_13_1> {
|
|||||||
registerEntityDestroy(0x35);
|
registerEntityDestroy(0x35);
|
||||||
|
|
||||||
// Entity Metadata packet
|
// Entity Metadata packet
|
||||||
registerMetadataRewriter(0x3F, 0x3F, Types1_13.METADATA_LIST);
|
registerLegacyMetadataRewriter(0x3F, 0x3F, Types1_13.METADATA_LIST);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -68,15 +68,11 @@ public class Protocol1_14_4To1_15 extends BackwardsProtocol {
|
|||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.VAR_INT); // Sound Id
|
map(Type.VAR_INT); // Sound Id
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int id = wrapper.get(Type.VAR_INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
int newId = nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.data.BackwardsMappings.soundMappings.getNewId(id);
|
||||||
int newId = BackwardsMappings.soundMappings.getNewId(wrapper.get(Type.VAR_INT, 0));
|
if (newId != -1 && id != newId) {
|
||||||
if (newId == -1) {
|
wrapper.set(Type.VAR_INT, 0, newId);
|
||||||
wrapper.cancel();
|
|
||||||
} else {
|
|
||||||
wrapper.set(Type.VAR_INT, 0, newId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -87,15 +83,11 @@ public class Protocol1_14_4To1_15 extends BackwardsProtocol {
|
|||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.VAR_INT); // Sound Id
|
map(Type.VAR_INT); // Sound Id
|
||||||
handler(new PacketHandler() {
|
handler(wrapper -> {
|
||||||
@Override
|
int id = wrapper.get(Type.VAR_INT, 0);
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
int newId = nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.data.BackwardsMappings.soundMappings.getNewId(id);
|
||||||
int newId = BackwardsMappings.soundMappings.getNewId(wrapper.get(Type.VAR_INT, 0));
|
if (newId != -1 && id != newId) {
|
||||||
if (newId == -1) {
|
wrapper.set(Type.VAR_INT, 0, newId);
|
||||||
wrapper.cancel();
|
|
||||||
} else {
|
|
||||||
wrapper.set(Type.VAR_INT, 0, newId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -218,7 +218,7 @@ public class EntityPackets1_15 extends EntityRewriter<Protocol1_14_4To1_15> {
|
|||||||
registerEntityDestroy(0x38, 0x37);
|
registerEntityDestroy(0x38, 0x37);
|
||||||
|
|
||||||
// Entity Metadata packet
|
// Entity Metadata packet
|
||||||
register1_15MetadataRewriter(0x44, 0x43, Types1_14.METADATA_LIST);
|
registerMetadataRewriter(0x44, 0x43, Types1_14.METADATA_LIST);
|
||||||
|
|
||||||
// Attributes (get rid of generic.flyingSpeed for the Bee remap)
|
// Attributes (get rid of generic.flyingSpeed for the Bee remap)
|
||||||
protocol.registerOutgoing(State.PLAY, 0x59, 0x58, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x59, 0x58, new PacketRemapper() {
|
||||||
|
@ -74,7 +74,7 @@ public class EntityPackets1_14_1 extends EntityRewriter<Protocol1_14To1_14_1> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Entity Metadata
|
// Entity Metadata
|
||||||
registerMetadataRewriter(0x43, 0x43, Types1_14.METADATA_LIST);
|
registerLegacyMetadataRewriter(0x43, 0x43, Types1_14.METADATA_LIST);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -0,0 +1,170 @@
|
|||||||
|
package nl.matsv.viabackwards.protocol.protocol1_15_2to1_16;
|
||||||
|
|
||||||
|
import nl.matsv.viabackwards.ViaBackwards;
|
||||||
|
import nl.matsv.viabackwards.api.BackwardsProtocol;
|
||||||
|
import nl.matsv.viabackwards.api.entities.storage.EntityTracker;
|
||||||
|
import nl.matsv.viabackwards.api.rewriters.TranslatableRewriter;
|
||||||
|
import nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.data.BackwardsMappings;
|
||||||
|
import nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.packets.BlockItemPackets1_16;
|
||||||
|
import nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.packets.EntityPackets1_16;
|
||||||
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
|
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.protocol1_16to1_15_2.data.MappingData;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
||||||
|
|
||||||
|
public class Protocol1_15_2To1_16 extends BackwardsProtocol {
|
||||||
|
|
||||||
|
private BlockItemPackets1_16 blockItemPackets;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void registerPackets() {
|
||||||
|
BackwardsMappings.init();
|
||||||
|
(blockItemPackets = new BlockItemPackets1_16(this)).register();
|
||||||
|
new EntityPackets1_16(this).register();
|
||||||
|
|
||||||
|
TranslatableRewriter translatableRewriter = new TranslatableRewriter(this);
|
||||||
|
translatableRewriter.registerBossBar(0x0D, 0x0D);
|
||||||
|
translatableRewriter.registerChatMessage(0x0F, 0x0F);
|
||||||
|
translatableRewriter.registerCombatEvent(0x33, 0x33);
|
||||||
|
translatableRewriter.registerDisconnect(0x1B, 0x1B);
|
||||||
|
translatableRewriter.registerOpenWindow(0x2F, 0x2F);
|
||||||
|
translatableRewriter.registerPlayerList(0x54, 0x54);
|
||||||
|
translatableRewriter.registerTitle(0x50, 0x50);
|
||||||
|
translatableRewriter.registerPing();
|
||||||
|
|
||||||
|
// Entity Sound Effect
|
||||||
|
registerOutgoing(State.PLAY, 0x51, 0x51, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.VAR_INT); // Sound Id
|
||||||
|
handler(wrapper -> {
|
||||||
|
int id = wrapper.get(Type.VAR_INT, 0);
|
||||||
|
int newId = BackwardsMappings.soundMappings.getNewId(id);
|
||||||
|
if (newId != -1 && id != newId) {
|
||||||
|
wrapper.set(Type.VAR_INT, 0, newId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Sound Effect
|
||||||
|
registerOutgoing(State.PLAY, 0x52, 0x52, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.VAR_INT); // Sound Id
|
||||||
|
handler(wrapper -> {
|
||||||
|
int id = wrapper.get(Type.VAR_INT, 0);
|
||||||
|
int newId = BackwardsMappings.soundMappings.getNewId(id);
|
||||||
|
if (newId != -1 && id != newId) {
|
||||||
|
wrapper.set(Type.VAR_INT, 0, newId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Advancements
|
||||||
|
registerOutgoing(State.PLAY, 0x58, 0x58, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
handler(wrapper -> {
|
||||||
|
wrapper.passthrough(Type.BOOLEAN); // Reset/clear
|
||||||
|
int size = wrapper.passthrough(Type.VAR_INT);
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
wrapper.passthrough(Type.STRING); // Identifier
|
||||||
|
// Parent
|
||||||
|
if (wrapper.passthrough(Type.BOOLEAN)) {
|
||||||
|
wrapper.passthrough(Type.STRING);
|
||||||
|
}
|
||||||
|
// Display data
|
||||||
|
if (wrapper.passthrough(Type.BOOLEAN)) {
|
||||||
|
wrapper.passthrough(Type.STRING); // Title
|
||||||
|
wrapper.passthrough(Type.STRING); // Description
|
||||||
|
blockItemPackets.handleItemToClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); // Icon
|
||||||
|
wrapper.passthrough(Type.VAR_INT); // Frame type
|
||||||
|
int flags = wrapper.passthrough(Type.INT); // Flags
|
||||||
|
if ((flags & 1) != 0) {
|
||||||
|
wrapper.passthrough(Type.STRING); // Background texture
|
||||||
|
}
|
||||||
|
wrapper.passthrough(Type.FLOAT); // X
|
||||||
|
wrapper.passthrough(Type.FLOAT); // Y
|
||||||
|
}
|
||||||
|
|
||||||
|
wrapper.passthrough(Type.STRING_ARRAY); // Criteria
|
||||||
|
int arrayLength = wrapper.passthrough(Type.VAR_INT);
|
||||||
|
for (int array = 0; array < arrayLength; array++) {
|
||||||
|
wrapper.passthrough(Type.STRING_ARRAY); // String array
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Tags
|
||||||
|
registerOutgoing(State.PLAY, 0x5C, 0x5C, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
handler(wrapper -> {
|
||||||
|
int blockTagsSize = wrapper.passthrough(Type.VAR_INT);
|
||||||
|
for (int i = 0; i < blockTagsSize; i++) {
|
||||||
|
wrapper.passthrough(Type.STRING);
|
||||||
|
int[] blockIds = wrapper.passthrough(Type.VAR_INT_ARRAY_PRIMITIVE);
|
||||||
|
for (int j = 0; j < blockIds.length; j++) {
|
||||||
|
int id = blockIds[j];
|
||||||
|
blockIds[j] = BackwardsMappings.blockMappings.getNewId(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int itemTagsSize = wrapper.passthrough(Type.VAR_INT);
|
||||||
|
for (int i = 0; i < itemTagsSize; i++) {
|
||||||
|
wrapper.passthrough(Type.STRING);
|
||||||
|
int[] itemIds = wrapper.passthrough(Type.VAR_INT_ARRAY_PRIMITIVE);
|
||||||
|
for (int j = 0; j < itemIds.length; j++) {
|
||||||
|
Integer oldId = MappingData.oldToNewItems.inverse().get(itemIds[j]);
|
||||||
|
itemIds[j] = oldId != null ? oldId : -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int fluidTagsSize = wrapper.passthrough(Type.VAR_INT); // fluid tags
|
||||||
|
for (int i = 0; i < fluidTagsSize; i++) {
|
||||||
|
wrapper.passthrough(Type.STRING);
|
||||||
|
wrapper.passthrough(Type.VAR_INT_ARRAY_PRIMITIVE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getNewBlockStateId(int id) {
|
||||||
|
int newId = BackwardsMappings.blockStateMappings.getNewId(id);
|
||||||
|
if (newId == -1) {
|
||||||
|
ViaBackwards.getPlatform().getLogger().warning("Missing 1.16 blockstate id for 1.15 block " + id);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return newId;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static int getNewBlockId(int id) {
|
||||||
|
int newId = BackwardsMappings.blockMappings.getNewId(id);
|
||||||
|
if (newId == -1) {
|
||||||
|
ViaBackwards.getPlatform().getLogger().warning("Missing 1.16 block id for 1.15 block " + id);
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
return newId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(UserConnection user) {
|
||||||
|
if (!user.has(ClientWorld.class))
|
||||||
|
user.put(new ClientWorld(user));
|
||||||
|
if (!user.has(EntityTracker.class))
|
||||||
|
user.put(new EntityTracker(user));
|
||||||
|
user.get(EntityTracker.class).initProtocol(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BlockItemPackets1_16 getBlockItemPackets() {
|
||||||
|
return blockItemPackets;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.data;
|
||||||
|
|
||||||
|
import nl.matsv.viabackwards.ViaBackwards;
|
||||||
|
import nl.matsv.viabackwards.api.data.VBItemMappings;
|
||||||
|
import nl.matsv.viabackwards.api.data.VBMappingDataLoader;
|
||||||
|
import nl.matsv.viabackwards.api.data.VBMappings;
|
||||||
|
import us.myles.ViaVersion.api.data.MappingDataLoader;
|
||||||
|
import us.myles.ViaVersion.api.data.Mappings;
|
||||||
|
import us.myles.viaversion.libs.gson.JsonObject;
|
||||||
|
|
||||||
|
public class BackwardsMappings {
|
||||||
|
public static Mappings blockStateMappings;
|
||||||
|
public static Mappings blockMappings;
|
||||||
|
public static Mappings soundMappings;
|
||||||
|
public static VBItemMappings itemMappings;
|
||||||
|
|
||||||
|
public static void init() {
|
||||||
|
JsonObject mapping1_15 = MappingDataLoader.loadData("mapping-1.15.json");
|
||||||
|
JsonObject mapping1_16 = MappingDataLoader.loadData("mapping-1.16.json");
|
||||||
|
JsonObject mapping1_15to1_16 = VBMappingDataLoader.loadFromDataDir("mapping-1.15to1.16.json");
|
||||||
|
|
||||||
|
ViaBackwards.getPlatform().getLogger().info("Loading 1.16 -> 1.15 mappings...");
|
||||||
|
blockStateMappings = new VBMappings(mapping1_16.getAsJsonObject("blockstates"), mapping1_15.getAsJsonObject("blockstates"), mapping1_15to1_16.getAsJsonObject("blockstates"));
|
||||||
|
blockMappings = new VBMappings(mapping1_16.getAsJsonObject("blocks"), mapping1_15.getAsJsonObject("blocks"), mapping1_15to1_16.getAsJsonObject("blocks"), false);
|
||||||
|
itemMappings = new VBItemMappings(mapping1_16.getAsJsonObject("items"), mapping1_15.getAsJsonObject("items"), mapping1_15to1_16.getAsJsonObject("items"));
|
||||||
|
soundMappings = new VBMappings(mapping1_16.getAsJsonArray("sounds"), mapping1_15.getAsJsonArray("sounds"), mapping1_15to1_16.getAsJsonObject("sounds"));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,183 @@
|
|||||||
|
package nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.packets;
|
||||||
|
|
||||||
|
import nl.matsv.viabackwards.ViaBackwards;
|
||||||
|
import nl.matsv.viabackwards.api.rewriters.RecipeRewriter;
|
||||||
|
import nl.matsv.viabackwards.protocol.protocol1_14_4to1_15.data.RecipeRewriter1_15;
|
||||||
|
import nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.Protocol1_15_2To1_16;
|
||||||
|
import nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.data.BackwardsMappings;
|
||||||
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
|
import us.myles.ViaVersion.api.minecraft.chunks.Chunk;
|
||||||
|
import us.myles.ViaVersion.api.minecraft.chunks.ChunkSection;
|
||||||
|
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.rewriters.BlockRewriter;
|
||||||
|
import us.myles.ViaVersion.api.rewriters.ItemRewriter;
|
||||||
|
import us.myles.ViaVersion.api.type.Type;
|
||||||
|
import us.myles.ViaVersion.packets.State;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.types.Chunk1_15Type;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_16to1_15_2.data.MappingData;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
||||||
|
|
||||||
|
public class BlockItemPackets1_16 extends nl.matsv.viabackwards.api.rewriters.ItemRewriter<Protocol1_15_2To1_16> {
|
||||||
|
|
||||||
|
public BlockItemPackets1_16(Protocol1_15_2To1_16 protocol) {
|
||||||
|
super(protocol, BlockItemPackets1_16::getOldItemId, BlockItemPackets1_16::getNewItemId, id -> BackwardsMappings.itemMappings.getMappedItem(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void registerPackets() {
|
||||||
|
ItemRewriter itemRewriter = new ItemRewriter(protocol, this::handleItemToClient, this::handleItemToServer);
|
||||||
|
BlockRewriter blockRewriter = new BlockRewriter(protocol, Type.POSITION1_14, Protocol1_15_2To1_16::getNewBlockStateId, Protocol1_15_2To1_16::getNewBlockId);
|
||||||
|
|
||||||
|
// Set cooldown
|
||||||
|
itemRewriter.registerSetCooldown(0x18, 0x18, BlockItemPackets1_16::getOldItemId);
|
||||||
|
|
||||||
|
// Window items packet
|
||||||
|
itemRewriter.registerWindowItems(Type.FLAT_VAR_INT_ITEM_ARRAY, 0x15, 0x15);
|
||||||
|
|
||||||
|
// Set slot packet
|
||||||
|
itemRewriter.registerSetSlot(Type.FLAT_VAR_INT_ITEM, 0x17, 0x17);
|
||||||
|
|
||||||
|
// Trade list
|
||||||
|
protocol.out(State.PLAY, 0x28, 0x28, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
handler(wrapper -> {
|
||||||
|
wrapper.passthrough(Type.VAR_INT);
|
||||||
|
int size = wrapper.passthrough(Type.UNSIGNED_BYTE);
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
Item input = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM);
|
||||||
|
handleItemToClient(input);
|
||||||
|
|
||||||
|
Item output = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM);
|
||||||
|
handleItemToClient(output);
|
||||||
|
|
||||||
|
if (wrapper.passthrough(Type.BOOLEAN)) { // Has second item
|
||||||
|
// Second Item
|
||||||
|
Item second = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM);
|
||||||
|
handleItemToClient(second);
|
||||||
|
}
|
||||||
|
|
||||||
|
wrapper.passthrough(Type.BOOLEAN);
|
||||||
|
wrapper.passthrough(Type.INT);
|
||||||
|
wrapper.passthrough(Type.INT);
|
||||||
|
|
||||||
|
wrapper.passthrough(Type.INT);
|
||||||
|
wrapper.passthrough(Type.INT);
|
||||||
|
wrapper.passthrough(Type.FLOAT);
|
||||||
|
wrapper.passthrough(Type.INT);
|
||||||
|
}
|
||||||
|
|
||||||
|
wrapper.passthrough(Type.VAR_INT);
|
||||||
|
wrapper.passthrough(Type.VAR_INT);
|
||||||
|
wrapper.passthrough(Type.BOOLEAN);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Entity Equipment Packet
|
||||||
|
itemRewriter.registerEntityEquipment(Type.FLAT_VAR_INT_ITEM, 0x47, 0x47);
|
||||||
|
|
||||||
|
// Declare Recipes
|
||||||
|
protocol.registerOutgoing(State.PLAY, 0x5B, 0x5B, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
private final RecipeRewriter recipeHandler = new RecipeRewriter1_15(BlockItemPackets1_16.this);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
int size = wrapper.passthrough(Type.VAR_INT);
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
String type = wrapper.passthrough(Type.STRING).replace("minecraft:", "");
|
||||||
|
String id = wrapper.passthrough(Type.STRING); // Recipe Identifier
|
||||||
|
recipeHandler.handle(wrapper, type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Click window packet
|
||||||
|
itemRewriter.registerClickWindow(Type.FLAT_VAR_INT_ITEM, 0x09, 0x09);
|
||||||
|
|
||||||
|
// Creative Inventory Action
|
||||||
|
itemRewriter.registerCreativeInvAction(Type.FLAT_VAR_INT_ITEM, 0x26, 0x26);
|
||||||
|
|
||||||
|
// Acknowledge player digging
|
||||||
|
blockRewriter.registerAcknowledgePlayerDigging(0x08, 0x08);
|
||||||
|
|
||||||
|
// Block Action
|
||||||
|
blockRewriter.registerBlockAction(0x0B, 0x0B);
|
||||||
|
|
||||||
|
// Block Change
|
||||||
|
blockRewriter.registerBlockChange(0x0C, 0x0C);
|
||||||
|
|
||||||
|
// Multi Block Change
|
||||||
|
blockRewriter.registerMultiBlockChange(0x10, 0x10);
|
||||||
|
|
||||||
|
// Chunk
|
||||||
|
protocol.registerOutgoing(State.PLAY, 0x22, 0x22, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
handler(wrapper -> {
|
||||||
|
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
||||||
|
Chunk chunk = wrapper.passthrough(new Chunk1_15Type(clientWorld));
|
||||||
|
for (int i = 0; i < chunk.getSections().length; i++) {
|
||||||
|
ChunkSection section = chunk.getSections()[i];
|
||||||
|
if (section == null) continue;
|
||||||
|
for (int j = 0; j < section.getPaletteSize(); j++) {
|
||||||
|
int old = section.getPaletteEntry(j);
|
||||||
|
section.setPaletteEntry(j, Protocol1_15_2To1_16.getNewBlockStateId(old));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chunk.isBiomeData()) {
|
||||||
|
for (int i = 0; i < 1024; i++) {
|
||||||
|
int biome = chunk.getBiomeData()[i];
|
||||||
|
int newId = -1;
|
||||||
|
switch (biome) {
|
||||||
|
case 170: // new nether biomes
|
||||||
|
case 171:
|
||||||
|
case 172:
|
||||||
|
newId = 8;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newId != -1) {
|
||||||
|
chunk.getBiomeData()[i] = newId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Effect packet
|
||||||
|
blockRewriter.registerEffect(0x23, 0x23, 1010, 2001, BlockItemPackets1_16::getOldItemId);
|
||||||
|
|
||||||
|
// Spawn particle
|
||||||
|
blockRewriter.registerSpawnParticle(Type.DOUBLE, 0x24, 0x24, 3, 23, 32, null,
|
||||||
|
this::handleItemToClient, Type.FLAT_VAR_INT_ITEM);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getNewItemId(int id) {
|
||||||
|
Integer newId = MappingData.oldToNewItems.get(id);
|
||||||
|
if (newId == null) {
|
||||||
|
ViaBackwards.getPlatform().getLogger().warning("Missing 1.16 item for 1.15 item " + id);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return newId;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static int getOldItemId(int id) {
|
||||||
|
Integer oldId = MappingData.oldToNewItems.inverse().get(id);
|
||||||
|
if (oldId == null) {
|
||||||
|
ViaBackwards.getPlatform().getLogger().warning("Missing 1.15 item for 1.16 item " + id);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return oldId;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,169 @@
|
|||||||
|
package nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.packets;
|
||||||
|
|
||||||
|
import nl.matsv.viabackwards.api.rewriters.EntityRewriter;
|
||||||
|
import nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.Protocol1_15_2To1_16;
|
||||||
|
import us.myles.ViaVersion.api.entities.Entity1_15Types;
|
||||||
|
import us.myles.ViaVersion.api.entities.Entity1_16Types;
|
||||||
|
import us.myles.ViaVersion.api.entities.EntityType;
|
||||||
|
import us.myles.ViaVersion.api.minecraft.item.Item;
|
||||||
|
import us.myles.ViaVersion.api.minecraft.metadata.MetaType;
|
||||||
|
import us.myles.ViaVersion.api.minecraft.metadata.Metadata;
|
||||||
|
import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_14;
|
||||||
|
import us.myles.ViaVersion.api.remapper.PacketRemapper;
|
||||||
|
import us.myles.ViaVersion.api.type.Type;
|
||||||
|
import us.myles.ViaVersion.api.type.types.version.Types1_14;
|
||||||
|
import us.myles.ViaVersion.packets.State;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
||||||
|
|
||||||
|
public class EntityPackets1_16 extends EntityRewriter<Protocol1_15_2To1_16> {
|
||||||
|
|
||||||
|
public EntityPackets1_16(Protocol1_15_2To1_16 protocol) {
|
||||||
|
super(protocol);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void registerPackets() {
|
||||||
|
// 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
|
||||||
|
map(Type.DOUBLE); // 3 - X
|
||||||
|
map(Type.DOUBLE); // 4 - Y
|
||||||
|
map(Type.DOUBLE); // 5 - Z
|
||||||
|
map(Type.BYTE); // 6 - Pitch
|
||||||
|
map(Type.BYTE); // 7 - Yaw
|
||||||
|
map(Type.INT); // 8 - Data
|
||||||
|
|
||||||
|
handler(getTrackerHandler());
|
||||||
|
handler(wrapper -> {
|
||||||
|
int typeId = wrapper.get(Type.VAR_INT, 1);
|
||||||
|
Entity1_15Types.EntityType entityType = Entity1_15Types.getTypeFromId(getOldEntityId(typeId));
|
||||||
|
wrapper.set(Type.VAR_INT, 1, entityType.getId());
|
||||||
|
|
||||||
|
if (entityType == Entity1_15Types.EntityType.FALLING_BLOCK) {
|
||||||
|
int blockState = wrapper.get(Type.INT, 0);
|
||||||
|
int combined = Protocol1_15_2To1_16.getNewBlockStateId(blockState);
|
||||||
|
wrapper.set(Type.INT, 0, combined);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Spawn mob packet
|
||||||
|
protocol.registerOutgoing(State.PLAY, 0x03, 0x03, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
|
map(Type.UUID); // 1 - Entity UUID
|
||||||
|
map(Type.VAR_INT); // 2 - Entity Type
|
||||||
|
|
||||||
|
handler(wrapper -> {
|
||||||
|
int type = wrapper.get(Type.VAR_INT, 1);
|
||||||
|
Entity1_16Types.EntityType entityType = Entity1_16Types.getTypeFromId(type);
|
||||||
|
addTrackedEntity(wrapper, wrapper.get(Type.VAR_INT, 0), entityType);
|
||||||
|
wrapper.set(Type.VAR_INT, 1, getOldEntityId(type));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Respawn
|
||||||
|
protocol.registerOutgoing(State.PLAY, 0x3B, 0x3B, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.INT);
|
||||||
|
map(Type.LONG, Type.NOTHING); // Seed
|
||||||
|
handler(wrapper -> {
|
||||||
|
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
|
||||||
|
clientWorld.setEnvironment(wrapper.get(Type.INT, 0));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Join Game
|
||||||
|
protocol.registerOutgoing(State.PLAY, 0x26, 0x26, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.INT); // 0 - Entity ID
|
||||||
|
map(Type.UNSIGNED_BYTE); // 1 - Gamemode
|
||||||
|
map(Type.INT); // 2 - Dimension
|
||||||
|
|
||||||
|
handler(getTrackerHandler(Entity1_16Types.EntityType.PLAYER, Type.INT));
|
||||||
|
handler(getDimensionHandler(1));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Edit Book
|
||||||
|
protocol.registerIncoming(State.PLAY, 0x0C, 0x0C, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
handler(wrapper -> getProtocol().getBlockItemPackets().handleItemToServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Spawn Experience Orb
|
||||||
|
registerExtraTracker(0x01, Entity1_16Types.EntityType.XP_ORB);
|
||||||
|
|
||||||
|
// Spawn Global Object
|
||||||
|
registerExtraTracker(0x02, Entity1_16Types.EntityType.LIGHTNING_BOLT);
|
||||||
|
|
||||||
|
// Spawn painting
|
||||||
|
registerExtraTracker(0x04, Entity1_16Types.EntityType.PAINTING);
|
||||||
|
|
||||||
|
// Spawn player packet
|
||||||
|
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
|
||||||
|
|
||||||
|
handler(getTrackerHandler(Entity1_16Types.EntityType.PLAYER, Type.VAR_INT));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Destroy entities
|
||||||
|
registerEntityDestroy(0x38, 0x38);
|
||||||
|
|
||||||
|
// Entity Metadata packet
|
||||||
|
registerMetadataRewriter(0x44, 0x44, Types1_14.METADATA_LIST);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void registerRewrites() {
|
||||||
|
setDisplayNameJson(true);
|
||||||
|
setDisplayNameMetaType(MetaType1_14.OptChat);
|
||||||
|
|
||||||
|
registerMetaHandler().handle(e -> {
|
||||||
|
Metadata meta = e.getData();
|
||||||
|
MetaType type = meta.getMetaType();
|
||||||
|
if (type == MetaType1_14.Slot) {
|
||||||
|
meta.setValue(getProtocol().getBlockItemPackets().handleItemToClient((Item) meta.getValue()));
|
||||||
|
} else if (type == MetaType1_14.BlockID) {
|
||||||
|
meta.setValue(Protocol1_15_2To1_16.getNewBlockStateId((int) meta.getValue()));
|
||||||
|
}
|
||||||
|
return meta;
|
||||||
|
});
|
||||||
|
|
||||||
|
regEntType(Entity1_16Types.EntityType.HOGLIN, Entity1_16Types.EntityType.COW).mobName("Hoglin");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected EntityType getTypeFromId(int typeId) {
|
||||||
|
return Entity1_16Types.getTypeFromId(typeId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getOldEntityId(int newId) {
|
||||||
|
if (newId == 100) {
|
||||||
|
return Entity1_16Types.EntityType.COW.getId();
|
||||||
|
}
|
||||||
|
return newId;
|
||||||
|
}
|
||||||
|
}
|
@ -205,7 +205,7 @@ public class EntityPackets1_10 extends EntityRewriter<Protocol1_9_4To1_10> {
|
|||||||
registerEntityDestroy(0x30);
|
registerEntityDestroy(0x30);
|
||||||
|
|
||||||
// Metadata packet
|
// Metadata packet
|
||||||
registerMetadataRewriter(0x39, 0x39, Types1_9.METADATA_LIST);
|
registerLegacyMetadataRewriter(0x39, 0x39, Types1_9.METADATA_LIST);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
5382
core/src/main/resources/assets/viabackwards/data/mapping-1.15to1.16.json
Normale Datei
5382
core/src/main/resources/assets/viabackwards/data/mapping-1.15to1.16.json
Normale Datei
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
@ -1,4 +1,77 @@
|
|||||||
{
|
{
|
||||||
|
"1.16": {
|
||||||
|
"block.minecraft.soul_fire_torch": "Soul Fire Torch",
|
||||||
|
"block.minecraft.soul_fire_wall_torch": "Soul Fire Wall Torch",
|
||||||
|
"block.minecraft.warped_wart_block": "Warped Wart Block",
|
||||||
|
"block.minecraft.warped_stem": "Warped Stem",
|
||||||
|
"block.minecraft.stripped_warped_stem": "Stripped Warped Stem",
|
||||||
|
"block.minecraft.crimson_stem": "Crimson Stem",
|
||||||
|
"block.minecraft.stripped_crimson_stem": "Stripped Crimson Stem",
|
||||||
|
"block.minecraft.warped_nylium": "Warped Nylium",
|
||||||
|
"block.minecraft.crimson_nylium": "Crimson Nylium",
|
||||||
|
"block.minecraft.warped_fungi": "Warped Fungi",
|
||||||
|
"block.minecraft.crimson_fungi": "Crimson Fungi",
|
||||||
|
"block.minecraft.crimson_roots": "Crimson Roots",
|
||||||
|
"block.minecraft.warped_roots": "Warped Roots",
|
||||||
|
"block.minecraft.nether_sprouts": "Nether Sprouts",
|
||||||
|
"block.minecraft.shroomlight": "Shroomlight",
|
||||||
|
"block.minecraft.weeping_vines": "Weeping Vines",
|
||||||
|
"block.minecraft.weeping_vines_plant": "Weeping Vines",
|
||||||
|
"block.minecraft.soul_soil": "Soul Soil",
|
||||||
|
"block.minecraft.basalt": "Basalt",
|
||||||
|
"block.minecraft.warped_planks": "Warped Planks",
|
||||||
|
"block.minecraft.warped_slab": "Warped Slab",
|
||||||
|
"block.minecraft.warped_pressure_plate": "Warped Pressure Plate",
|
||||||
|
"block.minecraft.warped_fence": "Warped Fence",
|
||||||
|
"block.minecraft.warped_trapdoor": "Warped Trapdoor",
|
||||||
|
"block.minecraft.warped_fence_gate": "Warped Fence Gate",
|
||||||
|
"block.minecraft.warped_stairs": "Warped Stairs",
|
||||||
|
"block.minecraft.warped_button": "Warped Button",
|
||||||
|
"block.minecraft.warped_door": "Warped Door",
|
||||||
|
"block.minecraft.warped_sign": "Warped Sign",
|
||||||
|
"block.minecraft.warped_wall_sign": "Warped Sign",
|
||||||
|
"block.minecraft.crimson_planks": "Crimson Planks",
|
||||||
|
"block.minecraft.crimson_slab": "Crimson Slab",
|
||||||
|
"block.minecraft.crimson_pressure_plate": "Crimson Pressure Plate",
|
||||||
|
"block.minecraft.crimson_fence": "Crimson Fence",
|
||||||
|
"block.minecraft.crimson_trapdoor": "Crimson Trapdoor",
|
||||||
|
"block.minecraft.crimson_fence_gate": "Crimson Fence Gate",
|
||||||
|
"block.minecraft.crimson_stairs": "Crimson Stairs",
|
||||||
|
"block.minecraft.crimson_button": "Crimson Button",
|
||||||
|
"block.minecraft.crimson_door": "Crimson Door",
|
||||||
|
"block.minecraft.crimson_sign": "Crimson Sign",
|
||||||
|
"block.minecraft.crimson_wall_sign": "Crimson Sign",
|
||||||
|
"block.minecraft.soul_fire": "Soul Fire",
|
||||||
|
"block.minecraft.soul_fire_lantern": "Soul Fire Lantern",
|
||||||
|
"block.minecraft.netherite_block": "Block of Netherite",
|
||||||
|
"block.minecraft.ancient_debris": "Ancient Debris",
|
||||||
|
"item.minecraft.hoglin_spawn_egg": "Hoglin Spawn Egg",
|
||||||
|
"item.minecraft.netherite_scrap": "Netherite Scrap",
|
||||||
|
"item.minecraft.netherite_ingot": "Netherite Ingot",
|
||||||
|
"item.minecraft.netherite_helmet": "Netherite Helmet",
|
||||||
|
"item.minecraft.netherite_chestplate": "Netherite Chestplate",
|
||||||
|
"item.minecraft.netherite_leggings": "Netherite Leggings",
|
||||||
|
"item.minecraft.netherite_boots": "Netherite Boots",
|
||||||
|
"item.minecraft.netherite_axe": "Netherite Axe",
|
||||||
|
"item.minecraft.netherite_pickaxe": "Netherite Pickaxe",
|
||||||
|
"item.minecraft.netherite_hoe": "Netherite Hoe",
|
||||||
|
"item.minecraft.netherite_shovel": "Netherite Shovel",
|
||||||
|
"item.minecraft.netherite_sword": "Netherite Sword",
|
||||||
|
"entity.minecraft.hoglin": "Hoglin",
|
||||||
|
"subtitles.block.composter.empty": "Composter emptied",
|
||||||
|
"subtitles.block.composter.fill": "Composter filled",
|
||||||
|
"subtitles.block.composter.ready": "Composter composts",
|
||||||
|
"subtitles.item.armor.equip_netherite": "Netherite armor clanks",
|
||||||
|
"commands.locatebiome.success": "The nearest %s is at %s (%s blocks away)",
|
||||||
|
"commands.teleport.invalidPosition": "Invalid position for teleport",
|
||||||
|
"commands.locatebiome.notFound": "Could not find a %s within reasonable distance",
|
||||||
|
"commands.locatebiome.invalid": "There is no biome named %s",
|
||||||
|
"commands.summon.invalidPosition": "Invalid position for summon",
|
||||||
|
"biome.minecraft.nether_wastes": "Nether Wastes",
|
||||||
|
"biome.minecraft.soul_sand_valley": "Soul Sand Valley",
|
||||||
|
"biome.minecraft.warped_forest": "Warped Forest",
|
||||||
|
"biome.minecraft.crimson_forest": "Crimson Forest"
|
||||||
|
},
|
||||||
"1.15": {
|
"1.15": {
|
||||||
"narration.suggestion.tooltip": "Selected suggestion %d out of %d: %s (%s)",
|
"narration.suggestion.tooltip": "Selected suggestion %d out of %d: %s (%s)",
|
||||||
"narration.suggestion": "Selected suggestion %d out of %d: %s",
|
"narration.suggestion": "Selected suggestion %d out of %d: %s",
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren