aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorTec <daniel112092@gmail.com>2019-07-14 15:32:35 +0200
committerTec <daniel112092@gmail.com>2019-07-14 15:32:35 +0200
commit1bbbbcaea14966d113a3f0230228e3f5ccb9d053 (patch)
treea3fbe6729cec6d5cfe5d004729328326440570e4 /src/main/java
parentfc5f458c69519ae0d314873c68779a8c503fb176 (diff)
downloadGT5-Unofficial-1bbbbcaea14966d113a3f0230228e3f5ccb9d053.tar.gz
GT5-Unofficial-1bbbbcaea14966d113a3f0230228e3f5ccb9d053.tar.bz2
GT5-Unofficial-1bbbbcaea14966d113a3f0230228e3f5ccb9d053.zip
Implement some auto updates
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/github/technus/tectech/TecTech.java3
-rw-r--r--src/main/java/com/github/technus/tectech/chunkData/ChunkDataHandler.java43
-rw-r--r--src/main/java/com/github/technus/tectech/chunkData/ChunkMetaDataHandler.java7
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/anomaly/AnomalyHandler.java23
4 files changed, 65 insertions, 11 deletions
diff --git a/src/main/java/com/github/technus/tectech/TecTech.java b/src/main/java/com/github/technus/tectech/TecTech.java
index cfe8662a21..9d3273f10e 100644
--- a/src/main/java/com/github/technus/tectech/TecTech.java
+++ b/src/main/java/com/github/technus/tectech/TecTech.java
@@ -80,7 +80,6 @@ public class TecTech {
}
chunkDataHandler=new ChunkDataHandler();
- chunkDataHandler.registerChunkMetaDataHandler(anomalyHandler=new AnomalyHandler());
FMLCommonHandler.instance().bus().register(chunkDataHandler);
MinecraftForge.EVENT_BUS.register(chunkDataHandler);
@@ -188,6 +187,8 @@ public class TecTech {
@Mod.EventHandler
public void PostLoad(FMLPostInitializationEvent PostEvent) {
MainLoader.postLoad();
+
+ chunkDataHandler.registerChunkMetaDataHandler(anomalyHandler=new AnomalyHandler());
}
@Mod.EventHandler
diff --git a/src/main/java/com/github/technus/tectech/chunkData/ChunkDataHandler.java b/src/main/java/com/github/technus/tectech/chunkData/ChunkDataHandler.java
index 157a1a7057..c3818009a4 100644
--- a/src/main/java/com/github/technus/tectech/chunkData/ChunkDataHandler.java
+++ b/src/main/java/com/github/technus/tectech/chunkData/ChunkDataHandler.java
@@ -18,6 +18,7 @@ public class ChunkDataHandler {
private final HashMap<Integer,HashMap<ChunkCoordIntPair, NBTChunk>> dimensionWiseChunkData=new HashMap<>();
private final HashMap<String,HashMap<Integer,ChunkHashMap >> dimensionWiseMetaChunkData=new HashMap<>();
private final HashMap<String,ChunkMetaDataHandler> metaDataHandlerHashMap =new HashMap<>();
+ private final ArrayList<ChunkMetaDataHandler> clientSyncHandlers =new ArrayList<>();
private final ArrayList<ChunkMetaDataHandler> serverHandlers=new ArrayList<>();
private final ArrayList<ChunkMetaDataHandler> worldHandlers=new ArrayList<>();
private final ArrayList<ChunkMetaDataHandler> playerHandlers=new ArrayList<>();
@@ -25,8 +26,6 @@ public class ChunkDataHandler {
private final ArrayList<ChunkMetaDataHandler> clientHandlers=new ArrayList<>();
@SideOnly(Side.CLIENT)
private final ArrayList<ChunkMetaDataHandler> renderHandlers=new ArrayList<>();
- @SideOnly(Side.CLIENT)
- private final ArrayList<ChunkMetaDataHandler> clientSyncHandlers =new ArrayList<>();
@SubscribeEvent
public void onWorldLoad(WorldEvent.Load event){
@@ -143,6 +142,34 @@ public class ChunkDataHandler {
@SubscribeEvent
public void onWorldTickEvent(TickEvent.WorldTickEvent aEvent) {
+ if(aEvent.side.isServer()){
+ int dim=aEvent.world.provider.dimensionId;
+ clientSyncHandlers.forEach(chunkMetaDataHandler -> {
+ ChunkHashMap data=dimensionWiseMetaChunkData
+ .get(chunkMetaDataHandler.getTagName()).get(dim);
+ int cycle=chunkMetaDataHandler.pushPayloadSpreadPeriod();
+ int epoch=(int)(aEvent.world.getTotalWorldTime()%cycle);
+ ArrayList<ChunkCoordIntPair> work;
+ if(epoch==0){
+ int per=data.dirtyBoys.size()/cycle;
+ int mod=data.dirtyBoys.size()%cycle;
+ Iterator<ChunkCoordIntPair> iter=data.dirtyBoys.iterator();
+ for (int periodWork = 0; periodWork < cycle; periodWork++) {
+ work=data.workLoad.get(periodWork);
+ for (int i = 0; i < per; i++) {
+ work.add(iter.next());
+ }
+ if(periodWork<mod){
+ work.add(iter.next());
+ }
+ }
+ data.dirtyBoys.clear();
+ }
+ work=data.workLoad.get(epoch);
+ chunkMetaDataHandler.pushPayload(dim,work);
+ work.clear();
+ });
+ }
worldHandlers.forEach(chunkMetaDataHandler ->
chunkMetaDataHandler.tickWorld(
dimensionWiseMetaChunkData.get(chunkMetaDataHandler.getTagName()), aEvent));
@@ -179,6 +206,9 @@ public class ChunkDataHandler {
if(clazz.getMethod("tickPlayer", HashMap.class, TickEvent.PlayerTickEvent.class).getDeclaringClass()!=ChunkMetaDataHandler.class){
playerHandlers.add(handler);
}
+ if (clazz.getMethod("requestData", ChunkEvent.Load.class).getDeclaringClass() != ChunkMetaDataHandler.class) {
+ clientSyncHandlers.add(handler);
+ }
} catch (NoSuchMethodException e) {
throw new RuntimeException("Cannot register common event handlers!");
}
@@ -190,9 +220,6 @@ public class ChunkDataHandler {
if (clazz.getMethod("tickRender", HashMap.class, TickEvent.RenderTickEvent.class).getDeclaringClass() != ChunkMetaDataHandler.class) {
renderHandlers.add(handler);
}
- if (clazz.getMethod("requestData", ChunkEvent.Load.class).getDeclaringClass() != ChunkMetaDataHandler.class) {
- clientSyncHandlers.add(handler);
- }
} catch (NoSuchMethodException e) {
throw new RuntimeException("Cannot register client event handlers!");
}
@@ -222,6 +249,8 @@ public class ChunkDataHandler {
public static final class ChunkHashMap implements Map<ChunkCoordIntPair,NBTTagCompound>{
private final HashMap<ChunkCoordIntPair,NBTChunk> storage;
private final HashMap<ChunkCoordIntPair,NBTTagCompound> storageMeta=new HashMap<>(1024);
+ private final HashSet<ChunkCoordIntPair> dirtyBoys=new HashSet<>(1024);
+ private final ArrayList<ArrayList<ChunkCoordIntPair>> workLoad=new ArrayList<>();
private final String meta;
private ChunkHashMap(String meta, HashMap<ChunkCoordIntPair, NBTChunk> storage) {
@@ -229,6 +258,10 @@ public class ChunkDataHandler {
this.meta=meta;
}
+ public void markForTransmissionToClient(ChunkCoordIntPair chunk){
+ dirtyBoys.add(chunk);
+ }
+
private void putLoaded(ChunkCoordIntPair key, NBTTagCompound value) {
storageMeta.put(key, value);
}
diff --git a/src/main/java/com/github/technus/tectech/chunkData/ChunkMetaDataHandler.java b/src/main/java/com/github/technus/tectech/chunkData/ChunkMetaDataHandler.java
index 479f8ddb37..543fb080a5 100644
--- a/src/main/java/com/github/technus/tectech/chunkData/ChunkMetaDataHandler.java
+++ b/src/main/java/com/github/technus/tectech/chunkData/ChunkMetaDataHandler.java
@@ -7,6 +7,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.ChunkCoordIntPair;
import net.minecraftforge.event.world.ChunkEvent;
+import java.util.ArrayList;
import java.util.HashMap;
public interface ChunkMetaDataHandler {
@@ -16,6 +17,12 @@ public interface ChunkMetaDataHandler {
@SideOnly(Side.CLIENT)
default void requestData(ChunkEvent.Load aEvent){}
default void pushData(int world, ChunkCoordIntPair chunk){}
+ default void pushPayload(int world, ArrayList<ChunkCoordIntPair> chunk){
+ chunk.forEach(chunkCoordIntPair -> pushData(world,chunkCoordIntPair));
+ }
+ default int pushPayloadSpreadPeriod(){
+ return 20;
+ }
@SideOnly(Side.CLIENT)
default void tickRender(HashMap<Integer, ChunkDataHandler.ChunkHashMap> data, TickEvent.RenderTickEvent aEvent){}
@SideOnly(Side.CLIENT)
diff --git a/src/main/java/com/github/technus/tectech/mechanics/anomaly/AnomalyHandler.java b/src/main/java/com/github/technus/tectech/mechanics/anomaly/AnomalyHandler.java
index 69585e29b0..8ef33e7c3f 100644
--- a/src/main/java/com/github/technus/tectech/mechanics/anomaly/AnomalyHandler.java
+++ b/src/main/java/com/github/technus/tectech/mechanics/anomaly/AnomalyHandler.java
@@ -1,10 +1,11 @@
package com.github.technus.tectech.mechanics.anomaly;
import com.github.technus.tectech.TecTech;
-import com.github.technus.tectech.loader.network.ChunkDataMessage;
-import com.github.technus.tectech.loader.network.NetworkDispatcher;
import com.github.technus.tectech.chunkData.ChunkDataHandler;
import com.github.technus.tectech.chunkData.ChunkMetaDataHandler;
+import com.github.technus.tectech.loader.network.ChunkDataMessage;
+import com.github.technus.tectech.loader.network.NetworkDispatcher;
+import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.atom.dAtomDefinition;
import cpw.mods.fml.common.gameevent.TickEvent;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import net.minecraft.nbt.NBTTagCompound;
@@ -15,6 +16,8 @@ import net.minecraftforge.event.world.ChunkEvent;
import java.util.HashMap;
public class AnomalyHandler implements ChunkMetaDataHandler {
+ private static final double MIN_POLLUTION= dAtomDefinition.getSomethingHeavy().getMass()*10000D;
+
private static final String INTENSITY="intensity";
@Override
@@ -53,6 +56,11 @@ public class AnomalyHandler implements ChunkMetaDataHandler {
NetworkDispatcher.INSTANCE.sendToDimension(new ChunkDataMessage.ChunkDataData(world,chunk,this),world);
}
+ @Override
+ public int pushPayloadSpreadPeriod() {
+ return 100;
+ }
+
public void addAnomaly(IGregTechTileEntity iGregTechTileEntity, double amount) {
if(iGregTechTileEntity.isServerSide()) {
World w = iGregTechTileEntity.getWorld();
@@ -71,10 +79,15 @@ public class AnomalyHandler implements ChunkMetaDataHandler {
NBTTagCompound data=new NBTTagCompound();
data.setDouble(INTENSITY,amount);
TecTech.chunkDataHandler.putChunkData(this,world,chunk,data);
- //todo update client on threshold reach
+ if(amount>MIN_POLLUTION){
+
+ }
}else {
- old.setDouble(INTENSITY,old.getDouble(INTENSITY)+amount);
- //todo update client on threshold change
+ double newAmount=old.getDouble(INTENSITY)+amount;
+ old.setDouble(INTENSITY,newAmount);
+ if(newAmount>MIN_POLLUTION){
+
+ }
}
}
}