From 2a403c36c81600411c3f592e4b48dd0888716b6e Mon Sep 17 00:00:00 2001 From: gnembon Date: Wed, 25 Nov 2020 01:49:56 -0400 Subject: [PATCH] added deprecation warnings, fixes #568 --- .../java/carpet/script/CarpetEventServer.java | 14 ++++++++++- .../java/carpet/script/CarpetScriptHost.java | 11 +++++++++ src/main/java/carpet/script/Expression.java | 23 ++++++++++++++++++- src/main/java/carpet/script/ScriptHost.java | 16 ++++++++++++- .../java/carpet/script/api/Auxiliary.java | 3 +++ .../java/carpet/script/api/WorldAccess.java | 3 +++ .../resources/assets/carpet/scripts/camera.sc | 4 ++-- 7 files changed, 69 insertions(+), 5 deletions(-) diff --git a/src/main/java/carpet/script/CarpetEventServer.java b/src/main/java/carpet/script/CarpetEventServer.java index 9280acd0..e31dda16 100644 --- a/src/main/java/carpet/script/CarpetEventServer.java +++ b/src/main/java/carpet/script/CarpetEventServer.java @@ -268,6 +268,12 @@ public class CarpetEventServer }; public static final Event NETHER_TICK = new Event("tick_nether", 0, true) { + @Override + public boolean deprecated() + { + return true; + } + @Override public void onTick() { @@ -279,6 +285,11 @@ public class CarpetEventServer }; public static final Event ENDER_TICK = new Event("tick_ender", 0, true) { + @Override + public boolean deprecated() + { + return true; + } @Override public void onTick() { @@ -804,6 +815,7 @@ public class CarpetEventServer { return handler.callList.size() > 0; } + public boolean deprecated() {return false;} //stubs for calls just to ease calls in vanilla code so they don't need to deal with scarpet value types public void onTick() { } public void onChunkGenerated(ServerWorld world, Chunk chunk) { } @@ -900,10 +912,10 @@ public class CarpetEventServer private boolean canAddEvent(Event event, ScriptHost host) { + if (event.deprecated()) host.issueDeprecation(event.name+" event"); return !(event.globalOnly && (host.perUser || host.parent != null)); } - public boolean removeEventFromCommand(ServerCommandSource source, String event, String funName) { Event ev = Event.getEvent(event, CarpetServer.scriptServer); diff --git a/src/main/java/carpet/script/CarpetScriptHost.java b/src/main/java/carpet/script/CarpetScriptHost.java index b7f27fcb..5981a863 100644 --- a/src/main/java/carpet/script/CarpetScriptHost.java +++ b/src/main/java/carpet/script/CarpetScriptHost.java @@ -744,4 +744,15 @@ public class CarpetScriptHost extends ScriptHost { return scriptServer; } + + @Override + public boolean issueDeprecation(String feature) + { + if(super.issueDeprecation(feature)) + { + Messenger.m(responsibleSource, "rb '"+feature+"' is deprecated and soon will be removed. Please consult the docs for their replacement"); + return true; + } + return false; + } } diff --git a/src/main/java/carpet/script/Expression.java b/src/main/java/carpet/script/Expression.java index 3f68c110..2db94244 100644 --- a/src/main/java/carpet/script/Expression.java +++ b/src/main/java/carpet/script/Expression.java @@ -366,7 +366,28 @@ public class Expression public void alias(String copy, String original) { - functions.put(copy, functions.get(original)); + ILazyFunction originalFunction = functions.get(original); + functions.put(copy, new ILazyFunction() + { + @Override + public int getNumParams() + { + return originalFunction.getNumParams(); + } + + @Override + public boolean numParamsVaries() + { + return originalFunction.numParamsVaries(); + } + + @Override + public LazyValue lazyEval(Context c, Integer type, Expression expr, Tokenizer.Token token, List lazyParams) + { + c.host.issueDeprecation(copy+"(...)"); + return originalFunction.lazyEval(c, type, expr, token, lazyParams); + } + }); } diff --git a/src/main/java/carpet/script/ScriptHost.java b/src/main/java/carpet/script/ScriptHost.java index ac0f1803..c55861a6 100644 --- a/src/main/java/carpet/script/ScriptHost.java +++ b/src/main/java/carpet/script/ScriptHost.java @@ -8,9 +8,11 @@ import carpet.script.value.FunctionValue; import carpet.script.value.Value; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; -import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; @@ -34,6 +36,8 @@ public abstract class ScriptHost private final Map locks = new ConcurrentHashMap<>(); protected boolean inTermination = false; + private final Set deprecations = new HashSet<>(); + public Random getRandom(long aLong) { if (randomizers.size() > 1024) @@ -379,4 +383,14 @@ public abstract class ScriptHost { errorSnooper=null; } + + public static final Logger DEPRECATION_LOG = LogManager.getLogger("Scarpet Deprecation Warnings"); + + public boolean issueDeprecation(String feature) + { + if (deprecations.contains(feature)) return false; + deprecations.add(feature); + DEPRECATION_LOG.warn("'"+feature+"' is deprecated and soon will be removed. Please consult the docs for their replacement"); + return true; + } } diff --git a/src/main/java/carpet/script/api/Auxiliary.java b/src/main/java/carpet/script/api/Auxiliary.java index 167ae4f1..6e115aa3 100644 --- a/src/main/java/carpet/script/api/Auxiliary.java +++ b/src/main/java/carpet/script/api/Auxiliary.java @@ -577,6 +577,7 @@ public class Auxiliary { expression.addLazyFunction("seed", -1, (c, t, lv) -> { ServerCommandSource s = ((CarpetContext)c).s; + c.host.issueDeprecation("seed()"); Value ret = new NumericValue(s.getWorld().getSeed()); return (cc, tt) -> ret; }); @@ -785,6 +786,7 @@ public class Auxiliary { boolean shared = false; if (lv.size()>0) { + c.host.issueDeprecation("load_app_data(...) with arguments"); file = recognizeResource(lv.get(0).evalValue(c)); if (lv.size() > 1) { @@ -807,6 +809,7 @@ public class Auxiliary { boolean shared = false; if (lv.size()>1) { + c.host.issueDeprecation("store_app_data(...) with more than one argument"); file = recognizeResource(lv.get(1).evalValue(c)); if (lv.size() > 2) { diff --git a/src/main/java/carpet/script/api/WorldAccess.java b/src/main/java/carpet/script/api/WorldAccess.java index 3b285911..8c1417c5 100644 --- a/src/main/java/carpet/script/api/WorldAccess.java +++ b/src/main/java/carpet/script/api/WorldAccess.java @@ -543,6 +543,7 @@ public class WorldAccess { // Deprecated, use loaded_status as more indicative expression.addLazyFunction("loaded_ep", -1, (c, t, lv) -> { + c.host.issueDeprecation("loaded_ep(...)"); BlockPos pos = BlockArgument.findIn((CarpetContext)c, lv, 0).block.getPos(); Value retval = ((CarpetContext)c).s.getWorld().getChunkManager().shouldTickChunk(new ChunkPos(pos))?Value.TRUE : Value.FALSE; return (c_, t_) -> retval; @@ -965,6 +966,7 @@ public class WorldAccess { // Deprecated for block_state() expression.addLazyFunction("property", -1, (c, t, lv) -> { + c.host.issueDeprecation("property(...)"); BlockArgument locator = BlockArgument.findIn((CarpetContext) c, lv, 0); BlockState state = locator.block.getBlockState(); if (lv.size() <= locator.offset) @@ -981,6 +983,7 @@ public class WorldAccess { // Deprecated for block_state() expression.addLazyFunction("block_properties", -1, (c, t, lv) -> { + c.host.issueDeprecation("block_properties(...)"); BlockArgument locator = BlockArgument.findIn((CarpetContext) c, lv, 0); BlockState state = locator.block.getBlockState(); StateManager states = state.getBlock().getStateManager(); diff --git a/src/main/resources/assets/carpet/scripts/camera.sc b/src/main/resources/assets/carpet/scripts/camera.sc index 0ba530e6..7d146cdd 100644 --- a/src/main/resources/assets/carpet/scripts/camera.sc +++ b/src/main/resources/assets/carpet/scripts/camera.sc @@ -638,14 +638,14 @@ save_as(file) -> //otherwise mojang will interpret 0.0d as 0i and fail to insert put(path_nbt:'points', point_nbt, _i); ); - store_app_data(path_nbt, file); + write_file(file, 'nbt', path_nbt); 'stored path as '+file; ); // loads path under the local file that load(file) -> ( - path_nbt = load_app_data(file); + path_nbt = read_file(file, 'nbt'); if (!path_nbt, exit('No path to load: '+file)); new_points = map(get(path_nbt, 'points[]'), l(_:'pos[]', _:'duration', _:'type')); if (!new_points || first(new_points, length(_:0) != 5),