Skip to content

Commit

Permalink
Add mob spawn rewriter function for pre 1.11 (#724)
Browse files Browse the repository at this point in the history
  • Loading branch information
FlorianMichael committed Apr 23, 2024
1 parent 948c615 commit 87f2a6b
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ public void registerMetadataRewriter(C packetType, Type<List<Metadata>> metaType
registerMetadataRewriter(packetType, null, metaType);
}

protected PacketHandler getMobSpawnRewriter(Type<List<Metadata>> metaType) {
protected PacketHandler getMobSpawnRewriter(Type<List<Metadata>> metaType, IdSetter idSetter) {
return wrapper -> {
int entityId = wrapper.get(Type.VAR_INT, 0);
EntityType type = tracker(wrapper.user()).entityType(entityId);
Expand All @@ -123,14 +123,22 @@ protected PacketHandler getMobSpawnRewriter(Type<List<Metadata>> metaType) {

EntityData entityData = entityDataForType(type);
if (entityData != null) {
wrapper.set(Type.VAR_INT, 1, entityData.replacementId());
idSetter.setId(wrapper, entityData.replacementId());
if (entityData.hasBaseMeta()) {
entityData.defaultMeta().createMeta(new WrappedMetadata(metadata));
}
}
};
}

public PacketHandler getMobSpawnRewriter(Type<List<Metadata>> metaType) {
return getMobSpawnRewriter(metaType, (wrapper, id) -> wrapper.set(Type.UNSIGNED_BYTE, 0, (short) id));
}

public PacketHandler getMobSpawnRewriter1_11(Type<List<Metadata>> metaType) {
return getMobSpawnRewriter(metaType, (wrapper, id) -> wrapper.set(Type.VAR_INT, 1, id));
}

protected PacketHandler getObjectTrackerHandler() {
return wrapper -> addTrackedEntity(wrapper, wrapper.get(Type.VAR_INT, 0), objectTypeFromId(wrapper.get(Type.BYTE, 0)));
}
Expand Down Expand Up @@ -165,4 +173,10 @@ protected PacketHandler getObjectRewriter(Function<Byte, ObjectType> objectGette
protected void addTrackedEntity(PacketWrapper wrapper, int entityId, EntityType type) throws Exception {
tracker(wrapper.user()).addEntity(entityId, type);
}

@FunctionalInterface
protected interface IdSetter {

void setId(PacketWrapper wrapper, int id) throws Exception;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -111,24 +111,13 @@ public void register() {
handler(getTrackerHandler(Type.UNSIGNED_BYTE, 0));

// Rewrite entity type / metadata
handler(wrapper -> {
int entityId = wrapper.get(Type.VAR_INT, 0);
EntityType type = tracker(wrapper.user()).entityType(entityId);

List<Metadata> list = wrapper.get(Types1_9.METADATA_LIST, 0);
handleMetadata(wrapper.get(Type.VAR_INT, 0), list, wrapper.user());

EntityData entityData = entityDataForType(type);
if (entityData != null) {
wrapper.set(Type.UNSIGNED_BYTE, 0, (short) entityData.replacementId());
if (entityData.hasBaseMeta()) {
entityData.defaultMeta().createMeta(new WrappedMetadata(list));
}
}
handler(getMobSpawnRewriter(Types1_9.METADATA_LIST));

// Sub 1.11 clients will error if the list is empty
if (list.isEmpty()) {
list.add(new Metadata(0, MetaType1_9.Byte, (byte) 0));
// Sub 1.11 clients will error if the list is empty
handler(wrapper -> {
List<Metadata> metadata = wrapper.get(Types1_9.METADATA_LIST, 0);
if (metadata.isEmpty()) {
metadata.add(new Metadata(0, MetaType1_9.Byte, (byte) 0));
}
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public void register() {
handler(getTrackerHandler());

// Rewrite entity type / metadata
handler(getMobSpawnRewriter(Types1_12.METADATA_LIST));
handler(getMobSpawnRewriter1_11(Types1_12.METADATA_LIST));
}
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public void register() {
handler(getTrackerHandler());

// Rewrite entity type / metadata
handler(getMobSpawnRewriter(Types1_9.METADATA_LIST));
handler(getMobSpawnRewriter1_11(Types1_9.METADATA_LIST));
}
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ public void register() {
});

// Rewrite entity type / metadata
handler(getMobSpawnRewriter(Types1_12.METADATA_LIST));
handler(getMobSpawnRewriter1_11(Types1_12.METADATA_LIST));
}
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ public void register() {
});

// Handle entity type & metadata
handler(getMobSpawnRewriter(Types1_13_2.METADATA_LIST));
handler(getMobSpawnRewriter1_11(Types1_13_2.METADATA_LIST));
}
});

Expand Down

0 comments on commit 87f2a6b

Please sign in to comment.