Skip to content

Commit

Permalink
Some refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
Kenny-Hui committed Nov 3, 2024
1 parent 6944bb9 commit 05b3506
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 33 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.lx862.jcm.mod.api.scripting;

import org.apache.logging.log4j.util.TriConsumer;
import vendor.com.lx862.jcm.org.mozilla.javascript.Context;
import vendor.com.lx862.jcm.org.mozilla.javascript.Scriptable;

import java.util.ArrayList;
import java.util.List;

/**
* This class contains the event to hook into scripting, i.e. add new property and objects
*/
public class ScriptingAPI {
private static final List<TriConsumer<String, Context, Scriptable>> onParseScriptCallback = new ArrayList<>();

public static void onParseScript(TriConsumer<String, Context, Scriptable> callback) {
onParseScriptCallback.add(callback);
}

public static void callOnParseScriptCallback(String contextName, Context context, Scriptable scriptable) {
for(TriConsumer<String, Context, Scriptable> entry : onParseScriptCallback) {
entry.accept(contextName, context, scriptable);
}
}
}
21 changes: 21 additions & 0 deletions fabric/src/main/java/com/lx862/jcm/mod/data/pids/PIDSManager.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
package com.lx862.jcm.mod.data.pids;

import com.google.gson.JsonObject;
import com.lx862.jcm.mod.api.scripting.ScriptingAPI;
import com.lx862.jcm.mod.data.pids.preset.JsonPIDSPreset;
import com.lx862.jcm.mod.data.pids.preset.PIDSPresetBase;
import com.lx862.jcm.mod.data.pids.preset.ScriptPIDSPreset;
import com.lx862.jcm.mod.data.pids.scripting.TextWrapper;
import com.lx862.jcm.mod.data.pids.scripting.TextureWrapper;
import com.lx862.jcm.mod.data.pids.scripting.util.MTRUtil;
import com.lx862.jcm.mod.data.pids.scripting.util.TextUtil;
import com.lx862.jcm.mod.util.JCMLogger;
import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap;
import org.mtr.mod.client.MinecraftClientData;
import vendor.com.lx862.jcm.org.mozilla.javascript.NativeJavaClass;

import java.util.List;
import java.util.stream.Collectors;
Expand Down Expand Up @@ -40,6 +47,20 @@ public static void loadJson(JsonObject customResourceJson) {
});
}

public static void registerScripting() {
ScriptingAPI.onParseScript((contextName, context, scriptable) -> {
// On behalf of MTR
scriptable.put("MTRUtil", scriptable, new NativeJavaClass(scriptable, MTRUtil.class));
scriptable.put("MTRClientData", scriptable, new NativeJavaClass(scriptable, MinecraftClientData.class));
scriptable.put("TextUtil", scriptable, new NativeJavaClass(scriptable, TextUtil.class));

if(contextName.equals("PIDS")) {
scriptable.put("Text", scriptable, new NativeJavaClass(scriptable, TextWrapper.class));
scriptable.put("Texture", scriptable, new NativeJavaClass(scriptable, TextureWrapper.class));
}
});
}

public static PIDSPresetBase getPreset(String id, PIDSPresetBase defaultPreset) {
return presetList.getOrDefault(id, defaultPreset);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.lx862.jcm.mod.scripting.util;
package com.lx862.jcm.mod.data.pids.scripting.util;

import org.mtr.core.data.Platform;
import org.mtr.mod.client.MinecraftClientData;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.lx862.jcm.mod.scripting.util;
package com.lx862.jcm.mod.data.pids.scripting.util;

/* From https://github.com/zbx1425/mtr-nte/blob/master/common/src/main/java/cn/zbx1425/mtrsteamloco/render/scripting/util/TextUtil.java*/

Expand Down Expand Up @@ -52,25 +52,4 @@ private static String getCjkMatching(String src, boolean isCJK) {
}
return result.toString().trim();
}

public static String formatDayTime(int base, int timeOfDay) {
long timeNow = timeOfDay + 6000;
long hours = timeNow / 1000;
long minutes = Math.round((timeNow - (hours * 1000)) / 16.8);
StringBuilder sb = new StringBuilder();
if(base == 24) {
sb.append(String.format("%02d", hours % 24));
} else {
sb.append(hours % 12);
}
sb.append(":");
sb.append(String.format("%02d", minutes % 60));

if(base == 12) {
sb.append(" ");
sb.append(((hours % 24 >= 12) ? "PM" : "AM"));
}
return sb.toString();
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.lx862.jcm.mod.registry;

import com.lx862.jcm.mod.Constants;
import com.lx862.jcm.mod.data.pids.PIDSManager;
import org.mtr.mapping.holder.RenderLayer;
import org.mtr.mapping.mapper.BlockEntityExtension;
import org.mtr.mapping.mapper.BlockEntityRenderer;
Expand Down Expand Up @@ -37,6 +38,7 @@ public static void register() {
Blocks.registerClient();
BlockEntityRenderers.registerClient();
Networking.registerClient();
PIDSManager.registerScripting();
REGISTRY_CLIENT.init();
}
}
12 changes: 2 additions & 10 deletions fabric/src/main/java/com/lx862/jcm/mod/scripting/ParsedScript.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
package com.lx862.jcm.mod.scripting;

import com.lx862.jcm.mod.data.pids.scripting.TextWrapper;
import com.lx862.jcm.mod.data.pids.scripting.TextureWrapper;
import com.lx862.jcm.mod.api.scripting.ScriptingAPI;
import com.lx862.jcm.mod.scripting.base.ScriptInstance;
import com.lx862.jcm.mod.scripting.util.*;
import com.lx862.jcm.mod.util.JCMLogger;
import vendor.com.lx862.jcm.org.mozilla.javascript.*;
import org.mtr.mapping.holder.Identifier;
import org.mtr.mapping.mapper.ResourceManagerHelper;
import org.mtr.mod.client.MinecraftClientData;

import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -37,18 +35,12 @@ public ParsedScript(String contextName, List<Identifier> scriptsLocation) throws
scope.put("StateTracker", scope, new NativeJavaClass(scope, StateTracker.class));
scope.put("CycleTracker", scope, new NativeJavaClass(scope, CycleTracker.class));
scope.put("RateLimit", scope, new NativeJavaClass(scope, RateLimit.class));
scope.put("TextUtil", scope, new NativeJavaClass(scope, TextUtil.class));
scope.put("MTRUtil", scope, new NativeJavaClass(scope, MTRUtil.class));

scope.put("Matrices", scope, new NativeJavaClass(scope, Matrices.class));

scope.put("MTRClientData", scope, new NativeJavaClass(scope, MinecraftClientData.class));

scope.put("MinecraftClient", scope, new NativeJavaClass(scope, MinecraftClientUtil.class));

scope.put("Text", scope, new NativeJavaClass(scope, TextWrapper.class));
scope.put("Texture", scope, new NativeJavaClass(scope, TextureWrapper.class));

ScriptingAPI.callOnParseScriptCallback(contextName, cx, scope);

cx.evaluateString(scope, "\"use strict\";", "", 1, null);

Expand Down

0 comments on commit 05b3506

Please # to comment.