diff --git a/src/main/java/com/hbm/interfaces/IAnimatedDoor.java b/src/main/java/com/hbm/interfaces/IAnimatedDoor.java deleted file mode 100644 index d097f6fe2..000000000 --- a/src/main/java/com/hbm/interfaces/IAnimatedDoor.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.hbm.interfaces; - -public interface IAnimatedDoor extends IDoor { - - public void handleNewState(byte state); -} diff --git a/src/main/java/com/hbm/interfaces/IDoor.java b/src/main/java/com/hbm/interfaces/IDoor.java deleted file mode 100644 index a0c539a28..000000000 --- a/src/main/java/com/hbm/interfaces/IDoor.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.hbm.interfaces; - -public interface IDoor { - - void open(); - void close(); - DoorState getState(); - void toggle(); - default boolean setTexture(String tex) { - return false; - } - default void setTextureState(byte tex) { } - - default boolean setSkinIndex(byte skinIndex) { - return false; - } - - enum DoorState { - CLOSED, - OPEN, - CLOSING, - OPENING - } -} diff --git a/src/main/java/com/hbm/packet/PacketDispatcher.java b/src/main/java/com/hbm/packet/PacketDispatcher.java index 21dd1fd2b..165664236 100644 --- a/src/main/java/com/hbm/packet/PacketDispatcher.java +++ b/src/main/java/com/hbm/packet/PacketDispatcher.java @@ -53,8 +53,6 @@ public class PacketDispatcher { wrapper.registerMessage(NBTControlPacket.Handler.class, NBTControlPacket.class, i++, Side.SERVER); //Packet to send for anvil recipes to be crafted wrapper.registerMessage(AnvilCraftPacket.Handler.class, AnvilCraftPacket.class, i++, Side.SERVER); - //Sends a funi text to display like a music disc announcement - wrapper.registerMessage(TEDoorAnimationPacket.Handler.class, TEDoorAnimationPacket.class, i++, Side.CLIENT); //Does ExVNT standard player knockback wrapper.registerMessage(ExplosionKnockbackPacket.Handler.class, ExplosionKnockbackPacket.class, i++, Side.CLIENT); //just go fuck yourself already diff --git a/src/main/java/com/hbm/packet/toclient/TEDoorAnimationPacket.java b/src/main/java/com/hbm/packet/toclient/TEDoorAnimationPacket.java deleted file mode 100644 index 3511f0d07..000000000 --- a/src/main/java/com/hbm/packet/toclient/TEDoorAnimationPacket.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.hbm.packet.toclient; - -import com.hbm.interfaces.IAnimatedDoor; - -import cpw.mods.fml.common.network.simpleimpl.IMessage; -import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; -import cpw.mods.fml.common.network.simpleimpl.MessageContext; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import io.netty.buffer.ByteBuf; -import net.minecraft.client.Minecraft; -import net.minecraft.tileentity.TileEntity; - -public class TEDoorAnimationPacket implements IMessage { - - public int x, y, z; - public byte state; - public byte skinIndex; - public byte texture; - - public TEDoorAnimationPacket() { - } - - public TEDoorAnimationPacket(int x, int y, int z, byte state) { - this(x, y, z, state, (byte) 0, (byte) -1); - } - - public TEDoorAnimationPacket(int x, int y, int z, byte state, byte skinIndex, byte tex) { - this.x = x; - this.y = y; - this.z = z; - this.state = state; - this.skinIndex = skinIndex; - this.texture = tex; - } - - @Override - public void fromBytes(ByteBuf buf) { - x = buf.readInt(); - y = buf.readInt(); - z = buf.readInt(); - state = buf.readByte(); - skinIndex = buf.readByte(); - if(buf.readableBytes() == 1){ - texture = buf.readByte(); - } - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeInt(x); - buf.writeInt(y); - buf.writeInt(z); - buf.writeByte(state); - buf.writeByte(skinIndex); - if(texture != -1){ - buf.writeByte(texture); - } - } - - public static class Handler implements IMessageHandler { - - @Override - @SideOnly(Side.CLIENT) - public IMessage onMessage(TEDoorAnimationPacket m, MessageContext ctx) { - - TileEntity te = Minecraft.getMinecraft().theWorld.getTileEntity(m.x, m.y, m.z); - if(te instanceof IAnimatedDoor){ - ((IAnimatedDoor) te).handleNewState(m.state); - ((IAnimatedDoor) te).setSkinIndex(m.skinIndex); - ((IAnimatedDoor) te).setTextureState(m.texture); - } - - return null; - } - } -} diff --git a/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java b/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java index d05ac0843..9b8751d05 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java +++ b/src/main/java/com/hbm/tileentity/TileEntityDoorGeneric.java @@ -6,25 +6,22 @@ import java.util.Set; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.generic.BlockDoorGeneric; -import com.hbm.interfaces.IAnimatedDoor; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; -import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.toclient.TEDoorAnimationPacket; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.machine.TileEntityLockableBase; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.Rotation; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAnimatedDoor { +public class TileEntityDoorGeneric extends TileEntityLockableBase { //0: closed, 1: open, 2: closing, 3: opening public byte state = 0; @@ -39,9 +36,9 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn private AudioWrapper audio; private AudioWrapper audio2; - + @Override - public void updateEntity(){ + public void updateEntity() { if(state == 3) { openTicks++; if(openTicks >= getDoorType().timeToOpen()) { @@ -55,39 +52,39 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn } if(!worldObj.isRemote) { - + BlockPos pos = new BlockPos(this); - + int[][] ranges = getDoorType().getDoorOpenRanges(); ForgeDirection dir = ForgeDirection.getOrientation(getBlockMetadata() - BlockDummyable.offset); - + if(state == 3) { - + for(int i = 0; i < ranges.length; i++) { - + int[] range = ranges[i]; BlockPos startPos = new BlockPos(range[0], range[1], range[2]); float time = getDoorType().getDoorRangeOpenTime(openTicks, i); - + for(int j = 0; j < Math.abs(range[3]); j++) { - + if((float)j / (Math.abs(range[3] - 1)) > time) break; - + for(int k = 0; k < range[4]; k++) { BlockPos add = new BlockPos(0, 0, 0); - switch(range[5]){ + switch(range[5]) { case 0: add = new BlockPos(0, k, (int)Math.signum(range[3]) * j); break; case 1: add = new BlockPos(k, (int)Math.signum(range[3]) * j, 0); break; case 2: add = new BlockPos((int)Math.signum(range[3]) * j, k, 0); break; } - + Rotation r = Rotation.getBlockRotation(dir); if(dir == Library.POS_X || dir == Library.NEG_X) r = r.add(Rotation.CLOCKWISE_180); - + BlockPos finalPos = startPos.add(add).rotate(r).add(pos); - + if(finalPos.equals(pos)) { this.shouldUseBB = false; } else { @@ -96,24 +93,24 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn } } } - - } else if(state == 2){ - + + } else if(state == 2) { + for(int i = 0; i < ranges.length; i++) { - + int[] range = ranges[i]; BlockPos startPos = new BlockPos(range[0], range[1], range[2]); float time = getDoorType().getDoorRangeOpenTime(openTicks, i); - + for(int j = Math.abs(range[3])-1; j >= 0; j--) { - + if((float)j / (Math.abs(range[3] - 1)) < time) break; - + for(int k = 0; k < range[4]; k++) { BlockPos add = new BlockPos(0, 0, 0); - switch(range[5]){ + switch(range[5]) { case 0: add = new BlockPos(0, k, (int)Math.signum(range[3]) * j); break; case 1: add = new BlockPos(k, (int)Math.signum(range[3]) * j, 0); break; case 2: add = new BlockPos((int)Math.signum(range[3]) * j, k, 0); break; @@ -122,9 +119,9 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn Rotation r = Rotation.getBlockRotation(dir); if(dir == Library.POS_X || dir == Library.NEG_X) r = r.add(Rotation.CLOCKWISE_180); - + BlockPos finalPos = startPos.add(add).rotate(r).add(pos); - + if(finalPos.equals(pos)) { this.shouldUseBB = false; } else { @@ -140,19 +137,34 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn if(state == 2 && openTicks == 0) { state = 0; } - PacketDispatcher.wrapper.sendToAllAround(new TEDoorAnimationPacket(xCoord, yCoord, zCoord, state, skinIndex, (byte)(shouldUseBB ? 1 : 0)), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 100)); - - if(redstonePower == -1 && state == 1){ + + this.networkPackNT(100); + + if(redstonePower == -1 && state == 1) { tryToggle(-1); - } else if(redstonePower > 0 && state == 0){ + } else if(redstonePower > 0 && state == 0) { tryToggle(-1); } - if(redstonePower == -1){ + if(redstonePower == -1) { redstonePower = 0; } } } + @Override + public void serialize(ByteBuf buf) { + buf.writeByte(state); + buf.writeByte(skinIndex); + buf.writeBoolean(shouldUseBB); + } + + @Override + public void deserialize(ByteBuf buf) { + handleNewState(buf.readByte()); + setSkinIndex(buf.readByte()); + shouldUseBB = buf.readBoolean(); + } + @Override public void onChunkUnload() { if(audio != null) { @@ -164,20 +176,20 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn audio2 = null; } } - - public DoorDecl getDoorType(){ - + + public DoorDecl getDoorType() { + if(this.doorType == null && this.getBlockType() instanceof BlockDoorGeneric) this.doorType = ((BlockDoorGeneric)this.getBlockType()).type; - + return this.doorType; } - public boolean tryToggle(EntityPlayer player){ - + public boolean tryToggle(EntityPlayer player) { + if(this.isLocked() && player == null) return false; - - if(state == 0 && redstonePower > 0){ + + if(state == 0 && redstonePower > 0) { //Redstone "power locks" doors, just like minecraft iron doors return false; } @@ -194,8 +206,8 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn } return false; } - - public boolean tryToggle(int passcode){ + + public boolean tryToggle(int passcode) { if(this.isLocked() && passcode != this.lock) return false; if(this.state == 0) { @@ -212,55 +224,28 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn return false; } - @Override - public void open(){ - if(state == 0) - toggle(); - } - - @Override - public void close(){ - if(state == 1) - toggle(); - } - - @Override - public DoorState getState(){ - return DoorState.values()[state]; - } - - @Override - public void toggle(){ - if(state == 0) { - state = 3; - } else if(state == 1) { - state = 2; - } - } - - @Override @SideOnly(Side.CLIENT) - public void handleNewState(byte state){ - + public void handleNewState(byte state) { + if(this.state != state) { DoorDecl doorType = getDoorType(); - if(this.state == 0 && state == 3){ // Door transitioning to open + if(this.state == 0 && state == 3) { // Door transitioning to open if(audio != null) { audio.stopSound(); audio.setKeepAlive(0); } - if(doorType.getOpenSoundLoop() != null){ + if(doorType.getOpenSoundLoop() != null) { audio = MainRegistry.proxy.getLoopedSound(doorType.getOpenSoundLoop(), xCoord, yCoord, zCoord, doorType.getSoundVolume(), 10F, 1F); audio.startSound(); } - if(doorType.getOpenSoundStart() != null){ + if(doorType.getOpenSoundStart() != null) { worldObj.playSound(xCoord, yCoord, zCoord, doorType.getOpenSoundStart(), doorType.getSoundVolume(), 1F, false); } - if(doorType.getSoundLoop2() != null){ + if(doorType.getSoundLoop2() != null) { if(audio2 != null) audio2.stopSound(); audio2 = MainRegistry.proxy.getLoopedSound(doorType.getSoundLoop2(), xCoord, yCoord, zCoord, doorType.getSoundVolume(), 10F, 1F); @@ -268,21 +253,21 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn } } - if(this.state == 1 && state == 2){ // Door transitioning to closed + if(this.state == 1 && state == 2) { // Door transitioning to closed if(audio != null) { audio.stopSound(); } - if(doorType.getCloseSoundLoop() != null){ + if(doorType.getCloseSoundLoop() != null) { audio = MainRegistry.proxy.getLoopedSound(doorType.getCloseSoundLoop(), xCoord, yCoord, zCoord, doorType.getSoundVolume(), 10F, 1F); audio.startSound(); } - if(doorType.getCloseSoundStart() != null){ + if(doorType.getCloseSoundStart() != null) { worldObj.playSound(xCoord, yCoord, zCoord, doorType.getCloseSoundStart(), doorType.getSoundVolume(), 1F, false); } - if(doorType.getSoundLoop2() != null){ + if(doorType.getSoundLoop2() != null) { if(audio2 != null) audio2.stopSound(); audio2 = MainRegistry.proxy.getLoopedSound(doorType.getSoundLoop2(), xCoord, yCoord, zCoord, doorType.getSoundVolume(), 10F, 1F); @@ -290,47 +275,39 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn } } - if(state == 1 || state == 0){ // Door finished any transition - if(audio != null){ + if(state == 1 || state == 0) { // Door finished any transition + if(audio != null) { audio.stopSound(); audio = null; } - if(audio2 != null){ + if(audio2 != null) { audio2.stopSound(); audio2 = null; } } - if(this.state == 3 && state == 1){ // Door finished transitioning to open - if(doorType.getOpenSoundEnd() != null){ + if(this.state == 3 && state == 1) { // Door finished transitioning to open + if(doorType.getOpenSoundEnd() != null) { worldObj.playSound(xCoord, yCoord, zCoord, doorType.getOpenSoundEnd(), doorType.getSoundVolume(), 1F, false); } } - if(this.state == 2 && state == 0){ // Door finished transitioning to closed - if(doorType.getCloseSoundEnd() != null){ + if(this.state == 2 && state == 0) { // Door finished transitioning to closed + if(doorType.getCloseSoundEnd() != null) { worldObj.playSound(xCoord, yCoord, zCoord, doorType.getCloseSoundEnd(), doorType.getSoundVolume(), 1F, false); } } - - - this.state = state; - if(state > 1) - animStartTime = System.currentTimeMillis(); - } - } - //Ah yes piggy backing on this packet - @Override - public void setTextureState(byte tex){ - shouldUseBB = tex > 0; + + this.state = state; + if(state > 1) animStartTime = System.currentTimeMillis(); + } } public int getSkinIndex() { return skinIndex; } - @Override public boolean setSkinIndex(byte skinIndex) { if(!getDoorType().hasSkins()) return false; @@ -342,12 +319,12 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn } @Override - public AxisAlignedBB getRenderBoundingBox(){ + public AxisAlignedBB getRenderBoundingBox() { return INFINITE_EXTENT_AABB; } @Override - public double getMaxRenderDistanceSquared(){ + public double getMaxRenderDistanceSquared() { return 65536D; } @@ -388,14 +365,14 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn } tag.setTag("activatedBlocks", activatedBlocks); } - + @Override - public void validate(){ + public void validate() { super.validate(); } - + @Override - public void invalidate(){ + public void invalidate() { super.invalidate(); if(audio != null) { audio.stopSound(); @@ -412,16 +389,16 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn BlockPos pos = new BlockPos(x, y, z); boolean powered = worldObj.isBlockIndirectlyGettingPowered(x, y, z); boolean contained = activatedBlocks.contains(pos); - if(!contained && powered){ + if(!contained && powered) { activatedBlocks.add(pos); - if(redstonePower == -1){ + if(redstonePower == -1) { redstonePower = 0; } redstonePower++; - } else if(contained && !powered){ + } else if(contained && !powered) { activatedBlocks.remove(pos); redstonePower--; - if(redstonePower == 0){ + if(redstonePower == 0) { redstonePower = -1; } }