From 1bcc4598657abd707db8110946b55be0ad4d4fca Mon Sep 17 00:00:00 2001 From: Prospector Date: Mon, 9 May 2016 17:38:41 -0700 Subject: [PATCH] Make pipes look fancier --- .../items/tools/ItemFluidbucket.java | 16 - .../parts/fluidPipes/MultipartFluidPipe.java | 721 ++++++++++-------- .../textures/blocks/fluidPipes/fluidpipe.png | Bin 15016 -> 656 bytes .../blocks/fluidPipes/fluidpipe_extract.png | Bin 15458 -> 698 bytes .../blocks/fluidPipes/fluidpipe_insert.png | Bin 15457 -> 689 bytes 5 files changed, 400 insertions(+), 337 deletions(-) diff --git a/src/main/java/techreborn/items/tools/ItemFluidbucket.java b/src/main/java/techreborn/items/tools/ItemFluidbucket.java index 6ddf85443..5a5363c4c 100644 --- a/src/main/java/techreborn/items/tools/ItemFluidbucket.java +++ b/src/main/java/techreborn/items/tools/ItemFluidbucket.java @@ -1,13 +1,9 @@ package techreborn.items.tools; import me.modmuss50.jsonDestroyer.api.ITexturedBucket; -import me.modmuss50.jsonDestroyer.api.ITexturedItem; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemBucket; -import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; import reborncore.RebornCore; import techreborn.blocks.fluid.BlockFluidBase; @@ -45,21 +41,9 @@ public class ItemFluidbucket extends ItemBucket implements ITexturedBucket return containedFluid; } -// @Override -// public String getTextureName(int damage) -// { -// return "techreborn:items/bucket/" + iconName; -// } - @Override public int getMaxMeta() { return 1; } - - @Override - public ModelResourceLocation getModel(ItemStack stack, EntityPlayer player, int useRemaining) - { - return null; - } } diff --git a/src/main/java/techreborn/parts/fluidPipes/MultipartFluidPipe.java b/src/main/java/techreborn/parts/fluidPipes/MultipartFluidPipe.java index 5aa24b6df..a28d2a4f5 100644 --- a/src/main/java/techreborn/parts/fluidPipes/MultipartFluidPipe.java +++ b/src/main/java/techreborn/parts/fluidPipes/MultipartFluidPipe.java @@ -43,369 +43,448 @@ import java.util.*; /** * Created by modmuss50 on 09/05/2016. */ -public class MultipartFluidPipe extends Multipart implements INormallyOccludingPart, ISlottedPart, ITickable { +public class MultipartFluidPipe extends Multipart implements INormallyOccludingPart, ISlottedPart, ITickable +{ - public static final IUnlistedProperty UP = Properties.toUnlisted(PropertyBool.create("up")); - public static final IUnlistedProperty DOWN = Properties.toUnlisted(PropertyBool.create("down")); - public static final IUnlistedProperty NORTH = Properties.toUnlisted(PropertyBool.create("north")); - public static final IUnlistedProperty EAST = Properties.toUnlisted(PropertyBool.create("east")); - public static final IUnlistedProperty SOUTH = Properties.toUnlisted(PropertyBool.create("south")); - public static final IUnlistedProperty WEST = Properties.toUnlisted(PropertyBool.create("west")); - public static final IProperty TYPE = PropertyEnum.create("type", EnumFluidPipeTypes.class); - EnumFluidPipeTypes currentType = EnumFluidPipeTypes.EMPTY; + public static final IUnlistedProperty UP = Properties.toUnlisted(PropertyBool.create("up")); + public static final IUnlistedProperty DOWN = Properties.toUnlisted(PropertyBool.create("down")); + public static final IUnlistedProperty NORTH = Properties.toUnlisted(PropertyBool.create("north")); + public static final IUnlistedProperty EAST = Properties.toUnlisted(PropertyBool.create("east")); + public static final IUnlistedProperty SOUTH = Properties.toUnlisted(PropertyBool.create("south")); + public static final IUnlistedProperty WEST = Properties.toUnlisted(PropertyBool.create("west")); + public static final IProperty TYPE = PropertyEnum.create("type", EnumFluidPipeTypes.class); + public static final int thickness = 11; + public Vecs3dCube[] boundingBoxes = new Vecs3dCube[14]; + public float center = 0.6F; + public float offset = 0.10F; + public Map connectedSides; + EnumFluidPipeTypes currentType = EnumFluidPipeTypes.EMPTY; + Tank tank = new Tank("MultipartFluidPipe", 1000, null); - public Vecs3dCube[] boundingBoxes = new Vecs3dCube[14]; - public float center = 0.6F; - public float offset = 0.10F; - public Map connectedSides; - public static final int thickness = 11; + public MultipartFluidPipe() + { + connectedSides = new HashMap<>(); + refreshBounding(); + } - Tank tank = new Tank("MultipartFluidPipe", 1000, null); + public static MultipartFluidPipe getPartFromWorld(World world, BlockPos pos, EnumFacing side) + { + if (world == null || pos == null) + { + return null; + } + IMultipartContainer container = MultipartHelper.getPartContainer(world, pos); + if (side != null && container != null) + { + ISlottedPart slottedPart = container.getPartInSlot(PartSlot.getFaceSlot(side)); + if (slottedPart instanceof IMicroblock.IFaceMicroblock && !((IMicroblock.IFaceMicroblock) slottedPart) + .isFaceHollow()) + { + return null; + } + } - public MultipartFluidPipe() { - connectedSides = new HashMap<>(); - refreshBounding(); - } + if (container == null) + { + return null; + } + ISlottedPart part = container.getPartInSlot(PartSlot.CENTER); + if (part instanceof MultipartFluidPipe) + { + return (MultipartFluidPipe) part; + } + return null; + } - public static MultipartFluidPipe getPartFromWorld(World world, BlockPos pos, EnumFacing side) { - if (world == null || pos == null) { - return null; - } - IMultipartContainer container = MultipartHelper.getPartContainer(world, pos); - if (side != null && container != null) { - ISlottedPart slottedPart = container.getPartInSlot(PartSlot.getFaceSlot(side)); - if (slottedPart instanceof IMicroblock.IFaceMicroblock - && !((IMicroblock.IFaceMicroblock) slottedPart).isFaceHollow()) { - return null; - } - } + public void refreshBounding() + { + float centerFirst = center - offset; + double w = (thickness / 16) - 0.5; + boundingBoxes[6] = new Vecs3dCube(centerFirst - w, centerFirst - w, centerFirst - w, centerFirst + w, + centerFirst + w, centerFirst + w); - if (container == null) { - return null; - } - ISlottedPart part = container.getPartInSlot(PartSlot.CENTER); - if (part instanceof MultipartFluidPipe) { - return (MultipartFluidPipe) part; - } - return null; - } + int i = 0; + for (EnumFacing dir : EnumFacing.VALUES) + { + double xMin1 = (dir.getFrontOffsetX() < 0 ? + 0.0 : + (dir.getFrontOffsetX() == 0 ? centerFirst - w : centerFirst + w)); + double xMax1 = (dir.getFrontOffsetX() > 0 ? + 1.0 : + (dir.getFrontOffsetX() == 0 ? centerFirst + w : centerFirst - w)); - public void refreshBounding() { - float centerFirst = center - offset; - double w = (thickness / 16) - 0.5; - boundingBoxes[6] = new Vecs3dCube(centerFirst - w, centerFirst - w, centerFirst - w, centerFirst + w, - centerFirst + w, centerFirst + w); + double yMin1 = (dir.getFrontOffsetY() < 0 ? + 0.0 : + (dir.getFrontOffsetY() == 0 ? centerFirst - w : centerFirst + w)); + double yMax1 = (dir.getFrontOffsetY() > 0 ? + 1.0 : + (dir.getFrontOffsetY() == 0 ? centerFirst + w : centerFirst - w)); - int i = 0; - for (EnumFacing dir : EnumFacing.VALUES) { - double xMin1 = (dir.getFrontOffsetX() < 0 ? 0.0 - : (dir.getFrontOffsetX() == 0 ? centerFirst - w : centerFirst + w)); - double xMax1 = (dir.getFrontOffsetX() > 0 ? 1.0 - : (dir.getFrontOffsetX() == 0 ? centerFirst + w : centerFirst - w)); + double zMin1 = (dir.getFrontOffsetZ() < 0 ? + 0.0 : + (dir.getFrontOffsetZ() == 0 ? centerFirst - w : centerFirst + w)); + double zMax1 = (dir.getFrontOffsetZ() > 0 ? + 1.0 : + (dir.getFrontOffsetZ() == 0 ? centerFirst + w : centerFirst - w)); - double yMin1 = (dir.getFrontOffsetY() < 0 ? 0.0 - : (dir.getFrontOffsetY() == 0 ? centerFirst - w : centerFirst + w)); - double yMax1 = (dir.getFrontOffsetY() > 0 ? 1.0 - : (dir.getFrontOffsetY() == 0 ? centerFirst + w : centerFirst - w)); + boundingBoxes[i] = new Vecs3dCube(xMin1, yMin1, zMin1, xMax1, yMax1, zMax1); + i++; + } + } - double zMin1 = (dir.getFrontOffsetZ() < 0 ? 0.0 - : (dir.getFrontOffsetZ() == 0 ? centerFirst - w : centerFirst + w)); - double zMax1 = (dir.getFrontOffsetZ() > 0 ? 1.0 - : (dir.getFrontOffsetZ() == 0 ? centerFirst + w : centerFirst - w)); + @Override public void addCollisionBoxes(AxisAlignedBB mask, List list, Entity collidingEntity) + { - boundingBoxes[i] = new Vecs3dCube(xMin1, yMin1, zMin1, xMax1, yMax1, zMax1); - i++; - } - } + for (EnumFacing dir : EnumFacing.VALUES) + { + if (connectedSides.containsKey(dir) && mask + .intersectsWith(boundingBoxes[Functions.getIntDirFromDirection(dir)].toAABB())) + list.add(boundingBoxes[Functions.getIntDirFromDirection(dir)].toAABB()); + } + if (mask.intersectsWith(boundingBoxes[6].toAABB())) + { + list.add(boundingBoxes[6].toAABB()); + } + super.addCollisionBoxes(mask, list, collidingEntity); + } - @Override - public void addCollisionBoxes(AxisAlignedBB mask, List list, Entity collidingEntity) { + @Override public void addSelectionBoxes(List list) + { - for (EnumFacing dir : EnumFacing.VALUES) { - if (connectedSides.containsKey(dir) - && mask.intersectsWith(boundingBoxes[Functions.getIntDirFromDirection(dir)].toAABB())) - list.add(boundingBoxes[Functions.getIntDirFromDirection(dir)].toAABB()); - } - if (mask.intersectsWith(boundingBoxes[6].toAABB())) { - list.add(boundingBoxes[6].toAABB()); - } - super.addCollisionBoxes(mask, list, collidingEntity); - } + for (EnumFacing dir : EnumFacing.VALUES) + { + if (connectedSides.containsKey(dir)) + list.add(boundingBoxes[Functions.getIntDirFromDirection(dir)].toAABB()); + } + list.add(boundingBoxes[6].toAABB()); + super.addSelectionBoxes(list); + } - @Override - public void addSelectionBoxes(List list) { + @Override public void onRemoved() + { + super.onRemoved(); + for (EnumFacing dir : EnumFacing.VALUES) + { + MultipartFluidPipe multipart = getPartFromWorld(getWorld(), getPos().offset(dir), dir); + if (multipart != null) + { + multipart.nearByChange(); + } + } + } - for (EnumFacing dir : EnumFacing.VALUES) { - if (connectedSides.containsKey(dir)) - list.add(boundingBoxes[Functions.getIntDirFromDirection(dir)].toAABB()); - } - list.add(boundingBoxes[6].toAABB()); - super.addSelectionBoxes(list); - } + @Override public void addOcclusionBoxes(List list) + { + for (EnumFacing dir : EnumFacing.VALUES) + { + if (connectedSides.containsKey(dir)) + list.add(boundingBoxes[Functions.getIntDirFromDirection(dir)].toAABB()); + } + list.add(boundingBoxes[6].toAABB()); + } - @Override - public void onRemoved() { - super.onRemoved(); - for (EnumFacing dir : EnumFacing.VALUES) { - MultipartFluidPipe multipart = getPartFromWorld(getWorld(), getPos().offset(dir), dir); - if (multipart != null) { - multipart.nearByChange(); - } - } - } + @Override public void onNeighborBlockChange(Block block) + { + super.onNeighborBlockChange(block); + nearByChange(); - @Override - public void addOcclusionBoxes(List list) { - for (EnumFacing dir : EnumFacing.VALUES) { - if (connectedSides.containsKey(dir)) - list.add(boundingBoxes[Functions.getIntDirFromDirection(dir)].toAABB()); - } - list.add(boundingBoxes[6].toAABB()); - } + } - @Override - public void onNeighborBlockChange(Block block) { - super.onNeighborBlockChange(block); - nearByChange(); + public void nearByChange() + { + checkConnectedSides(); + for (EnumFacing direction : EnumFacing.VALUES) + { + BlockPos blockPos = getPos().offset(direction); + WorldUtils.updateBlock(getWorld(), blockPos); + MultipartFluidPipe part = getPartFromWorld(getWorld(), blockPos, direction); + if (part != null) + { + part.checkConnectedSides(); + } + } + } - } + @Override public void onAdded() + { + nearByChange(); + } - public void nearByChange() { - checkConnectedSides(); - for (EnumFacing direction : EnumFacing.VALUES) { - BlockPos blockPos = getPos().offset(direction); - WorldUtils.updateBlock(getWorld(), blockPos); - MultipartFluidPipe part = getPartFromWorld(getWorld(), blockPos, direction); - if (part != null) { - part.checkConnectedSides(); - } - } - } + public boolean shouldConnectTo(EnumFacing dir) + { + if (dir != null) + { + if (internalShouldConnectTo(dir)) + { + MultipartFluidPipe multipartFluidPipe = getPartFromWorld(getWorld(), getPos().offset(dir), dir); + if (multipartFluidPipe != null && multipartFluidPipe.internalShouldConnectTo(dir.getOpposite())) + { + return true; + } + } else + { + TileEntity tile = getNeighbourTile(dir); - @Override - public void onAdded() { - nearByChange(); - } + if (tile instanceof IFluidHandler && (currentType == EnumFluidPipeTypes.EXTRACT + || currentType == EnumFluidPipeTypes.INSERT)) + { + return true; + } + } + } + return false; + } - public boolean shouldConnectTo(EnumFacing dir) { - if (dir != null) { - if (internalShouldConnectTo(dir)) { - MultipartFluidPipe multipartFluidPipe = getPartFromWorld(getWorld(), getPos().offset(dir), dir); - if (multipartFluidPipe != null && multipartFluidPipe.internalShouldConnectTo(dir.getOpposite())) { - return true; - } - } else { - TileEntity tile = getNeighbourTile(dir); + public boolean internalShouldConnectTo(EnumFacing dir) + { + ISlottedPart part = getContainer().getPartInSlot(PartSlot.getFaceSlot(dir)); + if (part instanceof IMicroblock.IFaceMicroblock) + { + if (!((IMicroblock.IFaceMicroblock) part).isFaceHollow()) + { + return false; + } + } - if (tile instanceof IFluidHandler && (currentType == EnumFluidPipeTypes.EXTRACT || currentType == EnumFluidPipeTypes.INSERT)) { - return true; - } - } - } - return false; - } + if (!OcclusionHelper.occlusionTest(getContainer().getParts(), p -> p == this, + boundingBoxes[Functions.getIntDirFromDirection(dir)].toAABB())) + { + return false; + } - public boolean internalShouldConnectTo(EnumFacing dir) { - ISlottedPart part = getContainer().getPartInSlot(PartSlot.getFaceSlot(dir)); - if (part instanceof IMicroblock.IFaceMicroblock) { - if (!((IMicroblock.IFaceMicroblock) part).isFaceHollow()) { - return false; - } - } + MultipartFluidPipe multipartFluidPipe = getPartFromWorld(getWorld(), getPos().offset(dir), dir.getOpposite()); - if (!OcclusionHelper.occlusionTest(getContainer().getParts(), p -> p == this, boundingBoxes[Functions.getIntDirFromDirection(dir)].toAABB())) { - return false; - } + return multipartFluidPipe != null; + } - MultipartFluidPipe multipartFluidPipe = getPartFromWorld(getWorld(), getPos().offset(dir), dir.getOpposite()); + public TileEntity getNeighbourTile(EnumFacing side) + { + return side != null ? getWorld().getTileEntity(getPos().offset(side)) : null; + } - return multipartFluidPipe != null; - } + public void checkConnectedSides() + { + refreshBounding(); + connectedSides = new HashMap<>(); + for (EnumFacing dir : EnumFacing.values()) + { + int d = Functions.getIntDirFromDirection(dir); + if (getWorld() == null) + { + return; + } + TileEntity te = getNeighbourTile(dir); + if (shouldConnectTo(dir)) + { + connectedSides.put(dir, te.getPos()); + } + } + } - public TileEntity getNeighbourTile(EnumFacing side) { - return side != null ? getWorld().getTileEntity(getPos().offset(side)) : null; - } + @Override public EnumSet getSlotMask() + { + return EnumSet.of(PartSlot.CENTER); + } - public void checkConnectedSides() { - refreshBounding(); - connectedSides = new HashMap<>(); - for (EnumFacing dir : EnumFacing.values()) { - int d = Functions.getIntDirFromDirection(dir); - if (getWorld() == null) { - return; - } - TileEntity te = getNeighbourTile(dir); - if (shouldConnectTo(dir)) { - connectedSides.put(dir, te.getPos()); - } - } - } + @Override public IBlockState getExtendedState(IBlockState state) + { + IExtendedBlockState extendedBlockState = (IExtendedBlockState) state; + return extendedBlockState.withProperty(DOWN, shouldConnectTo(EnumFacing.DOWN)) + .withProperty(UP, shouldConnectTo(EnumFacing.UP)).withProperty(NORTH, shouldConnectTo(EnumFacing.NORTH)) + .withProperty(SOUTH, shouldConnectTo(EnumFacing.SOUTH)) + .withProperty(WEST, shouldConnectTo(EnumFacing.WEST)) + .withProperty(EAST, shouldConnectTo(EnumFacing.EAST)).withProperty(TYPE, currentType); + } - @Override - public EnumSet getSlotMask() { - return EnumSet.of(PartSlot.CENTER); - } + @Override public BlockStateContainer createBlockState() + { + return new ExtendedBlockState(MCMultiPartMod.multipart, new IProperty[] { TYPE }, + new IUnlistedProperty[] { DOWN, UP, NORTH, SOUTH, WEST, EAST }); + } - @Override - public IBlockState getExtendedState(IBlockState state) { - IExtendedBlockState extendedBlockState = (IExtendedBlockState) state; - return extendedBlockState.withProperty(DOWN, shouldConnectTo(EnumFacing.DOWN)) - .withProperty(UP, shouldConnectTo(EnumFacing.UP)).withProperty(NORTH, shouldConnectTo(EnumFacing.NORTH)) - .withProperty(SOUTH, shouldConnectTo(EnumFacing.SOUTH)) - .withProperty(WEST, shouldConnectTo(EnumFacing.WEST)) - .withProperty(EAST, shouldConnectTo(EnumFacing.EAST)).withProperty(TYPE, currentType); - } + @Override public float getHardness(PartMOP hit) + { + return 0.5F; + } - @Override - public BlockStateContainer createBlockState() { - return new ExtendedBlockState(MCMultiPartMod.multipart, new IProperty[]{TYPE}, - new IUnlistedProperty[]{DOWN, UP, NORTH, SOUTH, WEST, EAST}); - } + public Material getMaterial() + { + return Material.CLOTH; + } - @Override - public float getHardness(PartMOP hit) { - return 0.5F; - } + @Override public List getDrops() + { + List list = new ArrayList<>(); + list.add(new ItemStack(TechRebornParts.fluidPipe, 1, 0)); + return list; + } - public Material getMaterial() { - return Material.CLOTH; - } + @Override public ResourceLocation getModelPath() + { + return new ResourceLocation("techreborn:fluidpipe"); + } - @Override - public List getDrops() { - List list = new ArrayList<>(); - list.add(new ItemStack(TechRebornParts.fluidPipe, 1, 0)); - return list; - } + @Override public boolean canRenderInLayer(BlockRenderLayer layer) + { + return layer == BlockRenderLayer.CUTOUT; + } - @Override - public ResourceLocation getModelPath() { - return new ResourceLocation("techreborn:fluidpipe"); - } + @Override public void update() + { + if (!getWorld().isRemote) + { + for (EnumFacing dir : EnumFacing.VALUES) + { + if (connectedSides.containsKey(dir)) + { + if (currentType != EnumFluidPipeTypes.EMPTY) + { + MultipartFluidPipe fluidPipe = getPartFromWorld(getWorld(), getPos().offset(dir), dir); + if (fluidPipe != null) + { + if (!fluidPipe.tank.isFull() && (fluidPipe.tank.getFluid() == null + || fluidPipe.tank.getFluid().getFluid() == tank.getFluid().getFluid())) + { + int sharedAmount = (fluidPipe.tank.getFluidAmount() + tank.getFluidAmount()) / 2; + fluidPipe.tank.setFluidAmount(sharedAmount); + tank.setFluidAmount(sharedAmount); + } + } + } + } + TileEntity tileEntity = getNeighbourTile(dir); + if (tileEntity != null) + { + if (tileEntity instanceof IFluidHandler) + { + IFluidHandler handler = (IFluidHandler) tileEntity; + if (currentType == EnumFluidPipeTypes.EXTRACT) + { + if (!tank.isFull()) + { + FluidTankInfo[] fluidTankInfos = handler.getTankInfo(dir.getOpposite()); + if (fluidTankInfos.length > 1) + { + FluidTankInfo info = fluidTankInfos[1]; + if (tank.getFluid() == null + || info.fluid.getFluid() == tank.getFluid().getFluid() && handler + .canDrain(dir.getOpposite(), tank.getFluid().getFluid())) + { + int amountToMove = Math.min(100, tank.getCapacity() - tank.getFluidAmount()); + tank.fill(handler.drain(dir.getOpposite(), amountToMove, false), false); + } + } + } + } else if (currentType == EnumFluidPipeTypes.INSERT) + { + if (!tank.isEmpty()) + { + FluidTankInfo[] fluidTankInfos = handler.getTankInfo(dir.getOpposite()); + if (fluidTankInfos.length > 1) + { + FluidTankInfo info = fluidTankInfos[1]; + if (info.fluid.getFluid() == null + || info.fluid.getFluid() == tank.getFluid().getFluid() && handler + .canFill(dir.getOpposite(), info.fluid.getFluid())) + { + int amountToMove = Math.min(100, info.capacity - info.fluid.amount); + tank.fill(handler.drain(dir.getOpposite(), amountToMove, false), false); + } + } + } + } + } + } + } + } + } - @Override - public boolean canRenderInLayer(BlockRenderLayer layer) { - return layer == BlockRenderLayer.CUTOUT; - } + @Override public boolean onActivated(EntityPlayer player, EnumHand hand, ItemStack heldItem, PartMOP hit) + { + //TODO make only wrench able to change mode, shift-click with wrench picks up pipe, and click with empty hand displays current mode in chat (doesn't change it) - @Override - public void update() { - if (!getWorld().isRemote) { - for (EnumFacing dir : EnumFacing.VALUES) { - if (connectedSides.containsKey(dir)) { - if (currentType != EnumFluidPipeTypes.EMPTY) { - MultipartFluidPipe fluidPipe = getPartFromWorld(getWorld(), getPos().offset(dir), dir); - if (fluidPipe != null) { - if (!fluidPipe.tank.isFull() && (fluidPipe.tank.getFluid() == null || fluidPipe.tank.getFluid().getFluid() == tank.getFluid().getFluid())) { - int sharedAmount = (fluidPipe.tank.getFluidAmount() + tank.getFluidAmount()) / 2; - fluidPipe.tank.setFluidAmount(sharedAmount); - tank.setFluidAmount(sharedAmount); - } - } - } - } - TileEntity tileEntity = getNeighbourTile(dir); - if (tileEntity != null) { - if (tileEntity instanceof IFluidHandler) { - IFluidHandler handler = (IFluidHandler) tileEntity; - if (currentType == EnumFluidPipeTypes.EXTRACT) { - if (!tank.isFull()) { - FluidTankInfo[] fluidTankInfos = handler.getTankInfo(dir.getOpposite()); - if (fluidTankInfos.length > 1) { - FluidTankInfo info = fluidTankInfos[1]; - if (tank.getFluid() == null || info.fluid.getFluid() == tank.getFluid().getFluid() && handler.canDrain(dir.getOpposite(), tank.getFluid().getFluid())) { - int amountToMove = Math.min(100, tank.getCapacity() - tank.getFluidAmount()); - tank.fill(handler.drain(dir.getOpposite(), amountToMove, false), false); - } - } - } - } else if (currentType == EnumFluidPipeTypes.INSERT) { - if (!tank.isEmpty()) { - FluidTankInfo[] fluidTankInfos = handler.getTankInfo(dir.getOpposite()); - if (fluidTankInfos.length > 1) { - FluidTankInfo info = fluidTankInfos[1]; - if (info.fluid.getFluid() == null || info.fluid.getFluid() == tank.getFluid().getFluid() && handler.canFill(dir.getOpposite(), info.fluid.getFluid())) { - int amountToMove = Math.min(100, info.capacity - info.fluid.amount); - tank.fill(handler.drain(dir.getOpposite(), amountToMove, false), false); - } - } - } - } - } - } - } - } - } + //TODO move to client side only class + if (getWorld().isRemote) + { + try + { + GuiNewChat chat = Minecraft.getMinecraft().ingameGUI.getChatGUI(); + Field field = chat.getClass().getDeclaredField("chatLines"); + field.setAccessible(true); + List lines = (List) field.get(chat); + List linesToRemove = new ArrayList<>(); + for (ChatLine line : lines) + { + if (line.getChatComponent() instanceof TextComponetValue) + { + linesToRemove.add(line.getChatLineID()); + } + } + for (Integer integer : linesToRemove) + { + chat.deleteChatLine(integer); + } + } catch (NoSuchFieldException e) + { + e.printStackTrace(); + } catch (IllegalAccessException e) + { + e.printStackTrace(); + } + } - @Override - public boolean onActivated(EntityPlayer player, EnumHand hand, ItemStack heldItem, PartMOP hit) { - //TODO move to client side only class - if (getWorld().isRemote) { - try { - GuiNewChat chat = Minecraft.getMinecraft().ingameGUI.getChatGUI(); - Field field = chat.getClass().getDeclaredField("chatLines"); - field.setAccessible(true); - List lines = (List) field.get(chat); - List linesToRemove = new ArrayList<>(); - for (ChatLine line : lines) { - if (line.getChatComponent() instanceof TextComponetValue) { - linesToRemove.add(line.getChatLineID()); - } - } - for (Integer integer : linesToRemove) { - chat.deleteChatLine(integer); - } - } catch (NoSuchFieldException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } + //TODO sync this with the server/client + if (currentType == EnumFluidPipeTypes.EMPTY) + { + currentType = EnumFluidPipeTypes.EXTRACT; + if (getWorld().isRemote) + player.addChatMessage(new TextComponetValue("Mode set to: " + ChatFormatting.GOLD + "Extract")); + } else if (currentType == EnumFluidPipeTypes.EXTRACT) + { + currentType = EnumFluidPipeTypes.INSERT; + if (getWorld().isRemote) + player.addChatMessage(new TextComponetValue("Mode set to: " + ChatFormatting.BLUE + "Insert")); + } else if (currentType == EnumFluidPipeTypes.INSERT) + { + currentType = EnumFluidPipeTypes.EMPTY; + if (getWorld().isRemote) + player.addChatMessage(new TextComponetValue("Mode set to: " + ChatFormatting.DARK_GRAY + "Normal")); + } - //TODO sync this with the server/client - if (currentType == EnumFluidPipeTypes.EMPTY) { - currentType = EnumFluidPipeTypes.EXTRACT; - if (getWorld().isRemote) - player.addChatMessage(new TextComponetValue("Mode set to: " + ChatFormatting.YELLOW + "Extract")); - } else if (currentType == EnumFluidPipeTypes.EXTRACT) { - currentType = EnumFluidPipeTypes.INSERT; - if (getWorld().isRemote) - player.addChatMessage(new TextComponetValue("Mode set to: " + ChatFormatting.BLUE + "Insert")); - } else if (currentType == EnumFluidPipeTypes.INSERT) { - currentType = EnumFluidPipeTypes.EMPTY; - if (getWorld().isRemote) - player.addChatMessage(new TextComponetValue("Mode set to: " + ChatFormatting.WHITE + "Normal")); - } + markRenderUpdate(); + return true; + } - markRenderUpdate(); - return true; - } + @Override public void writeToNBT(NBTTagCompound tag) + { + super.writeToNBT(tag); + tank.writeToNBT(tag); + tag.setString("mode", currentType.getName()); + } - public class TextComponetValue extends TextComponentString { + @Override public void readFromNBT(NBTTagCompound tag) + { + super.readFromNBT(tag); + tank.readFromNBT(tag); + String mode = tag.getString("mode"); + if (mode.equals(EnumFluidPipeTypes.EMPTY)) + { + currentType = EnumFluidPipeTypes.EMPTY; + } else if (mode.equals(EnumFluidPipeTypes.INSERT)) + { + currentType = EnumFluidPipeTypes.INSERT; + } else if (mode.equals(EnumFluidPipeTypes.EXTRACT)) + { + currentType = EnumFluidPipeTypes.EXTRACT; + } + } - public TextComponetValue(String msg) { - super(msg); - } - } + public class TextComponetValue extends TextComponentString + { - @Override - public void writeToNBT(NBTTagCompound tag) { - super.writeToNBT(tag); - tank.writeToNBT(tag); - tag.setString("mode", currentType.getName()); - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - super.readFromNBT(tag); - tank.readFromNBT(tag); - String mode = tag.getString("mode"); - if (mode.equals(EnumFluidPipeTypes.EMPTY)) { - currentType = EnumFluidPipeTypes.EMPTY; - } else if (mode.equals(EnumFluidPipeTypes.INSERT)) { - currentType = EnumFluidPipeTypes.INSERT; - } else if (mode.equals(EnumFluidPipeTypes.EXTRACT)) { - currentType = EnumFluidPipeTypes.EXTRACT; - } - } + public TextComponetValue(String msg) + { + super(msg); + } + } } diff --git a/src/main/resources/assets/techreborn/textures/blocks/fluidPipes/fluidpipe.png b/src/main/resources/assets/techreborn/textures/blocks/fluidPipes/fluidpipe.png index 94ecfc1ba3631e0111d1d826ee2e6edf8116ba88..eb0c81ee9a629a13eca3b2cdba98041d15f4bc23 100644 GIT binary patch delta 591 zcmV-V04V5XRSC$ToX9aVq2hA%r6P zZRCC&DN*DaWzYQm=4+|%VBVQ`HqXp@)+{3;=JWZee!X6*W3iYN3V#J@wOZ0{x20Gt zN-!9d@p!E9=kuw8tsh%#fgBEp7Bw0T1t^tD;&eJ?Hk)budcCT?-EQVrga+jCc$jE3 zDz#co27`fgyIlqFcs$bY_qDT~^nSnpo4|tDu{Z+Vhr^-N>vbuY%L3?XwbJRu@1Ofs$ ze4vRNIxwQu>2z8+LMoL~BJpF>h#01%=uZlzqz}OU3DitM?LXLrtTmS%4fNHh+I|2#GWPehV85;luLg9cIx%kkC zVO+?e2-_0IwZR4dkc&+m^6Zfe;7@YEpqf;Mh*$?AmftmSoEYk#^Y)boWFZdy-h2*skqt zvdd*vE))cZ9uNg_0HmrX4jkaX0S+J`aq0mf0YUC|wl*LKNlgtX&5S2s3rz}0ZWvh&H`KmH`iS!OVzAE_~4hu=HKPA}6 zCl|tk+*)OsD>@$LpjnG6e!UW5B;yQ4z3KVU~F3O(Hwq?9O3OEQg7j@$8C{Yx_q0k?1) z+ksE=q^Wss(+M2E>C7lOl4lksYf`CwnR)HFXU#|pl_;&h6`~c=$i1pX59@*BRUM~Qh<4fX5FuAA zau1)jY}4ubk7xp%Jznau5iaQgE|9I5<3*Vlm8v+eW+YV-9~C846k{gQOyE&*Osl>H zJ*1o}r`2pW?h%^_JxJ@AdZ6#iB|bOiV;XAR@!EP&u-bY93$ESJgz;c(=4eByMW^L> zkO9e8JvMf_o2)VjKdapJ&m*H!*Y@MH1q+$Yi}tV@p32^(c#Z4&D=G0J8XlgEZ4@_H_-@U@&#=W$I;>q^9q*;>-xIfB~e=L1=jcya$w1$eT`m<)6 z_)b0O>K0Ppq^nTAsnlLdot{lx@3wyBDiRP0B3@MWp zB$2!Zxp5ulu3sZJuEX4M>a(^L6w-roU^tc)eoaOP`6_v$!-bqIXJk!)!!Tpn>fzQ} z$s#ANAD$ypZjb|osfp{e5@W(3FoN@G4;d~xAD}W^00=!~xafR< z%5VW7^pN4A^8qTu1%S{)hKtSzs0pfX$l2t8!D=zM_6Z~-9nkl~{90V=}N@G52?5kj>zmJgde@itS96#DAa1+62hmT9FU_4h@ckkQQF-xX K>HR0pocjk#wLdce diff --git a/src/main/resources/assets/techreborn/textures/blocks/fluidPipes/fluidpipe_extract.png b/src/main/resources/assets/techreborn/textures/blocks/fluidPipes/fluidpipe_extract.png index cf2cfd76403eddee074e93ef3384db3bd9f10b80..4c272e4a84da0605ab68b6dfcd6954bf785fe4d4 100644 GIT binary patch delta 633 zcmV-<0*3wKc)A6UB$LZKEPn}bNLh0L01|Kj01|KkA)A=h0`ZNg*>U+I>VL!GK%GjZ^!*{I zmSw4J+xnIbYBU*9*YLa3Ie&=7V)}abQ{VsmqQDM^!`kchzQwOrE0IJZp`lPngTWvLfglVm zL*nr`|KX2BA_{Qu0gZFPtRJq}xe!}@y}we7@O*p4>egSczT90a3cY-FWo6yi+>Kgp zj)166r$e$}BLN*D5I$TbY@g3ZT`rgDZ@1fwmu9oct3sdwK!4kBzdf4I=Sd`d7y~}U z0sue+KpXaxThUz>R6v^uM%y1bKjr`ZH92^`{lPIW@vaEk1vyB9Z3x4)feZYDT-Z1V zdGPuDe)?rR9?N7hk;P&mv)POqgn>*{M@3Xd@@O=Y>2%7R<#H+W`CLFEc%ZIUtK!ba zJwS4)R3bN+9d0DLe8^xhkbb`}F7dRvx@L{df@Crot^A9SX#n6|U?j6hSU9``*q0;# zIF3V&cFRxU^9_6fU};bp$yi~twfx{wpbI$7W5RObsyKqnb~>Hr2#7ZTj^oHD$JX}K T5ono300000NkvXXu0mjf^fe~N literal 15458 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 G_trm%SG$M+