From 38d078cbcc9c6a896f68fd4b1b829eb99a7b6e30 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 12 Nov 2016 02:06:40 +0100 Subject: [PATCH] Fluid reader writer handlers --- .../ReaderWriterHandlerFluids.java | 163 ++++++++++++++++++ .../refinedstorage/proxy/ProxyClient.java | 11 +- .../refinedstorage/proxy/ProxyCommon.java | 4 +- 3 files changed, 169 insertions(+), 9 deletions(-) create mode 100755 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerFluids.java diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerFluids.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerFluids.java new file mode 100755 index 000000000..14d9110cd --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerFluids.java @@ -0,0 +1,163 @@ +package com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter; + +import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReader; +import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel; +import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHandler; +import com.raoulvdberge.refinedstorage.api.network.readerwriter.IWriter; +import com.raoulvdberge.refinedstorage.tile.IReaderWriter; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.*; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidTankProperties; + +import javax.annotation.Nullable; + +public class ReaderWriterHandlerFluids implements IReaderWriterHandler { + public static final String ID = "fluids"; + + private FluidTank tank; + private FluidTankReaderWriter tankReader, tankWriter; + + public ReaderWriterHandlerFluids(@Nullable NBTTagCompound tag) { + this.tank = new FluidTank(4 * Fluid.BUCKET_VOLUME); + this.tankReader = new FluidTankReaderWriter(tank, true, false); + this.tankWriter = new FluidTankReaderWriter(tank, false, true); + + if (tag != null) { + this.tank.readFromNBT(tag); + } + } + + @Override + public void update(IReaderWriterChannel channel) { + // NO OP + } + + @Override + public void onWriterDisabled(IWriter writer) { + // NO OP + } + + @Override + public boolean hasCapability(IReaderWriter readerWriter, Capability capability) { + return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY && (readerWriter instanceof IReader || readerWriter instanceof IWriter); + } + + @Override + public T getCapability(IReaderWriter readerWriter, Capability capability) { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { + if (readerWriter instanceof IReader) { + return (T) tankReader; + } else if (readerWriter instanceof IWriter) { + return (T) tankWriter; + } + } + + return null; + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound tag) { + tank.writeToNBT(tag); + + return tag; + } + + @Override + public String getId() { + return ID; + } + + private class FluidTankReaderWriter implements IFluidTank, IFluidHandler { + private FluidTank parent; + private boolean canFill, canDrain; + private IFluidTankProperties[] properties; + + public FluidTankReaderWriter(FluidTank parent, boolean canFill, boolean canDrain) { + this.parent = parent; + + this.canFill = canFill; + this.canDrain = canDrain; + + this.properties = new IFluidTankProperties[]{ + new IFluidTankProperties() { + @Nullable + @Override + public FluidStack getContents() { + return parent.getFluid(); + } + + @Override + public int getCapacity() { + return parent.getCapacity(); + } + + @Override + public boolean canFill() { + return canFill; + } + + @Override + public boolean canDrain() { + return canDrain; + } + + @Override + public boolean canFillFluidType(FluidStack fluidStack) { + return canFill; + } + + @Override + public boolean canDrainFluidType(FluidStack fluidStack) { + return canDrain; + } + } + }; + } + + @Nullable + @Override + public FluidStack getFluid() { + return parent.getFluid(); + } + + @Override + public int getFluidAmount() { + return parent.getFluidAmount(); + } + + @Override + public int getCapacity() { + return parent.getCapacity(); + } + + @Override + public FluidTankInfo getInfo() { + return parent.getInfo(); + } + + @Override + public IFluidTankProperties[] getTankProperties() { + return properties; + } + + @Override + public int fill(FluidStack resource, boolean doFill) { + return canFill ? parent.fill(resource, doFill) : 0; + } + + @Nullable + @Override + public FluidStack drain(FluidStack resource, boolean doDrain) { + return canDrain ? parent.drain(resource, doDrain) : null; + } + + @Nullable + @Override + public FluidStack drain(int maxDrain, boolean doDrain) { + return canDrain ? parent.drain(maxDrain, doDrain) : null; + } + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java index a19b15064..ad1ca18f3 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java @@ -19,7 +19,6 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.VertexBuffer; import net.minecraft.client.renderer.block.model.ModelBakery; @@ -29,7 +28,6 @@ import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.client.resources.IResourceManager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; @@ -238,13 +236,10 @@ public class ProxyClient extends ProxyCommon { ModelLoader.setCustomStateMapper(RSBlocks.CONTROLLER, new StateMap.Builder().ignore(BlockController.TYPE).build()); - ModelLoader.setCustomMeshDefinition(Item.getItemFromBlock(RSBlocks.CONTROLLER), new ItemMeshDefinition() { - @Override - public ModelResourceLocation getModelLocation(ItemStack stack) { - int energy = stack.getItemDamage() == EnumControllerType.CREATIVE.getId() ? 7 : TileController.getEnergyScaled(ItemBlockController.getEnergyStored(stack), ItemBlockController.getEnergyCapacity(stack), 7); + ModelLoader.setCustomMeshDefinition(Item.getItemFromBlock(RSBlocks.CONTROLLER), stack -> { + int energy = stack.getItemDamage() == EnumControllerType.CREATIVE.getId() ? 7 : TileController.getEnergyScaled(ItemBlockController.getEnergyStored(stack), ItemBlockController.getEnergyCapacity(stack), 7); - return new ModelResourceLocation("refinedstorage:controller", "direction=north,energy=" + energy); - } + return new ModelResourceLocation("refinedstorage:controller", "direction=north,energy=" + energy); }); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index 7a4a61077..394219d42 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -9,6 +9,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.*; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPreviewElementFluidStack; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPreviewElementItemStack; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.registry.CraftingTaskFactory; +import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterHandlerFluids; import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterHandlerItems; import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterHandlerRedstone; import com.raoulvdberge.refinedstorage.apiimpl.solderer.*; @@ -75,7 +76,8 @@ public class ProxyCommon { API.instance().getCraftingPreviewElementRegistry().add(CraftingPreviewElementItemStack.ID, CraftingPreviewElementItemStack::fromByteBuf); API.instance().getCraftingPreviewElementRegistry().add(CraftingPreviewElementFluidStack.ID, CraftingPreviewElementFluidStack::fromByteBuf); - API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerItems.ID, tag -> new ReaderWriterHandlerItems(tag)); + API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerItems.ID, ReaderWriterHandlerItems::new); + API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerFluids.ID, ReaderWriterHandlerFluids::new); API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerRedstone.ID, tag -> new ReaderWriterHandlerRedstone()); int id = 0;