From 0f57bf0bc631f6bfc6a9be05897b2a3d7a781e29 Mon Sep 17 00:00:00 2001 From: gnembon Date: Sat, 27 Nov 2021 19:09:35 +0100 Subject: [PATCH 1/6] fixes #1187 Ye --- docs/scarpet/api/Entities.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/scarpet/api/Entities.md b/docs/scarpet/api/Entities.md index b75f0e5e..af0dbc52 100644 --- a/docs/scarpet/api/Entities.md +++ b/docs/scarpet/api/Entities.md @@ -202,11 +202,13 @@ List of entities riding the entity. Entity that `e` rides. -### `query(e, 'scoreboard_tags')`, `query(e, 'tags')`(deprecated) +### `query(e, 'scoreboard_tags')` and +### `query(e, 'tags')`(deprecated) List of entity's scoreboard tags. -### `query(e, 'has_scoreboard_tag',tag)`, `query(e, 'has_tag',tag)`(deprecated) +### `query(e, 'has_scoreboard_tag',tag)` and +### `query(e, 'has_tag',tag)`(deprecated) Boolean, true if the entity is marked with a `tag` scoreboad tag. From 547ed9b6b9c3d093269dcf24051d43affde2a31e Mon Sep 17 00:00:00 2001 From: gnembon Date: Sat, 27 Nov 2021 19:36:44 +0100 Subject: [PATCH 2/6] fixes #1178 Yo --- 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 9c0eb46d..9f0cc876 100644 --- a/docs/scarpet/api/Auxiliary.md +++ b/docs/scarpet/api/Auxiliary.md @@ -605,7 +605,7 @@ Throws `unknown_dimension` if provided dimension can't be found. ### `view_distance()` -_**Deprecated**. Use `system_info('server_view_distance')` instead._ +_**Deprecated**. Use `system_info('game_view_distance')` instead._ Returns the view distance of the server. From 18c728db2e971bd0e376de34b6feaf1cf1db6d20 Mon Sep 17 00:00:00 2001 From: gnembon Date: Sat, 27 Nov 2021 20:11:05 +0100 Subject: [PATCH 3/6] fixes #1172 lol --- src/main/java/carpet/script/CarpetScriptServer.java | 2 ++ .../java/carpet/script/exception/ExpressionException.java | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/main/java/carpet/script/CarpetScriptServer.java b/src/main/java/carpet/script/CarpetScriptServer.java index 4624cc52..8b92c010 100644 --- a/src/main/java/carpet/script/CarpetScriptServer.java +++ b/src/main/java/carpet/script/CarpetScriptServer.java @@ -12,6 +12,7 @@ import carpet.script.bundled.BundledModule; import carpet.CarpetServer; import carpet.script.bundled.FileModule; import carpet.script.bundled.Module; +import carpet.script.exception.ExpressionException; import carpet.script.language.Arithmetic; import carpet.script.language.ControlFlow; import carpet.script.language.DataStructures; @@ -437,6 +438,7 @@ public class CarpetScriptServer public static void parseFunctionClasses() { + ExpressionException.prepareForDoom(); // see fc-#1172 // Language AnnotationParser.parseFunctionClass(Arithmetic.class); AnnotationParser.parseFunctionClass(ControlFlow.class); diff --git a/src/main/java/carpet/script/exception/ExpressionException.java b/src/main/java/carpet/script/exception/ExpressionException.java index 00eb0e9d..ddd66c9e 100644 --- a/src/main/java/carpet/script/exception/ExpressionException.java +++ b/src/main/java/carpet/script/exception/ExpressionException.java @@ -5,6 +5,7 @@ import carpet.script.Expression; import carpet.script.Fluff; import carpet.script.Tokenizer; import carpet.script.value.FunctionValue; +import carpet.utils.Messenger; import java.util.ArrayList; import java.util.Collections; @@ -19,6 +20,9 @@ public class ExpressionException extends RuntimeException implements ResolvedExc public final List stack = new ArrayList<>(); private final Supplier lazyMessage; private String cachedMessage = null; + public static void prepareForDoom(){ + Messenger.c("foo bar"); + } public ExpressionException(Context c, Expression e, String message) { From 7bd18a27e4dca53f7deafc1e9f5f3a740c6e244e Mon Sep 17 00:00:00 2001 From: gnembon Date: Sat, 27 Nov 2021 20:29:16 +0100 Subject: [PATCH 4/6] fixes #1113 boo --- src/main/java/carpet/script/language/Arithmetic.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/carpet/script/language/Arithmetic.java b/src/main/java/carpet/script/language/Arithmetic.java index 46f308e6..31453dce 100644 --- a/src/main/java/carpet/script/language/Arithmetic.java +++ b/src/main/java/carpet/script/language/Arithmetic.java @@ -29,6 +29,10 @@ public class Arithmetic { } return new NumericValue(factorial); } + else if (number > 170) + { + return NumericValue.of(Double.MAX_VALUE); + } // values over 21 will exceed long limits double factorial = 1.0; for (int i = 1; i <= number; i++) From 0e1a8f20d48a662bc0e2e1fe420736f5c1c6f5c5 Mon Sep 17 00:00:00 2001 From: gnembon Date: Sat, 27 Nov 2021 20:58:23 +0100 Subject: [PATCH 5/6] fixes #1105 maxEntityCollisions will not affect maxEntityCramming setting --- .../LivingEntity_maxCollisionsMixin.java | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/main/java/carpet/mixins/LivingEntity_maxCollisionsMixin.java b/src/main/java/carpet/mixins/LivingEntity_maxCollisionsMixin.java index 424007d7..f5364c70 100644 --- a/src/main/java/carpet/mixins/LivingEntity_maxCollisionsMixin.java +++ b/src/main/java/carpet/mixins/LivingEntity_maxCollisionsMixin.java @@ -31,17 +31,23 @@ public abstract class LivingEntity_maxCollisionsMixin extends Entity @Inject(method = "tickCramming", cancellable = true, at = @At("HEAD")) private void tickPushingReplacement(CallbackInfo ci) { List entities; + int maxEntityCramming =-1; if (CarpetSettings.maxEntityCollisions > 0) + { + maxEntityCramming = this.world.getGameRules().getInt(GameRules.MAX_ENTITY_CRAMMING); entities = ((WorldInterface) this.world).getOtherEntitiesLimited( this, this.getBoundingBox(), EntityPredicates.canBePushedBy(this), - CarpetSettings.maxEntityCollisions); + Math.max(CarpetSettings.maxEntityCollisions, maxEntityCramming)); + } else + { entities = this.world.getOtherEntities(this, this.getBoundingBox(), EntityPredicates.canBePushedBy(this)); + } if (!entities.isEmpty()) { - int maxEntityCramming = this.world.getGameRules().getInt(GameRules.MAX_ENTITY_CRAMMING); + if (maxEntityCramming < 0) maxEntityCramming = this.world.getGameRules().getInt(GameRules.MAX_ENTITY_CRAMMING); if (maxEntityCramming > 0 && entities.size() > maxEntityCramming - 1 && this.random.nextInt(4) == 0) { int candidates = 0; @@ -55,9 +61,19 @@ public abstract class LivingEntity_maxCollisionsMixin extends Entity this.damage(DamageSource.CRAMMING, 6.0F); } } - - for (Entity entity : entities) { - this.pushAway(entity); + if (CarpetSettings.maxEntityCollisions > 0 && entities.size() > CarpetSettings.maxEntityCollisions) + { + for (Entity entity : entities.subList(0, CarpetSettings.maxEntityCollisions)) + { + this.pushAway(entity); + } + } + else + { + for (Entity entity : entities) + { + this.pushAway(entity); + } } } ci.cancel(); From 339633f1f04350cc5ed09966bb7037aa1504384c Mon Sep 17 00:00:00 2001 From: gnembon Date: Sat, 27 Nov 2021 21:14:59 +0100 Subject: [PATCH 6/6] fixes #1103 game will close peacefully when running ticks from scarpet --- src/main/java/carpet/script/api/Auxiliary.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/carpet/script/api/Auxiliary.java b/src/main/java/carpet/script/api/Auxiliary.java index 5a913dd7..da35463d 100644 --- a/src/main/java/carpet/script/api/Auxiliary.java +++ b/src/main/java/carpet/script/api/Auxiliary.java @@ -683,6 +683,7 @@ public class Auxiliary { expression.addContextFunction("game_tick", -1, (c, t, lv) -> { CarpetContext cc = (CarpetContext)c; ServerCommandSource s = cc.s; + if (CarpetServer.scriptServer == null) return Value.NULL; if (!s.getServer().isOnThread()) throw new InternalExpressionException("Unable to run ticks from threads"); if (CarpetServer.scriptServer.tickDepth > 16) throw new InternalExpressionException("'game_tick' function caused other 'game_tick' functions to run. You should not allow that."); try @@ -710,9 +711,10 @@ public class Auxiliary { } finally { - CarpetServer.scriptServer.tickDepth --; + if (CarpetServer.scriptServer != null) + CarpetServer.scriptServer.tickDepth --; } - if(CarpetServer.scriptServer.stopAll) + if(CarpetServer.scriptServer != null && CarpetServer.scriptServer.stopAll) throw new ExitStatement(Value.NULL); return Value.TRUE; });