From 473a81a90de6cbb0bd4825748845ab13c38f449c Mon Sep 17 00:00:00 2001 From: TheCatSaber <66741113+TheCatSaber@users.noreply.github.com> Date: Mon, 29 Jun 2020 13:40:23 +0100 Subject: [PATCH 1/2] Corrected killed_by description (#354) I think that is a correct description. Feel free to change it if you think there is a better way. --- docs/scarpet/api/Auxiliary.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/scarpet/api/Auxiliary.md b/docs/scarpet/api/Auxiliary.md index a276cde7..c5566f99 100644 --- a/docs/scarpet/api/Auxiliary.md +++ b/docs/scarpet/api/Auxiliary.md @@ -392,7 +392,7 @@ Queries in-game statistics for certain values. Categories include: * `picked_up`: items picked up * `dropped`: items dropped * `killed`: mobs killed -* `killed_by`: blocks mined +* `killed_by`: mobs killed by * `custom`: various random stats For the options of `entry`, consult your statistics page, or give it a guess. From 9b439270f1bffb2db62fc3ac9281078ff3cb17a2 Mon Sep 17 00:00:00 2001 From: gnembon Date: Mon, 29 Jun 2020 12:25:12 -0300 Subject: [PATCH 2/2] added `persistence` to entity API (read and write) --- docs/scarpet/api/Entities.md | 14 +++++++++-- .../java/carpet/fakes/MobEntityInterface.java | 2 ++ .../java/carpet/mixins/MobEntityMixin.java | 7 +++++- .../java/carpet/script/value/EntityValue.java | 24 ++++++++++++++++++- 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/docs/scarpet/api/Entities.md b/docs/scarpet/api/Entities.md index cc9084d5..3a31838d 100644 --- a/docs/scarpet/api/Entities.md +++ b/docs/scarpet/api/Entities.md @@ -128,6 +128,10 @@ query(e,'type') => villager Returns a valid string to be used in commands to address an entity. Its UUID for all entities except player, where its their name. +## `query(e, 'persistence')` + +Returns if a mob has a persistence tag or not. Returns `null` for non-mob entities. +
 run('/kill ' + e~'command_name');
 
@@ -411,9 +415,15 @@ Sets the corresponding component of the motion vector. Adds a vector to the motion vector. Most realistic way to apply a force to an entity. -### `modify(e, 'custom_name'), modify(e, 'custom_name', name)` +### `modify(e, 'custom_name')`, `modify(e, 'custom_name', name)`, `modify(e, 'custom_name', name, visible)` -Sets the custom name of the entity. +Sets the custom name of the entity. Without arguments - clears current custom name. Optional visible affects +if the custom name is always visible, even through blocks. + +### `modify(e, 'persistence', bool?)` + +Sets the entity persistence tag to `true` (default) or `false`. Only affects mobs. Persistent mobs +don't despawn and don't count towards the mobcap. ### `modify(e, 'age', number)` diff --git a/src/main/java/carpet/fakes/MobEntityInterface.java b/src/main/java/carpet/fakes/MobEntityInterface.java index 290e5304..9e3ae237 100644 --- a/src/main/java/carpet/fakes/MobEntityInterface.java +++ b/src/main/java/carpet/fakes/MobEntityInterface.java @@ -10,4 +10,6 @@ public interface MobEntityInterface GoalSelector getAI(boolean target); Map getTemporaryTasks(); + + void setPersistence(boolean what); } diff --git a/src/main/java/carpet/mixins/MobEntityMixin.java b/src/main/java/carpet/mixins/MobEntityMixin.java index daa3cee4..2d8a5fff 100644 --- a/src/main/java/carpet/mixins/MobEntityMixin.java +++ b/src/main/java/carpet/mixins/MobEntityMixin.java @@ -16,6 +16,7 @@ public abstract class MobEntityMixin implements MobEntityInterface { @Shadow @Final protected GoalSelector targetSelector; @Shadow @Final protected GoalSelector goalSelector; + @Shadow private boolean persistent; public final Map temporaryTasks = new HashMap<>(); @Override @@ -30,5 +31,9 @@ public abstract class MobEntityMixin implements MobEntityInterface return temporaryTasks; } - + @Override + public void setPersistence(boolean what) + { + persistent = what; + } } diff --git a/src/main/java/carpet/script/value/EntityValue.java b/src/main/java/carpet/script/value/EntityValue.java index e4922827..dc45cf72 100644 --- a/src/main/java/carpet/script/value/EntityValue.java +++ b/src/main/java/carpet/script/value/EntityValue.java @@ -289,6 +289,10 @@ public class EntityValue extends Value put("sneaking", (e, a) -> e.isSneaking()?Value.TRUE:Value.FALSE); put("sprinting", (e, a) -> e.isSprinting()?Value.TRUE:Value.FALSE); put("swimming", (e, a) -> e.isSwimming()?Value.TRUE:Value.FALSE); + put("persistence", (e, a) -> { + if (e instanceof MobEntity) return new NumericValue(((MobEntity) e).isPersistent()); + return Value.NULL; + }); put("hunger", (e, a) -> { if(e instanceof PlayerEntity) return new NumericValue(((PlayerEntity) e).getHungerManager().getFoodLevel()); return Value.NULL; @@ -520,6 +524,10 @@ public class EntityValue extends Value { throw new InternalExpressionException("'modify' for '"+what+"' expects a value"); } + catch (IndexOutOfBoundsException ind) + { + throw new InternalExpressionException("Wrong number of arguments for `modify` option: "+what); + } } private static void updatePosition(Entity e, double x, double y, double z, float yaw, float pitch) @@ -715,9 +723,23 @@ public class EntityValue extends Value e.setCustomName(null); return; } - e.setCustomNameVisible(true); + boolean showName = false; + if (v instanceof ListValue) + { + showName = ((ListValue) v).getItems().get(1).getBoolean(); + v = ((ListValue) v).getItems().get(0); + } + e.setCustomNameVisible(showName); e.setCustomName(new LiteralText(v.getString())); }); + + put("persistence", (e, v) -> + { + if (!(e instanceof MobEntity)) return; + if (v == null) v = Value.TRUE; + ((MobEntityInterface)e).setPersistence(v.getBoolean()); + }); + put("dismount", (e, v) -> e.stopRiding() ); put("mount", (e, v) -> { if (v instanceof EntityValue)