diff --git a/src/main/java/appeng/fluids/helper/DualityFluidInterface.java b/src/main/java/appeng/fluids/helper/DualityFluidInterface.java index 6d9987bb1..4786a248c 100644 --- a/src/main/java/appeng/fluids/helper/DualityFluidInterface.java +++ b/src/main/java/appeng/fluids/helper/DualityFluidInterface.java @@ -28,6 +28,7 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.IItemHandler; import appeng.api.AEApi; @@ -72,7 +73,7 @@ import appeng.util.IConfigManagerHost; import appeng.util.Platform; -public class DualityFluidInterface implements IGridTickable, IStorageMonitorable, IAEFluidInventory, IUpgradeableHost, IConfigManagerHost +public class DualityFluidInterface implements IGridTickable, IStorageMonitorable, IAEFluidInventory, IUpgradeableHost, IConfigManagerHost, IConfigurableFluidInventory { public static final int NUMBER_OF_TANKS = 6; public static final int TANK_CAPACITY = Fluid.BUCKET_VOLUME * 4; @@ -603,6 +604,14 @@ public class DualityFluidInterface implements IGridTickable, IStorageMonitorable return null; } + @Override + public IFluidHandler getFluidInventoryByName( final String name) { + if (name.equals("config")) { + return this.config; + } + return null; + } + @Override public int getInstalledUpgrades( Upgrades u ) { diff --git a/src/main/java/appeng/fluids/helper/IConfigurableFluidInventory.java b/src/main/java/appeng/fluids/helper/IConfigurableFluidInventory.java new file mode 100644 index 000000000..c073cd444 --- /dev/null +++ b/src/main/java/appeng/fluids/helper/IConfigurableFluidInventory.java @@ -0,0 +1,11 @@ +package appeng.fluids.helper; + +import net.minecraftforge.fluids.capability.IFluidHandler; + +public interface IConfigurableFluidInventory +{ + default IFluidHandler getFluidInventoryByName( String name ) + { + return null; + } +} diff --git a/src/main/java/appeng/fluids/parts/PartFluidFormationPlane.java b/src/main/java/appeng/fluids/parts/PartFluidFormationPlane.java index 3a9be31de..36df5003a 100644 --- a/src/main/java/appeng/fluids/parts/PartFluidFormationPlane.java +++ b/src/main/java/appeng/fluids/parts/PartFluidFormationPlane.java @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import appeng.fluids.helper.IConfigurableFluidInventory; import net.minecraft.block.Block; import net.minecraft.block.BlockLiquid; import net.minecraft.block.state.IBlockState; @@ -51,9 +52,10 @@ import appeng.parts.automation.PartAbstractFormationPlane; import appeng.parts.automation.PlaneModels; import appeng.util.Platform; import appeng.util.prioritylist.PrecisePriorityList; +import net.minecraftforge.fluids.capability.IFluidHandler; -public class PartFluidFormationPlane extends PartAbstractFormationPlane implements IAEFluidInventory +public class PartFluidFormationPlane extends PartAbstractFormationPlane implements IAEFluidInventory, IConfigurableFluidInventory { private static final PlaneModels MODELS = new PlaneModels( "part/fluid_formation_plane_", "part/fluid_formation_plane_on_" ); @@ -222,6 +224,14 @@ public class PartFluidFormationPlane extends PartAbstractFormationPlane +public class PartFluidLevelEmitter extends PartUpgradeable implements IStackWatcherHost, IConfigManagerHost, IAEFluidInventory, IMEMonitorHandlerReceiver, IConfigurableFluidInventory { @PartModels public static final ResourceLocation MODEL_BASE_OFF = new ResourceLocation( AppEng.MOD_ID, "part/level_emitter_base_off" ); @@ -353,6 +355,14 @@ public class PartFluidLevelEmitter extends PartUpgradeable implements IStackWatc return this.config; } + @Override + public IFluidHandler getFluidInventoryByName( final String name) { + if (name.equals("config")) { + return this.config; + } + return null; + } + @Override public void readFromNBT( final NBTTagCompound data ) { diff --git a/src/main/java/appeng/fluids/parts/PartFluidStorageBus.java b/src/main/java/appeng/fluids/parts/PartFluidStorageBus.java index e03df2576..7ece80a36 100644 --- a/src/main/java/appeng/fluids/parts/PartFluidStorageBus.java +++ b/src/main/java/appeng/fluids/parts/PartFluidStorageBus.java @@ -25,6 +25,7 @@ import java.util.Objects; import javax.annotation.Nonnull; +import appeng.fluids.helper.IConfigurableFluidInventory; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -87,7 +88,7 @@ import appeng.util.prioritylist.PrecisePriorityList; * @version rv6 - 22/05/2018 * @since rv6 22/05/2018 */ -public class PartFluidStorageBus extends PartSharedStorageBus implements IMEMonitorHandlerReceiver, IAEFluidInventory +public class PartFluidStorageBus extends PartSharedStorageBus implements IMEMonitorHandlerReceiver, IAEFluidInventory, IConfigurableFluidInventory { public static final ResourceLocation MODEL_BASE = new ResourceLocation( AppEng.MOD_ID, "part/fluid_storage_bus_base" ); @PartModels @@ -469,6 +470,14 @@ public class PartFluidStorageBus extends PartSharedStorageBus implements IMEMoni return this.config; } + @Override + public IFluidHandler getFluidInventoryByName(final String name) { + if (name.equals("config")) { + return this.config; + } + return null; + } + @Nonnull @Override public IPartModel getStaticModels() diff --git a/src/main/java/appeng/fluids/parts/PartSharedFluidBus.java b/src/main/java/appeng/fluids/parts/PartSharedFluidBus.java index ed2e372cd..08f7dafb4 100644 --- a/src/main/java/appeng/fluids/parts/PartSharedFluidBus.java +++ b/src/main/java/appeng/fluids/parts/PartSharedFluidBus.java @@ -19,6 +19,7 @@ package appeng.fluids.parts; +import appeng.fluids.helper.IConfigurableFluidInventory; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -44,6 +45,7 @@ import appeng.fluids.util.IAEFluidTank; import appeng.me.GridAccessException; import appeng.parts.automation.PartUpgradeable; import appeng.util.Platform; +import net.minecraftforge.fluids.capability.IFluidHandler; /** @@ -51,7 +53,7 @@ import appeng.util.Platform; * @version rv6 - 30/04/2018 * @since rv6 30/04/2018 */ -public abstract class PartSharedFluidBus extends PartUpgradeable implements IGridTickable +public abstract class PartSharedFluidBus extends PartUpgradeable implements IGridTickable, IConfigurableFluidInventory { private final AEFluidInventory config = new AEFluidInventory( null, 9 ); @@ -176,6 +178,14 @@ public abstract class PartSharedFluidBus extends PartUpgradeable implements IGri return this.config; } + @Override + public IFluidHandler getFluidInventoryByName( final String name) { + if (name.equals("config")) { + return this.config; + } + return null; + } + protected IFluidStorageChannel getChannel() { return AEApi.instance().storage().getStorageChannel( IFluidStorageChannel.class ); diff --git a/src/main/java/appeng/fluids/tile/TileFluidInterface.java b/src/main/java/appeng/fluids/tile/TileFluidInterface.java index 2968b65c8..430e1deaa 100644 --- a/src/main/java/appeng/fluids/tile/TileFluidInterface.java +++ b/src/main/java/appeng/fluids/tile/TileFluidInterface.java @@ -23,11 +23,13 @@ import java.util.EnumSet; import javax.annotation.Nullable; +import appeng.fluids.helper.IConfigurableFluidInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.IItemHandler; import appeng.api.AEApi; @@ -50,7 +52,7 @@ import appeng.helpers.IPriorityHost; import appeng.tile.grid.AENetworkTile; -public class TileFluidInterface extends AENetworkTile implements IGridTickable, IFluidInterfaceHost, IPriorityHost +public class TileFluidInterface extends AENetworkTile implements IGridTickable, IFluidInterfaceHost, IPriorityHost, IConfigurableFluidInventory { private final DualityFluidInterface duality = new DualityFluidInterface( this.getProxy(), this ); @@ -176,6 +178,11 @@ public class TileFluidInterface extends AENetworkTile implements IGridTickable, return this.duality.getInventoryByName( name ); } + @Override + public IFluidHandler getFluidInventoryByName(final String name) { + return this.duality.getFluidInventoryByName(name); + } + @Override public ItemStack getItemStackRepresentation() { diff --git a/src/main/java/appeng/parts/AEBasePart.java b/src/main/java/appeng/parts/AEBasePart.java index 51f6841a9..d7ecf73df 100644 --- a/src/main/java/appeng/parts/AEBasePart.java +++ b/src/main/java/appeng/parts/AEBasePart.java @@ -26,6 +26,10 @@ import java.util.List; import java.util.Optional; import java.util.Random; +import appeng.fluids.helper.IConfigurableFluidInventory; +import appeng.fluids.parts.PartFluidLevelEmitter; +import appeng.fluids.util.AEFluidInventory; +import appeng.parts.automation.PartLevelEmitter; import com.google.common.base.Preconditions; import io.netty.buffer.ByteBuf; @@ -43,6 +47,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.items.IItemHandler; @@ -383,6 +388,26 @@ public abstract class AEBasePart implements IPart, IGridProxyable, IActionHost, { target.setStackInSlot( x, tmp.getStackInSlot( x ) ); } + if (this instanceof PartLevelEmitter ) { + final PartLevelEmitter partLevelEmitter = (PartLevelEmitter) this; + partLevelEmitter.setReportingValue(compound.getLong("reportingValue")); + } + } + + if (this instanceof IConfigurableFluidInventory) { + final IFluidHandler tank = ((IConfigurableFluidInventory) this).getFluidInventoryByName("config"); + if (tank instanceof AEFluidInventory ) { + final AEFluidInventory target = (AEFluidInventory) tank; + final AEFluidInventory tmp = new AEFluidInventory(null, target.getSlots()); + tmp.readFromNBT(compound, "config"); + for (int x = 0; x < tmp.getSlots(); x++) { + target.setFluidInSlot(x, tmp.getFluidInSlot(x)); + } + } + if (this instanceof PartFluidLevelEmitter ) { + final PartFluidLevelEmitter partFluidLevelEmitter = (PartFluidLevelEmitter) this; + partFluidLevelEmitter.setReportingValue(compound.getLong("reportingValue")); + } } } @@ -415,6 +440,13 @@ public abstract class AEBasePart implements IPart, IGridProxyable, IActionHost, ( (AppEngInternalAEInventory) inv ).writeToNBT( output, "config" ); } + if (this instanceof IConfigurableFluidInventory) { + final IFluidHandler tank = ((IConfigurableFluidInventory) this).getFluidInventoryByName("config"); + if (tank instanceof AEFluidInventory ) { + ((AEFluidInventory) tank).writeToNBT(output, "config"); + } + } + return output.hasNoTags() ? null : output; } diff --git a/src/main/java/appeng/tile/AEBaseTile.java b/src/main/java/appeng/tile/AEBaseTile.java index 29295552a..ba2d921a0 100644 --- a/src/main/java/appeng/tile/AEBaseTile.java +++ b/src/main/java/appeng/tile/AEBaseTile.java @@ -28,6 +28,8 @@ import java.util.Map; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import appeng.fluids.helper.IConfigurableFluidInventory; +import appeng.fluids.util.AEFluidInventory; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -41,6 +43,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.IItemHandler; import appeng.api.implementations.tiles.ISegmentedInventory; @@ -398,6 +401,18 @@ public class AEBaseTile extends TileEntity implements IOrientable, ICommonTile, } } } + + if (this instanceof IConfigurableFluidInventory ) { + final IFluidHandler tank = ((IConfigurableFluidInventory) this).getFluidInventoryByName("config"); + if (tank instanceof AEFluidInventory) { + final AEFluidInventory target = (AEFluidInventory) tank; + final AEFluidInventory tmp = new AEFluidInventory(null, target.getSlots()); + tmp.readFromNBT(compound, "config"); + for (int x = 0; x < tmp.getSlots(); x++) { + target.setFluidInSlot(x, tmp.getFluidInSlot(x)); + } + } + } } /** @@ -462,6 +477,13 @@ public class AEBaseTile extends TileEntity implements IOrientable, ICommonTile, } } + if (this instanceof IConfigurableFluidInventory) { + final IFluidHandler tank = ((IConfigurableFluidInventory) this).getFluidInventoryByName("config"); + if (tank instanceof AEFluidInventory ) { + ((AEFluidInventory) tank).writeToNBT(output, "config"); + } + } + return output.hasNoTags() ? null : output; }