diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index f818633c8..590e2dbea 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -31,7 +31,7 @@ public final class ActuallyAdditionsAPI{ public static final String MOD_ID = "actuallyadditions"; public static final String API_ID = MOD_ID+"api"; - public static final String API_VERSION = "21"; + public static final String API_VERSION = "22"; public static final List CRUSHER_RECIPES = new ArrayList(); public static final List BALL_OF_FUR_RETURN_ITEMS = new ArrayList(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/laser/ConnectionPair.java b/src/main/java/de/ellpeck/actuallyadditions/api/laser/ConnectionPair.java index 4c520bb13..cefd2021a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/laser/ConnectionPair.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/laser/ConnectionPair.java @@ -13,15 +13,23 @@ package de.ellpeck.actuallyadditions.api.laser; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.math.BlockPos; +import java.util.ArrayList; +import java.util.List; + public class ConnectionPair{ + //TODO Remove eventually, just for making the implementation of LaserType work + public static final List PAIRS_FOR_FIXING = new ArrayList(); + public final BlockPos[] positions = new BlockPos[2]; public final boolean suppressConnectionRender; + public LaserType type; - public ConnectionPair(BlockPos firstRelay, BlockPos secondRelay, boolean suppressConnectionRender){ + public ConnectionPair(BlockPos firstRelay, BlockPos secondRelay, LaserType type, boolean suppressConnectionRender){ this.positions[0] = firstRelay; this.positions[1] = secondRelay; this.suppressConnectionRender = suppressConnectionRender; + this.type = type; } public static ConnectionPair readFromNBT(NBTTagCompound compound){ @@ -33,7 +41,17 @@ public class ConnectionPair{ int aZ = compound.getInteger("z"+i); pos[i] = new BlockPos(anX, aY, aZ); } - return new ConnectionPair(pos[0], pos[1], compound.getBoolean("SuppressRender")); + + LaserType type = null; + String typeStrg = compound.getString("Type"); + if(typeStrg != null && !typeStrg.isEmpty()){ + type = LaserType.valueOf(typeStrg); + } + ConnectionPair pair = new ConnectionPair(pos[0], pos[1], type, compound.getBoolean("SuppressRender")); + if(type == null){ + PAIRS_FOR_FIXING.add(pair); + } + return pair; } return null; } @@ -60,6 +78,7 @@ public class ConnectionPair{ compound.setInteger("y"+i, relay.getY()); compound.setInteger("z"+i, relay.getZ()); } + compound.setString("Type", this.type.name()); compound.setBoolean("SuppressRender", this.suppressConnectionRender); return compound; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/laser/ILaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/api/laser/ILaserRelayConnectionHandler.java index 503a91580..5654f6efb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/laser/ILaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/laser/ILaserRelayConnectionHandler.java @@ -30,7 +30,7 @@ public interface ILaserRelayConnectionHandler{ Network getNetworkFor(BlockPos relay, World world); - boolean addConnection(BlockPos firstRelay, BlockPos secondRelay, World world); + boolean addConnection(BlockPos firstRelay, BlockPos secondRelay, LaserType type, World world); - boolean addConnection(BlockPos firstRelay, BlockPos secondRelay, World world, boolean suppressConnectionRender); + boolean addConnection(BlockPos firstRelay, BlockPos secondRelay, LaserType type, World world, boolean suppressConnectionRender); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/laser/LaserType.java b/src/main/java/de/ellpeck/actuallyadditions/api/laser/LaserType.java new file mode 100644 index 000000000..fc05f1959 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/api/laser/LaserType.java @@ -0,0 +1,15 @@ +/* + * This file ("LaserType.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.api.laser; + +public enum LaserType{ + ENERGY, ITEM, FLUID +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java index 34110eb72..9cb6922af 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java @@ -10,15 +10,17 @@ package de.ellpeck.actuallyadditions.mod.event; +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; +import de.ellpeck.actuallyadditions.api.laser.ConnectionPair; +import de.ellpeck.actuallyadditions.api.laser.LaserType; import de.ellpeck.actuallyadditions.mod.achievement.InitAchievements; import de.ellpeck.actuallyadditions.mod.achievement.TheAchievements; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.data.PlayerData; import de.ellpeck.actuallyadditions.mod.data.WorldData; import de.ellpeck.actuallyadditions.mod.items.InitItems; -import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.network.PacketHandlerHelper; -import de.ellpeck.actuallyadditions.mod.network.PacketServerToClient; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.Util; @@ -30,6 +32,7 @@ import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.living.LivingDeathEvent; import net.minecraftforge.event.entity.living.LivingDropsEvent; @@ -142,6 +145,33 @@ public class CommonEvents{ @SubscribeEvent public void onLoad(WorldEvent.Load event){ WorldData.load(event.getWorld()); + + //TODO Remove this eventually (part of the ConnectionPair system change) + if(!ConnectionPair.PAIRS_FOR_FIXING.isEmpty()){ + for(ConnectionPair pair : ConnectionPair.PAIRS_FOR_FIXING){ + TileEntity first = event.getWorld().getTileEntity(pair.positions[0]); + TileEntity second = event.getWorld().getTileEntity(pair.positions[1]); + + boolean fixed = false; + if(first instanceof TileEntityLaserRelay && second instanceof TileEntityLaserRelay){ + LaserType firstType = ((TileEntityLaserRelay)first).type; + LaserType secondType = ((TileEntityLaserRelay)second).type; + if(firstType == secondType){ + pair.type = firstType; + fixed = true; + } + } + + if(!fixed){ + for(int i = 0; i < pair.positions.length; i++){ + ActuallyAdditionsAPI.connectionHandler.removeRelayFromNetwork(pair.positions[i], event.getWorld()); + } + ModUtil.LOGGER.error("Had to remove a Laser Relay connection between "+pair.positions[0]+" and "+pair.positions[1]+" because it couldn't be adapted to the new system!"); + } + } + ModUtil.LOGGER.info("Adapted "+ConnectionPair.PAIRS_FOR_FIXING.size()+" Laser Relay Connections to the new system!"); + ConnectionPair.PAIRS_FOR_FIXING.clear(); + } } @SubscribeEvent diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index a2121d4c5..164534d1a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -61,11 +61,12 @@ public class ItemLaserWrench extends ItemBase{ if(savedPos != null){ TileEntity savedTile = world.getTileEntity(savedPos); int distanceSq = (int)savedPos.distanceSq(pos); - if(ItemPhantomConnector.getStoredWorld(stack) == world && savedTile instanceof TileEntityLaserRelay && ((TileEntityLaserRelay)savedTile).isItem == ((TileEntityLaserRelay)tile).isItem && distanceSq <= TileEntityLaserRelay.MAX_DISTANCE*TileEntityLaserRelay.MAX_DISTANCE && ActuallyAdditionsAPI.connectionHandler.addConnection(savedPos, pos, world)){ + TileEntityLaserRelay relay = (TileEntityLaserRelay)tile; + if(ItemPhantomConnector.getStoredWorld(stack) == world && savedTile instanceof TileEntityLaserRelay && ((TileEntityLaserRelay)savedTile).type == relay.type && distanceSq <= TileEntityLaserRelay.MAX_DISTANCE*TileEntityLaserRelay.MAX_DISTANCE && ActuallyAdditionsAPI.connectionHandler.addConnection(savedPos, pos, relay.type, world)){ ItemPhantomConnector.clearStorage(stack, "XCoordOfTileStored", "YCoordOfTileStored", "ZCoordOfTileStored", "WorldOfTileStored"); ((TileEntityLaserRelay)savedTile).sendUpdate(); - ((TileEntityLaserRelay)tile).sendUpdate(); + relay.sendUpdate(); player.addChatComponentMessage(new TextComponentTranslation("tooltip."+ModUtil.MOD_ID+".laser.connected.desc")); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java index a2047f32f..9915dd239 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.misc; import de.ellpeck.actuallyadditions.api.laser.ConnectionPair; import de.ellpeck.actuallyadditions.api.laser.ILaserRelayConnectionHandler; +import de.ellpeck.actuallyadditions.api.laser.LaserType; import de.ellpeck.actuallyadditions.api.laser.Network; import de.ellpeck.actuallyadditions.mod.data.WorldData; import io.netty.util.internal.ConcurrentSet; @@ -68,7 +69,7 @@ public final class LaserRelayConnectionHandler implements ILaserRelayConnectionH WorldData.getDataForWorld(world).laserRelayNetworks.remove(network); for(ConnectionPair pair : network.connections){ if(!pair.contains(relay)){ - this.addConnection(pair.positions[0], pair.positions[1], world, pair.suppressConnectionRender); + this.addConnection(pair.positions[0], pair.positions[1], pair.type, world, pair.suppressConnectionRender); } } //System.out.println("Removing a Relay from the Network!"); @@ -91,8 +92,8 @@ public final class LaserRelayConnectionHandler implements ILaserRelayConnectionH } @Override - public boolean addConnection(BlockPos firstRelay, BlockPos secondRelay, World world){ - return this.addConnection(firstRelay, secondRelay, world, false); + public boolean addConnection(BlockPos firstRelay, BlockPos secondRelay, LaserType type, World world){ + return this.addConnection(firstRelay, secondRelay, type, world, false); } /** @@ -100,7 +101,7 @@ public final class LaserRelayConnectionHandler implements ILaserRelayConnectionH * (Puts it into the correct network!) */ @Override - public boolean addConnection(BlockPos firstRelay, BlockPos secondRelay, World world, boolean suppressConnectionRender){ + public boolean addConnection(BlockPos firstRelay, BlockPos secondRelay, LaserType type, World world, boolean suppressConnectionRender){ if(firstRelay == null || secondRelay == null || firstRelay == secondRelay || firstRelay.equals(secondRelay)){ return false; } @@ -112,7 +113,7 @@ public final class LaserRelayConnectionHandler implements ILaserRelayConnectionH if(firstNetwork == null && secondNetwork == null){ firstNetwork = new Network(); WorldData.getDataForWorld(world).laserRelayNetworks.add(firstNetwork); - firstNetwork.connections.add(new ConnectionPair(firstRelay, secondRelay, suppressConnectionRender)); + firstNetwork.connections.add(new ConnectionPair(firstRelay, secondRelay, type, suppressConnectionRender)); } //The same Network else if(firstNetwork == secondNetwork){ @@ -121,15 +122,15 @@ public final class LaserRelayConnectionHandler implements ILaserRelayConnectionH //Both relays have laserRelayNetworks else if(firstNetwork != null && secondNetwork != null){ mergeNetworks(firstNetwork, secondNetwork, world); - firstNetwork.connections.add(new ConnectionPair(firstRelay, secondRelay, suppressConnectionRender)); + firstNetwork.connections.add(new ConnectionPair(firstRelay, secondRelay, type, suppressConnectionRender)); } //Only first network exists else if(firstNetwork != null){ - firstNetwork.connections.add(new ConnectionPair(firstRelay, secondRelay, suppressConnectionRender)); + firstNetwork.connections.add(new ConnectionPair(firstRelay, secondRelay, type, suppressConnectionRender)); } //Only second network exists else{ - secondNetwork.connections.add(new ConnectionPair(firstRelay, secondRelay, suppressConnectionRender)); + secondNetwork.connections.add(new ConnectionPair(firstRelay, secondRelay, type, suppressConnectionRender)); } //System.out.println("Connected "+firstRelay.toString()+" to "+secondRelay.toString()); //System.out.println(firstNetwork == null ? secondNetwork.toString() : firstNetwork.toString()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java index a95e60093..7c2e12449 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java @@ -23,7 +23,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.fluids.BlockFluidBase; import net.minecraftforge.fluids.IFluidBlock; import java.util.List; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index d55f71bca..1e9860809 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.laser.ConnectionPair; +import de.ellpeck.actuallyadditions.api.laser.LaserType; import de.ellpeck.actuallyadditions.api.laser.Network; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.data.PlayerData; @@ -36,15 +37,15 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ private static final float[] COLOR = new float[]{1F, 0F, 0F}; private static final float[] COLOR_ITEM = new float[]{139F/255F, 94F/255F, 1F}; - public final boolean isItem; + public final LaserType type; private Set tempConnectionStorage; private boolean hasCheckedHandlersAround; - public TileEntityLaserRelay(String name, boolean isItem){ + public TileEntityLaserRelay(String name, LaserType type){ super(name); - this.isItem = isItem; + this.type = type; } @Override @@ -58,7 +59,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ if(!list.hasNoTags()){ for(int i = 0; i < list.tagCount(); i++){ ConnectionPair pair = ConnectionPair.readFromNBT(list.getCompoundTagAt(i)); - ActuallyAdditionsAPI.connectionHandler.addConnection(pair.positions[0], pair.positions[1], this.worldObj, pair.suppressConnectionRender); + ActuallyAdditionsAPI.connectionHandler.addConnection(pair.positions[0], pair.positions[1], this.type, this.worldObj, pair.suppressConnectionRender); } } } @@ -112,7 +113,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ if(network != null){ for(ConnectionPair aPair : network.connections){ if(!aPair.suppressConnectionRender && aPair.contains(this.pos) && this.pos.equals(aPair.positions[0])){ - AssetUtil.renderParticlesFromAToB(aPair.positions[0].getX(), aPair.positions[0].getY(), aPair.positions[0].getZ(), aPair.positions[1].getX(), aPair.positions[1].getY(), aPair.positions[1].getZ(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 1 : Util.RANDOM.nextInt(3)+1, 0.8F, this.isItem ? COLOR_ITEM : COLOR, 1F); + AssetUtil.renderParticlesFromAToB(aPair.positions[0].getX(), aPair.positions[0].getY(), aPair.positions[0].getZ(), aPair.positions[1].getX(), aPair.positions[1].getY(), aPair.positions[1].getZ(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 1 : Util.RANDOM.nextInt(3)+1, 0.8F, this.type == LaserType.ITEM ? COLOR_ITEM : COLOR, 1F); } } } @@ -136,7 +137,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ public void validate(){ if(this.tempConnectionStorage != null){ for(ConnectionPair pair : this.tempConnectionStorage){ - ActuallyAdditionsAPI.connectionHandler.addConnection(pair.positions[0], pair.positions[1], this.worldObj, pair.suppressConnectionRender); + ActuallyAdditionsAPI.connectionHandler.addConnection(pair.positions[0], pair.positions[1], pair.type, this.worldObj, pair.suppressConnectionRender); } this.tempConnectionStorage = null; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java index 3a4e05310..1d986ae9e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.laser.ConnectionPair; +import de.ellpeck.actuallyadditions.api.laser.LaserType; import de.ellpeck.actuallyadditions.api.laser.Network; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; @@ -35,7 +36,7 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements public static final int CAP = 1000; public TileEntityLaserRelayEnergy(String name){ - super(name, false); + super(name, LaserType.ENERGY); } public TileEntityLaserRelayEnergy(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java index 99c7faa45..741932481 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.api.laser.ConnectionPair; +import de.ellpeck.actuallyadditions.api.laser.LaserType; import de.ellpeck.actuallyadditions.api.laser.Network; import de.ellpeck.actuallyadditions.mod.tile.TileEntityItemViewer.GenericItemHandlerInfo; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; @@ -31,7 +32,7 @@ public class TileEntityLaserRelayItem extends TileEntityLaserRelay{ public final Map handlersAround = new ConcurrentHashMap(); public TileEntityLaserRelayItem(String name){ - super(name, true); + super(name, LaserType.ITEM); } public TileEntityLaserRelayItem(){