Skip to content

Commit

Permalink
Patch time_lived for xp orbs (#2509)
Browse files Browse the repository at this point in the history
  • Loading branch information
mergu committed Jul 26, 2023
1 parent 014df1d commit 5f3a593
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ public class ReflectionMappingsInfo {
// net.minecraft.server.level.ThreadedLevelLightEngine$TaskType
public static String ThreadedLevelLightEngineTaskType_PRE_UPDATE = "a";

// net.minecraft.world.entity.ExperienceOrb
public static String ExperienceOrb_age = "g";

// net.minecraft.world.entity.item.ItemEntity
public static String ItemEntity_DATA_ITEM = "c";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -561,6 +561,8 @@ public void setBoundingBox(Entity entity, BoundingBox box) {
((CraftEntity) entity).getHandle().setBoundingBox(new AABB(box.getMinX(), box.getMinY(), box.getMinZ(), box.getMaxX(), box.getMaxY(), box.getMaxZ()));
}

public static final Field EXPERIENCE_ORB_AGE = ReflectionHelper.getFields(net.minecraft.world.entity.ExperienceOrb.class).get(ReflectionMappingsInfo.ExperienceOrb_age, int.class);

@Override
public void setTicksLived(Entity entity, int ticks) {
// Bypass Spigot's must-be-at-least-1-tick requirement, as negative tick counts are useful
Expand All @@ -571,6 +573,14 @@ public void setTicksLived(Entity entity, int ticks) {
else if (entity instanceof CraftItem craftItem) {
((ItemEntity) craftItem.getHandle()).age = ticks;
}
else if (entity instanceof CraftExperienceOrb craftExperienceOrb) {
try {
EXPERIENCE_ORB_AGE.setInt(craftExperienceOrb.getHandle(), ticks);
}
catch (Throwable ex) {
Debug.echoError(ex);
}
}
}

@Override
Expand Down

0 comments on commit 5f3a593

Please sign in to comment.