From c6d2a26a6d915d1512df7463a960171b28fc549b Mon Sep 17 00:00:00 2001 From: malte0811 Date: Sat, 12 Jan 2019 11:37:16 +0100 Subject: [PATCH] The resistor wires are returned when the marx generator is disassembled now, closes #62 --- build.gradle | 4 +- .../blocks/TileEntityIWMultiblock.java | 1 + .../blocks/hv/TileEntityMarx.java | 66 +++++++++++++++---- 3 files changed, 57 insertions(+), 14 deletions(-) diff --git a/build.gradle b/build.gradle index a4b6f74..8c4200a 100644 --- a/build.gradle +++ b/build.gradle @@ -93,8 +93,8 @@ dependencies { //runtime "codechicken:ChickenASM:1.12-1.0.2.7" //runtime "mrtjpcore:MrTJPCore-1.12.2:2.1.3.35:universal" //Tech Reborn - compileOnly "TechReborn:TechReborn-1.12:2.6.+:dev" - compileOnly "RebornCore:RebornCore-1.12:3.2.+:dev" + compileOnly "TechReborn:TechReborn-1.12:2.6.9.7:universal" + compileOnly "RebornCore:RebornCore-1.12:3.2.+:universal" //Others compileOnly 'com.elytradev:mirage:2.0.1-SNAPSHOT' compileOnly "mezz.jei:jei_1.12:4.+" diff --git a/src/main/java/malte0811/industrialwires/blocks/TileEntityIWMultiblock.java b/src/main/java/malte0811/industrialwires/blocks/TileEntityIWMultiblock.java index 1ac9085..7a19fff 100644 --- a/src/main/java/malte0811/industrialwires/blocks/TileEntityIWMultiblock.java +++ b/src/main/java/malte0811/industrialwires/blocks/TileEntityIWMultiblock.java @@ -78,6 +78,7 @@ public abstract class TileEntityIWMultiblock extends TileEntityIWBase implements T master = master(here); return master!=null?master:def; } + public void disassemble() { if (formed && !world.isRemote) { BlockPos startPos = getOrigin(); diff --git a/src/main/java/malte0811/industrialwires/blocks/hv/TileEntityMarx.java b/src/main/java/malte0811/industrialwires/blocks/hv/TileEntityMarx.java index 2f95a21..8e7fb13 100644 --- a/src/main/java/malte0811/industrialwires/blocks/hv/TileEntityMarx.java +++ b/src/main/java/malte0811/industrialwires/blocks/hv/TileEntityMarx.java @@ -23,6 +23,7 @@ import blusunrize.immersiveengineering.api.energy.wires.ImmersiveNetHandler; import blusunrize.immersiveengineering.api.energy.wires.WireType; import blusunrize.immersiveengineering.api.energy.wires.redstone.IRedstoneConnector; import blusunrize.immersiveengineering.api.energy.wires.redstone.RedstoneWireNetwork; +import blusunrize.immersiveengineering.common.IESaveData; import blusunrize.immersiveengineering.common.blocks.BlockTypes_MetalsIE; import blusunrize.immersiveengineering.common.blocks.metal.*; import blusunrize.immersiveengineering.common.util.Utils; @@ -159,8 +160,6 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable, return getPos().subtract(offset).offset(facing.getOpposite(), 3); } - - @SuppressWarnings("unchecked") @Override public IBlockState getOriginalBlock() { int forward = getForward(); @@ -191,6 +190,53 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable, } } + @Override + public void disassemble() { + boolean active = formed && !world.isRemote; + IndustrialWires.logger.info("Calling disassemble for {}, active {}", pos, active); + super.disassemble(); + if (active) { + final int forward = -1; + BlockPos master = pos.subtract(offset); + ItemStack coil = new ItemStack(IEObjects.itemWireCoil, 1, 2); + WireType type = WireType.STEEL; + TargetingInfo dummy = new TargetingInfo(EnumFacing.DOWN, 0, 0, 0); + for (int up = 0; up < stageCount - 1; ++up) { + for (int right = 0; right < 2; ++right) { + BlockPos lowerPos = offset(master, facing, mirrored, right, forward, up); + BlockPos upperPos = lowerPos.up(); + IndustrialWires.logger.info("Lower: {}, upper: {}, master: {}", lowerPos, upperPos, master); + TileEntity lowerTE = world.getTileEntity(lowerPos); + if (!(lowerTE instanceof IImmersiveConnectable)) { + world.spawnEntity(new EntityItem(world, lowerPos.getX() + .5, lowerPos.getY() + .5, + lowerPos.getZ() + .5, coil)); + continue; + } + TileEntity upperTE = world.getTileEntity(upperPos); + if (!(upperTE instanceof IImmersiveConnectable)) { + world.spawnEntity(new EntityItem(world, lowerPos.getX() + .5, lowerPos.getY() + .5, + lowerPos.getZ() + .5, coil)); + continue; + } + IImmersiveConnectable lowerIIC = (IImmersiveConnectable) lowerTE; + IImmersiveConnectable upperIIC = (IImmersiveConnectable) upperTE; + ImmersiveNetHandler.Connection conn = ImmersiveNetHandler.INSTANCE.addAndGetConnection(world, + lowerPos, upperPos, 1, type); + lowerIIC.connectCable(type, dummy, upperIIC); + upperIIC.connectCable(type, dummy, lowerIIC); + ImmersiveNetHandler.INSTANCE.addBlockData(world, conn); + IESaveData.setDirty(world.provider.getDimension()); + lowerTE.markDirty(); + IBlockState state = world.getBlockState(lowerPos); + world.notifyBlockUpdate(lowerPos, state, state, 3); + upperTE.markDirty(); + state = world.getBlockState(upperPos); + world.notifyBlockUpdate(upperPos, state, state, 3); + } + } + } + } + @Override public void update() { ApiUtils.checkForNeedlessTicking(this); @@ -540,8 +586,9 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable, return pos; } + @Override - public boolean canConnectCable(WireType cableType, TargetingInfo target) { + public boolean canConnectCable(WireType cableType, TargetingInfo target, Vec3i offset) { if (hasConnection) { return false; } @@ -585,7 +632,7 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable, } @Override - public Vec3d getRaytraceOffset(IImmersiveConnectable link) { + public Vec3d getConnectionOffset(ImmersiveNetHandler.Connection con) { Matrix4 transf = getBaseTransform(); if (getRight()==0) { return transf.apply(new Vec3d(.5, .5, 7/16D)); @@ -594,24 +641,19 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable, } } - @Override - public Vec3d getConnectionOffset(ImmersiveNetHandler.Connection con) { - return getRaytraceOffset(null); - } - - @Override public void validate() { super.validate(); - ImmersiveNetHandler.INSTANCE.resetCachedIndirectConnections(); + if (!world.isRemote) + ApiUtils.addFutureServerTask(world, () -> ImmersiveNetHandler.INSTANCE.onTEValidated(this)); } @Override public void invalidate() { super.invalidate(); - if (world.isRemote) + if (world.isRemote && !IndustrialWires.proxy.isSingleplayer()) ImmersiveNetHandler.INSTANCE.clearConnectionsOriginatingFrom(pos, world); }