From 0198bd373801e1c7da4450107abcaecab17e69af Mon Sep 17 00:00:00 2001 From: Calclavia Date: Thu, 23 Jan 2014 20:37:14 +0800 Subject: [PATCH] Fixed tesla multiblock issue --- .../electrical/tesla/BlockTesla.java | 2 +- .../electrical/tesla/TeslaGrid.java | 7 +- .../electrical/tesla/TileTesla.java | 104 +++++++++++++----- 3 files changed, 83 insertions(+), 30 deletions(-) diff --git a/src/main/java/resonantinduction/electrical/tesla/BlockTesla.java b/src/main/java/resonantinduction/electrical/tesla/BlockTesla.java index e870d46b..c1ca651e 100644 --- a/src/main/java/resonantinduction/electrical/tesla/BlockTesla.java +++ b/src/main/java/resonantinduction/electrical/tesla/BlockTesla.java @@ -79,7 +79,7 @@ public class BlockTesla extends BlockIOBase implements ITileEntityProvider { boolean receiveMode = tileEntity.toggleReceive(); - if (world.isRemote) + if (!world.isRemote) { entityPlayer.addChatMessage(LanguageUtility.getLocal("message.tesla.mode").replace("%v", receiveMode + "")); } diff --git a/src/main/java/resonantinduction/electrical/tesla/TeslaGrid.java b/src/main/java/resonantinduction/electrical/tesla/TeslaGrid.java index 87de2a91..40ab81cc 100644 --- a/src/main/java/resonantinduction/electrical/tesla/TeslaGrid.java +++ b/src/main/java/resonantinduction/electrical/tesla/TeslaGrid.java @@ -7,6 +7,9 @@ import java.util.HashSet; import java.util.Iterator; import java.util.Set; +import mffs.api.fortron.IServerThread; +import net.minecraft.server.ServerListenThread; +import net.minecraft.server.ThreadMinecraftServer; import net.minecraft.tileentity.TileEntity; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.relauncher.Side; @@ -57,7 +60,9 @@ public class TeslaGrid public static TeslaGrid instance() { - if (FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER) + Thread thr = Thread.currentThread(); + + if ((thr instanceof ThreadMinecraftServer) || (thr instanceof ServerListenThread) || (thr instanceof IServerThread)) { return INSTANCE_SERVER; } diff --git a/src/main/java/resonantinduction/electrical/tesla/TileTesla.java b/src/main/java/resonantinduction/electrical/tesla/TileTesla.java index de0e43a6..fef3e1dc 100644 --- a/src/main/java/resonantinduction/electrical/tesla/TileTesla.java +++ b/src/main/java/resonantinduction/electrical/tesla/TileTesla.java @@ -100,13 +100,13 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure 0; /** - * Only transfer if it is the bottom controlling Tesla tower. + * Only transfer if it is the controlling Tesla tower. */ if (this.getMultiBlock().isPrimary()) { - // this.produce(); + this.produce(); - if (this.ticks % (4 + this.worldObj.rand.nextInt(2)) == 0 && ((this.worldObj.isRemote && isTransfering) || (this.energy.getEnergy() > 0 && !this.worldObj.isBlockIndirectlyGettingPowered(this.xCoord, this.yCoord, this.zCoord)))) + if (this.ticks % (4 + this.worldObj.rand.nextInt(2)) == 0 && ((this.worldObj.isRemote && isTransfering) || (!this.energy.isEmpty() && !this.worldObj.isBlockIndirectlyGettingPowered(this.xCoord, this.yCoord, this.zCoord)))) { final TileTesla topTesla = this.getTopTelsa(); final Vector3 topTeslaVector = new Vector3(topTesla); @@ -142,28 +142,31 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure transferTeslaCoils = new ArrayList(); - for (ITesla tesla : TeslaGrid.instance().get()) + for (ITesla teslaReceiver : TeslaGrid.instance().get()) { - if (new Vector3((TileEntity) tesla).distance(new Vector3(this)) < this.getRange()) + if (new Vector3((TileEntity) teslaReceiver).distance(new Vector3(this)) < this.getRange()) { + if (teslaReceiver instanceof TileTesla) + { + if (((TileTesla) teslaReceiver).getHeight() <= 1) + { + continue; + } + + teslaReceiver = ((TileTesla) teslaReceiver).getMultiBlock().get(); + } + /** * Make sure Tesla is not part of this tower. */ - if (!this.connectedTeslas.contains(tesla) && tesla.canTeslaTransfer(this)) + if (!this.connectedTeslas.contains(teslaReceiver) && teslaReceiver.canTeslaTransfer(this)) { - if (tesla instanceof TileTesla) - { - if (((TileTesla) tesla).getHeight() <= 1) - { - continue; - } - - tesla = getMultiBlock().get(); - } - - transferTeslaCoils.add(tesla); + transferTeslaCoils.add(teslaReceiver); } } } @@ -218,6 +221,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure 0) { - tesla.teslaTransfer((long) (transferEnergy * (1 - (this.worldObj.rand.nextFloat() * 0.1f))), true); + tesla.teslaTransfer(transferEnergy, true); this.teslaTransfer(-transferEnergy, true); } } @@ -277,7 +281,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure 0) - { - ((TileTesla) vecs[vecs.length - 1].getTileEntity(worldObj)).getMultiBlock().deconstruct(); - ((TileTesla) vecs[vecs.length - 1].getTileEntity(worldObj)).getMultiBlock().construct(); - } + TileTesla mainTile = getLowestTesla(); + mainTile.getMultiBlock().deconstruct(); + mainTile.getMultiBlock().construct(); boolean isTop = new Vector3(this).translate(new Vector3(0, 1, 0)).getTileEntity(this.worldObj) instanceof TileTesla; boolean isBottom = new Vector3(this).translate(new Vector3(0, -1, 0)).getTileEntity(this.worldObj) instanceof TileTesla; @@ -636,7 +636,31 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure