Fix race condition with worktops (#2216)

* Fix race condition with worktops

* Update ScriptLib.java

* Update ScriptLib.java

---------

Co-authored-by: Magix <27646710+KingRainbow44@users.noreply.github.com>
This commit is contained in:
Nazrin 2023-06-17 08:00:10 -07:00 committed by GitHub
parent 86036682d7
commit 9d94888da3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -152,18 +152,17 @@ public class ScriptLib {
logger.debug("[LUA] Call SetWorktopOptions with {}", printTable(table)); logger.debug("[LUA] Call SetWorktopOptions with {}", printTable(table));
var callParams = this.callParams.getIfExists(); var callParams = this.callParams.getIfExists();
var group = this.currentGroup.getIfExists(); var group = this.currentGroup.getIfExists();
if(callParams == null || group == null){ if (callParams == null || group == null) {
return 1; return 1;
} }
var configId = callParams.param1; var configId = callParams.param1;
var entity = getSceneScriptManager().getScene().getEntityByConfigId(configId); var entity = getSceneScriptManager().getScene().getEntityByConfigId(configId);
var worktopOptions = new int[table.length()];
int[] worktopOptions = new int[table.length()]; for (int i = 1; i<=table.length(); i++) {
for(int i = 1 ;i<=table.length() ;i++){
worktopOptions[i-1] = table.get(i).optint(-1); worktopOptions[i-1] = table.get(i).optint(-1);
} }
if(!(entity instanceof EntityGadget gadget)|| worktopOptions.length == 0){ if (!(entity instanceof EntityGadget gadget) || worktopOptions.length == 0) {
return 2; return 2;
} }
@ -172,9 +171,10 @@ public class ScriptLib {
} }
worktop.addWorktopOptions(worktopOptions); worktop.addWorktopOptions(worktopOptions);
// Done in order to synchronize with addEntities in Scene.class.
var scene = getSceneScriptManager().getScene(); synchronized (this.getSceneScriptManager().getScene()) {
scene.broadcastPacket(new PacketWorktopOptionNotify(gadget)); scene.broadcastPacket(new PacketWorktopOptionNotify(gadget));
}
return 0; return 0;
} }