From 9b298c25c77a40b9e343beea0cad4408fa61410b Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Thu, 2 Feb 2017 19:28:59 +0100 Subject: [PATCH] Added solderer particles, fixes #923 --- CHANGELOG.md | 7 +++ .../network/node/NetworkNodeSolderer.java | 10 +++- .../refinedstorage/block/BlockSolderer.java | 46 +++++++++++++++++++ .../refinedstorage/tile/TileSolderer.java | 25 ++++++++++ 4 files changed, 87 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ef0bb040..6b2c7b6b8 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,8 @@ - Updated Chinese translation (TartaricAcid) - Added filtering slots for the Crafting Monitor (raoulvdberge) - Added way to hide tasks created in an automated way in the Crafting Monitor (raoulvdberge) +- Added Grid sorting by ID (way2muchnoise) +- Added Solderer particles (raoulvdberge) ### 1.3.5 - Fixed TPS lag on very large crafting tasks (way2muchnoise) @@ -83,6 +85,11 @@ - Removed IC2 support (raoulvdberge) - Removed MCMultiPart support (will be re-added as soon as MCMultiPart for MC 1.11 is available) (raoulvdberge) +### 1.2.20 +- Fixed client side crash with cables (raoulvdberge) +- Added Solderer particles (raoulvdberge) +- Added Grid sorting by ID (way2muchnoise) + ### 1.2.19 - Added integration for Collosal Chests for the External Storage, Importer and Exporter improving performance (way2muchnoise) - Exposed the Network Card inventory of the Network Transmitter so other tiles can interact with it (raoulvdberge) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeSolderer.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeSolderer.java index 52660748b..3cfeb2c5d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeSolderer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeSolderer.java @@ -20,7 +20,7 @@ import javax.annotation.Nonnull; public class NetworkNodeSolderer extends NetworkNode { public static final String ID = "solderer"; - private static final String NBT_WORKING = "Working"; + public static final String NBT_WORKING = "Working"; private static final String NBT_PROGRESS = "Progress"; private ItemHandlerBasic items = new ItemHandlerBasic(3, new ItemHandlerListenerNetworkNode(this)) { @@ -48,6 +48,7 @@ public class NetworkNodeSolderer extends NetworkNode { private ISoldererRecipe recipe; private boolean working = false; + private boolean wasWorking = false; private int progress = 0; public NetworkNodeSolderer(INetworkNodeHolder holder) { @@ -63,6 +64,12 @@ public class NetworkNodeSolderer extends NetworkNode { public void update() { super.update(); + if (wasWorking != working) { + wasWorking = working; + + RSUtils.updateBlock(holder.world(), holder.pos()); + } + if (network == null) { return; } @@ -139,6 +146,7 @@ public class NetworkNodeSolderer extends NetworkNode { if (tag.hasKey(NBT_WORKING)) { working = tag.getBoolean(NBT_WORKING); + wasWorking = working; } if (tag.hasKey(NBT_PROGRESS)) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockSolderer.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockSolderer.java index d5aac7908..f3345fa33 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockSolderer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockSolderer.java @@ -9,11 +9,15 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; import java.util.List; +import java.util.Random; public class BlockSolderer extends BlockNode { public BlockSolderer() { @@ -51,6 +55,48 @@ public class BlockSolderer extends BlockNode { return true; } + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand) { + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileSolderer && ((TileSolderer) tile).isWorking()) { + EnumFacing direction = getActualState(state, world, pos).getValue(DIRECTION); + + double x = 0; + double y = (double) pos.getY() + 0.6D + rand.nextDouble() / 32F; + double z = 0; + + if (direction == EnumFacing.NORTH) { + x = (double) pos.getX() + 0.4D; + z = (double) pos.getZ() + 0.4D; + } else if (direction == EnumFacing.EAST) { + x = (double) pos.getX() + 0.6D; + z = (double) pos.getZ() + 0.4D; + } else if (direction == EnumFacing.SOUTH) { + x = (double) pos.getX() + 0.6D; + z = (double) pos.getZ() + 0.6D; + } else if (direction == EnumFacing.WEST) { + x = (double) pos.getX() + 0.4D; + z = (double) pos.getZ() + 0.6D; + } + + int particles = rand.nextInt(5); + + for (int i = 0; i < 1 + particles; ++i) { + world.spawnParticle( + EnumParticleTypes.SMOKE_NORMAL, + x + (rand.nextDouble() / 16F * (rand.nextBoolean() ? 1 : -1)), + y, + z + (rand.nextDouble() / 16F * (rand.nextBoolean() ? 1 : -1)), + 0.0D, + 0.0D, + 0.0D + ); + } + } + } + @Override @SuppressWarnings("deprecation") public boolean isOpaqueCube(IBlockState state) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileSolderer.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileSolderer.java index 07bebe8bd..3b9a93eba 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileSolderer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileSolderer.java @@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.tile; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeSolderer; import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; @@ -33,6 +34,8 @@ public class TileSolderer extends TileNode { } }); + private boolean working; + public TileSolderer() { dataManager.addWatchedParameter(DURATION); dataManager.addWatchedParameter(PROGRESS); @@ -53,6 +56,28 @@ public class TileSolderer extends TileNode { return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); } + @Override + public NBTTagCompound writeUpdate(NBTTagCompound tag) { + super.writeUpdate(tag); + + tag.setBoolean(NetworkNodeSolderer.NBT_WORKING, getNode().isWorking()); + + return tag; + } + + @Override + public void readUpdate(NBTTagCompound tag) { + super.readUpdate(tag); + + if (tag.hasKey(NetworkNodeSolderer.NBT_WORKING)) { + working = tag.getBoolean(NetworkNodeSolderer.NBT_WORKING); + } + } + + public boolean isWorking() { + return working; + } + @Override @Nonnull public NetworkNodeSolderer createNode() {