From 0f367b0d1d46c93ea39ae191d37d2359a6dc2d4c Mon Sep 17 00:00:00 2001 From: Tec Date: Mon, 15 Jul 2019 17:37:19 +0200 Subject: refactor classes --- .../java/com/github/technus/tectech/TecTech.java | 8 +- .../tectech/chunkData/ChunkDataHandler.java | 363 --------------------- .../tectech/chunkData/IChunkMetaDataHandler.java | 34 -- .../technus/tectech/chunkData/WorldData.java | 52 --- .../technus/tectech/loader/ElementalLoader.java | 40 +++ .../technus/tectech/loader/EntityLoader.java | 18 + .../github/technus/tectech/loader/MainLoader.java | 3 - .../technus/tectech/loader/NetworkDispatcher.java | 30 ++ .../tectech/loader/entity/EntityLoader.java | 18 - .../tectech/loader/mechanics/ElementalLoader.java | 40 --- .../tectech/loader/network/ChunkDataMessage.java | 101 ------ .../tectech/loader/network/NetworkDispatcher.java | 25 -- .../loader/network/PipeActivityMessage.java | 134 -------- .../tectech/loader/network/PlayerDataMessage.java | 89 ----- .../tectech/loader/network/RotationMessage.java | 140 -------- .../technus/tectech/mechanics/ConvertFloat.java | 76 ----- .../technus/tectech/mechanics/ConvertInteger.java | 76 ----- .../tectech/mechanics/PlayerPersistence.java | 73 ----- .../tectech/mechanics/anomaly/AnomalyHandler.java | 10 +- .../tectech/mechanics/commands/ConvertFloat.java | 76 +++++ .../tectech/mechanics/commands/ConvertInteger.java | 76 +++++ .../tectech/mechanics/data/ChunkDataHandler.java | 363 +++++++++++++++++++++ .../tectech/mechanics/data/ChunkDataMessage.java | 101 ++++++ .../mechanics/data/IChunkMetaDataHandler.java | 34 ++ .../tectech/mechanics/data/PlayerDataMessage.java | 90 +++++ .../tectech/mechanics/data/PlayerPersistence.java | 72 ++++ .../technus/tectech/mechanics/data/WorldData.java | 52 +++ .../thing/metaTileEntity/RotationMessage.java | 139 ++++++++ .../base/GT_MetaTileEntity_MultiblockBase_EM.java | 4 +- .../pipe/GT_MetaTileEntity_Pipe_Data.java | 3 +- .../pipe/GT_MetaTileEntity_Pipe_EM.java | 3 +- .../pipe/GT_MetaTileEntity_Pipe_Energy.java | 3 +- .../metaTileEntity/pipe/PipeActivityMessage.java | 133 ++++++++ 33 files changed, 1238 insertions(+), 1241 deletions(-) delete mode 100644 src/main/java/com/github/technus/tectech/chunkData/ChunkDataHandler.java delete mode 100644 src/main/java/com/github/technus/tectech/chunkData/IChunkMetaDataHandler.java delete mode 100644 src/main/java/com/github/technus/tectech/chunkData/WorldData.java create mode 100644 src/main/java/com/github/technus/tectech/loader/ElementalLoader.java create mode 100644 src/main/java/com/github/technus/tectech/loader/EntityLoader.java create mode 100644 src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/entity/EntityLoader.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/mechanics/ElementalLoader.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/network/ChunkDataMessage.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/network/NetworkDispatcher.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/network/PipeActivityMessage.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/network/PlayerDataMessage.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/network/RotationMessage.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/ConvertFloat.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/ConvertInteger.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/PlayerPersistence.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/commands/ConvertFloat.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/commands/ConvertInteger.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/data/ChunkDataHandler.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/data/ChunkDataMessage.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/data/IChunkMetaDataHandler.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/data/PlayerDataMessage.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/data/PlayerPersistence.java create mode 100644 src/main/java/com/github/technus/tectech/mechanics/data/WorldData.java create mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/RotationMessage.java create mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/PipeActivityMessage.java diff --git a/src/main/java/com/github/technus/tectech/TecTech.java b/src/main/java/com/github/technus/tectech/TecTech.java index 49b989f794..493d3aa115 100644 --- a/src/main/java/com/github/technus/tectech/TecTech.java +++ b/src/main/java/com/github/technus/tectech/TecTech.java @@ -2,11 +2,11 @@ package com.github.technus.tectech; import com.github.technus.tectech.loader.MainLoader; import com.github.technus.tectech.loader.TecTechConfig; -import com.github.technus.tectech.mechanics.ConvertFloat; -import com.github.technus.tectech.mechanics.ConvertInteger; -import com.github.technus.tectech.mechanics.PlayerPersistence; +import com.github.technus.tectech.mechanics.commands.ConvertFloat; +import com.github.technus.tectech.mechanics.commands.ConvertInteger; import com.github.technus.tectech.mechanics.anomaly.AnomalyHandler; -import com.github.technus.tectech.chunkData.ChunkDataHandler; +import com.github.technus.tectech.mechanics.data.ChunkDataHandler; +import com.github.technus.tectech.mechanics.data.PlayerPersistence; import com.github.technus.tectech.mechanics.elementalMatter.core.commands.GiveEM; import com.github.technus.tectech.mechanics.elementalMatter.core.commands.ListEM; import com.github.technus.tectech.proxy.CommonProxy; diff --git a/src/main/java/com/github/technus/tectech/chunkData/ChunkDataHandler.java b/src/main/java/com/github/technus/tectech/chunkData/ChunkDataHandler.java deleted file mode 100644 index 108e762af0..0000000000 --- a/src/main/java/com/github/technus/tectech/chunkData/ChunkDataHandler.java +++ /dev/null @@ -1,363 +0,0 @@ -package com.github.technus.tectech.chunkData; - -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.gameevent.TickEvent; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraftforge.event.world.ChunkDataEvent; -import net.minecraftforge.event.world.ChunkEvent; -import net.minecraftforge.event.world.WorldEvent; - -import java.util.*; - -public class ChunkDataHandler { - private final String BASE_TAG_NAME ="TecTechData"; - private final HashMap> dimensionWiseChunkData=new HashMap<>(); - private final HashMap> dimensionWiseMetaChunkData=new HashMap<>(); - private final HashMap metaDataHandlerHashMap =new HashMap<>(); - private final ArrayList pushSyncHandlers =new ArrayList<>(); - private final ArrayList pullSyncHandlers =new ArrayList<>(); - private final ArrayList serverHandlers=new ArrayList<>(); - private final ArrayList worldHandlers=new ArrayList<>(); - private final ArrayList playerHandlers=new ArrayList<>(); - private final ArrayList clientHandlers=new ArrayList<>(); - private final ArrayList renderHandlers=new ArrayList<>(); - - @SubscribeEvent - public void onWorldLoad(WorldEvent.Load event){ - int dim=event.world.provider.dimensionId; - dimensionWiseChunkData.computeIfAbsent(dim, m->{ - HashMap map = new HashMap<>(); - for (Map.Entry meta : metaDataHandlerHashMap.entrySet()) { - dimensionWiseMetaChunkData.get(meta.getKey()).put(dim, new ChunkHashMap(meta.getValue(), map)); - } - return map; - }); - } - - @SubscribeEvent - public void handleChunkSaveEvent(ChunkDataEvent.Save event) { - HashMap dimensionData = dimensionWiseChunkData.get(event.world.provider.dimensionId); - NBTChunk chunkData = dimensionData != null ? dimensionData.get(event.getChunk().getChunkCoordIntPair()) : null; - if (chunkData == null) { - event.getData().removeTag(BASE_TAG_NAME); - } else { - chunkData.isLoaded = true; - event.getData().setTag(BASE_TAG_NAME, chunkData.data); - } - } - - @SubscribeEvent - public void handleChunkLoadEvent(ChunkDataEvent.Load event) { - NBTTagCompound loadedTag = event.getData().getCompoundTag(BASE_TAG_NAME); - if (loadedTag.hasNoTags()) { - return; - } - int dimId = event.world.provider.dimensionId; - HashMap dimensionMemory = dimensionWiseChunkData.get(dimId); - ChunkCoordIntPair chunkCoordIntPair = event.getChunk().getChunkCoordIntPair(); - Set loadedKeys = loadedTag.func_150296_c(); - NBTChunk chunkMemory = dimensionMemory.get(chunkCoordIntPair); - if (chunkMemory == null) { - chunkMemory = new NBTChunk(loadedTag, true); - dimensionMemory.put(chunkCoordIntPair, chunkMemory); - for (String s : loadedKeys) { - dimensionWiseMetaChunkData.get(s).get(dimId).putLoaded(chunkCoordIntPair, loadedTag.getCompoundTag(s)); - } - } else if (!chunkMemory.isLoaded) { - chunkMemory.isLoaded = true; - - Set tagsDuplicated = new HashSet(loadedKeys); - tagsDuplicated.retainAll(chunkMemory.data.func_150296_c()); - - if (tagsDuplicated.isEmpty()) { - for (String s : loadedKeys) { - NBTTagCompound tag = loadedTag.getCompoundTag(s); - chunkMemory.data.setTag(s, tag); - dimensionWiseMetaChunkData.get(s).get(dimId).putLoaded(chunkCoordIntPair, tag); - } - } else { - for (String s : loadedKeys) { - NBTTagCompound memory = chunkMemory.data.getCompoundTag(s); - if (tagsDuplicated.contains(s)) { - metaDataHandlerHashMap.get(s).mergeData(memory, loadedTag.getCompoundTag(s)); - } else { - chunkMemory.data.setTag(s, loadedTag.getCompoundTag(s)); - dimensionWiseMetaChunkData.get(s).get(dimId).putLoaded(chunkCoordIntPair, memory); - } - } - } - } - } - - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onLoadChunk(ChunkEvent.Load aEvent){ - pullSyncHandlers.forEach(chunkMetaDataHandler -> chunkMetaDataHandler.pullData(aEvent)); - } - - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onUnLoadChunk(ChunkEvent.Unload aEvent){ - pullSyncHandlers.forEach(chunkMetaDataHandler -> dimensionWiseMetaChunkData - .get(chunkMetaDataHandler.getTagName()) - .get(aEvent.world.provider.dimensionId) - .remove(aEvent.getChunk().getChunkCoordIntPair())); - } - - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onClientTickEvent(TickEvent.ClientTickEvent aEvent) { - clientHandlers.forEach(chunkMetaDataHandler -> - chunkMetaDataHandler.tickClient( - dimensionWiseMetaChunkData.get(chunkMetaDataHandler.getTagName()), aEvent)); - } - - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onRenderTickEvent(TickEvent.RenderTickEvent aEvent) { - renderHandlers.forEach(chunkMetaDataHandler -> - chunkMetaDataHandler.tickRender( - dimensionWiseMetaChunkData.get(chunkMetaDataHandler.getTagName()), aEvent)); - } - - @SubscribeEvent - public void onServerTickEvent(TickEvent.ServerTickEvent aEvent) { - serverHandlers.forEach(chunkMetaDataHandler -> - chunkMetaDataHandler.tickServer( - dimensionWiseMetaChunkData.get(chunkMetaDataHandler.getTagName()), aEvent)); - } - - @SubscribeEvent - public void onWorldTickEvent(TickEvent.WorldTickEvent aEvent) { - if(aEvent.side.isServer()) { - int dim = aEvent.world.provider.dimensionId; - pushSyncHandlers.forEach(chunkMetaDataHandler -> { - ChunkHashMap data = dimensionWiseMetaChunkData - .get(chunkMetaDataHandler.getTagName()).get(dim); - int cycle = chunkMetaDataHandler.pushPayloadSpreadPeriod(); - int epoch = (int) (aEvent.world.getTotalWorldTime() % cycle); - ArrayList work; - if (epoch == 0) { - int per = data.dirtyBoys.size() / cycle; - int mod = data.dirtyBoys.size() % cycle; - Iterator 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)); - } - } - - @SubscribeEvent - public void onPlayerTickEvent(TickEvent.PlayerTickEvent aEvent) { - playerHandlers.forEach(chunkMetaDataHandler -> - chunkMetaDataHandler.tickPlayer( - dimensionWiseMetaChunkData.get(chunkMetaDataHandler.getTagName()), aEvent)); - } - - - public void clearData() { - dimensionWiseChunkData.clear(); - dimensionWiseMetaChunkData.forEach((k,v)->v.clear()); - } - - public IChunkMetaDataHandler getChunkMetaDataHandler(String s){ - return metaDataHandlerHashMap.get(s); - } - - public void registerChunkMetaDataHandler(IChunkMetaDataHandler handler){ - metaDataHandlerHashMap.put(handler.getTagName(),handler); - dimensionWiseMetaChunkData.put(handler.getTagName(),new HashMap<>()); - Class clazz=handler.getClass(); - try { - if(clazz.getMethod("tickServer", HashMap.class, TickEvent.ServerTickEvent.class).getDeclaringClass()!= IChunkMetaDataHandler.class){ - serverHandlers.add(handler); - } - if(clazz.getMethod("tickPlayer", HashMap.class, TickEvent.PlayerTickEvent.class).getDeclaringClass()!= IChunkMetaDataHandler.class){ - playerHandlers.add(handler); - } - if (clazz.getMethod("pushData", int.class, ChunkCoordIntPair.class).getDeclaringClass()!=IChunkMetaDataHandler.class) { - pushSyncHandlers.add(handler); - } - if(clazz.getMethod("tickWorld", HashMap.class, TickEvent.WorldTickEvent.class).getDeclaringClass()!= IChunkMetaDataHandler.class){ - worldHandlers.add(handler); - } - } catch (NoSuchMethodException e) { - throw new RuntimeException("Cannot register common event handlers!",e); - } - if(FMLCommonHandler.instance().getEffectiveSide().isClient()) { - try { - if (clazz.getMethod("pullData", ChunkEvent.Load.class).getDeclaringClass() != IChunkMetaDataHandler.class) { - pullSyncHandlers.add(handler); - } - if (clazz.getMethod("tickClient", HashMap.class, TickEvent.ClientTickEvent.class).getDeclaringClass() != IChunkMetaDataHandler.class) { - clientHandlers.add(handler); - } - if (clazz.getMethod("tickRender", HashMap.class, TickEvent.RenderTickEvent.class).getDeclaringClass() != IChunkMetaDataHandler.class) { - renderHandlers.add(handler); - } - } catch (NoSuchMethodException e) { - throw new RuntimeException("Cannot register client event handlers!",e); - } - } - } - - public NBTTagCompound removeChunkData(IChunkMetaDataHandler handler, int world, ChunkCoordIntPair chunk){ - return dimensionWiseMetaChunkData.get(handler.getTagName()).get(world).remove(chunk); - } - - public NBTTagCompound getChunkData(IChunkMetaDataHandler handler, int world, ChunkCoordIntPair chunk){ - return dimensionWiseMetaChunkData.get(handler.getTagName()).get(world).get(chunk); - } - - public NBTTagCompound putChunkData(IChunkMetaDataHandler handler, int world, ChunkCoordIntPair chunk, NBTTagCompound data){ - return dimensionWiseMetaChunkData.get(handler.getTagName()).get(world).put(chunk,data); - } - - public NBTTagCompound createIfAbsentChunkData(IChunkMetaDataHandler handler, int world, ChunkCoordIntPair chunk){ - return dimensionWiseMetaChunkData.get(handler.getTagName()).get(world) - .computeIfAbsent(chunk,chunkCoordIntPair -> handler.createData()); - } - - public HashMap getChunkData(IChunkMetaDataHandler chunkMetaDataHandler){ - return dimensionWiseMetaChunkData.get(chunkMetaDataHandler.getTagName()); - } - - public ChunkHashMap getChunkData(IChunkMetaDataHandler chunkMetaDataHandler, int world){ - return dimensionWiseMetaChunkData.get(chunkMetaDataHandler.getTagName()).get(world); - } - - public static final class ChunkHashMap implements Map{ - private final HashMap storage; - private final HashMap storageMeta=new HashMap<>(1024); - private final HashSet dirtyBoys=new HashSet<>(1024); - private final ArrayList> workLoad=new ArrayList<>(); - private final String meta; - - private ChunkHashMap(IChunkMetaDataHandler meta, HashMap storage) { - this.storage =storage; - this.meta=meta.getTagName(); - for (int i = 0; i < meta.pushPayloadSpreadPeriod(); i++) { - workLoad.add(new ArrayList<>(128)); - } - } - - public void markForTransmissionToClient(ChunkCoordIntPair chunk){ - dirtyBoys.add(chunk); - } - - private void putLoaded(ChunkCoordIntPair key, NBTTagCompound value) { - storageMeta.put(key, value); - } - - @Override - public NBTTagCompound remove(Object key) { - NBTTagCompound compound=storageMeta.remove(key); - if(compound!=null) { - NBTChunk chunk = storage.get(key); - chunk.data.removeTag(meta); - if(chunk.data.hasNoTags()){ - storage.remove(key); - } - } - return compound; - } - - @Override - public NBTTagCompound put(ChunkCoordIntPair key, NBTTagCompound value) { - if(value==null){ - return remove(key); - } - NBTChunk chunk = storage.get(key); - if(chunk==null){ - NBTTagCompound base=new NBTTagCompound(); - base.setTag(meta,value); - storage.put(key,new NBTChunk(base,false)); - }else { - chunk.data.setTag(meta,value); - } - return storageMeta.put(key, value); - } - - @Override - public int size() { - return storageMeta.size(); - } - - @Override - public boolean isEmpty() { - return storageMeta.isEmpty(); - } - - @Override - public NBTTagCompound get(Object key) { - return storageMeta.get(key); - } - - @Override - public void clear() { - storageMeta.entrySet().forEach(this::remove); - } - - @Override - public void putAll(Map m) { - m.forEach(this::put); - } - - @Override - public boolean containsKey(Object key) { - return storageMeta.containsKey(key); - } - - @Override - public boolean containsValue(Object value) { - return storageMeta.containsValue(value); - } - - @Override - public Set keySet() { - return storageMeta.keySet(); - } - - @Override - public Collection values() { - return storageMeta.values(); - } - - @Override - public Set> entrySet() { - return storageMeta.entrySet(); - } - } - - private static final class NBTChunk { - private final NBTTagCompound data; - private boolean isLoaded; - - private NBTChunk(NBTTagCompound data, boolean isLoaded) { - if(data==null){ - data=new NBTTagCompound(); - } - this.data = data; - this.isLoaded = isLoaded; - } - } -} diff --git a/src/main/java/com/github/technus/tectech/chunkData/IChunkMetaDataHandler.java b/src/main/java/com/github/technus/tectech/chunkData/IChunkMetaDataHandler.java deleted file mode 100644 index b5c79a4628..0000000000 --- a/src/main/java/com/github/technus/tectech/chunkData/IChunkMetaDataHandler.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.github.technus.tectech.chunkData; - -import cpw.mods.fml.common.gameevent.TickEvent; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -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 IChunkMetaDataHandler { - String getTagName(); - void mergeData(NBTTagCompound target, NBTTagCompound loadedData); - NBTTagCompound createData(); - @SideOnly(Side.CLIENT) - default void pullData(ChunkEvent.Load aEvent){} - default void pushData(int world, ChunkCoordIntPair chunk){} - default void pushPayload(int world, ArrayList chunk){ - chunk.forEach(chunkCoordIntPair -> pushData(world,chunkCoordIntPair)); - } - default int pushPayloadSpreadPeriod(){ - return 20; - } - @SideOnly(Side.CLIENT) - default void tickRender(HashMap data, TickEvent.RenderTickEvent aEvent){} - @SideOnly(Side.CLIENT) - default void tickClient(HashMap data, TickEvent.ClientTickEvent aEvent){} - default void tickServer(HashMap data, TickEvent.ServerTickEvent event){} - default void tickWorld(HashMap data, TickEvent.WorldTickEvent aEvent){} - default void tickPlayer(HashMap data, TickEvent.PlayerTickEvent aEvent){} -} - diff --git a/src/main/java/com/github/technus/tectech/chunkData/WorldData.java b/src/main/java/com/github/technus/tectech/chunkData/WorldData.java deleted file mode 100644 index 42641a015e..0000000000 --- a/src/main/java/com/github/technus/tectech/chunkData/WorldData.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.github.technus.tectech.chunkData; - -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; - -import java.util.Objects; - -public final class WorldData { - private final World world; - private final Chunk chunk; - private final ChunkCoordIntPair coordIntPair; - - public WorldData(World world, Chunk data) { - this.world = world; - this.chunk = data; - coordIntPair=data.getChunkCoordIntPair(); - } - - public WorldData(World world, ChunkCoordIntPair data) { - this.world = world; - this.coordIntPair = data; - chunk= world.getChunkFromChunkCoords(data.chunkXPos,data.chunkZPos); - } - - public World getWorld() { - return world; - } - - public Chunk getChunk() { - return chunk; - } - - public ChunkCoordIntPair getCoordIntPair() { - return coordIntPair; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - WorldData worldData = (WorldData) o; - return world.provider.dimensionId==worldData.world.provider.dimensionId && - coordIntPair.chunkXPos==worldData.coordIntPair.chunkXPos && - coordIntPair.chunkZPos==worldData.coordIntPair.chunkXPos; - } - - @Override - public int hashCode() { - return Objects.hash(world.provider.dimensionId, coordIntPair); - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/ElementalLoader.java b/src/main/java/com/github/technus/tectech/loader/ElementalLoader.java new file mode 100644 index 0000000000..130106a76b --- /dev/null +++ b/src/main/java/com/github/technus/tectech/loader/ElementalLoader.java @@ -0,0 +1,40 @@ +package com.github.technus.tectech.loader; + +import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.dComplexAspectDefinition; +import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.ePrimalAspectDefinition; +import com.github.technus.tectech.mechanics.elementalMatter.core.templates.cElementalPrimitive; +import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.atom.dAtomDefinition; +import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.atom.iaeaNuclide; +import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.hadron.dHadronDefinition; +import com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.*; + +/** + * Created by danie_000 on 16.11.2016. + */ +public class ElementalLoader implements Runnable { + @Override + public void run() { + // =================================================================================================== + // Definition init + // =================================================================================================== + + cElementalPrimitive.run(); + + cPrimitiveDefinition.run(); + + eQuarkDefinition.run(); + eLeptonDefinition.run(); + eNeutrinoDefinition.run(); + eBosonDefinition.run(); + + dHadronDefinition.run(); + + iaeaNuclide.run(); + + dAtomDefinition.run(); + + ePrimalAspectDefinition.run(); + + dComplexAspectDefinition.run(); + } +} diff --git a/src/main/java/com/github/technus/tectech/loader/EntityLoader.java b/src/main/java/com/github/technus/tectech/loader/EntityLoader.java new file mode 100644 index 0000000000..b188989ba3 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/loader/EntityLoader.java @@ -0,0 +1,18 @@ +package com.github.technus.tectech.loader; + +import com.github.technus.tectech.TecTech; +import com.github.technus.tectech.compatibility.openmodularturrets.entity.projectiles.projectileEM; +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.registry.EntityRegistry; + +/** + * Created by Tec on 30.07.2017. + */ +public class EntityLoader implements Runnable { + @Override + public void run() { + if(Loader.isModLoaded("openmodularturrets")) { + EntityRegistry.registerModEntity(projectileEM.class, "projectileEM", 0, TecTech.instance, 16, 5, true); + } + } +} diff --git a/src/main/java/com/github/technus/tectech/loader/MainLoader.java b/src/main/java/com/github/technus/tectech/loader/MainLoader.java index 2272733d5a..b45e8bd532 100644 --- a/src/main/java/com/github/technus/tectech/loader/MainLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/MainLoader.java @@ -6,11 +6,8 @@ import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.defin import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.AspectDefinitionCompatEnabled; import com.github.technus.tectech.compatibility.thaumcraft.thing.metaTileEntity.multi.EssentiaCompat; import com.github.technus.tectech.compatibility.thaumcraft.thing.metaTileEntity.multi.EssentiaCompatEnabled; -import com.github.technus.tectech.loader.entity.EntityLoader; import com.github.technus.tectech.loader.gui.CreativeTabTecTech; import com.github.technus.tectech.loader.gui.ModGuiHandler; -import com.github.technus.tectech.loader.mechanics.ElementalLoader; -import com.github.technus.tectech.loader.network.NetworkDispatcher; import com.github.technus.tectech.loader.recipe.RecipeLoader; import com.github.technus.tectech.loader.thing.ComponentLoader; import com.github.technus.tectech.loader.thing.MachineLoader; diff --git a/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java b/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java new file mode 100644 index 0000000000..0f20d31f4d --- /dev/null +++ b/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java @@ -0,0 +1,30 @@ +package com.github.technus.tectech.loader; + +import com.github.technus.tectech.thing.metaTileEntity.pipe.PipeActivityMessage; +import com.github.technus.tectech.thing.metaTileEntity.RotationMessage; +import com.github.technus.tectech.mechanics.data.ChunkDataMessage; +import com.github.technus.tectech.mechanics.data.PlayerDataMessage; + +import static com.github.technus.tectech.Reference.MODID; + +public class NetworkDispatcher extends eu.usrv.yamcore.network.PacketDispatcher { + public static NetworkDispatcher INSTANCE; + + public NetworkDispatcher() { + super(MODID); + INSTANCE = this; + registerPackets(); + } + + @Override + public void registerPackets() { + registerMessage(PipeActivityMessage.ServerHandler.class, PipeActivityMessage.PipeActivityQuery.class); + registerMessage(PipeActivityMessage.ClientHandler.class, PipeActivityMessage.PipeActivityData.class); + registerMessage(RotationMessage.ServerHandler.class, RotationMessage.RotationQuery.class); + registerMessage(RotationMessage.ClientHandler.class, RotationMessage.RotationData.class); + registerMessage(ChunkDataMessage.ServerHandler.class, ChunkDataMessage.ChunkDataQuery.class); + registerMessage(ChunkDataMessage.ClientHandler.class, ChunkDataMessage.ChunkDataData.class); + registerMessage(PlayerDataMessage.ServerHandler.class, PlayerDataMessage.PlayerDataQuery.class); + registerMessage(PlayerDataMessage.ClientHandler.class, PlayerDataMessage.PlayerDataData.class); + } +} diff --git a/src/main/java/com/github/technus/tectech/loader/entity/EntityLoader.java b/src/main/java/com/github/technus/tectech/loader/entity/EntityLoader.java deleted file mode 100644 index 209d7ccd39..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/entity/EntityLoader.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.github.technus.tectech.loader.entity; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.compatibility.openmodularturrets.entity.projectiles.projectileEM; -import cpw.mods.fml.common.Loader; -import cpw.mods.fml.common.registry.EntityRegistry; - -/** - * Created by Tec on 30.07.2017. - */ -public class EntityLoader implements Runnable { - @Override - public void run() { - if(Loader.isModLoaded("openmodularturrets")) { - EntityRegistry.registerModEntity(projectileEM.class, "projectileEM", 0, TecTech.instance, 16, 5, true); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/mechanics/ElementalLoader.java b/src/main/java/com/github/technus/tectech/loader/mechanics/ElementalLoader.java deleted file mode 100644 index a2ea8c60de..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/mechanics/ElementalLoader.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.github.technus.tectech.loader.mechanics; - -import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.dComplexAspectDefinition; -import com.github.technus.tectech.compatibility.thaumcraft.elementalMatter.definitions.ePrimalAspectDefinition; -import com.github.technus.tectech.mechanics.elementalMatter.core.templates.cElementalPrimitive; -import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.atom.dAtomDefinition; -import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.atom.iaeaNuclide; -import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.hadron.dHadronDefinition; -import com.github.technus.tectech.mechanics.elementalMatter.definitions.primitive.*; - -/** - * Created by danie_000 on 16.11.2016. - */ -public class ElementalLoader implements Runnable { - @Override - public void run() { - // =================================================================================================== - // Definition init - // =================================================================================================== - - cElementalPrimitive.run(); - - cPrimitiveDefinition.run(); - - eQuarkDefinition.run(); - eLeptonDefinition.run(); - eNeutrinoDefinition.run(); - eBosonDefinition.run(); - - dHadronDefinition.run(); - - iaeaNuclide.run(); - - dAtomDefinition.run(); - - ePrimalAspectDefinition.run(); - - dComplexAspectDefinition.run(); - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/network/ChunkDataMessage.java b/src/main/java/com/github/technus/tectech/loader/network/ChunkDataMessage.java deleted file mode 100644 index 15c936191a..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/network/ChunkDataMessage.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.github.technus.tectech.loader.network; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.Util; -import com.github.technus.tectech.chunkData.IChunkMetaDataHandler; -import cpw.mods.fml.common.network.ByteBufUtils; -import cpw.mods.fml.common.network.simpleimpl.IMessage; -import cpw.mods.fml.common.network.simpleimpl.MessageContext; -import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; -import eu.usrv.yamcore.network.server.AbstractServerMessageHandler; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraftforge.event.world.ChunkEvent; - -public class ChunkDataMessage implements IMessage { - int worldId; - ChunkCoordIntPair chunk; - NBTTagCompound data; - IChunkMetaDataHandler handler; - - public ChunkDataMessage(){} - - @Override - public void fromBytes(ByteBuf pBuffer) { - NBTTagCompound tag = ByteBufUtils.readTag(pBuffer); - worldId = tag.getInteger("wId"); - chunk=new ChunkCoordIntPair( - tag.getInteger("posx"), - tag.getInteger("posz")); - handler = TecTech.chunkDataHandler.getChunkMetaDataHandler( - tag.getString("handle")); - if(tag.hasKey("data")){ - data=tag.getCompoundTag("data"); - } - } - - @Override - public void toBytes(ByteBuf pBuffer) { - NBTTagCompound tag = new NBTTagCompound(); - tag.setInteger("wId",worldId); - tag.setInteger("posx",chunk.chunkXPos); - tag.setInteger("posz",chunk.chunkZPos); - tag.setString("handle",handler.getTagName()); - if(data!=null){ - tag.setTag("data",data); - } - ByteBufUtils.writeTag(pBuffer, tag); - } - - public static class ChunkDataQuery extends ChunkDataMessage { - public ChunkDataQuery() { - } - public ChunkDataQuery(ChunkEvent.Load aEvent, IChunkMetaDataHandler handler) { - worldId=aEvent.world.provider.dimensionId; - chunk=aEvent.getChunk().getChunkCoordIntPair(); - this.handler=handler; - } - } - - public static class ChunkDataData extends ChunkDataMessage { - public ChunkDataData() { - } - - public ChunkDataData(int worldId, ChunkCoordIntPair chunk, IChunkMetaDataHandler handler){ - this.worldId=worldId; - this.chunk=chunk; - this.handler=handler; - this.data=TecTech.chunkDataHandler.getChunkData(handler,worldId,chunk); - } - - public ChunkDataData(ChunkDataQuery query){ - worldId=query.worldId; - chunk=query.chunk; - handler=query.handler; - data=TecTech.chunkDataHandler.getChunkData(handler,worldId,chunk); - } - } - - public static class ClientHandler extends AbstractClientMessageHandler { - @Override - public IMessage handleClientMessage(EntityPlayer pPlayer, ChunkDataData pMessage, MessageContext pCtx) { - if(Util.checkChunkExist(pPlayer.worldObj,pMessage.chunk)){ - TecTech.chunkDataHandler.putChunkData(pMessage.handler, pMessage.worldId,pMessage.chunk, pMessage.data); - } - return null; - } - } - - public static class ServerHandler extends AbstractServerMessageHandler { - @Override - public IMessage handleServerMessage(EntityPlayer pPlayer, ChunkDataQuery pMessage, MessageContext pCtx) { - if(pPlayer instanceof EntityPlayerMP){ - NetworkDispatcher.INSTANCE.sendTo(new ChunkDataData(pMessage),(EntityPlayerMP) pPlayer); - } - return null; - } - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/network/NetworkDispatcher.java b/src/main/java/com/github/technus/tectech/loader/network/NetworkDispatcher.java deleted file mode 100644 index e424edd385..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/network/NetworkDispatcher.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.github.technus.tectech.loader.network; - -import static com.github.technus.tectech.Reference.MODID; - -public class NetworkDispatcher extends eu.usrv.yamcore.network.PacketDispatcher { - public static NetworkDispatcher INSTANCE; - - public NetworkDispatcher() { - super(MODID); - INSTANCE = this; - registerPackets(); - } - - @Override - public void registerPackets() { - registerMessage(PipeActivityMessage.ServerHandler.class, PipeActivityMessage.PipeActivityQuery.class); - registerMessage(PipeActivityMessage.ClientHandler.class, PipeActivityMessage.PipeActivityData.class); - registerMessage(RotationMessage.ServerHandler.class, RotationMessage.RotationQuery.class); - registerMessage(RotationMessage.ClientHandler.class, RotationMessage.RotationData.class); - registerMessage(ChunkDataMessage.ServerHandler.class, ChunkDataMessage.ChunkDataQuery.class); - registerMessage(ChunkDataMessage.ClientHandler.class, ChunkDataMessage.ChunkDataData.class); - registerMessage(PlayerDataMessage.ServerHandler.class, PlayerDataMessage.PlayerDataQuery.class); - registerMessage(PlayerDataMessage.ClientHandler.class, PlayerDataMessage.PlayerDataData.class); - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/network/PipeActivityMessage.java b/src/main/java/com/github/technus/tectech/loader/network/PipeActivityMessage.java deleted file mode 100644 index 0323f19428..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/network/PipeActivityMessage.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.github.technus.tectech.loader.network; - -import com.github.technus.tectech.thing.metaTileEntity.pipe.IActivePipe; -import cpw.mods.fml.common.network.ByteBufUtils; -import cpw.mods.fml.common.network.simpleimpl.IMessage; -import cpw.mods.fml.common.network.simpleimpl.MessageContext; -import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; -import eu.usrv.yamcore.network.server.AbstractServerMessageHandler; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; - -public class PipeActivityMessage implements IMessage { - int mPosX; - int mPosY; - int mPosZ; - int mPosD; - int mActive; - - public PipeActivityMessage() { - } - - private PipeActivityMessage(IActivePipe metaTile) { - IGregTechTileEntity base=metaTile.getBaseMetaTileEntity(); - mPosX=base.getXCoord(); - mPosY=base.getYCoord(); - mPosZ=base.getZCoord(); - mPosD=base.getWorld().provider.dimensionId; - mActive=metaTile.getActive()?1:0; - } - - private PipeActivityMessage(World world, int x, int y, int z, boolean active) { - mPosX=x; - mPosY=y; - mPosZ=z; - mPosD=world.provider.dimensionId; - mActive=active?1:0; - } - - @Override - public void fromBytes(ByteBuf pBuffer) { - NBTTagCompound tTag = ByteBufUtils.readTag(pBuffer); - mPosX = tTag.getInteger("posx"); - mPosY = tTag.getInteger("posy"); - mPosZ = tTag.getInteger("posz"); - mPosD = tTag.getInteger("posd"); - mActive = tTag.getInteger("active"); - } - - @Override - public void toBytes(ByteBuf pBuffer) { - NBTTagCompound tFXTag = new NBTTagCompound(); - tFXTag.setInteger("posx", mPosX); - tFXTag.setInteger("posy", mPosY); - tFXTag.setInteger("posz", mPosZ); - tFXTag.setInteger("posd", mPosD); - tFXTag.setInteger("active", mActive); - - ByteBufUtils.writeTag(pBuffer, tFXTag); - } - - public static class PipeActivityQuery extends PipeActivityMessage { - public PipeActivityQuery() { - } - - public PipeActivityQuery(IActivePipe metaTile) { - super(metaTile); - } - - public PipeActivityQuery(World world, int x,int y,int z, boolean active) { - super(world,x,y,z,active); - } - } - - public static class PipeActivityData extends PipeActivityMessage { - public PipeActivityData() { - } - - private PipeActivityData(PipeActivityQuery query){ - mPosX=query.mPosX; - mPosY=query.mPosY; - mPosZ=query.mPosZ; - mPosD=query.mPosD; - mActive=query.mActive; - } - - public PipeActivityData(IActivePipe metaTile) { - super(metaTile); - } - - public PipeActivityData(World world, int x,int y,int z, boolean active) { - super(world,x,y,z,active); - } - } - - public static class ClientHandler extends AbstractClientMessageHandler { - @Override - public IMessage handleClientMessage(EntityPlayer pPlayer, PipeActivityData pMessage, MessageContext pCtx) { - if(pPlayer.worldObj.provider.dimensionId==pMessage.mPosD){ - TileEntity te=pPlayer.worldObj.getTileEntity(pMessage.mPosX,pMessage.mPosY,pMessage.mPosZ); - if(te instanceof IGregTechTileEntity){ - IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); - if(meta instanceof IActivePipe){ - ((IActivePipe) meta).setActive((byte)pMessage.mActive==1); - } - } - } - return null; - } - } - - public static class ServerHandler extends AbstractServerMessageHandler { - @Override - public IMessage handleServerMessage(EntityPlayer pPlayer, PipeActivityQuery pMessage, MessageContext pCtx) { - World world= DimensionManager.getWorld(pMessage.mPosD); - if(world!=null) { - TileEntity te = world.getTileEntity(pMessage.mPosX, pMessage.mPosY, pMessage.mPosZ); - if (te instanceof IGregTechTileEntity) { - IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); - if (meta instanceof IActivePipe) { - pMessage.mActive=((IActivePipe) meta).getActive()?1:0; - return new PipeActivityData(pMessage); - } - } - } - return null; - } - } -} \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/loader/network/PlayerDataMessage.java b/src/main/java/com/github/technus/tectech/loader/network/PlayerDataMessage.java deleted file mode 100644 index 48a21423a9..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/network/PlayerDataMessage.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.github.technus.tectech.loader.network; - -import com.github.technus.tectech.TecTech; -import cpw.mods.fml.common.network.ByteBufUtils; -import cpw.mods.fml.common.network.simpleimpl.IMessage; -import cpw.mods.fml.common.network.simpleimpl.MessageContext; -import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; -import eu.usrv.yamcore.network.server.AbstractServerMessageHandler; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.nbt.NBTTagCompound; - -import java.util.UUID; - -import static java.nio.charset.Charset.forName; - -public class PlayerDataMessage implements IMessage { - NBTTagCompound data; - UUID uuid1,uuid2; - - public PlayerDataMessage(){} - - @Override - public void fromBytes(ByteBuf pBuffer) { - NBTTagCompound tag = ByteBufUtils.readTag(pBuffer); - uuid1=UUID.fromString(tag.getString("id1")); - uuid2=UUID.fromString(tag.getString("id2")); - if(tag.hasKey("data")){ - data=tag.getCompoundTag("data"); - } - } - - @Override - public void toBytes(ByteBuf pBuffer) { - NBTTagCompound tag = new NBTTagCompound(); - tag.setString("id1",uuid1.toString()); - tag.setString("id2",uuid2.toString()); - if(data!=null){ - tag.setTag("data",data); - } - ByteBufUtils.writeTag(pBuffer, tag); - } - - public static class PlayerDataQuery extends PlayerDataMessage { - public PlayerDataQuery() { - } - - public PlayerDataQuery(EntityPlayer player) { - uuid1=player.getUniqueID(); - uuid2=UUID.nameUUIDFromBytes(player.getCommandSenderName().getBytes(forName("UTF-8"))); - } - } - - public static class PlayerDataData extends PlayerDataMessage { - public PlayerDataData() { - } - - public PlayerDataData(EntityPlayer player){ - uuid1=player.getUniqueID(); - uuid2=UUID.nameUUIDFromBytes(player.getCommandSenderName().getBytes(forName("UTF-8"))); - data=TecTech.playerPersistence.getDataOrSetToNewTag(player); - } - - public PlayerDataData(PlayerDataQuery query){ - uuid1=query.uuid1; - uuid2=query.uuid2; - data= TecTech.playerPersistence.getDataOrSetToNewTag(uuid1,uuid2); - } - } - - public static class ClientHandler extends AbstractClientMessageHandler { - @Override - public IMessage handleClientMessage(EntityPlayer pPlayer, PlayerDataData pMessage, MessageContext pCtx) { - TecTech.playerPersistence.putDataOrSetToNewTag(pMessage.uuid1,pMessage.uuid2,pMessage.data); - return null; - } - } - - public static class ServerHandler extends AbstractServerMessageHandler { - @Override - public IMessage handleServerMessage(EntityPlayer pPlayer, PlayerDataQuery pMessage, MessageContext pCtx) { - if(pPlayer instanceof EntityPlayerMP){ - NetworkDispatcher.INSTANCE.sendTo(new PlayerDataData(pMessage),(EntityPlayerMP) pPlayer); - } - return null; - } - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/network/RotationMessage.java b/src/main/java/com/github/technus/tectech/loader/network/RotationMessage.java deleted file mode 100644 index ec78021a60..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/network/RotationMessage.java +++ /dev/null @@ -1,140 +0,0 @@ -package com.github.technus.tectech.loader.network; - -import com.github.technus.tectech.thing.metaTileEntity.IFrontRotation; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import cpw.mods.fml.common.network.ByteBufUtils; -import cpw.mods.fml.common.network.simpleimpl.IMessage; -import cpw.mods.fml.common.network.simpleimpl.MessageContext; -import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; -import eu.usrv.yamcore.network.server.AbstractServerMessageHandler; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; - -public class RotationMessage implements IMessage { - int mPosX; - int mPosY; - int mPosZ; - int mPosD; - int mRotF; - - public RotationMessage() { - } - - private RotationMessage(GT_MetaTileEntity_MultiblockBase_EM metaTile) { - IGregTechTileEntity base=metaTile.getBaseMetaTileEntity(); - mPosX=base.getXCoord(); - mPosY=base.getYCoord(); - mPosZ=base.getZCoord(); - mPosD=base.getWorld().provider.dimensionId; - mRotF=metaTile.getFrontRotation(); - } - - private RotationMessage(World world, int x,int y,int z, IFrontRotation front) { - mPosX=x; - mPosY=y; - mPosZ=z; - mPosD=world.provider.dimensionId; - mRotF=front.getFrontRotation(); - } - - @Override - public void fromBytes(ByteBuf pBuffer) { - NBTTagCompound tTag = ByteBufUtils.readTag(pBuffer); - mPosX = tTag.getInteger("posx"); - mPosY = tTag.getInteger("posy"); - mPosZ = tTag.getInteger("posz"); - mPosD = tTag.getInteger("posd"); - mRotF = tTag.getInteger("rotf"); - } - - @Override - public void toBytes(ByteBuf pBuffer) { - NBTTagCompound tFXTag = new NBTTagCompound(); - tFXTag.setInteger("posx", mPosX); - tFXTag.setInteger("posy", mPosY); - tFXTag.setInteger("posz", mPosZ); - tFXTag.setInteger("posd", mPosD); - tFXTag.setInteger("rotf", mRotF); - - ByteBufUtils.writeTag(pBuffer, tFXTag); - } - - public static class RotationQuery extends RotationMessage{ - public RotationQuery() { - } - - public RotationQuery(GT_MetaTileEntity_MultiblockBase_EM metaTile) { - super(metaTile); - } - - public RotationQuery(World world, int x,int y,int z, IFrontRotation front) { - super(world,x,y,z,front); - } - } - - public static class RotationData extends RotationMessage{ - public RotationData() { - } - - private RotationData(RotationQuery query){ - mPosX=query.mPosX; - mPosY=query.mPosY; - mPosZ=query.mPosZ; - mPosD=query.mPosD; - mRotF=query.mRotF; - } - - public RotationData(GT_MetaTileEntity_MultiblockBase_EM metaTile) { - super(metaTile); - } - - public RotationData(World world, int x,int y,int z, IFrontRotation front) { - super(world,x,y,z,front); - } - } - - public static class ClientHandler extends AbstractClientMessageHandler { - @Override - public IMessage handleClientMessage(EntityPlayer pPlayer, RotationData pMessage, MessageContext pCtx) { - if(pPlayer.worldObj.provider.dimensionId==pMessage.mPosD){ - TileEntity te=pPlayer.worldObj.getTileEntity(pMessage.mPosX,pMessage.mPosY,pMessage.mPosZ); - if(te instanceof IGregTechTileEntity){ - IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); - if(meta instanceof IFrontRotation){ - ((IFrontRotation) meta).forceSetRotationDoRender((byte)pMessage.mRotF); - } - }else if (te instanceof IFrontRotation){ - ((IFrontRotation) te).forceSetRotationDoRender((byte)pMessage.mRotF); - } - } - return null; - } - } - - public static class ServerHandler extends AbstractServerMessageHandler { - @Override - public IMessage handleServerMessage(EntityPlayer pPlayer, RotationQuery pMessage, MessageContext pCtx) { - World world= DimensionManager.getWorld(pMessage.mPosD); - if(world!=null) { - TileEntity te = world.getTileEntity(pMessage.mPosX, pMessage.mPosY, pMessage.mPosZ); - if (te instanceof IGregTechTileEntity) { - IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); - if (meta instanceof IFrontRotation) { - pMessage.mRotF=((IFrontRotation) meta).getFrontRotation(); - return new RotationData(pMessage); - } - } else if (te instanceof IFrontRotation) { - pMessage.mRotF=((IFrontRotation) te).getFrontRotation(); - return new RotationData(pMessage); - } - } - return null; - } - } -} \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/mechanics/ConvertFloat.java b/src/main/java/com/github/technus/tectech/mechanics/ConvertFloat.java deleted file mode 100644 index 8e25b8908a..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/ConvertFloat.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.github.technus.tectech.mechanics; - -import com.github.technus.tectech.Util; -import net.minecraft.command.ICommand; -import net.minecraft.command.ICommandSender; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; - -import java.util.ArrayList; -import java.util.List; - -public class ConvertFloat implements ICommand { - ArrayList aliases=new ArrayList<>(); - - public ConvertFloat(){ - aliases.add("convert_float"); - aliases.add("c_f"); - } - - @Override - public void processCommand(ICommandSender sender, String[] args) { - if (!sender.getEntityWorld().isRemote) { - if(args.length == 1) { - try{ - float value=Float.parseFloat(args[0]); - sender.addChatMessage(new ChatComponentText( - EnumChatFormatting.AQUA.toString()+ EnumChatFormatting.BOLD + - Util.intBitsToShortString(Float.floatToIntBits(value))+" "+ - EnumChatFormatting.RESET+EnumChatFormatting.BLUE +value)); - }catch (Exception e){ - sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED+"Invalid Float "+args[0])); - } - }else{ - sender.addChatMessage(new ChatComponentText(getCommandUsage(sender))); - } - } - } - - @Override - public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_) { - return false; - } - - @Override - public List getCommandAliases() { - return aliases; - } - - @Override - public String getCommandName() { - return aliases.get(0); - } - - @Override - public List addTabCompletionOptions(ICommandSender sender, String[] args) { - return null; - } - - @Override - public String getCommandUsage(ICommandSender p_71518_1_) { - return "c_f Float"; - } - - @Override - public int compareTo(Object o) { - if(o instanceof ICommand){ - return getCommandName().compareTo(((ICommand) o).getCommandName()); - } - return 0; - } - - @Override - public boolean canCommandSenderUseCommand(ICommandSender sender) { - return true; - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/ConvertInteger.java b/src/main/java/com/github/technus/tectech/mechanics/ConvertInteger.java deleted file mode 100644 index c381f34939..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/ConvertInteger.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.github.technus.tectech.mechanics; - -import com.github.technus.tectech.Util; -import net.minecraft.command.ICommand; -import net.minecraft.command.ICommandSender; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; - -import java.util.ArrayList; -import java.util.List; - -public class ConvertInteger implements ICommand { - ArrayList aliases=new ArrayList<>(); - - public ConvertInteger(){ - aliases.add("convert_integer"); - aliases.add("c_i"); - } - - @Override - public void processCommand(ICommandSender sender, String[] args) { - if (!sender.getEntityWorld().isRemote) { - if(args.length == 1) { - try{ - int value=Integer.parseInt(args[0]); - sender.addChatMessage(new ChatComponentText( - EnumChatFormatting.AQUA.toString()+ EnumChatFormatting.BOLD + - Util.intBitsToShortString(value)+" "+ - EnumChatFormatting.RESET+EnumChatFormatting.BLUE +value)); - }catch (Exception e){ - sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED+"Invalid Integer "+args[0])); - } - }else{ - sender.addChatMessage(new ChatComponentText(getCommandUsage(sender))); - } - } - } - - @Override - public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_) { - return false; - } - - @Override - public List getCommandAliases() { - return aliases; - } - - @Override - public String getCommandName() { - return aliases.get(0); - } - - @Override - public List addTabCompletionOptions(ICommandSender sender, String[] args) { - return null; - } - - @Override - public String getCommandUsage(ICommandSender p_71518_1_) { - return "c_i Integer"; - } - - @Override - public int compareTo(Object o) { - if(o instanceof ICommand){ - return getCommandName().compareTo(((ICommand) o).getCommandName()); - } - return 0; - } - - @Override - public boolean canCommandSenderUseCommand(ICommandSender sender) { - return true; - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/PlayerPersistence.java b/src/main/java/com/github/technus/tectech/mechanics/PlayerPersistence.java deleted file mode 100644 index 72416c3e0c..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/PlayerPersistence.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.github.technus.tectech.mechanics; - -import com.github.technus.tectech.Util; -import com.github.technus.tectech.loader.network.NetworkDispatcher; -import com.github.technus.tectech.loader.network.PlayerDataMessage; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.gameevent.PlayerEvent; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.nbt.NBTTagCompound; - -import java.util.HashMap; -import java.util.UUID; - -import static java.nio.charset.Charset.forName; - -public class PlayerPersistence { - private final HashMap map=new HashMap<>(); - private final String extension; - - public PlayerPersistence(String extension) { - this.extension = extension; - } - - public NBTTagCompound getDataOrSetToNewTag(UUID uuid1, UUID uuid2){ - NBTTagCompound tag=map.get(uuid1); - if(tag!=null){ - return tag; - } - tag=map.get(uuid2); - if(tag!=null){ - return tag; - } - tag=Util.getPlayerData(uuid1,uuid2,extension); - if(tag==null){ - tag=new NBTTagCompound(); - } - map.put(uuid1,tag); - map.put(uuid2,tag); - return tag; - } - - public NBTTagCompound getDataOrSetToNewTag(EntityPlayer player){ - return getDataOrSetToNewTag(player.getUniqueID(),UUID.nameUUIDFromBytes(player.getCommandSenderName().getBytes(forName("UTF-8")))); - } - - public void putDataOrSetToNewTag(UUID uuid1, UUID uuid2, NBTTagCompound tagCompound){ - if(tagCompound==null){ - tagCompound=new NBTTagCompound(); - } - map.put(uuid1,tagCompound); - map.put(uuid2,tagCompound); - } - - public void putDataOrSetToNewTag(EntityPlayer player, NBTTagCompound tagCompound){ - putDataOrSetToNewTag(player.getUniqueID(),UUID.nameUUIDFromBytes(player.getCommandSenderName().getBytes(forName("UTF-8"))),tagCompound); - } - - public void saveData(EntityPlayer player){ - Util.savePlayerFile(player,extension,getDataOrSetToNewTag(player)); - } - - @SubscribeEvent - public void onLogin(PlayerEvent.PlayerLoggedInEvent event){ - if(event.player instanceof EntityPlayerMP){ - NetworkDispatcher.INSTANCE.sendTo(new PlayerDataMessage.PlayerDataData(event.player),(EntityPlayerMP)event.player); - } - } - - public void clearData() { - map.clear(); - } -} 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 fcc0242432..4f76b22279 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 @@ -2,12 +2,12 @@ package com.github.technus.tectech.mechanics.anomaly; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.Util; -import com.github.technus.tectech.chunkData.ChunkDataHandler; -import com.github.technus.tectech.chunkData.IChunkMetaDataHandler; +import com.github.technus.tectech.mechanics.data.ChunkDataHandler; +import com.github.technus.tectech.mechanics.data.IChunkMetaDataHandler; import com.github.technus.tectech.loader.MainLoader; -import com.github.technus.tectech.loader.network.ChunkDataMessage; -import com.github.technus.tectech.loader.network.NetworkDispatcher; -import com.github.technus.tectech.loader.network.PlayerDataMessage; +import com.github.technus.tectech.mechanics.data.ChunkDataMessage; +import com.github.technus.tectech.loader.NetworkDispatcher; +import com.github.technus.tectech.mechanics.data.PlayerDataMessage; import com.github.technus.tectech.mechanics.elementalMatter.definitions.complex.atom.dAtomDefinition; import cpw.mods.fml.common.gameevent.TickEvent; import gregtech.api.GregTech_API; diff --git a/src/main/java/com/github/technus/tectech/mechanics/commands/ConvertFloat.java b/src/main/java/com/github/technus/tectech/mechanics/commands/ConvertFloat.java new file mode 100644 index 0000000000..61fa56f93a --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/commands/ConvertFloat.java @@ -0,0 +1,76 @@ +package com.github.technus.tectech.mechanics.commands; + +import com.github.technus.tectech.Util; +import net.minecraft.command.ICommand; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; + +import java.util.ArrayList; +import java.util.List; + +public class ConvertFloat implements ICommand { + ArrayList aliases=new ArrayList<>(); + + public ConvertFloat(){ + aliases.add("convert_float"); + aliases.add("c_f"); + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + if (!sender.getEntityWorld().isRemote) { + if(args.length == 1) { + try{ + float value=Float.parseFloat(args[0]); + sender.addChatMessage(new ChatComponentText( + EnumChatFormatting.AQUA.toString()+ EnumChatFormatting.BOLD + + Util.intBitsToShortString(Float.floatToIntBits(value))+" "+ + EnumChatFormatting.RESET+EnumChatFormatting.BLUE +value)); + }catch (Exception e){ + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED+"Invalid Float "+args[0])); + } + }else{ + sender.addChatMessage(new ChatComponentText(getCommandUsage(sender))); + } + } + } + + @Override + public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_) { + return false; + } + + @Override + public List getCommandAliases() { + return aliases; + } + + @Override + public String getCommandName() { + return aliases.get(0); + } + + @Override + public List addTabCompletionOptions(ICommandSender sender, String[] args) { + return null; + } + + @Override + public String getCommandUsage(ICommandSender p_71518_1_) { + return "c_f Float"; + } + + @Override + public int compareTo(Object o) { + if(o instanceof ICommand){ + return getCommandName().compareTo(((ICommand) o).getCommandName()); + } + return 0; + } + + @Override + public boolean canCommandSenderUseCommand(ICommandSender sender) { + return true; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/commands/ConvertInteger.java b/src/main/java/com/github/technus/tectech/mechanics/commands/ConvertInteger.java new file mode 100644 index 0000000000..c9767560c3 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/commands/ConvertInteger.java @@ -0,0 +1,76 @@ +package com.github.technus.tectech.mechanics.commands; + +import com.github.technus.tectech.Util; +import net.minecraft.command.ICommand; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; + +import java.util.ArrayList; +import java.util.List; + +public class ConvertInteger implements ICommand { + ArrayList aliases=new ArrayList<>(); + + public ConvertInteger(){ + aliases.add("convert_integer"); + aliases.add("c_i"); + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + if (!sender.getEntityWorld().isRemote) { + if(args.length == 1) { + try{ + int value=Integer.parseInt(args[0]); + sender.addChatMessage(new ChatComponentText( + EnumChatFormatting.AQUA.toString()+ EnumChatFormatting.BOLD + + Util.intBitsToShortString(value)+" "+ + EnumChatFormatting.RESET+EnumChatFormatting.BLUE +value)); + }catch (Exception e){ + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED+"Invalid Integer "+args[0])); + } + }else{ + sender.addChatMessage(new ChatComponentText(getCommandUsage(sender))); + } + } + } + + @Override + public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_) { + return false; + } + + @Override + public List getCommandAliases() { + return aliases; + } + + @Override + public String getCommandName() { + return aliases.get(0); + } + + @Override + public List addTabCompletionOptions(ICommandSender sender, String[] args) { + return null; + } + + @Override + public String getCommandUsage(ICommandSender p_71518_1_) { + return "c_i Integer"; + } + + @Override + public int compareTo(Object o) { + if(o instanceof ICommand){ + return getCommandName().compareTo(((ICommand) o).getCommandName()); + } + return 0; + } + + @Override + public boolean canCommandSenderUseCommand(ICommandSender sender) { + return true; + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/data/ChunkDataHandler.java b/src/main/java/com/github/technus/tectech/mechanics/data/ChunkDataHandler.java new file mode 100644 index 0000000000..f6d84d6b12 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/data/ChunkDataHandler.java @@ -0,0 +1,363 @@ +package com.github.technus.tectech.mechanics.data; + +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.TickEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraftforge.event.world.ChunkDataEvent; +import net.minecraftforge.event.world.ChunkEvent; +import net.minecraftforge.event.world.WorldEvent; + +import java.util.*; + +public class ChunkDataHandler { + private final String BASE_TAG_NAME ="TecTechData"; + private final HashMap> dimensionWiseChunkData=new HashMap<>(); + private final HashMap> dimensionWiseMetaChunkData=new HashMap<>(); + private final HashMap metaDataHandlerHashMap =new HashMap<>(); + private final ArrayList pushSyncHandlers =new ArrayList<>(); + private final ArrayList pullSyncHandlers =new ArrayList<>(); + private final ArrayList serverHandlers=new ArrayList<>(); + private final ArrayList worldHandlers=new ArrayList<>(); + private final ArrayList playerHandlers=new ArrayList<>(); + private final ArrayList clientHandlers=new ArrayList<>(); + private final ArrayList renderHandlers=new ArrayList<>(); + + @SubscribeEvent + public void onWorldLoad(WorldEvent.Load event){ + int dim=event.world.provider.dimensionId; + dimensionWiseChunkData.computeIfAbsent(dim, m->{ + HashMap map = new HashMap<>(); + for (Map.Entry meta : metaDataHandlerHashMap.entrySet()) { + dimensionWiseMetaChunkData.get(meta.getKey()).put(dim, new ChunkHashMap(meta.getValue(), map)); + } + return map; + }); + } + + @SubscribeEvent + public void handleChunkSaveEvent(ChunkDataEvent.Save event) { + HashMap dimensionData = dimensionWiseChunkData.get(event.world.provider.dimensionId); + NBTChunk chunkData = dimensionData != null ? dimensionData.get(event.getChunk().getChunkCoordIntPair()) : null; + if (chunkData == null) { + event.getData().removeTag(BASE_TAG_NAME); + } else { + chunkData.isLoaded = true; + event.getData().setTag(BASE_TAG_NAME, chunkData.data); + } + } + + @SubscribeEvent + public void handleChunkLoadEvent(ChunkDataEvent.Load event) { + NBTTagCompound loadedTag = event.getData().getCompoundTag(BASE_TAG_NAME); + if (loadedTag.hasNoTags()) { + return; + } + int dimId = event.world.provider.dimensionId; + HashMap dimensionMemory = dimensionWiseChunkData.get(dimId); + ChunkCoordIntPair chunkCoordIntPair = event.getChunk().getChunkCoordIntPair(); + Set loadedKeys = loadedTag.func_150296_c(); + NBTChunk chunkMemory = dimensionMemory.get(chunkCoordIntPair); + if (chunkMemory == null) { + chunkMemory = new NBTChunk(loadedTag, true); + dimensionMemory.put(chunkCoordIntPair, chunkMemory); + for (String s : loadedKeys) { + dimensionWiseMetaChunkData.get(s).get(dimId).putLoaded(chunkCoordIntPair, loadedTag.getCompoundTag(s)); + } + } else if (!chunkMemory.isLoaded) { + chunkMemory.isLoaded = true; + + Set tagsDuplicated = new HashSet(loadedKeys); + tagsDuplicated.retainAll(chunkMemory.data.func_150296_c()); + + if (tagsDuplicated.isEmpty()) { + for (String s : loadedKeys) { + NBTTagCompound tag = loadedTag.getCompoundTag(s); + chunkMemory.data.setTag(s, tag); + dimensionWiseMetaChunkData.get(s).get(dimId).putLoaded(chunkCoordIntPair, tag); + } + } else { + for (String s : loadedKeys) { + NBTTagCompound memory = chunkMemory.data.getCompoundTag(s); + if (tagsDuplicated.contains(s)) { + metaDataHandlerHashMap.get(s).mergeData(memory, loadedTag.getCompoundTag(s)); + } else { + chunkMemory.data.setTag(s, loadedTag.getCompoundTag(s)); + dimensionWiseMetaChunkData.get(s).get(dimId).putLoaded(chunkCoordIntPair, memory); + } + } + } + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onLoadChunk(ChunkEvent.Load aEvent){ + pullSyncHandlers.forEach(chunkMetaDataHandler -> chunkMetaDataHandler.pullData(aEvent)); + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onUnLoadChunk(ChunkEvent.Unload aEvent){ + pullSyncHandlers.forEach(chunkMetaDataHandler -> dimensionWiseMetaChunkData + .get(chunkMetaDataHandler.getTagName()) + .get(aEvent.world.provider.dimensionId) + .remove(aEvent.getChunk().getChunkCoordIntPair())); + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onClientTickEvent(TickEvent.ClientTickEvent aEvent) { + clientHandlers.forEach(chunkMetaDataHandler -> + chunkMetaDataHandler.tickClient( + dimensionWiseMetaChunkData.get(chunkMetaDataHandler.getTagName()), aEvent)); + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onRenderTickEvent(TickEvent.RenderTickEvent aEvent) { + renderHandlers.forEach(chunkMetaDataHandler -> + chunkMetaDataHandler.tickRender( + dimensionWiseMetaChunkData.get(chunkMetaDataHandler.getTagName()), aEvent)); + } + + @SubscribeEvent + public void onServerTickEvent(TickEvent.ServerTickEvent aEvent) { + serverHandlers.forEach(chunkMetaDataHandler -> + chunkMetaDataHandler.tickServer( + dimensionWiseMetaChunkData.get(chunkMetaDataHandler.getTagName()), aEvent)); + } + + @SubscribeEvent + public void onWorldTickEvent(TickEvent.WorldTickEvent aEvent) { + if(aEvent.side.isServer()) { + int dim = aEvent.world.provider.dimensionId; + pushSyncHandlers.forEach(chunkMetaDataHandler -> { + ChunkHashMap data = dimensionWiseMetaChunkData + .get(chunkMetaDataHandler.getTagName()).get(dim); + int cycle = chunkMetaDataHandler.pushPayloadSpreadPeriod(); + int epoch = (int) (aEvent.world.getTotalWorldTime() % cycle); + ArrayList work; + if (epoch == 0) { + int per = data.dirtyBoys.size() / cycle; + int mod = data.dirtyBoys.size() % cycle; + Iterator 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)); + } + } + + @SubscribeEvent + public void onPlayerTickEvent(TickEvent.PlayerTickEvent aEvent) { + playerHandlers.forEach(chunkMetaDataHandler -> + chunkMetaDataHandler.tickPlayer( + dimensionWiseMetaChunkData.get(chunkMetaDataHandler.getTagName()), aEvent)); + } + + + public void clearData() { + dimensionWiseChunkData.clear(); + dimensionWiseMetaChunkData.forEach((k,v)->v.clear()); + } + + public IChunkMetaDataHandler getChunkMetaDataHandler(String s){ + return metaDataHandlerHashMap.get(s); + } + + public void registerChunkMetaDataHandler(IChunkMetaDataHandler handler){ + metaDataHandlerHashMap.put(handler.getTagName(),handler); + dimensionWiseMetaChunkData.put(handler.getTagName(),new HashMap<>()); + Class clazz=handler.getClass(); + try { + if(clazz.getMethod("tickServer", HashMap.class, TickEvent.ServerTickEvent.class).getDeclaringClass()!= IChunkMetaDataHandler.class){ + serverHandlers.add(handler); + } + if(clazz.getMethod("tickPlayer", HashMap.class, TickEvent.PlayerTickEvent.class).getDeclaringClass()!= IChunkMetaDataHandler.class){ + playerHandlers.add(handler); + } + if (clazz.getMethod("pushData", int.class, ChunkCoordIntPair.class).getDeclaringClass()!=IChunkMetaDataHandler.class) { + pushSyncHandlers.add(handler); + } + if(clazz.getMethod("tickWorld", HashMap.class, TickEvent.WorldTickEvent.class).getDeclaringClass()!= IChunkMetaDataHandler.class){ + worldHandlers.add(handler); + } + } catch (NoSuchMethodException e) { + throw new RuntimeException("Cannot register common event handlers!",e); + } + if(FMLCommonHandler.instance().getEffectiveSide().isClient()) { + try { + if (clazz.getMethod("pullData", ChunkEvent.Load.class).getDeclaringClass() != IChunkMetaDataHandler.class) { + pullSyncHandlers.add(handler); + } + if (clazz.getMethod("tickClient", HashMap.class, TickEvent.ClientTickEvent.class).getDeclaringClass() != IChunkMetaDataHandler.class) { + clientHandlers.add(handler); + } + if (clazz.getMethod("tickRender", HashMap.class, TickEvent.RenderTickEvent.class).getDeclaringClass() != IChunkMetaDataHandler.class) { + renderHandlers.add(handler); + } + } catch (NoSuchMethodException e) { + throw new RuntimeException("Cannot register client event handlers!",e); + } + } + } + + public NBTTagCompound removeChunkData(IChunkMetaDataHandler handler, int world, ChunkCoordIntPair chunk){ + return dimensionWiseMetaChunkData.get(handler.getTagName()).get(world).remove(chunk); + } + + public NBTTagCompound getChunkData(IChunkMetaDataHandler handler, int world, ChunkCoordIntPair chunk){ + return dimensionWiseMetaChunkData.get(handler.getTagName()).get(world).get(chunk); + } + + public NBTTagCompound putChunkData(IChunkMetaDataHandler handler, int world, ChunkCoordIntPair chunk, NBTTagCompound data){ + return dimensionWiseMetaChunkData.get(handler.getTagName()).get(world).put(chunk,data); + } + + public NBTTagCompound createIfAbsentChunkData(IChunkMetaDataHandler handler, int world, ChunkCoordIntPair chunk){ + return dimensionWiseMetaChunkData.get(handler.getTagName()).get(world) + .computeIfAbsent(chunk,chunkCoordIntPair -> handler.createData()); + } + + public HashMap getChunkData(IChunkMetaDataHandler chunkMetaDataHandler){ + return dimensionWiseMetaChunkData.get(chunkMetaDataHandler.getTagName()); + } + + public ChunkHashMap getChunkData(IChunkMetaDataHandler chunkMetaDataHandler, int world){ + return dimensionWiseMetaChunkData.get(chunkMetaDataHandler.getTagName()).get(world); + } + + public static final class ChunkHashMap implements Map{ + private final HashMap storage; + private final HashMap storageMeta=new HashMap<>(1024); + private final HashSet dirtyBoys=new HashSet<>(1024); + private final ArrayList> workLoad=new ArrayList<>(); + private final String meta; + + private ChunkHashMap(IChunkMetaDataHandler meta, HashMap storage) { + this.storage =storage; + this.meta=meta.getTagName(); + for (int i = 0; i < meta.pushPayloadSpreadPeriod(); i++) { + workLoad.add(new ArrayList<>(128)); + } + } + + public void markForTransmissionToClient(ChunkCoordIntPair chunk){ + dirtyBoys.add(chunk); + } + + private void putLoaded(ChunkCoordIntPair key, NBTTagCompound value) { + storageMeta.put(key, value); + } + + @Override + public NBTTagCompound remove(Object key) { + NBTTagCompound compound=storageMeta.remove(key); + if(compound!=null) { + NBTChunk chunk = storage.get(key); + chunk.data.removeTag(meta); + if(chunk.data.hasNoTags()){ + storage.remove(key); + } + } + return compound; + } + + @Override + public NBTTagCompound put(ChunkCoordIntPair key, NBTTagCompound value) { + if(value==null){ + return remove(key); + } + NBTChunk chunk = storage.get(key); + if(chunk==null){ + NBTTagCompound base=new NBTTagCompound(); + base.setTag(meta,value); + storage.put(key,new NBTChunk(base,false)); + }else { + chunk.data.setTag(meta,value); + } + return storageMeta.put(key, value); + } + + @Override + public int size() { + return storageMeta.size(); + } + + @Override + public boolean isEmpty() { + return storageMeta.isEmpty(); + } + + @Override + public NBTTagCompound get(Object key) { + return storageMeta.get(key); + } + + @Override + public void clear() { + storageMeta.entrySet().forEach(this::remove); + } + + @Override + public void putAll(Map m) { + m.forEach(this::put); + } + + @Override + public boolean containsKey(Object key) { + return storageMeta.containsKey(key); + } + + @Override + public boolean containsValue(Object value) { + return storageMeta.containsValue(value); + } + + @Override + public Set keySet() { + return storageMeta.keySet(); + } + + @Override + public Collection values() { + return storageMeta.values(); + } + + @Override + public Set> entrySet() { + return storageMeta.entrySet(); + } + } + + private static final class NBTChunk { + private final NBTTagCompound data; + private boolean isLoaded; + + private NBTChunk(NBTTagCompound data, boolean isLoaded) { + if(data==null){ + data=new NBTTagCompound(); + } + this.data = data; + this.isLoaded = isLoaded; + } + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/data/ChunkDataMessage.java b/src/main/java/com/github/technus/tectech/mechanics/data/ChunkDataMessage.java new file mode 100644 index 0000000000..a8ed9de2c8 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/data/ChunkDataMessage.java @@ -0,0 +1,101 @@ +package com.github.technus.tectech.mechanics.data; + +import com.github.technus.tectech.TecTech; +import com.github.technus.tectech.Util; +import com.github.technus.tectech.loader.NetworkDispatcher; +import cpw.mods.fml.common.network.ByteBufUtils; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; +import eu.usrv.yamcore.network.server.AbstractServerMessageHandler; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraftforge.event.world.ChunkEvent; + +public class ChunkDataMessage implements IMessage { + int worldId; + ChunkCoordIntPair chunk; + NBTTagCompound data; + IChunkMetaDataHandler handler; + + public ChunkDataMessage(){} + + @Override + public void fromBytes(ByteBuf pBuffer) { + NBTTagCompound tag = ByteBufUtils.readTag(pBuffer); + worldId = tag.getInteger("wId"); + chunk=new ChunkCoordIntPair( + tag.getInteger("posx"), + tag.getInteger("posz")); + handler = TecTech.chunkDataHandler.getChunkMetaDataHandler( + tag.getString("handle")); + if(tag.hasKey("data")){ + data=tag.getCompoundTag("data"); + } + } + + @Override + public void toBytes(ByteBuf pBuffer) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setInteger("wId",worldId); + tag.setInteger("posx",chunk.chunkXPos); + tag.setInteger("posz",chunk.chunkZPos); + tag.setString("handle",handler.getTagName()); + if(data!=null){ + tag.setTag("data",data); + } + ByteBufUtils.writeTag(pBuffer, tag); + } + + public static class ChunkDataQuery extends ChunkDataMessage { + public ChunkDataQuery() { + } + public ChunkDataQuery(ChunkEvent.Load aEvent, IChunkMetaDataHandler handler) { + worldId=aEvent.world.provider.dimensionId; + chunk=aEvent.getChunk().getChunkCoordIntPair(); + this.handler=handler; + } + } + + public static class ChunkDataData extends ChunkDataMessage { + public ChunkDataData() { + } + + public ChunkDataData(int worldId, ChunkCoordIntPair chunk, IChunkMetaDataHandler handler){ + this.worldId=worldId; + this.chunk=chunk; + this.handler=handler; + this.data=TecTech.chunkDataHandler.getChunkData(handler,worldId,chunk); + } + + public ChunkDataData(ChunkDataQuery query){ + worldId=query.worldId; + chunk=query.chunk; + handler=query.handler; + data=TecTech.chunkDataHandler.getChunkData(handler,worldId,chunk); + } + } + + public static class ClientHandler extends AbstractClientMessageHandler { + @Override + public IMessage handleClientMessage(EntityPlayer pPlayer, ChunkDataData pMessage, MessageContext pCtx) { + if(Util.checkChunkExist(pPlayer.worldObj,pMessage.chunk)){ + TecTech.chunkDataHandler.putChunkData(pMessage.handler, pMessage.worldId,pMessage.chunk, pMessage.data); + } + return null; + } + } + + public static class ServerHandler extends AbstractServerMessageHandler { + @Override + public IMessage handleServerMessage(EntityPlayer pPlayer, ChunkDataQuery pMessage, MessageContext pCtx) { + if(pPlayer instanceof EntityPlayerMP){ + NetworkDispatcher.INSTANCE.sendTo(new ChunkDataData(pMessage),(EntityPlayerMP) pPlayer); + } + return null; + } + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/data/IChunkMetaDataHandler.java b/src/main/java/com/github/technus/tectech/mechanics/data/IChunkMetaDataHandler.java new file mode 100644 index 0000000000..a8f5e013c5 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/data/IChunkMetaDataHandler.java @@ -0,0 +1,34 @@ +package com.github.technus.tectech.mechanics.data; + +import cpw.mods.fml.common.gameevent.TickEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +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 IChunkMetaDataHandler { + String getTagName(); + void mergeData(NBTTagCompound target, NBTTagCompound loadedData); + NBTTagCompound createData(); + @SideOnly(Side.CLIENT) + default void pullData(ChunkEvent.Load aEvent){} + default void pushData(int world, ChunkCoordIntPair chunk){} + default void pushPayload(int world, ArrayList chunk){ + chunk.forEach(chunkCoordIntPair -> pushData(world,chunkCoordIntPair)); + } + default int pushPayloadSpreadPeriod(){ + return 20; + } + @SideOnly(Side.CLIENT) + default void tickRender(HashMap data, TickEvent.RenderTickEvent aEvent){} + @SideOnly(Side.CLIENT) + default void tickClient(HashMap data, TickEvent.ClientTickEvent aEvent){} + default void tickServer(HashMap data, TickEvent.ServerTickEvent event){} + default void tickWorld(HashMap data, TickEvent.WorldTickEvent aEvent){} + default void tickPlayer(HashMap data, TickEvent.PlayerTickEvent aEvent){} +} + diff --git a/src/main/java/com/github/technus/tectech/mechanics/data/PlayerDataMessage.java b/src/main/java/com/github/technus/tectech/mechanics/data/PlayerDataMessage.java new file mode 100644 index 0000000000..ca62fb0876 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/data/PlayerDataMessage.java @@ -0,0 +1,90 @@ +package com.github.technus.tectech.mechanics.data; + +import com.github.technus.tectech.TecTech; +import com.github.technus.tectech.loader.NetworkDispatcher; +import cpw.mods.fml.common.network.ByteBufUtils; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; +import eu.usrv.yamcore.network.server.AbstractServerMessageHandler; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; + +import java.util.UUID; + +import static java.nio.charset.Charset.forName; + +public class PlayerDataMessage implements IMessage { + NBTTagCompound data; + UUID uuid1,uuid2; + + public PlayerDataMessage(){} + + @Override + public void fromBytes(ByteBuf pBuffer) { + NBTTagCompound tag = ByteBufUtils.readTag(pBuffer); + uuid1=UUID.fromString(tag.getString("id1")); + uuid2=UUID.fromString(tag.getString("id2")); + if(tag.hasKey("data")){ + data=tag.getCompoundTag("data"); + } + } + + @Override + public void toBytes(ByteBuf pBuffer) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setString("id1",uuid1.toString()); + tag.setString("id2",uuid2.toString()); + if(data!=null){ + tag.setTag("data",data); + } + ByteBufUtils.writeTag(pBuffer, tag); + } + + public static class PlayerDataQuery extends PlayerDataMessage { + public PlayerDataQuery() { + } + + public PlayerDataQuery(EntityPlayer player) { + uuid1=player.getUniqueID(); + uuid2=UUID.nameUUIDFromBytes(player.getCommandSenderName().getBytes(forName("UTF-8"))); + } + } + + public static class PlayerDataData extends PlayerDataMessage { + public PlayerDataData() { + } + + public PlayerDataData(EntityPlayer player){ + uuid1=player.getUniqueID(); + uuid2=UUID.nameUUIDFromBytes(player.getCommandSenderName().getBytes(forName("UTF-8"))); + data=TecTech.playerPersistence.getDataOrSetToNewTag(player); + } + + public PlayerDataData(PlayerDataQuery query){ + uuid1=query.uuid1; + uuid2=query.uuid2; + data= TecTech.playerPersistence.getDataOrSetToNewTag(uuid1,uuid2); + } + } + + public static class ClientHandler extends AbstractClientMessageHandler { + @Override + public IMessage handleClientMessage(EntityPlayer pPlayer, PlayerDataData pMessage, MessageContext pCtx) { + TecTech.playerPersistence.putDataOrSetToNewTag(pMessage.uuid1,pMessage.uuid2,pMessage.data); + return null; + } + } + + public static class ServerHandler extends AbstractServerMessageHandler { + @Override + public IMessage handleServerMessage(EntityPlayer pPlayer, PlayerDataQuery pMessage, MessageContext pCtx) { + if(pPlayer instanceof EntityPlayerMP){ + NetworkDispatcher.INSTANCE.sendTo(new PlayerDataData(pMessage),(EntityPlayerMP) pPlayer); + } + return null; + } + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/data/PlayerPersistence.java b/src/main/java/com/github/technus/tectech/mechanics/data/PlayerPersistence.java new file mode 100644 index 0000000000..9282001c9a --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/data/PlayerPersistence.java @@ -0,0 +1,72 @@ +package com.github.technus.tectech.mechanics.data; + +import com.github.technus.tectech.Util; +import com.github.technus.tectech.loader.NetworkDispatcher; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.PlayerEvent; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; + +import java.util.HashMap; +import java.util.UUID; + +import static java.nio.charset.Charset.forName; + +public class PlayerPersistence { + private final HashMap map=new HashMap<>(); + private final String extension; + + public PlayerPersistence(String extension) { + this.extension = extension; + } + + public NBTTagCompound getDataOrSetToNewTag(UUID uuid1, UUID uuid2){ + NBTTagCompound tag=map.get(uuid1); + if(tag!=null){ + return tag; + } + tag=map.get(uuid2); + if(tag!=null){ + return tag; + } + tag=Util.getPlayerData(uuid1,uuid2,extension); + if(tag==null){ + tag=new NBTTagCompound(); + } + map.put(uuid1,tag); + map.put(uuid2,tag); + return tag; + } + + public NBTTagCompound getDataOrSetToNewTag(EntityPlayer player){ + return getDataOrSetToNewTag(player.getUniqueID(),UUID.nameUUIDFromBytes(player.getCommandSenderName().getBytes(forName("UTF-8")))); + } + + public void putDataOrSetToNewTag(UUID uuid1, UUID uuid2, NBTTagCompound tagCompound){ + if(tagCompound==null){ + tagCompound=new NBTTagCompound(); + } + map.put(uuid1,tagCompound); + map.put(uuid2,tagCompound); + } + + public void putDataOrSetToNewTag(EntityPlayer player, NBTTagCompound tagCompound){ + putDataOrSetToNewTag(player.getUniqueID(),UUID.nameUUIDFromBytes(player.getCommandSenderName().getBytes(forName("UTF-8"))),tagCompound); + } + + public void saveData(EntityPlayer player){ + Util.savePlayerFile(player,extension,getDataOrSetToNewTag(player)); + } + + @SubscribeEvent + public void onLogin(PlayerEvent.PlayerLoggedInEvent event){ + if(event.player instanceof EntityPlayerMP){ + NetworkDispatcher.INSTANCE.sendTo(new PlayerDataMessage.PlayerDataData(event.player),(EntityPlayerMP)event.player); + } + } + + public void clearData() { + map.clear(); + } +} diff --git a/src/main/java/com/github/technus/tectech/mechanics/data/WorldData.java b/src/main/java/com/github/technus/tectech/mechanics/data/WorldData.java new file mode 100644 index 0000000000..4f6f730c9b --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/data/WorldData.java @@ -0,0 +1,52 @@ +package com.github.technus.tectech.mechanics.data; + +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; + +import java.util.Objects; + +public final class WorldData { + private final World world; + private final Chunk chunk; + private final ChunkCoordIntPair coordIntPair; + + public WorldData(World world, Chunk data) { + this.world = world; + this.chunk = data; + coordIntPair=data.getChunkCoordIntPair(); + } + + public WorldData(World world, ChunkCoordIntPair data) { + this.world = world; + this.coordIntPair = data; + chunk= world.getChunkFromChunkCoords(data.chunkXPos,data.chunkZPos); + } + + public World getWorld() { + return world; + } + + public Chunk getChunk() { + return chunk; + } + + public ChunkCoordIntPair getCoordIntPair() { + return coordIntPair; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + WorldData worldData = (WorldData) o; + return world.provider.dimensionId==worldData.world.provider.dimensionId && + coordIntPair.chunkXPos==worldData.coordIntPair.chunkXPos && + coordIntPair.chunkZPos==worldData.coordIntPair.chunkXPos; + } + + @Override + public int hashCode() { + return Objects.hash(world.provider.dimensionId, coordIntPair); + } +} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/RotationMessage.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/RotationMessage.java new file mode 100644 index 0000000000..92b38e68ea --- /dev/null +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/RotationMessage.java @@ -0,0 +1,139 @@ +package com.github.technus.tectech.thing.metaTileEntity; + +import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import cpw.mods.fml.common.network.ByteBufUtils; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; +import eu.usrv.yamcore.network.server.AbstractServerMessageHandler; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; + +public class RotationMessage implements IMessage { + int mPosX; + int mPosY; + int mPosZ; + int mPosD; + int mRotF; + + public RotationMessage() { + } + + private RotationMessage(GT_MetaTileEntity_MultiblockBase_EM metaTile) { + IGregTechTileEntity base=metaTile.getBaseMetaTileEntity(); + mPosX=base.getXCoord(); + mPosY=base.getYCoord(); + mPosZ=base.getZCoord(); + mPosD=base.getWorld().provider.dimensionId; + mRotF=metaTile.getFrontRotation(); + } + + private RotationMessage(World world, int x,int y,int z, IFrontRotation front) { + mPosX=x; + mPosY=y; + mPosZ=z; + mPosD=world.provider.dimensionId; + mRotF=front.getFrontRotation(); + } + + @Override + public void fromBytes(ByteBuf pBuffer) { + NBTTagCompound tTag = ByteBufUtils.readTag(pBuffer); + mPosX = tTag.getInteger("posx"); + mPosY = tTag.getInteger("posy"); + mPosZ = tTag.getInteger("posz"); + mPosD = tTag.getInteger("posd"); + mRotF = tTag.getInteger("rotf"); + } + + @Override + public void toBytes(ByteBuf pBuffer) { + NBTTagCompound tFXTag = new NBTTagCompound(); + tFXTag.setInteger("posx", mPosX); + tFXTag.setInteger("posy", mPosY); + tFXTag.setInteger("posz", mPosZ); + tFXTag.setInteger("posd", mPosD); + tFXTag.setInteger("rotf", mRotF); + + ByteBufUtils.writeTag(pBuffer, tFXTag); + } + + public static class RotationQuery extends RotationMessage{ + public RotationQuery() { + } + + public RotationQuery(GT_MetaTileEntity_MultiblockBase_EM metaTile) { + super(metaTile); + } + + public RotationQuery(World world, int x,int y,int z, IFrontRotation front) { + super(world,x,y,z,front); + } + } + + public static class RotationData extends RotationMessage{ + public RotationData() { + } + + private RotationData(RotationQuery query){ + mPosX=query.mPosX; + mPosY=query.mPosY; + mPosZ=query.mPosZ; + mPosD=query.mPosD; + mRotF=query.mRotF; + } + + public RotationData(GT_MetaTileEntity_MultiblockBase_EM metaTile) { + super(metaTile); + } + + public RotationData(World world, int x,int y,int z, IFrontRotation front) { + super(world,x,y,z,front); + } + } + + public static class ClientHandler extends AbstractClientMessageHandler { + @Override + public IMessage handleClientMessage(EntityPlayer pPlayer, RotationData pMessage, MessageContext pCtx) { + if(pPlayer.worldObj.provider.dimensionId==pMessage.mPosD){ + TileEntity te=pPlayer.worldObj.getTileEntity(pMessage.mPosX,pMessage.mPosY,pMessage.mPosZ); + if(te instanceof IGregTechTileEntity){ + IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); + if(meta instanceof IFrontRotation){ + ((IFrontRotation) meta).forceSetRotationDoRender((byte)pMessage.mRotF); + } + }else if (te instanceof IFrontRotation){ + ((IFrontRotation) te).forceSetRotationDoRender((byte)pMessage.mRotF); + } + } + return null; + } + } + + public static class ServerHandler extends AbstractServerMessageHandler { + @Override + public IMessage handleServerMessage(EntityPlayer pPlayer, RotationQuery pMessage, MessageContext pCtx) { + World world= DimensionManager.getWorld(pMessage.mPosD); + if(world!=null) { + TileEntity te = world.getTileEntity(pMessage.mPosX, pMessage.mPosY, pMessage.mPosZ); + if (te instanceof IGregTechTileEntity) { + IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); + if (meta instanceof IFrontRotation) { + pMessage.mRotF=((IFrontRotation) meta).getFrontRotation(); + return new RotationData(pMessage); + } + } else if (te instanceof IFrontRotation) { + pMessage.mRotF=((IFrontRotation) te).getFrontRotation(); + return new RotationData(pMessage); + } + } + return null; + } + } +} \ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index 90e69c4fb7..19d64910e1 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -10,8 +10,8 @@ import com.github.technus.tectech.mechanics.elementalMatter.core.stacks.cElement import com.github.technus.tectech.mechanics.elementalMatter.core.tElementalException; import com.github.technus.tectech.thing.metaTileEntity.IFrontRotation; import com.github.technus.tectech.thing.metaTileEntity.hatch.*; -import com.github.technus.tectech.loader.network.RotationMessage; -import com.github.technus.tectech.loader.network.NetworkDispatcher; +import com.github.technus.tectech.thing.metaTileEntity.RotationMessage; +import com.github.technus.tectech.loader.NetworkDispatcher; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Data.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Data.java index 3331430cb9..6c406313fb 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Data.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Data.java @@ -2,8 +2,7 @@ package com.github.technus.tectech.thing.metaTileEntity.pipe; import com.github.technus.tectech.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.loader.network.PipeActivityMessage; -import com.github.technus.tectech.loader.network.NetworkDispatcher; +import com.github.technus.tectech.loader.NetworkDispatcher; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.GT_Mod; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_EM.java index caccee07c4..742d298bc6 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_EM.java @@ -2,8 +2,7 @@ package com.github.technus.tectech.thing.metaTileEntity.pipe; import com.github.technus.tectech.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.loader.network.PipeActivityMessage; -import com.github.technus.tectech.loader.network.NetworkDispatcher; +import com.github.technus.tectech.loader.NetworkDispatcher; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.GT_Mod; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Energy.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Energy.java index 8ee90c6954..4cc40b471c 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Energy.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Energy.java @@ -2,8 +2,7 @@ package com.github.technus.tectech.thing.metaTileEntity.pipe; import com.github.technus.tectech.CommonValues; import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.loader.network.PipeActivityMessage; -import com.github.technus.tectech.loader.network.NetworkDispatcher; +import com.github.technus.tectech.loader.NetworkDispatcher; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.GT_Mod; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/PipeActivityMessage.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/PipeActivityMessage.java new file mode 100644 index 0000000000..e7183b8838 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/PipeActivityMessage.java @@ -0,0 +1,133 @@ +package com.github.technus.tectech.thing.metaTileEntity.pipe; + +import cpw.mods.fml.common.network.ByteBufUtils; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; +import eu.usrv.yamcore.network.server.AbstractServerMessageHandler; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; + +public class PipeActivityMessage implements IMessage { + int mPosX; + int mPosY; + int mPosZ; + int mPosD; + int mActive; + + public PipeActivityMessage() { + } + + private PipeActivityMessage(IActivePipe metaTile) { + IGregTechTileEntity base=metaTile.getBaseMetaTileEntity(); + mPosX=base.getXCoord(); + mPosY=base.getYCoord(); + mPosZ=base.getZCoord(); + mPosD=base.getWorld().provider.dimensionId; + mActive=metaTile.getActive()?1:0; + } + + private PipeActivityMessage(World world, int x, int y, int z, boolean active) { + mPosX=x; + mPosY=y; + mPosZ=z; + mPosD=world.provider.dimensionId; + mActive=active?1:0; + } + + @Override + public void fromBytes(ByteBuf pBuffer) { + NBTTagCompound tTag = ByteBufUtils.readTag(pBuffer); + mPosX = tTag.getInteger("posx"); + mPosY = tTag.getInteger("posy"); + mPosZ = tTag.getInteger("posz"); + mPosD = tTag.getInteger("posd"); + mActive = tTag.getInteger("active"); + } + + @Override + public void toBytes(ByteBuf pBuffer) { + NBTTagCompound tFXTag = new NBTTagCompound(); + tFXTag.setInteger("posx", mPosX); + tFXTag.setInteger("posy", mPosY); + tFXTag.setInteger("posz", mPosZ); + tFXTag.setInteger("posd", mPosD); + tFXTag.setInteger("active", mActive); + + ByteBufUtils.writeTag(pBuffer, tFXTag); + } + + public static class PipeActivityQuery extends PipeActivityMessage { + public PipeActivityQuery() { + } + + public PipeActivityQuery(IActivePipe metaTile) { + super(metaTile); + } + + public PipeActivityQuery(World world, int x,int y,int z, boolean active) { + super(world,x,y,z,active); + } + } + + public static class PipeActivityData extends PipeActivityMessage { + public PipeActivityData() { + } + + private PipeActivityData(PipeActivityQuery query){ + mPosX=query.mPosX; + mPosY=query.mPosY; + mPosZ=query.mPosZ; + mPosD=query.mPosD; + mActive=query.mActive; + } + + public PipeActivityData(IActivePipe metaTile) { + super(metaTile); + } + + public PipeActivityData(World world, int x,int y,int z, boolean active) { + super(world,x,y,z,active); + } + } + + public static class ClientHandler extends AbstractClientMessageHandler { + @Override + public IMessage handleClientMessage(EntityPlayer pPlayer, PipeActivityData pMessage, MessageContext pCtx) { + if(pPlayer.worldObj.provider.dimensionId==pMessage.mPosD){ + TileEntity te=pPlayer.worldObj.getTileEntity(pMessage.mPosX,pMessage.mPosY,pMessage.mPosZ); + if(te instanceof IGregTechTileEntity){ + IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); + if(meta instanceof IActivePipe){ + ((IActivePipe) meta).setActive((byte)pMessage.mActive==1); + } + } + } + return null; + } + } + + public static class ServerHandler extends AbstractServerMessageHandler { + @Override + public IMessage handleServerMessage(EntityPlayer pPlayer, PipeActivityQuery pMessage, MessageContext pCtx) { + World world= DimensionManager.getWorld(pMessage.mPosD); + if(world!=null) { + TileEntity te = world.getTileEntity(pMessage.mPosX, pMessage.mPosY, pMessage.mPosZ); + if (te instanceof IGregTechTileEntity) { + IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); + if (meta instanceof IActivePipe) { + pMessage.mActive=((IActivePipe) meta).getActive()?1:0; + return new PipeActivityData(pMessage); + } + } + } + return null; + } + } +} \ No newline at end of file -- cgit