aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorbartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com>2020-04-14 18:24:58 +0200
committerbartimaeusnek <33183715+bartimaeusnek@users.noreply.github.com>2020-04-14 18:24:58 +0200
commit9b05c6573762117ab1b60ef195e8be321b6e2bb8 (patch)
tree3f0ce41d73b1fd15a36db8cc8b60bbe47bc55926 /src/main
parent78ab6155eeafa0e7b4494de3967343921d15eb82 (diff)
downloadGT5-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.java3
-rw-r--r--src/main/java/gregtech/api/GregTech_API.java3
-rw-r--r--src/main/java/gregtech/api/threads/GT_Runnable_MachineBlockUpdate.java35
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;
}