diff options
author | bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> | 2020-04-14 18:24:58 +0200 |
---|---|---|
committer | bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com> | 2020-04-14 18:24:58 +0200 |
commit | 9b05c6573762117ab1b60ef195e8be321b6e2bb8 (patch) | |
tree | 3f0ce41d73b1fd15a36db8cc8b60bbe47bc55926 /src/main | |
parent | 78ab6155eeafa0e7b4494de3967343921d15eb82 (diff) | |
download | GT5-Unofficial-9b05c6573762117ab1b60ef195e8be321b6e2bb8.tar.gz GT5-Unofficial-9b05c6573762117ab1b60ef195e8be321b6e2bb8.tar.bz2 GT5-Unofficial-9b05c6573762117ab1b60ef195e8be321b6e2bb8.zip |
crashfix
+ Added a new Thread every time a world is loaded
Signed-off-by: bartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com>
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/gregtech/GT_Mod.java | 3 | ||||
-rw-r--r-- | src/main/java/gregtech/api/GregTech_API.java | 3 | ||||
-rw-r--r-- | src/main/java/gregtech/api/threads/GT_Runnable_MachineBlockUpdate.java | 35 |
3 files changed, 23 insertions, 18 deletions
diff --git a/src/main/java/gregtech/GT_Mod.java b/src/main/java/gregtech/GT_Mod.java index f70dba6a18..9272ed20e2 100644 --- a/src/main/java/gregtech/GT_Mod.java +++ b/src/main/java/gregtech/GT_Mod.java @@ -1188,6 +1188,8 @@ public class GT_Mod implements IGT_Mod { } aEvent.registerServerCommand(new GT_Command()); + //Sets a new Machine Block Update Thread everytime a world is loaded + GT_Runnable_MachineBlockUpdate.initThread(); } public boolean isServerSide() { @@ -1313,6 +1315,7 @@ public class GT_Mod implements IGT_Mod { e.printStackTrace(GT_Log.err); } } + //Interrupt IDLE Threads to close down cleanly GT_Runnable_MachineBlockUpdate.getINSTANCETHREAD().interrupt(); } diff --git a/src/main/java/gregtech/api/GregTech_API.java b/src/main/java/gregtech/api/GregTech_API.java index 68d8d6aaa8..1cc19e7de4 100644 --- a/src/main/java/gregtech/api/GregTech_API.java +++ b/src/main/java/gregtech/api/GregTech_API.java @@ -389,11 +389,8 @@ public class GregTech_API { * @param aZ is the Z-Coord of the update causing Block */ public static boolean causeMachineUpdate(World aWorld, int aX, int aY, int aZ) { - Thread updateThread = GT_Runnable_MachineBlockUpdate.getINSTANCETHREAD(); if (!aWorld.isRemote) { GT_Runnable_MachineBlockUpdate.setMachineUpdateValues(aWorld, aX, aY, aZ); - if (!updateThread.isAlive()) - updateThread.start(); return true; } return false; diff --git a/src/main/java/gregtech/api/threads/GT_Runnable_MachineBlockUpdate.java b/src/main/java/gregtech/api/threads/GT_Runnable_MachineBlockUpdate.java index 5e7081e3c2..c811f3a614 100644 --- a/src/main/java/gregtech/api/threads/GT_Runnable_MachineBlockUpdate.java +++ b/src/main/java/gregtech/api/threads/GT_Runnable_MachineBlockUpdate.java @@ -27,7 +27,7 @@ public class GT_Runnable_MachineBlockUpdate implements Runnable { //Threading private static boolean allowedToRun; //makes if this thread is idle private static final Queue<Coordinates> toUpdate = new ConcurrentLinkedQueue<>(); //blocks added while this thread ran - private static final Thread INSTANCETHREAD = new Thread(new GT_Runnable_MachineBlockUpdate(), "Machine Block Updates"); //Instance of this thread + private static Thread INSTANCETHREAD; //Instance of this thread //This class should never be initiated outside of this class! private GT_Runnable_MachineBlockUpdate() { @@ -62,15 +62,15 @@ public class GT_Runnable_MachineBlockUpdate implements Runnable { * Never call this Method without checking if the thead is NOT allowed to run! */ private static void setMachineUpdateValuesUnsafe(World aWorld, int aX, int aY, int aZ){ - GT_Runnable_MachineBlockUpdate.setmZ(aZ); - GT_Runnable_MachineBlockUpdate.setmY(aY); - GT_Runnable_MachineBlockUpdate.setmX(aX); - GT_Runnable_MachineBlockUpdate.setmWorld(aWorld); - GT_Runnable_MachineBlockUpdate.resetVisited(); - GT_Runnable_MachineBlockUpdate.setAllowedToRun(true); + setmZ(aZ); + setmY(aY); + setmX(aX); + setmWorld(aWorld); + resetVisited(); + setAllowedToRun(true); synchronized (toUpdate) { - if (GT_Runnable_MachineBlockUpdate.INSTANCETHREAD.getState() == Thread.State.WAITING) - GT_Runnable_MachineBlockUpdate.toUpdate.notify(); + if (getINSTANCETHREAD().getState() == Thread.State.WAITING) + toUpdate.notify(); } } @@ -85,12 +85,12 @@ public class GT_Runnable_MachineBlockUpdate implements Runnable { } } - private static class Coordinates { + public static class Coordinates { - private final int mX; - private final int mY; - private final int mZ; - private final World mWorld; + protected final int mX; + protected final int mY; + protected final int mZ; + protected final World mWorld; public Coordinates(int mX, int mY, int mZ, World mWorld) { this.mX = mX; @@ -115,7 +115,12 @@ public class GT_Runnable_MachineBlockUpdate implements Runnable { GT_Runnable_MachineBlockUpdate.allowedToRun = unlocked; } - public static Thread getINSTANCETHREAD() { + public static synchronized void initThread() { + GT_Runnable_MachineBlockUpdate.INSTANCETHREAD = new Thread(new GT_Runnable_MachineBlockUpdate(), "GT Machine Block Updates"); + GT_Runnable_MachineBlockUpdate.INSTANCETHREAD.start(); + } + + public static synchronized Thread getINSTANCETHREAD() { return INSTANCETHREAD; } |