diff --git a/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java index 4885d115b..71326bcd2 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java @@ -58,6 +58,11 @@ public class ClientSetup { new ResourceLocation(RS.ID, "block/grid/cutouts/pattern_front_connected") )); + bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "fluid_grid"), (base, registry) -> new FullbrightBakedModel( + base, + new ResourceLocation(RS.ID, "block/grid/cutouts/fluid_front_connected") + )); + bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "pattern"), (base, registry) -> new PatternBakedModel(base)); bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "disk_drive"), (base, registry) -> new FullbrightBakedModel( diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RS.java b/src/main/java/com/raoulvdberge/refinedstorage/RS.java index 392ab5b8c..cafb982cd 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RS.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RS.java @@ -96,6 +96,7 @@ public final class RS { API.instance().getNetworkNodeRegistry().add(GridNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new GridNetworkNode(world, pos, GridType.NORMAL))); API.instance().getNetworkNodeRegistry().add(GridNetworkNode.CRAFTING_ID, (tag, world, pos) -> readAndReturn(tag, new GridNetworkNode(world, pos, GridType.CRAFTING))); API.instance().getNetworkNodeRegistry().add(GridNetworkNode.PATTERN_ID, (tag, world, pos) -> readAndReturn(tag, new GridNetworkNode(world, pos, GridType.PATTERN))); + API.instance().getNetworkNodeRegistry().add(GridNetworkNode.FLUID_ID, (tag, world, pos) -> readAndReturn(tag, new GridNetworkNode(world, pos, GridType.FLUID))); API.instance().getGridManager().add(GridBlockGridFactory.ID, new GridBlockGridFactory()); } @@ -122,6 +123,7 @@ public final class RS { e.getRegistry().register(new GridBlock(GridType.NORMAL)); e.getRegistry().register(new GridBlock(GridType.CRAFTING)); e.getRegistry().register(new GridBlock(GridType.PATTERN)); + e.getRegistry().register(new GridBlock(GridType.FLUID)); } @SubscribeEvent @@ -133,6 +135,7 @@ public final class RS { e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(() -> new GridTile(GridType.NORMAL), RSBlocks.GRID).build(null).setRegistryName(RS.ID, "grid"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(() -> new GridTile(GridType.CRAFTING), RSBlocks.CRAFTING_GRID).build(null).setRegistryName(RS.ID, "crafting_grid"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(() -> new GridTile(GridType.PATTERN), RSBlocks.PATTERN_GRID).build(null).setRegistryName(RS.ID, "pattern_grid"))); + e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(() -> new GridTile(GridType.FLUID), RSBlocks.FLUID_GRID).build(null).setRegistryName(RS.ID, "fluid_grid"))); } private TileEntityType registerTileDataParameters(TileEntityType t) { @@ -203,6 +206,7 @@ public final class RS { e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.GRID)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.CRAFTING_GRID)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.PATTERN_GRID)); + e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.FLUID_GRID)); } /* TODO diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java index bae2e68dc..fdc86af5c 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java @@ -48,6 +48,8 @@ public final class RSBlocks { public static final GridBlock CRAFTING_GRID = null; @ObjectHolder(RS.ID + ":pattern_grid") public static final GridBlock PATTERN_GRID = null; + @ObjectHolder(RS.ID + ":fluid_grid") + public static final GridBlock FLUID_GRID = null; public static final BlockStorageMonitor STORAGE_MONITOR = new BlockStorageMonitor(); public static final BlockPortableGrid PORTABLE_GRID = new BlockPortableGrid(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java index 46d90ece1..307470543 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java @@ -19,7 +19,6 @@ public class RSOldConfig { public int storageUsage; public int fluidStorageUsage; public int wirelessTransmitterUsage; - public int fluidGridUsage; public int networkTransmitterUsage; public int networkReceiverUsage; public int diskManipulatorUsage; @@ -109,7 +108,6 @@ public class RSOldConfig { storageUsage = config.getInt("storage", ENERGY, 1, 0, Integer.MAX_VALUE, "The energy used by Storage Blocks"); fluidStorageUsage = config.getInt("fluidStorage", ENERGY, 1, 0, Integer.MAX_VALUE, "The energy used by Fluid Storage Blocks"); wirelessTransmitterUsage = config.getInt("wirelessTransmitter", ENERGY, 8, 0, Integer.MAX_VALUE, "The energy used by Wireless Transmitters"); - fluidGridUsage = config.getInt("fluidGrid", ENERGY, 2, 0, Integer.MAX_VALUE, "The energy used by Fluid Grids"); networkTransmitterUsage = config.getInt("networkTransmitter", ENERGY, 64, 0, Integer.MAX_VALUE, "The energy used by Network Transmitters"); networkReceiverUsage = config.getInt("networkReceiver", ENERGY, 0, 0, Integer.MAX_VALUE, "The energy used by Network Receivers"); diskManipulatorUsage = config.getInt("diskManipulator", ENERGY, 3, 0, Integer.MAX_VALUE, "The energy used by Disk Manipulators"); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java b/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java index 6a4b04fce..cf6a56ff7 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java @@ -48,6 +48,8 @@ public class RSTiles { public static final TileEntityType CRAFTING_GRID = null; @ObjectHolder(RS.ID + ":pattern_grid") public static final TileEntityType PATTERN_GRID = null; + @ObjectHolder(RS.ID + ":fluid_grid") + public static final TileEntityType FLUID_GRID = null; //@ObjectHolder(RS.ID + ":importer") public static final TileEntityType IMPORTER = null; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java index 8c7b610e4..4f3d3cc4a 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java @@ -1,6 +1,5 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.grid.handler; -import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTaskError; @@ -53,7 +52,7 @@ public class FluidGridHandler implements IFluidGridHandler { } if (bucket.isEmpty()) { - bucket = network.extractItem(StackUtils.EMPTY_BUCKET, 1, Action.PERFORM); + bucket = StackUtils.nullToEmpty(network.extractItem(StackUtils.EMPTY_BUCKET, 1, Action.PERFORM)); } if (!bucket.isEmpty()) { @@ -71,7 +70,7 @@ public class FluidGridHandler implements IFluidGridHandler { player.updateHeldItem(); } - network.getNetworkItemHandler().drainEnergy(player, RS.INSTANCE.config.wirelessFluidGridExtractUsage); + // TODO network.getNetworkItemHandler().drainEnergy(player, RS.INSTANCE.config.wirelessFluidGridExtractUsage); }); } } @@ -85,14 +84,14 @@ public class FluidGridHandler implements IFluidGridHandler { Pair result = StackUtils.getFluid(container, true); - if (network.insertFluid(result.getValue(), result.getValue().getAmount(), Action.SIMULATE) == null) { + if (!result.getValue().isEmpty() && network.insertFluid(result.getValue(), result.getValue().getAmount(), Action.SIMULATE) == null) { network.getFluidStorageTracker().changed(player, result.getValue().copy()); result = StackUtils.getFluid(container, false); network.insertFluid(result.getValue(), result.getValue().getAmount(), Action.PERFORM); - network.getNetworkItemHandler().drainEnergy(player, RS.INSTANCE.config.wirelessFluidGridInsertUsage); + // TODO network.getNetworkItemHandler().drainEnergy(player, RS.INSTANCE.config.wirelessFluidGridInsertUsage); return result.getLeft(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/PortableFluidGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/PortableFluidGridHandler.java index 8932d749b..cf160d3a2 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/PortableFluidGridHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/PortableFluidGridHandler.java @@ -73,7 +73,7 @@ public class PortableFluidGridHandler implements IFluidGridHandler { public ItemStack onInsert(ServerPlayerEntity player, ItemStack container) { Pair result = StackUtils.getFluid(container, true); - if (portableGrid.getFluidStorage().insert(result.getValue(), result.getValue().getAmount(), Action.SIMULATE) == null) { + if (!result.getValue().isEmpty() && portableGrid.getFluidStorage().insert(result.getValue(), result.getValue().getAmount(), Action.SIMULATE) == null) { portableGrid.getFluidStorageTracker().changed(player, result.getValue().copy()); result = StackUtils.getFluid(container, false); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/GridNetworkNode.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/GridNetworkNode.java index 939554565..07e62c8b9 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/GridNetworkNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/GridNetworkNode.java @@ -62,6 +62,7 @@ public class GridNetworkNode extends NetworkNode implements IGridNetworkAware, I public static final ResourceLocation ID = new ResourceLocation(RS.ID, "grid"); public static final ResourceLocation CRAFTING_ID = new ResourceLocation(RS.ID, "crafting_grid"); public static final ResourceLocation PATTERN_ID = new ResourceLocation(RS.ID, "pattern_grid"); + public static final ResourceLocation FLUID_ID = new ResourceLocation(RS.ID, "fluid_grid"); public static final String NBT_VIEW_TYPE = "ViewType"; public static final String NBT_SORTING_DIRECTION = "SortingDirection"; @@ -178,7 +179,7 @@ public class GridNetworkNode extends NetworkNode implements IGridNetworkAware, I case PATTERN: return RS.SERVER_CONFIG.getGrid().getPatternGridUsage(); case FLUID: - return 0; + return RS.SERVER_CONFIG.getGrid().getFluidGridUsage(); default: return 0; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidInterface.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidInterface.java index face8d000..9c77510cb 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidInterface.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidInterface.java @@ -55,7 +55,7 @@ public class NetworkNodeFluidInterface extends NetworkNode { private FluidHandlerProxy tank = new FluidHandlerProxy(tankIn, tankOut); - private ItemHandlerBase in = new ItemHandlerBase(1, new ListenerNetworkNode(this), stack -> StackUtils.getFluid(stack, true).getValue() != null); + private ItemHandlerBase in = new ItemHandlerBase(1, new ListenerNetworkNode(this), stack -> !StackUtils.getFluid(stack, true).getValue().isEmpty()); private FluidInventory out = new FluidInventory(1, TANK_CAPACITY, new ListenerNetworkNode(this)); private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, new ListenerNetworkNode(this)/* TODO, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK, ItemUpgrade.TYPE_CRAFTING*/); @@ -74,7 +74,7 @@ public class NetworkNodeFluidInterface extends NetworkNode { if (!container.isEmpty()) { Pair result = StackUtils.getFluid(container, true); - if (tankIn.fill(result.getValue(), IFluidHandler.FluidAction.SIMULATE) == result.getValue().getAmount()) { + if (!result.getValue().isEmpty() && tankIn.fill(result.getValue(), IFluidHandler.FluidAction.SIMULATE) == result.getValue().getAmount()) { result = StackUtils.getFluid(container, false); tankIn.fill(result.getValue(), IFluidHandler.FluidAction.EXECUTE); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/FluidStorageCache.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/FluidStorageCache.java index a58be7a83..5c34d8647 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/FluidStorageCache.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/FluidStorageCache.java @@ -85,7 +85,12 @@ public class FluidStorageCache implements IStorageCache { @Override public void flush() { if (!batchedChanges.isEmpty()) { - batchedChanges.forEach(change -> listeners.forEach(l -> l.onChanged(change))); + if (batchedChanges.size() > 1) { + listeners.forEach(l -> l.onChangedBulk(batchedChanges)); + } else { + batchedChanges.forEach(change -> listeners.forEach(l -> l.onChanged(change))); + } + batchedChanges.clear(); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/listener/FluidGridStorageCacheListener.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/listener/FluidGridStorageCacheListener.java index b5bf25623..5f2a359c7 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/listener/FluidGridStorageCacheListener.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/listener/FluidGridStorageCacheListener.java @@ -1,11 +1,16 @@ package com.raoulvdberge.refinedstorage.apiimpl.storage.cache.listener; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.network.INetwork; +import com.raoulvdberge.refinedstorage.api.network.security.Permission; import com.raoulvdberge.refinedstorage.api.storage.cache.IStorageCacheListener; import com.raoulvdberge.refinedstorage.api.util.StackListResult; +import com.raoulvdberge.refinedstorage.network.grid.GridFluidDeltaMessage; +import com.raoulvdberge.refinedstorage.network.grid.GridFluidUpdateMessage; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraftforge.fluids.FluidStack; +import java.util.ArrayList; import java.util.List; public class FluidGridStorageCacheListener implements IStorageCacheListener { @@ -19,7 +24,7 @@ public class FluidGridStorageCacheListener implements IStorageCacheListener delta) { - // TODO: RS.INSTANCE.network.sendTo(new MessageGridFluidUpdate(network, network.getSecurityManager().hasPermission(Permission.AUTOCRAFTING, player)), player); + List> deltas = new ArrayList<>(); + deltas.add(delta); + + onChangedBulk(deltas); } @Override - public void onChangedBulk(List> storageCacheDeltas) { - /* TODO - for (Pair stack : stacks) { - onChanged(stack.getLeft(), stack.getRight()); - } - */ + public void onChangedBulk(List> deltas) { + RS.NETWORK_HANDLER.sendTo(player, new GridFluidDeltaMessage(network, deltas)); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java index 08debd85e..1bf2169af 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java @@ -122,6 +122,7 @@ public class ServerConfig { private final ForgeConfigSpec.IntValue gridUsage; private final ForgeConfigSpec.IntValue craftingGridUsage; private final ForgeConfigSpec.IntValue patternGridUsage; + private final ForgeConfigSpec.IntValue fluidGridUsage; public Grid() { builder.push("grid"); @@ -129,6 +130,7 @@ public class ServerConfig { gridUsage = builder.comment("The energy used by Grids").defineInRange("gridUsage", 2, 0, Integer.MAX_VALUE); craftingGridUsage = builder.comment("The energy used by Crafting Grids").defineInRange("craftingGridUsage", 4, 0, Integer.MAX_VALUE); patternGridUsage = builder.comment("The energy used by Pattern Grids").defineInRange("patternGridUsage", 3, 0, Integer.MAX_VALUE); + fluidGridUsage = builder.comment("The energy used by Fluid Grids").defineInRange("fluidGridUsage", 2, 0, Integer.MAX_VALUE); builder.pop(); } @@ -144,6 +146,10 @@ public class ServerConfig { public int getPatternGridUsage() { return patternGridUsage.get(); } + + public int getFluidGridUsage() { + return fluidGridUsage.get(); + } } public class Upgrades { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridFluidDelta.java.off b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridFluidDelta.java.off deleted file mode 100644 index db0ee8eac..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridFluidDelta.java.off +++ /dev/null @@ -1,76 +0,0 @@ -package com.raoulvdberge.refinedstorage.network; - -import com.raoulvdberge.refinedstorage.api.network.INetwork; -import com.raoulvdberge.refinedstorage.api.storage.IStorageTracker; -import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageTrackerEntry; -import com.raoulvdberge.refinedstorage.gui.GuiBase; -import com.raoulvdberge.refinedstorage.gui.grid.GuiGrid; -import com.raoulvdberge.refinedstorage.gui.grid.stack.GridStackFluid; -import com.raoulvdberge.refinedstorage.util.StackUtils; -import io.netty.buffer.ByteBuf; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fml.common.network.ByteBufUtils; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; -import org.apache.commons.lang3.tuple.Pair; - -import javax.annotation.Nullable; - -public class MessageGridFluidDelta implements IMessage, IMessageHandler { - @Nullable - private INetwork network; - private IStorageTracker storageTracker; - private FluidStack stack; - private int delta; - - private GridStackFluid gridStack; - - public MessageGridFluidDelta() { - } - - public MessageGridFluidDelta(@Nullable INetwork network, IStorageTracker storageTracker, FluidStack stack, int delta) { - this.network = network; - this.storageTracker = storageTracker; - this.stack = stack; - this.delta = delta; - } - - @Override - public void fromBytes(ByteBuf buf) { - Pair hashAndFluidStack = StackUtils.readFluidStackAndHash(buf); - - gridStack = new GridStackFluid(hashAndFluidStack.getLeft(), hashAndFluidStack.getRight(), buf.readBoolean() ? new StorageTrackerEntry(buf) : null, buf.readBoolean(), false); - delta = buf.readInt(); - } - - @Override - public void toBytes(ByteBuf buf) { - StackUtils.writeFluidStackAndHash(buf, stack); - - IStorageTracker.IStorageTrackerEntry entry = storageTracker.get(stack); - buf.writeBoolean(entry != null); - if (entry != null) { - buf.writeLong(entry.getTime()); - ByteBufUtils.writeUTF8String(buf, entry.getName()); - } - - if (network != null) { - buf.writeBoolean(network.getCraftingManager().getPattern(stack) != null); - } else { - buf.writeBoolean(false); - } - - buf.writeInt(delta); - } - - @Override - public IMessage onMessage(MessageGridFluidDelta message, MessageContext ctx) { - GuiBase.executeLater(GuiGrid.class, grid -> { - grid.getView().postChange(message.gridStack, message.delta); - grid.getView().sort(); - }); - - return null; - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridFluidInsertHeld.java.off b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridFluidInsertHeld.java.off deleted file mode 100644 index f7fa64f0f..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridFluidInsertHeld.java.off +++ /dev/null @@ -1,34 +0,0 @@ -package com.raoulvdberge.refinedstorage.network; - -import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; -import com.raoulvdberge.refinedstorage.container.GridContainer; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.inventory.Container; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; - -public class MessageGridFluidInsertHeld extends MessageHandlerPlayerToServer implements IMessage { - public MessageGridFluidInsertHeld() { - } - - @Override - public void fromBytes(ByteBuf buf) { - } - - @Override - public void toBytes(ByteBuf buf) { - } - - @Override - public void handle(MessageGridFluidInsertHeld message, ServerPlayerEntity player) { - Container container = player.openContainer; - - if (container instanceof ContainerGrid) { - IGrid grid = ((ContainerGrid) container).getGrid(); - - if (grid.getFluidHandler() != null) { - grid.getFluidHandler().onInsertHeldContainer(player); - } - } - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridFluidPull.java.off b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridFluidPull.java.off deleted file mode 100644 index f48c83874..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridFluidPull.java.off +++ /dev/null @@ -1,46 +0,0 @@ -package com.raoulvdberge.refinedstorage.network; - -import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; -import com.raoulvdberge.refinedstorage.container.GridContainer; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.inventory.Container; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; - -public class MessageGridFluidPull extends MessageHandlerPlayerToServer implements IMessage { - private int hash; - private boolean shift; - - public MessageGridFluidPull() { - } - - public MessageGridFluidPull(int hash, boolean shift) { - this.hash = hash; - this.shift = shift; - } - - @Override - public void fromBytes(ByteBuf buf) { - hash = buf.readInt(); - shift = buf.readBoolean(); - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeInt(hash); - buf.writeBoolean(shift); - } - - @Override - public void handle(MessageGridFluidPull message, ServerPlayerEntity player) { - Container container = player.openContainer; - - if (container instanceof ContainerGrid) { - IGrid grid = ((ContainerGrid) container).getGrid(); - - if (grid.getFluidHandler() != null) { - grid.getFluidHandler().onExtract(player, message.hash, message.shift); - } - } - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridFluidUpdate.java.off b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridFluidUpdate.java.off deleted file mode 100644 index 65d5e070d..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridFluidUpdate.java.off +++ /dev/null @@ -1,112 +0,0 @@ -package com.raoulvdberge.refinedstorage.network; - -import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; -import com.raoulvdberge.refinedstorage.api.network.INetwork; -import com.raoulvdberge.refinedstorage.api.storage.IStorageTracker; -import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageTrackerEntry; -import com.raoulvdberge.refinedstorage.gui.GuiBase; -import com.raoulvdberge.refinedstorage.gui.grid.GuiGrid; -import com.raoulvdberge.refinedstorage.gui.grid.stack.GridStackFluid; -import com.raoulvdberge.refinedstorage.gui.grid.stack.IGridStack; -import com.raoulvdberge.refinedstorage.gui.grid.view.GridViewFluid; -import com.raoulvdberge.refinedstorage.util.StackUtils; -import io.netty.buffer.ByteBuf; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fml.common.network.ByteBufUtils; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Consumer; - -public class MessageGridFluidUpdate implements IMessage, IMessageHandler { - private INetwork network; - private boolean canCraft; - private List stacks = new ArrayList<>(); - private Consumer sendHandler; - - public MessageGridFluidUpdate() { - } - - public MessageGridFluidUpdate(INetwork network, boolean canCraft) { - this(buf -> { - int size = network.getFluidStorageCache().getList().getStacks().size(); - - for (ICraftingPattern pattern : network.getCraftingManager().getPatterns()) { - size += pattern.getFluidOutputs().size(); - } - - buf.writeInt(size); - - for (FluidStack stack : network.getFluidStorageCache().getList().getStacks()) { - StackUtils.writeFluidStackAndHash(buf, stack); - - IStorageTracker.IStorageTrackerEntry entry = network.getFluidStorageTracker().get(stack); - buf.writeBoolean(entry != null); - if (entry != null) { - buf.writeLong(entry.getTime()); - ByteBufUtils.writeUTF8String(buf, entry.getName()); - } - - buf.writeBoolean(network.getCraftingManager().getPattern(stack) != null); - buf.writeBoolean(false); - } - - for (ICraftingPattern pattern : network.getCraftingManager().getPatterns()) { - for (FluidStack stack : pattern.getFluidOutputs()) { - StackUtils.writeFluidStackAndHash(buf, stack); - - IStorageTracker.IStorageTrackerEntry entry = network.getFluidStorageTracker().get(stack); - buf.writeBoolean(entry != null); - if (entry != null) { - buf.writeLong(entry.getTime()); - ByteBufUtils.writeUTF8String(buf, entry.getName()); - } - - buf.writeBoolean(network.getCraftingManager().getPattern(stack) != null); - buf.writeBoolean(true); - } - } - }, canCraft); - } - - public MessageGridFluidUpdate(Consumer sendHandler, boolean canCraft) { - this.sendHandler = sendHandler; - this.canCraft = canCraft; - } - - @Override - public void fromBytes(ByteBuf buf) { - canCraft = buf.readBoolean(); - - int items = buf.readInt(); - - for (int i = 0; i < items; ++i) { - Pair hashAndFluidStack = StackUtils.readFluidStackAndHash(buf); - - this.stacks.add(new GridStackFluid(hashAndFluidStack.getLeft(), hashAndFluidStack.getRight(), buf.readBoolean() ? new StorageTrackerEntry(buf) : null, buf.readBoolean(), buf.readBoolean())); - } - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeBoolean(canCraft); - - sendHandler.accept(buf); - } - - @Override - public IMessage onMessage(MessageGridFluidUpdate message, MessageContext ctx) { - GuiBase.executeLater(GuiGrid.class, grid -> { - grid.setView(new GridViewFluid(grid, GuiGrid.getDefaultSorter(), GuiGrid.getSorters())); - grid.getView().setCanCraft(message.canCraft); - grid.getView().setStacks(message.stacks); - grid.getView().sort(); - }); - - return null; - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java index 04aba1b1d..dd0be013d 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java @@ -39,6 +39,10 @@ public class NetworkHandler { handler.registerMessage(id++, GridPatternCreateMessage.class, GridPatternCreateMessage::encode, GridPatternCreateMessage::decode, GridPatternCreateMessage::handle); handler.registerMessage(id++, SetFilterSlotMessage.class, SetFilterSlotMessage::encode, SetFilterSlotMessage::decode, SetFilterSlotMessage::handle); handler.registerMessage(id++, SetFluidFilterSlotMessage.class, SetFluidFilterSlotMessage::encode, SetFluidFilterSlotMessage::decode, SetFluidFilterSlotMessage::handle); + handler.registerMessage(id++, GridFluidUpdateMessage.class, GridFluidUpdateMessage::encode, GridFluidUpdateMessage::decode, GridFluidUpdateMessage::handle); + handler.registerMessage(id++, GridFluidDeltaMessage.class, GridFluidDeltaMessage::encode, GridFluidDeltaMessage::decode, GridFluidDeltaMessage::handle); + handler.registerMessage(id++, GridFluidInsertHeldMessage.class, GridFluidInsertHeldMessage::encode, GridFluidInsertHeldMessage::decode, GridFluidInsertHeldMessage::handle); + handler.registerMessage(id++, GridFluidPullMessage.class, GridFluidPullMessage::encode, GridFluidPullMessage::decode, GridFluidPullMessage::handle); } public void sendToServer(Object message) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidDeltaMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidDeltaMessage.java new file mode 100644 index 000000000..d977ff798 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidDeltaMessage.java @@ -0,0 +1,68 @@ +package com.raoulvdberge.refinedstorage.network.grid; + +import com.raoulvdberge.refinedstorage.api.network.INetwork; +import com.raoulvdberge.refinedstorage.api.util.StackListResult; +import com.raoulvdberge.refinedstorage.screen.BaseScreen; +import com.raoulvdberge.refinedstorage.screen.grid.GridScreen; +import com.raoulvdberge.refinedstorage.screen.grid.stack.IGridStack; +import com.raoulvdberge.refinedstorage.util.StackUtils; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.network.NetworkEvent; +import org.apache.commons.lang3.tuple.Pair; + +import javax.annotation.Nullable; +import java.util.LinkedList; +import java.util.List; +import java.util.function.Supplier; + +public class GridFluidDeltaMessage { + @Nullable + private INetwork network; + private List> deltas; + + private List> clientDeltas; + + public GridFluidDeltaMessage(INetwork network, List> deltas) { + this.network = network; + this.deltas = deltas; + } + + public GridFluidDeltaMessage(List> clientDeltas) { + this.clientDeltas = clientDeltas; + } + + public static GridFluidDeltaMessage decode(PacketBuffer buf) { + int size = buf.readInt(); + + List> clientDeltas = new LinkedList<>(); + + for (int i = 0; i < size; ++i) { + int delta = buf.readInt(); + + clientDeltas.add(Pair.of(StackUtils.readFluidGridStack(buf), delta)); + } + + return new GridFluidDeltaMessage(clientDeltas); + } + + public static void encode(GridFluidDeltaMessage message, PacketBuffer buf) { + buf.writeInt(message.deltas.size()); + + for (StackListResult delta : message.deltas) { + buf.writeInt(delta.getChange()); + + StackUtils.writeFluidGridStack(buf, delta.getStack(), delta.getId(), message.network, false, message.network.getFluidStorageTracker().get(delta.getStack())); + } + } + + public static void handle(GridFluidDeltaMessage message, Supplier ctx) { + BaseScreen.executeLater(GridScreen.class, grid -> { + message.clientDeltas.forEach(p -> grid.getView().postChange(p.getLeft(), p.getRight())); + + grid.getView().sort(); + }); + + ctx.get().setPacketHandled(true); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidInsertHeldMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidInsertHeldMessage.java new file mode 100644 index 000000000..8ce43f323 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidInsertHeldMessage.java @@ -0,0 +1,39 @@ +package com.raoulvdberge.refinedstorage.network.grid; + +import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; +import com.raoulvdberge.refinedstorage.container.GridContainer; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.container.Container; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.network.NetworkEvent; + +import java.util.function.Supplier; + +public class GridFluidInsertHeldMessage { + public static GridFluidInsertHeldMessage decode(PacketBuffer buf) { + return new GridFluidInsertHeldMessage(); + } + + public static void encode(GridFluidInsertHeldMessage message, PacketBuffer buf) { + } + + public static void handle(GridFluidInsertHeldMessage message, Supplier ctx) { + ServerPlayerEntity player = ctx.get().getSender(); + + if (player != null) { + ctx.get().enqueueWork(() -> { + Container container = player.openContainer; + + if (container instanceof GridContainer) { + IGrid grid = ((GridContainer) container).getGrid(); + + if (grid.getFluidHandler() != null) { + grid.getFluidHandler().onInsertHeldContainer(player); + } + } + }); + } + + ctx.get().setPacketHandled(true); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidPullMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidPullMessage.java new file mode 100644 index 000000000..0b163907a --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidPullMessage.java @@ -0,0 +1,50 @@ +package com.raoulvdberge.refinedstorage.network.grid; + +import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; +import com.raoulvdberge.refinedstorage.container.GridContainer; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.container.Container; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.network.NetworkEvent; + +import java.util.UUID; +import java.util.function.Supplier; + +public class GridFluidPullMessage { + private UUID id; + private boolean shift; + + public GridFluidPullMessage(UUID id, boolean shift) { + this.id = id; + this.shift = shift; + } + + public static GridFluidPullMessage decode(PacketBuffer buf) { + return new GridFluidPullMessage(buf.readUniqueId(), buf.readBoolean()); + } + + public static void encode(GridFluidPullMessage message, PacketBuffer buf) { + buf.writeUniqueId(message.id); + buf.writeBoolean(message.shift); + } + + public static void handle(GridFluidPullMessage message, Supplier ctx) { + ServerPlayerEntity player = ctx.get().getSender(); + + if (player != null) { + ctx.get().enqueueWork(() -> { + Container container = player.openContainer; + + if (container instanceof GridContainer) { + IGrid grid = ((GridContainer) container).getGrid(); + + if (grid.getFluidHandler() != null) { + grid.getFluidHandler().onExtract(player, message.id, message.shift); + } + } + }); + } + + ctx.get().setPacketHandled(true); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidUpdateMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidUpdateMessage.java new file mode 100644 index 000000000..f8d5a992c --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidUpdateMessage.java @@ -0,0 +1,81 @@ +package com.raoulvdberge.refinedstorage.network.grid; + +import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; +import com.raoulvdberge.refinedstorage.api.network.INetwork; +import com.raoulvdberge.refinedstorage.api.util.StackListEntry; +import com.raoulvdberge.refinedstorage.screen.BaseScreen; +import com.raoulvdberge.refinedstorage.screen.grid.GridScreen; +import com.raoulvdberge.refinedstorage.screen.grid.stack.IGridStack; +import com.raoulvdberge.refinedstorage.screen.grid.view.FluidGridView; +import com.raoulvdberge.refinedstorage.util.StackUtils; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.network.NetworkEvent; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; + +public class GridFluidUpdateMessage { + private INetwork network; + + private boolean canCraft; + private List stacks = new ArrayList<>(); + + public GridFluidUpdateMessage(boolean canCraft, List stacks) { + this.canCraft = canCraft; + this.stacks = stacks; + } + + public GridFluidUpdateMessage(INetwork network, boolean canCraft) { + this.network = network; + this.canCraft = canCraft; + } + + public static GridFluidUpdateMessage decode(PacketBuffer buf) { + boolean canCraft = buf.readBoolean(); + + int size = buf.readInt(); + + List stacks = new ArrayList<>(); + + for (int i = 0; i < size; ++i) { + stacks.add(StackUtils.readFluidGridStack(buf)); + } + + return new GridFluidUpdateMessage(canCraft, stacks); + } + + public static void encode(GridFluidUpdateMessage message, PacketBuffer buf) { + buf.writeBoolean(message.canCraft); + + int size = message.network.getFluidStorageCache().getList().getStacks().size(); + + for (ICraftingPattern pattern : message.network.getCraftingManager().getPatterns()) { + size += pattern.getFluidOutputs().size(); + } + + buf.writeInt(size); + + for (StackListEntry stack : message.network.getFluidStorageCache().getList().getStacks()) { + StackUtils.writeFluidGridStack(buf, stack.getStack(), stack.getId(), message.network, false, message.network.getFluidStorageTracker().get(stack.getStack())); + } + + for (ICraftingPattern pattern : message.network.getCraftingManager().getPatterns()) { + for (FluidStack output : pattern.getFluidOutputs()) { + // TODO + } + } + } + + public static void handle(GridFluidUpdateMessage message, Supplier ctx) { + BaseScreen.executeLater(GridScreen.class, grid -> { + grid.setView(new FluidGridView(grid, GridScreen.getDefaultSorter(), GridScreen.getSorters())); + grid.getView().setCanCraft(message.canCraft); + grid.getView().setStacks(message.stacks); + grid.getView().sort(); + }); + + ctx.get().setPacketHandled(true); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/AmountSpecifyingScreen.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/AmountSpecifyingScreen.java index fa5c8dccb..9750e2f04 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/AmountSpecifyingScreen.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/AmountSpecifyingScreen.java @@ -10,7 +10,6 @@ import net.minecraft.util.text.ITextComponent; import org.apache.commons.lang3.tuple.Pair; import org.lwjgl.glfw.GLFW; -// TODO Fix focusing issues on textbox (using tab) public abstract class AmountSpecifyingScreen extends BaseScreen { private BaseScreen parent; @@ -106,7 +105,7 @@ public abstract class AmountSpecifyingScreen extends BaseSc return true; } - if (key == GLFW.GLFW_KEY_ENTER || key == GLFW.GLFW_KEY_KP_ENTER) { + if ((key == GLFW.GLFW_KEY_ENTER || key == GLFW.GLFW_KEY_KP_ENTER) && amountField.isFocused()) { onOkButtonPressed(hasShiftDown()); return true; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java index a4f6e2450..9f6e654d0 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java @@ -10,10 +10,7 @@ import com.raoulvdberge.refinedstorage.api.network.grid.handler.IItemGridHandler import com.raoulvdberge.refinedstorage.apiimpl.network.node.GridNetworkNode; import com.raoulvdberge.refinedstorage.apiimpl.render.ElementDrawers; import com.raoulvdberge.refinedstorage.container.GridContainer; -import com.raoulvdberge.refinedstorage.network.grid.GridClearMessage; -import com.raoulvdberge.refinedstorage.network.grid.GridItemInsertHeldMessage; -import com.raoulvdberge.refinedstorage.network.grid.GridItemPullMessage; -import com.raoulvdberge.refinedstorage.network.grid.GridPatternCreateMessage; +import com.raoulvdberge.refinedstorage.network.grid.*; import com.raoulvdberge.refinedstorage.screen.BaseScreen; import com.raoulvdberge.refinedstorage.screen.IScreenInfoProvider; import com.raoulvdberge.refinedstorage.screen.grid.sorting.*; @@ -451,7 +448,7 @@ public class GridScreen extends BaseScreen implements IScreenInfo if (isOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && !held.isEmpty() && (clickedButton == 0 || clickedButton == 1)) { if (grid.getGridType() == GridType.FLUID) { - // @TODO RS.INSTANCE.network.sendToServer(new MessageGridFluidInsertHeld()); + RS.NETWORK_HANDLER.sendToServer(new GridFluidInsertHeldMessage()); } else { RS.NETWORK_HANDLER.sendToServer(new GridItemInsertHeldMessage(clickedButton == 1)); } @@ -469,7 +466,7 @@ public class GridScreen extends BaseScreen implements IScreenInfo if (stack.isCraftable() && view.canCraft() && (stack.doesDisplayCraftText() || (hasShiftDown() && hasControlDown()))) { // @TODO FMLCommonHandler.instance().showGuiScreen(new GuiGridCraftingSettings(this, ((ContainerGrid) this.inventorySlots).getPlayer(), stack)); } else if (grid.getGridType() == GridType.FLUID && held.isEmpty()) { - // @TODO RS.INSTANCE.network.sendToServer(new MessageGridFluidPull(view.getStacks().get(slotNumber).getHash(), GuiScreen.isShiftKeyDown())); + RS.NETWORK_HANDLER.sendToServer(new GridFluidPullMessage(view.getStacks().get(slotNumber).getId(), hasShiftDown())); } else if (grid.getGridType() != GridType.FLUID) { int flags = 0; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/util/GridUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/util/GridUtils.java index 253d5b518..1c142bfe4 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/util/GridUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/util/GridUtils.java @@ -17,7 +17,7 @@ public class GridUtils { case PATTERN: return GridNetworkNode.PATTERN_ID; case FLUID: - return null; + return GridNetworkNode.FLUID_ID; default: throw new IllegalArgumentException("Unknown grid type " + type); } @@ -32,7 +32,7 @@ public class GridUtils { case PATTERN: return RSTiles.PATTERN_GRID; case FLUID: - return null; + return RSTiles.FLUID_GRID; default: throw new IllegalArgumentException("Unknown grid type " + type); } diff --git a/src/main/resources/assets/refinedstorage/blockstates/fluid_grid.json b/src/main/resources/assets/refinedstorage/blockstates/fluid_grid.json new file mode 100644 index 000000000..1f5428161 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/blockstates/fluid_grid.json @@ -0,0 +1,36 @@ +{ + "variants": { + "connected=true,direction=north": { + "model": "refinedstorage:block/grid/fluid/connected", + "y": 0 + }, + "connected=true,direction=east": { + "model": "refinedstorage:block/grid/fluid/connected", + "y": 90 + }, + "connected=true,direction=south": { + "model": "refinedstorage:block/grid/fluid/connected", + "y": 180 + }, + "connected=true,direction=west": { + "model": "refinedstorage:block/grid/fluid/connected", + "y": 270 + }, + "connected=false,direction=north": { + "model": "refinedstorage:block/grid/fluid/disconnected", + "y": 0 + }, + "connected=false,direction=east": { + "model": "refinedstorage:block/grid/fluid/disconnected", + "y": 90 + }, + "connected=false,direction=south": { + "model": "refinedstorage:block/grid/fluid/disconnected", + "y": 180 + }, + "connected=false,direction=west": { + "model": "refinedstorage:block/grid/fluid/disconnected", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/block/grid/fluid/connected.json b/src/main/resources/assets/refinedstorage/models/block/grid/fluid/connected.json new file mode 100644 index 000000000..d4885e448 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/grid/fluid/connected.json @@ -0,0 +1,13 @@ +{ + "parent": "refinedstorage:block/cube_north_cutout", + "textures": { + "particle": "refinedstorage:block/side", + "east": "refinedstorage:block/grid/fluid_left", + "south": "refinedstorage:block/grid/back", + "west": "refinedstorage:block/grid/fluid_right", + "up": "refinedstorage:block/grid/fluid_top", + "down": "refinedstorage:block/bottom", + "north": "refinedstorage:block/grid/fluid_front", + "cutout": "refinedstorage:block/grid/cutouts/fluid_front_connected" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/block/grid/fluid/disconnected.json b/src/main/resources/assets/refinedstorage/models/block/grid/fluid/disconnected.json new file mode 100644 index 000000000..b38740786 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/grid/fluid/disconnected.json @@ -0,0 +1,13 @@ +{ + "parent": "refinedstorage:block/cube_north_cutout", + "textures": { + "particle": "refinedstorage:block/side", + "east": "refinedstorage:block/grid/fluid_left", + "south": "refinedstorage:block/grid/back", + "west": "refinedstorage:block/grid/fluid_right", + "up": "refinedstorage:block/grid/fluid_top", + "down": "refinedstorage:block/bottom", + "north": "refinedstorage:block/grid/fluid_front", + "cutout": "refinedstorage:block/grid/cutouts/fluid_front_disconnected" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/item/fluid_grid.json b/src/main/resources/assets/refinedstorage/models/item/fluid_grid.json new file mode 100644 index 000000000..1daaf2245 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/fluid_grid.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/grid/fluid/disconnected" +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/textures/block/grid/crafting_front.png b/src/main/resources/assets/refinedstorage/textures/block/grid/crafting_front.png deleted file mode 100644 index d6f059405..000000000 Binary files a/src/main/resources/assets/refinedstorage/textures/block/grid/crafting_front.png and /dev/null differ diff --git a/src/main/resources/assets/refinedstorage/textures/block/grid/fluid_back.png b/src/main/resources/assets/refinedstorage/textures/block/grid/fluid_back.png deleted file mode 100644 index e2be827ec..000000000 Binary files a/src/main/resources/assets/refinedstorage/textures/block/grid/fluid_back.png and /dev/null differ diff --git a/src/main/resources/assets/refinedstorage/textures/block/grid/pattern_front.png b/src/main/resources/assets/refinedstorage/textures/block/grid/pattern_front.png deleted file mode 100644 index d6f059405..000000000 Binary files a/src/main/resources/assets/refinedstorage/textures/block/grid/pattern_front.png and /dev/null differ diff --git a/src/main/resources/data/refinedstorage/loot_tables/blocks/fluid_grid.json b/src/main/resources/data/refinedstorage/loot_tables/blocks/fluid_grid.json new file mode 100644 index 000000000..21c38ceff --- /dev/null +++ b/src/main/resources/data/refinedstorage/loot_tables/blocks/fluid_grid.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:fluid_grid" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/recipes/fluid_grid.json b/src/main/resources/data/refinedstorage/recipes/fluid_grid.json similarity index 53% rename from src/main/resources/assets/refinedstorage/recipes/fluid_grid.json rename to src/main/resources/data/refinedstorage/recipes/fluid_grid.json index a8ba4860c..d2b33a8f1 100644 --- a/src/main/resources/assets/refinedstorage/recipes/fluid_grid.json +++ b/src/main/resources/data/refinedstorage/recipes/fluid_grid.json @@ -2,18 +2,16 @@ "type": "minecraft:crafting_shapeless", "ingredients": [ { - "item": "refinedstorage:grid", - "data": 0 + "item": "refinedstorage:grid" }, { - "item": "#advanced_processor" + "item": "refinedstorage:advanced_processor" }, { "item": "minecraft:bucket" } ], "result": { - "item": "refinedstorage:grid", - "data": 3 + "item": "refinedstorage:fluid_grid" } } \ No newline at end of file