diff --git a/src/main/java/carpet/fakes/ItemEntityInterface.java b/src/main/java/carpet/fakes/ItemEntityInterface.java index d4b8e839..5faa1f74 100644 --- a/src/main/java/carpet/fakes/ItemEntityInterface.java +++ b/src/main/java/carpet/fakes/ItemEntityInterface.java @@ -2,6 +2,6 @@ package carpet.fakes; public interface ItemEntityInterface { - int getAge(); - int getPickupDelay(); + int getAgeCM(); + int getPickupDelayCM(); } diff --git a/src/main/java/carpet/fakes/ServerChunkManagerInterface.java b/src/main/java/carpet/fakes/ServerChunkManagerInterface.java index 9f7daddc..f63cb266 100644 --- a/src/main/java/carpet/fakes/ServerChunkManagerInterface.java +++ b/src/main/java/carpet/fakes/ServerChunkManagerInterface.java @@ -4,5 +4,5 @@ import net.minecraft.server.world.ChunkTicketManager; public interface ServerChunkManagerInterface { - ChunkTicketManager getTicketManager(); + ChunkTicketManager getCMTicketManager(); } diff --git a/src/main/java/carpet/mixins/ItemEntityMixin.java b/src/main/java/carpet/mixins/ItemEntityMixin.java index dcc185ee..3c4620c5 100644 --- a/src/main/java/carpet/mixins/ItemEntityMixin.java +++ b/src/main/java/carpet/mixins/ItemEntityMixin.java @@ -30,12 +30,12 @@ public abstract class ItemEntityMixin extends Entity implements ItemEntityInterf } @Override - public int getAge() { + public int getAgeCM() { return this.age; } @Override - public int getPickupDelay() { + public int getPickupDelayCM() { return this.pickupDelay; } @@ -91,8 +91,8 @@ public abstract class ItemEntityMixin extends Entity implements ItemEntityInterf selfStack.increment(amount); self.setStack(selfStack); - this.pickupDelay = Math.max(((ItemEntityInterface)other).getPickupDelay(), this.pickupDelay); - this.age = Math.min(((ItemEntityInterface)other).getAge(), this.age); + this.pickupDelay = Math.max(((ItemEntityInterface)other).getPickupDelayCM(), this.pickupDelay); + this.age = Math.min(((ItemEntityInterface)other).getAgeCM(), this.age); otherStack.decrement(amount); if (otherStack.isEmpty()) diff --git a/src/main/java/carpet/mixins/ServerChunkManagerMixin.java b/src/main/java/carpet/mixins/ServerChunkManagerMixin.java index 39865de3..21bc4d2b 100644 --- a/src/main/java/carpet/mixins/ServerChunkManagerMixin.java +++ b/src/main/java/carpet/mixins/ServerChunkManagerMixin.java @@ -35,7 +35,7 @@ public abstract class ServerChunkManagerMixin implements ServerChunkManagerInter @Shadow @Final private ChunkTicketManager ticketManager; @Override // shared between scarpet and spawnChunks setting - public ChunkTicketManager getTicketManager() + public ChunkTicketManager getCMTicketManager() { return ticketManager; } diff --git a/src/main/java/carpet/script/CarpetExpression.java b/src/main/java/carpet/script/CarpetExpression.java index 624c8c98..7d0100c8 100644 --- a/src/main/java/carpet/script/CarpetExpression.java +++ b/src/main/java/carpet/script/CarpetExpression.java @@ -712,7 +712,7 @@ public class CarpetExpression ServerWorld world = ((CarpetContext) c).s.getWorld(); Long2ObjectOpenHashMap>> levelTickets = ( (ChunkTicketManagerInterface) ((ServerChunkManagerInterface) world.getChunkManager()) - .getTicketManager() + .getCMTicketManager() ).getTicketsByPosition(); List res = new ArrayList<>(); if (lv.size() == 0) diff --git a/src/main/java/carpet/script/value/EntityValue.java b/src/main/java/carpet/script/value/EntityValue.java index b779ae17..01591a94 100644 --- a/src/main/java/carpet/script/value/EntityValue.java +++ b/src/main/java/carpet/script/value/EntityValue.java @@ -254,7 +254,7 @@ public class EntityValue extends Value put("despawn_timer", (e, a) -> e instanceof LivingEntity?new NumericValue(((LivingEntity) e).getDespawnCounter()):Value.NULL); put("item", (e, a) -> (e instanceof ItemEntity)?ListValue.fromItemStack(((ItemEntity) e).getStack()):Value.NULL); put("count", (e, a) -> (e instanceof ItemEntity)?new NumericValue(((ItemEntity) e).getStack().getCount()):Value.NULL); - put("pickup_delay", (e, a) -> (e instanceof ItemEntity)?new NumericValue(((ItemEntityInterface) e).getPickupDelay()):Value.NULL); + put("pickup_delay", (e, a) -> (e instanceof ItemEntity)?new NumericValue(((ItemEntityInterface) e).getPickupDelayCM()):Value.NULL); // ItemEntity -> despawn timer via ssGetAge put("is_baby", (e, a) -> (e instanceof LivingEntity)?new NumericValue(((LivingEntity) e).isBaby()):Value.NULL); put("target", (e, a) -> { @@ -532,7 +532,37 @@ public class EntityValue extends Value private static final Map> featureModifiers = new HashMap>() {{ put("remove", (entity, value) -> entity.remove()); put("age", (e, v) -> e.age = Math.abs((int)NumericValue.asNumber(v).getLong()) ); - put("health", (e, v) -> { if (e instanceof LivingEntity) ((LivingEntity) e).setHealth((float) NumericValue.asNumber(v).getDouble()); }); + put("health", (e, v) -> { + float health = (float) NumericValue.asNumber(v).getDouble(); + if (health <= 0f && e instanceof ServerPlayerEntity) + { + ServerPlayerEntity player = (ServerPlayerEntity) e; + if (player.container != null) + { + // if player dies with open container, then that causes NPE on the client side + // its a client side bug that may never surface unless vanilla gets into scripting at some point + // bug: #228 + player.closeContainer(); + } + ((LivingEntity) e).setHealth(health); + } + if (e instanceof LivingEntity) ((LivingEntity) e).setHealth(health); + }); + // todo add handling of the source for extra effects + /*put("damage", (e, v) -> { + float dmgPoints; + DamageSource source; + if (v instanceof ListValue && ((ListValue) v).getItems().size() > 1) + { + List vals = ((ListValue) v).getItems(); + dmgPoints = (float) NumericValue.asNumber(v).getDouble(); + source = DamageSource ... yeah... + } + else + { + + } + });*/ put("kill", (e, v) -> e.kill()); put("location", (e, v) -> { diff --git a/src/main/java/carpet/utils/SpawnChunks.java b/src/main/java/carpet/utils/SpawnChunks.java index e97cb531..f2e8f117 100644 --- a/src/main/java/carpet/utils/SpawnChunks.java +++ b/src/main/java/carpet/utils/SpawnChunks.java @@ -10,7 +10,7 @@ public class SpawnChunks { public static void changeSpawnChunks(ServerChunkManager chunkManager, ChunkPos pos, int size) { - ChunkTicketManager ticketManager = ((ServerChunkManagerInterface)chunkManager).getTicketManager(); + ChunkTicketManager ticketManager = ((ServerChunkManagerInterface)chunkManager).getCMTicketManager(); ((ChunkTicketManagerInterface)ticketManager).changeSpawnChunks(pos, size); } }