Re-add the Fluid Grid

This commit is contained in:
raoulvdberge
2019-10-12 10:51:42 +02:00
parent e5ebda9f2f
commit 8471ebf676
33 changed files with 381 additions and 303 deletions

View File

@@ -58,6 +58,11 @@ public class ClientSetup {
new ResourceLocation(RS.ID, "block/grid/cutouts/pattern_front_connected") 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, "pattern"), (base, registry) -> new PatternBakedModel(base));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "disk_drive"), (base, registry) -> new FullbrightBakedModel( bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "disk_drive"), (base, registry) -> new FullbrightBakedModel(

View File

@@ -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.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.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.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()); 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.NORMAL));
e.getRegistry().register(new GridBlock(GridType.CRAFTING)); e.getRegistry().register(new GridBlock(GridType.CRAFTING));
e.getRegistry().register(new GridBlock(GridType.PATTERN)); e.getRegistry().register(new GridBlock(GridType.PATTERN));
e.getRegistry().register(new GridBlock(GridType.FLUID));
} }
@SubscribeEvent @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.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.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.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 <T extends TileEntity> TileEntityType<T> registerTileDataParameters(TileEntityType<T> t) { private <T extends TileEntity> TileEntityType<T> registerTileDataParameters(TileEntityType<T> t) {
@@ -203,6 +206,7 @@ public final class RS {
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.GRID)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.GRID));
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.CRAFTING_GRID)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.CRAFTING_GRID));
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.PATTERN_GRID)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.PATTERN_GRID));
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.FLUID_GRID));
} }
/* TODO /* TODO

View File

@@ -48,6 +48,8 @@ public final class RSBlocks {
public static final GridBlock CRAFTING_GRID = null; public static final GridBlock CRAFTING_GRID = null;
@ObjectHolder(RS.ID + ":pattern_grid") @ObjectHolder(RS.ID + ":pattern_grid")
public static final GridBlock PATTERN_GRID = null; 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 BlockStorageMonitor STORAGE_MONITOR = new BlockStorageMonitor();
public static final BlockPortableGrid PORTABLE_GRID = new BlockPortableGrid(); public static final BlockPortableGrid PORTABLE_GRID = new BlockPortableGrid();

View File

@@ -19,7 +19,6 @@ public class RSOldConfig {
public int storageUsage; public int storageUsage;
public int fluidStorageUsage; public int fluidStorageUsage;
public int wirelessTransmitterUsage; public int wirelessTransmitterUsage;
public int fluidGridUsage;
public int networkTransmitterUsage; public int networkTransmitterUsage;
public int networkReceiverUsage; public int networkReceiverUsage;
public int diskManipulatorUsage; 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"); 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"); 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"); 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"); 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"); 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"); diskManipulatorUsage = config.getInt("diskManipulator", ENERGY, 3, 0, Integer.MAX_VALUE, "The energy used by Disk Manipulators");

View File

@@ -48,6 +48,8 @@ public class RSTiles {
public static final TileEntityType<GridTile> CRAFTING_GRID = null; public static final TileEntityType<GridTile> CRAFTING_GRID = null;
@ObjectHolder(RS.ID + ":pattern_grid") @ObjectHolder(RS.ID + ":pattern_grid")
public static final TileEntityType<GridTile> PATTERN_GRID = null; public static final TileEntityType<GridTile> PATTERN_GRID = null;
@ObjectHolder(RS.ID + ":fluid_grid")
public static final TileEntityType<GridTile> FLUID_GRID = null;
//@ObjectHolder(RS.ID + ":importer") //@ObjectHolder(RS.ID + ":importer")
public static final TileEntityType<TileImporter> IMPORTER = null; public static final TileEntityType<TileImporter> IMPORTER = null;

View File

@@ -1,6 +1,5 @@
package com.raoulvdberge.refinedstorage.apiimpl.network.grid.handler; 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.ICraftingPattern;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTaskError; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTaskError;
@@ -53,7 +52,7 @@ public class FluidGridHandler implements IFluidGridHandler {
} }
if (bucket.isEmpty()) { 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()) { if (!bucket.isEmpty()) {
@@ -71,7 +70,7 @@ public class FluidGridHandler implements IFluidGridHandler {
player.updateHeldItem(); 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<ItemStack, FluidStack> result = StackUtils.getFluid(container, true); Pair<ItemStack, FluidStack> 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()); network.getFluidStorageTracker().changed(player, result.getValue().copy());
result = StackUtils.getFluid(container, false); result = StackUtils.getFluid(container, false);
network.insertFluid(result.getValue(), result.getValue().getAmount(), Action.PERFORM); 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(); return result.getLeft();
} }

View File

@@ -73,7 +73,7 @@ public class PortableFluidGridHandler implements IFluidGridHandler {
public ItemStack onInsert(ServerPlayerEntity player, ItemStack container) { public ItemStack onInsert(ServerPlayerEntity player, ItemStack container) {
Pair<ItemStack, FluidStack> result = StackUtils.getFluid(container, true); Pair<ItemStack, FluidStack> 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()); portableGrid.getFluidStorageTracker().changed(player, result.getValue().copy());
result = StackUtils.getFluid(container, false); result = StackUtils.getFluid(container, false);

View File

@@ -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 ID = new ResourceLocation(RS.ID, "grid");
public static final ResourceLocation CRAFTING_ID = new ResourceLocation(RS.ID, "crafting_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 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_VIEW_TYPE = "ViewType";
public static final String NBT_SORTING_DIRECTION = "SortingDirection"; public static final String NBT_SORTING_DIRECTION = "SortingDirection";
@@ -178,7 +179,7 @@ public class GridNetworkNode extends NetworkNode implements IGridNetworkAware, I
case PATTERN: case PATTERN:
return RS.SERVER_CONFIG.getGrid().getPatternGridUsage(); return RS.SERVER_CONFIG.getGrid().getPatternGridUsage();
case FLUID: case FLUID:
return 0; return RS.SERVER_CONFIG.getGrid().getFluidGridUsage();
default: default:
return 0; return 0;
} }

View File

@@ -55,7 +55,7 @@ public class NetworkNodeFluidInterface extends NetworkNode {
private FluidHandlerProxy tank = new FluidHandlerProxy(tankIn, tankOut); 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 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*/); 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()) { if (!container.isEmpty()) {
Pair<ItemStack, FluidStack> result = StackUtils.getFluid(container, true); Pair<ItemStack, FluidStack> 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); result = StackUtils.getFluid(container, false);
tankIn.fill(result.getValue(), IFluidHandler.FluidAction.EXECUTE); tankIn.fill(result.getValue(), IFluidHandler.FluidAction.EXECUTE);

View File

@@ -85,7 +85,12 @@ public class FluidStorageCache implements IStorageCache<FluidStack> {
@Override @Override
public void flush() { public void flush() {
if (!batchedChanges.isEmpty()) { 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(); batchedChanges.clear();
} }
} }

View File

@@ -1,11 +1,16 @@
package com.raoulvdberge.refinedstorage.apiimpl.storage.cache.listener; 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.INetwork;
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.api.storage.cache.IStorageCacheListener; import com.raoulvdberge.refinedstorage.api.storage.cache.IStorageCacheListener;
import com.raoulvdberge.refinedstorage.api.util.StackListResult; 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.minecraft.entity.player.ServerPlayerEntity;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class FluidGridStorageCacheListener implements IStorageCacheListener<FluidStack> { public class FluidGridStorageCacheListener implements IStorageCacheListener<FluidStack> {
@@ -19,7 +24,7 @@ public class FluidGridStorageCacheListener implements IStorageCacheListener<Flui
@Override @Override
public void onAttached() { public void onAttached() {
// TODO: RS.INSTANCE.network.sendTo(new MessageGridFluidUpdate(network, network.getSecurityManager().hasPermission(Permission.AUTOCRAFTING, player)), player); RS.NETWORK_HANDLER.sendTo(player, new GridFluidUpdateMessage(network, network.getSecurityManager().hasPermission(Permission.AUTOCRAFTING, player)));
} }
@Override @Override
@@ -29,16 +34,15 @@ public class FluidGridStorageCacheListener implements IStorageCacheListener<Flui
@Override @Override
public void onChanged(StackListResult<FluidStack> delta) { public void onChanged(StackListResult<FluidStack> delta) {
// TODO: RS.INSTANCE.network.sendTo(new MessageGridFluidUpdate(network, network.getSecurityManager().hasPermission(Permission.AUTOCRAFTING, player)), player); List<StackListResult<FluidStack>> deltas = new ArrayList<>();
deltas.add(delta);
onChangedBulk(deltas);
} }
@Override @Override
public void onChangedBulk(List<StackListResult<FluidStack>> storageCacheDeltas) { public void onChangedBulk(List<StackListResult<FluidStack>> deltas) {
/* TODO RS.NETWORK_HANDLER.sendTo(player, new GridFluidDeltaMessage(network, deltas));
for (Pair<FluidStack, Integer> stack : stacks) {
onChanged(stack.getLeft(), stack.getRight());
}
*/
} }
} }

View File

@@ -122,6 +122,7 @@ public class ServerConfig {
private final ForgeConfigSpec.IntValue gridUsage; private final ForgeConfigSpec.IntValue gridUsage;
private final ForgeConfigSpec.IntValue craftingGridUsage; private final ForgeConfigSpec.IntValue craftingGridUsage;
private final ForgeConfigSpec.IntValue patternGridUsage; private final ForgeConfigSpec.IntValue patternGridUsage;
private final ForgeConfigSpec.IntValue fluidGridUsage;
public Grid() { public Grid() {
builder.push("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); 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); 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); 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(); builder.pop();
} }
@@ -144,6 +146,10 @@ public class ServerConfig {
public int getPatternGridUsage() { public int getPatternGridUsage() {
return patternGridUsage.get(); return patternGridUsage.get();
} }
public int getFluidGridUsage() {
return fluidGridUsage.get();
}
} }
public class Upgrades { public class Upgrades {

View File

@@ -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<MessageGridFluidDelta, IMessage> {
@Nullable
private INetwork network;
private IStorageTracker<FluidStack> storageTracker;
private FluidStack stack;
private int delta;
private GridStackFluid gridStack;
public MessageGridFluidDelta() {
}
public MessageGridFluidDelta(@Nullable INetwork network, IStorageTracker<FluidStack> storageTracker, FluidStack stack, int delta) {
this.network = network;
this.storageTracker = storageTracker;
this.stack = stack;
this.delta = delta;
}
@Override
public void fromBytes(ByteBuf buf) {
Pair<Integer, FluidStack> 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;
}
}

View File

@@ -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<MessageGridFluidInsertHeld> 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);
}
}
}
}

View File

@@ -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<MessageGridFluidPull> 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);
}
}
}
}

View File

@@ -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<MessageGridFluidUpdate, IMessage> {
private INetwork network;
private boolean canCraft;
private List<IGridStack> stacks = new ArrayList<>();
private Consumer<ByteBuf> 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<ByteBuf> 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<Integer, FluidStack> 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;
}
}

View File

@@ -39,6 +39,10 @@ public class NetworkHandler {
handler.registerMessage(id++, GridPatternCreateMessage.class, GridPatternCreateMessage::encode, GridPatternCreateMessage::decode, GridPatternCreateMessage::handle); 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++, SetFilterSlotMessage.class, SetFilterSlotMessage::encode, SetFilterSlotMessage::decode, SetFilterSlotMessage::handle);
handler.registerMessage(id++, SetFluidFilterSlotMessage.class, SetFluidFilterSlotMessage::encode, SetFluidFilterSlotMessage::decode, SetFluidFilterSlotMessage::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) { public void sendToServer(Object message) {

View File

@@ -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<StackListResult<FluidStack>> deltas;
private List<Pair<IGridStack, Integer>> clientDeltas;
public GridFluidDeltaMessage(INetwork network, List<StackListResult<FluidStack>> deltas) {
this.network = network;
this.deltas = deltas;
}
public GridFluidDeltaMessage(List<Pair<IGridStack, Integer>> clientDeltas) {
this.clientDeltas = clientDeltas;
}
public static GridFluidDeltaMessage decode(PacketBuffer buf) {
int size = buf.readInt();
List<Pair<IGridStack, Integer>> 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<FluidStack> 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<NetworkEvent.Context> ctx) {
BaseScreen.executeLater(GridScreen.class, grid -> {
message.clientDeltas.forEach(p -> grid.getView().postChange(p.getLeft(), p.getRight()));
grid.getView().sort();
});
ctx.get().setPacketHandled(true);
}
}

View File

@@ -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<NetworkEvent.Context> 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);
}
}

View File

@@ -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<NetworkEvent.Context> 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);
}
}

View File

@@ -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<IGridStack> stacks = new ArrayList<>();
public GridFluidUpdateMessage(boolean canCraft, List<IGridStack> 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<IGridStack> 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<FluidStack> 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<NetworkEvent.Context> 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);
}
}

View File

@@ -10,7 +10,6 @@ import net.minecraft.util.text.ITextComponent;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
// TODO Fix focusing issues on textbox (using tab)
public abstract class AmountSpecifyingScreen<T extends Container> extends BaseScreen<T> { public abstract class AmountSpecifyingScreen<T extends Container> extends BaseScreen<T> {
private BaseScreen parent; private BaseScreen parent;
@@ -106,7 +105,7 @@ public abstract class AmountSpecifyingScreen<T extends Container> extends BaseSc
return true; 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()); onOkButtonPressed(hasShiftDown());
return true; return true;

View File

@@ -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.network.node.GridNetworkNode;
import com.raoulvdberge.refinedstorage.apiimpl.render.ElementDrawers; import com.raoulvdberge.refinedstorage.apiimpl.render.ElementDrawers;
import com.raoulvdberge.refinedstorage.container.GridContainer; import com.raoulvdberge.refinedstorage.container.GridContainer;
import com.raoulvdberge.refinedstorage.network.grid.GridClearMessage; import com.raoulvdberge.refinedstorage.network.grid.*;
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.screen.BaseScreen; import com.raoulvdberge.refinedstorage.screen.BaseScreen;
import com.raoulvdberge.refinedstorage.screen.IScreenInfoProvider; import com.raoulvdberge.refinedstorage.screen.IScreenInfoProvider;
import com.raoulvdberge.refinedstorage.screen.grid.sorting.*; import com.raoulvdberge.refinedstorage.screen.grid.sorting.*;
@@ -451,7 +448,7 @@ public class GridScreen extends BaseScreen<GridContainer> implements IScreenInfo
if (isOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && !held.isEmpty() && (clickedButton == 0 || clickedButton == 1)) { if (isOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && !held.isEmpty() && (clickedButton == 0 || clickedButton == 1)) {
if (grid.getGridType() == GridType.FLUID) { if (grid.getGridType() == GridType.FLUID) {
// @TODO RS.INSTANCE.network.sendToServer(new MessageGridFluidInsertHeld()); RS.NETWORK_HANDLER.sendToServer(new GridFluidInsertHeldMessage());
} else { } else {
RS.NETWORK_HANDLER.sendToServer(new GridItemInsertHeldMessage(clickedButton == 1)); RS.NETWORK_HANDLER.sendToServer(new GridItemInsertHeldMessage(clickedButton == 1));
} }
@@ -469,7 +466,7 @@ public class GridScreen extends BaseScreen<GridContainer> implements IScreenInfo
if (stack.isCraftable() && view.canCraft() && (stack.doesDisplayCraftText() || (hasShiftDown() && hasControlDown()))) { if (stack.isCraftable() && view.canCraft() && (stack.doesDisplayCraftText() || (hasShiftDown() && hasControlDown()))) {
// @TODO FMLCommonHandler.instance().showGuiScreen(new GuiGridCraftingSettings(this, ((ContainerGrid) this.inventorySlots).getPlayer(), stack)); // @TODO FMLCommonHandler.instance().showGuiScreen(new GuiGridCraftingSettings(this, ((ContainerGrid) this.inventorySlots).getPlayer(), stack));
} else if (grid.getGridType() == GridType.FLUID && held.isEmpty()) { } 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) { } else if (grid.getGridType() != GridType.FLUID) {
int flags = 0; int flags = 0;

View File

@@ -17,7 +17,7 @@ public class GridUtils {
case PATTERN: case PATTERN:
return GridNetworkNode.PATTERN_ID; return GridNetworkNode.PATTERN_ID;
case FLUID: case FLUID:
return null; return GridNetworkNode.FLUID_ID;
default: default:
throw new IllegalArgumentException("Unknown grid type " + type); throw new IllegalArgumentException("Unknown grid type " + type);
} }
@@ -32,7 +32,7 @@ public class GridUtils {
case PATTERN: case PATTERN:
return RSTiles.PATTERN_GRID; return RSTiles.PATTERN_GRID;
case FLUID: case FLUID:
return null; return RSTiles.FLUID_GRID;
default: default:
throw new IllegalArgumentException("Unknown grid type " + type); throw new IllegalArgumentException("Unknown grid type " + type);
} }

View File

@@ -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
}
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -0,0 +1,3 @@
{
"parent": "refinedstorage:block/grid/fluid/disconnected"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 554 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 554 B

View File

@@ -0,0 +1,19 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "refinedstorage:fluid_grid"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View File

@@ -2,18 +2,16 @@
"type": "minecraft:crafting_shapeless", "type": "minecraft:crafting_shapeless",
"ingredients": [ "ingredients": [
{ {
"item": "refinedstorage:grid", "item": "refinedstorage:grid"
"data": 0
}, },
{ {
"item": "#advanced_processor" "item": "refinedstorage:advanced_processor"
}, },
{ {
"item": "minecraft:bucket" "item": "minecraft:bucket"
} }
], ],
"result": { "result": {
"item": "refinedstorage:grid", "item": "refinedstorage:fluid_grid"
"data": 3
} }
} }