Re-add the Interface

This commit is contained in:
raoulvdberge
2019-10-21 18:05:08 +02:00
parent 00090b2b28
commit a5b3276b51
22 changed files with 197 additions and 112 deletions

View File

@@ -122,6 +122,7 @@ public class ClientSetup {
ScreenManager.registerFactory(RSContainers.RELAY, RelayScreen::new);
ScreenManager.registerFactory(RSContainers.DETECTOR, DetectorScreen::new);
ScreenManager.registerFactory(RSContainers.SECURITY_MANAGER, SecurityManagerScreen::new);
ScreenManager.registerFactory(RSContainers.INTERFACE, InterfaceScreen::new);
ClientRegistry.registerKeyBinding(RSKeyBindings.FOCUS_SEARCH_BAR);
ClientRegistry.registerKeyBinding(RSKeyBindings.CLEAR_GRID_CRAFTING_MATRIX);

View File

@@ -123,6 +123,7 @@ public final class RS {
API.instance().getNetworkNodeRegistry().add(RelayNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new RelayNetworkNode(world, pos)));
API.instance().getNetworkNodeRegistry().add(DetectorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new DetectorNetworkNode(world, pos)));
API.instance().getNetworkNodeRegistry().add(SecurityManagerNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new SecurityManagerNetworkNode(world, pos)));
API.instance().getNetworkNodeRegistry().add(InterfaceNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new InterfaceNetworkNode(world, pos)));
API.instance().getGridManager().add(GridBlockGridFactory.ID, new GridBlockGridFactory());
@@ -172,6 +173,7 @@ public final class RS {
e.getRegistry().register(new RelayBlock());
e.getRegistry().register(new DetectorBlock());
e.getRegistry().register(new SecurityManagerBlock());
e.getRegistry().register(new InterfaceBlock());
}
@SubscribeEvent
@@ -205,6 +207,7 @@ public final class RS {
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(RelayTile::new, RSBlocks.RELAY).build(null).setRegistryName(RS.ID, "relay")));
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(DetectorTile::new, RSBlocks.DETECTOR).build(null).setRegistryName(RS.ID, "detector")));
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(SecurityManagerTile::new, RSBlocks.SECURITY_MANAGER).build(null).setRegistryName(RS.ID, "security_manager")));
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(InterfaceTile::new, RSBlocks.INTERFACE).build(null).setRegistryName(RS.ID, "interface")));
}
private <T extends TileEntity> TileEntityType<T> registerTileDataParameters(TileEntityType<T> t) {
@@ -230,6 +233,7 @@ public final class RS {
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<RelayContainer, RelayTile>((windowId, inv, tile) -> new RelayContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "relay"));
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<DetectorContainer, DetectorTile>((windowId, inv, tile) -> new DetectorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "detector"));
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<SecurityManagerContainer, SecurityManagerTile>((windowId, inv, tile) -> new SecurityManagerContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "security_manager"));
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<InterfaceContainer, InterfaceTile>((windowId, inv, tile) -> new InterfaceContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "interface"));
}
@SubscribeEvent
@@ -305,6 +309,7 @@ public final class RS {
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.RELAY));
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.DETECTOR));
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.SECURITY_MANAGER));
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.INTERFACE));
}
/* TODO

View File

@@ -60,10 +60,11 @@ public final class RSBlocks {
public static final FluidStorageBlock CREATIVE_FLUID_STORAGE_BLOCK = null;
@ObjectHolder(RS.ID + ":security_manager")
public static final SecurityManagerBlock SECURITY_MANAGER = null;
@ObjectHolder(RS.ID + ":interface")
public static final InterfaceBlock INTERFACE = null;
public static final BlockDestructor DESTRUCTOR = new BlockDestructor();
public static final BlockConstructor CONSTRUCTOR = new BlockConstructor();
public static final BlockInterface INTERFACE = new BlockInterface();
public static final BlockCraftingMonitor CRAFTING_MONITOR = new BlockCraftingMonitor();
public static final BlockWirelessTransmitter WIRELESS_TRANSMITTER = new BlockWirelessTransmitter();
public static final BlockCrafter CRAFTER = new BlockCrafter();

View File

@@ -31,6 +31,8 @@ public final class RSContainers {
public static final ContainerType<FluidStorageContainer> FLUID_STORAGE_BLOCK = null;
@ObjectHolder(RS.ID + ":security_manager")
public static final ContainerType<SecurityManagerContainer> SECURITY_MANAGER = null;
@ObjectHolder(RS.ID + ":interface")
public static final ContainerType<InterfaceContainer> INTERFACE = null;
//@ObjectHolder(RS.ID + ":crafter")
public static final ContainerType<CrafterContainer> CRAFTER = null;
@@ -46,8 +48,6 @@ public final class RSContainers {
public static final ContainerType<DiskManipulatorContainer> DISK_MANIPULATOR = null;
//@ObjectHolder(RS.ID + ":fluid_interface")
public static final ContainerType<FluidInterfaceContainer> FLUID_INTERFACE = null;
//@ObjectHolder(RS.ID + ":interface")
public static final ContainerType<ImporterContainer> INTERFACE = null;
//@ObjectHolder(RS.ID + ":storage_monitor")
public static final ContainerType<StorageMonitorContainer> STORAGE_MONITOR = null;
//@ObjectHolder(RS.ID + ":wireless_transmitter")

View File

@@ -8,7 +8,6 @@ public class RSOldConfig {
public int craftingMonitorUsage;
public int crafterManagerUsage;
public int destructorUsage;
public int interfaceUsage;
public int fluidInterfaceUsage;
public int wirelessTransmitterUsage;
public int diskManipulatorUsage;
@@ -73,7 +72,6 @@ public class RSOldConfig {
craftingMonitorUsage = config.getInt("craftingMonitor", ENERGY, 2, 0, Integer.MAX_VALUE, "The energy used by Crafting Monitors");
crafterManagerUsage = config.getInt("crafterManager", ENERGY, 4, 0, Integer.MAX_VALUE, "The energy used by Crafter Managers");
destructorUsage = config.getInt("destructor", ENERGY, 1, 0, Integer.MAX_VALUE, "The energy used by Destructors");
interfaceUsage = config.getInt("interface", ENERGY, 3, 0, Integer.MAX_VALUE, "The energy used by Interfaces");
fluidInterfaceUsage = config.getInt("fluidInterface", ENERGY, 3, 0, Integer.MAX_VALUE, "The energy used by Fluid Interfaces");
wirelessTransmitterUsage = config.getInt("wirelessTransmitter", ENERGY, 8, 0, Integer.MAX_VALUE, "The energy used by Wireless Transmitters");
diskManipulatorUsage = config.getInt("diskManipulator", ENERGY, 3, 0, Integer.MAX_VALUE, "The energy used by Disk Manipulators");

View File

@@ -60,6 +60,8 @@ public class RSTiles {
public static final TileEntityType<FluidStorageTile> CREATIVE_FLUID_STORAGE_BLOCK = null;
@ObjectHolder(RS.ID + ":security_manager")
public static final TileEntityType<SecurityManagerTile> SECURITY_MANAGER = null;
@ObjectHolder(RS.ID + ":interface")
public static final TileEntityType<InterfaceTile> INTERFACE = null;
//@ObjectHolder(RS.ID + ":portable_grid")
public static final TileEntityType<TilePortableGrid> PORTABLE_GRID = null;
@@ -67,8 +69,6 @@ public class RSTiles {
public static final TileEntityType<TileStorageMonitor> STORAGE_MONITOR = null;
//@ObjectHolder(RS.ID + ":wireless_transmitter")
public static final TileEntityType<SecurityManagerTile> WIRELESS_TRANSMITTER = null;
//@ObjectHolder(RS.ID + ":interface")
public static final TileEntityType<ImporterTile> INTERFACE = null;
//@ObjectHolder(RS.ID + ":fluid_interface")
public static final TileEntityType<TileFluidInterface> FLUID_INTERFACE = null;
//@ObjectHolder(RS.ID + ":disk_manipulator")

View File

@@ -24,7 +24,7 @@ import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
public class NetworkNodeInterface extends NetworkNode implements IComparable {
public class InterfaceNetworkNode extends NetworkNode implements IComparable {
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "interface");
private static final String NBT_COMPARE = "Compare";
@@ -36,19 +36,20 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable {
private IItemHandler items = new ProxyItemHandler(importItems, exportItems);
private UpgradeItemHandler upgrades = (UpgradeItemHandler) new UpgradeItemHandler(4).addListener(new NetworkNodeInventoryListener(this)/* TODO, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK, ItemUpgrade.TYPE_CRAFTING*/);
private UpgradeItemHandler upgrades = (UpgradeItemHandler) new UpgradeItemHandler(4, UpgradeItem.Type.SPEED, UpgradeItem.Type.STACK, UpgradeItem.Type.CRAFTING)
.addListener(new NetworkNodeInventoryListener(this));
private int compare = IComparer.COMPARE_NBT;
private int currentSlot = 0;
public NetworkNodeInterface(World world, BlockPos pos) {
public InterfaceNetworkNode(World world, BlockPos pos) {
super(world, pos);
}
@Override
public int getEnergyUsage() {
return RS.INSTANCE.config.interfaceUsage + upgrades.getEnergyUsage();
return RS.SERVER_CONFIG.getInterface().getUsage() + upgrades.getEnergyUsage();
}
@Override
@@ -73,8 +74,6 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable {
ItemStack remainder = network.insertItemTracked(slot, size);
importItems.extractItem(currentSlot, size - remainder.getCount(), false);
currentSlot++;
}
for (int i = 0; i < 9; ++i) {

View File

@@ -6,7 +6,7 @@ import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStor
import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorageContext;
import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorageProvider;
import com.raoulvdberge.refinedstorage.capability.NetworkNodeProxyCapability;
import com.raoulvdberge.refinedstorage.tile.TileInterface;
import com.raoulvdberge.refinedstorage.tile.InterfaceTile;
import com.raoulvdberge.refinedstorage.util.WorldUtils;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
@@ -30,7 +30,7 @@ public class ItemExternalStorageProvider implements IExternalStorageProvider<Ite
@Nonnull
@Override
public IExternalStorage<ItemStack> provide(IExternalStorageContext context, Supplier<TileEntity> tile, Direction direction) {
return new ItemExternalStorage(context, () -> WorldUtils.getItemHandler(tile.get(), direction.getOpposite()), tile.get() instanceof TileInterface);
return new ItemExternalStorage(context, () -> WorldUtils.getItemHandler(tile.get(), direction.getOpposite()), tile.get() instanceof InterfaceTile);
}
@Override

View File

@@ -1,27 +0,0 @@
package com.raoulvdberge.refinedstorage.block;
import com.raoulvdberge.refinedstorage.block.info.BlockInfoBuilder;
import com.raoulvdberge.refinedstorage.tile.TileInterface;
public class BlockInterface extends BlockNode {
public BlockInterface() {
super(BlockInfoBuilder.forId("interface").tileEntity(TileInterface::new).create());
}
/*
@Override
@OnlyIn(Dist.CLIENT)
public void registerModels(IModelRegistration modelRegistration) {
modelRegistration.setModel(this, 0, new ModelResourceLocation(info.getId(), "inventory"));
}
@Override
public boolean onBlockActivated(World world, BlockPos pos, BlockState state, PlayerEntity player, EnumHand hand, Direction side, float hitX, float hitY, float hitZ) {
return openNetworkGui(RSGui.INTERFACE, player, world, pos, side, Permission.MODIFY, Permission.INSERT, Permission.EXTRACT);
}*/
@Override
public boolean hasConnectedState() {
return true;
}
}

View File

@@ -0,0 +1,59 @@
package com.raoulvdberge.refinedstorage.block;
import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.container.InterfaceContainer;
import com.raoulvdberge.refinedstorage.container.factory.PositionalTileContainerProvider;
import com.raoulvdberge.refinedstorage.tile.InterfaceTile;
import com.raoulvdberge.refinedstorage.util.BlockUtils;
import com.raoulvdberge.refinedstorage.util.NetworkUtils;
import net.minecraft.block.BlockState;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.World;
import net.minecraftforge.fml.network.NetworkHooks;
import javax.annotation.Nullable;
public class InterfaceBlock extends NodeBlock {
public InterfaceBlock() {
super(BlockUtils.DEFAULT_ROCK_PROPERTIES);
this.setRegistryName(RS.ID, "interface");
}
@Nullable
@Override
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
return new InterfaceTile();
}
@Override
@SuppressWarnings("deprecation")
public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) {
if (!world.isRemote) {
return NetworkUtils.attempt(world, pos, hit.getFace(), player, () -> NetworkHooks.openGui(
(ServerPlayerEntity) player,
new PositionalTileContainerProvider<InterfaceTile>(
new TranslationTextComponent("gui.refinedstorage.interface"),
(tile, windowId, inventory, p) -> new InterfaceContainer(tile, player, windowId),
pos
),
pos
), Permission.MODIFY, Permission.INSERT, Permission.EXTRACT);
}
return true;
}
@Override
public boolean hasConnectedState() {
return true;
}
}

View File

@@ -20,6 +20,7 @@ public class ServerConfig {
private Relay relay;
private Detector detector;
private SecurityManager securityManager;
private Interface _interface;
private Upgrades upgrades;
public ServerConfig() {
@@ -38,6 +39,7 @@ public class ServerConfig {
detector = new Detector();
securityManager = new SecurityManager();
upgrades = new Upgrades();
_interface = new Interface();
spec = builder.build();
}
@@ -102,6 +104,10 @@ public class ServerConfig {
return securityManager;
}
public Interface getInterface() {
return _interface;
}
public ForgeConfigSpec getSpec() {
return spec;
}
@@ -483,4 +489,20 @@ public class ServerConfig {
return usagePerCard.get();
}
}
public class Interface {
private final ForgeConfigSpec.IntValue usage;
public Interface() {
builder.push("interface");
usage = builder.comment("The energy used by the Interface").defineInRange("usage", 2, 0, Integer.MAX_VALUE);
builder.pop();
}
public int getUsage() {
return usage.get();
}
}
}

View File

@@ -3,12 +3,12 @@ package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.RSContainers;
import com.raoulvdberge.refinedstorage.container.slot.OutputSlot;
import com.raoulvdberge.refinedstorage.container.slot.filter.FilterSlot;
import com.raoulvdberge.refinedstorage.tile.TileInterface;
import com.raoulvdberge.refinedstorage.tile.InterfaceTile;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraftforge.items.SlotItemHandler;
public class InterfaceContainer extends BaseContainer {
public InterfaceContainer(TileInterface tile, PlayerEntity player, int windowId) {
public InterfaceContainer(InterfaceTile tile, PlayerEntity player, int windowId) {
super(RSContainers.INTERFACE, tile, player, windowId);
for (int i = 0; i < 9; ++i) {

View File

@@ -4,20 +4,21 @@ import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.container.InterfaceContainer;
import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.ExactModeSideButton;
import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.RedstoneModeSideButton;
import com.raoulvdberge.refinedstorage.tile.TileInterface;
import com.raoulvdberge.refinedstorage.tile.InterfaceTile;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.util.text.ITextComponent;
public class GuiInterface extends BaseScreen<InterfaceContainer> {
public GuiInterface(InterfaceContainer container, PlayerInventory inventory) {
super(container, 211, 217, inventory, null);
public class InterfaceScreen extends BaseScreen<InterfaceContainer> {
public InterfaceScreen(InterfaceContainer container, PlayerInventory inventory, ITextComponent title) {
super(container, 211, 217, inventory, title);
}
@Override
public void onPostInit(int x, int y) {
addSideButton(new RedstoneModeSideButton(this, TileInterface.REDSTONE_MODE));
addSideButton(new RedstoneModeSideButton(this, InterfaceTile.REDSTONE_MODE));
addSideButton(new ExactModeSideButton(this, TileInterface.COMPARE));
addSideButton(new ExactModeSideButton(this, InterfaceTile.COMPARE));
}
@Override
@@ -33,8 +34,8 @@ public class GuiInterface extends BaseScreen<InterfaceContainer> {
@Override
public void renderForeground(int mouseX, int mouseY) {
renderString(7, 7, I18n.format("gui.refinedstorage:interface.import"));
renderString(7, 42, I18n.format("gui.refinedstorage:interface.export"));
renderString(7, 7, I18n.format("gui.refinedstorage.interface.import"));
renderString(7, 42, I18n.format("gui.refinedstorage.interface.export"));
renderString(7, 122, I18n.format("container.inventory"));
}
}

View File

@@ -0,0 +1,44 @@
package com.raoulvdberge.refinedstorage.tile;
import com.raoulvdberge.refinedstorage.RSTiles;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.InterfaceNetworkNode;
import com.raoulvdberge.refinedstorage.tile.config.IComparable;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class InterfaceTile extends NetworkNodeTile<InterfaceNetworkNode> {
public static final TileDataParameter<Integer, InterfaceTile> COMPARE = IComparable.createParameter();
private LazyOptional<IItemHandler> itemsCapability = LazyOptional.of(() -> getNode().getItems());
public InterfaceTile() {
super(RSTiles.INTERFACE);
dataManager.addWatchedParameter(COMPARE);
}
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction direction) {
if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
return itemsCapability.cast();
}
return super.getCapability(cap, direction);
}
@Override
@Nonnull
public InterfaceNetworkNode createNode(World world, BlockPos pos) {
return new InterfaceNetworkNode(world, pos);
}
}

View File

@@ -1,37 +0,0 @@
package com.raoulvdberge.refinedstorage.tile;
import com.raoulvdberge.refinedstorage.RSTiles;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeInterface;
import com.raoulvdberge.refinedstorage.tile.config.IComparable;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import javax.annotation.Nonnull;
public class TileInterface extends NetworkNodeTile<NetworkNodeInterface> {
public static final TileDataParameter<Integer, TileInterface> COMPARE = IComparable.createParameter();
public TileInterface() {
super(RSTiles.INTERFACE);
dataManager.addWatchedParameter(COMPARE);
}
/* TODO
@Override
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable Direction facing) {
return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY ? CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(getNode().getItems()) : super.getCapability(capability, facing);
}
@Override
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable Direction facing) {
return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}*/
@Override
@Nonnull
public NetworkNodeInterface createNode(World world, BlockPos pos) {
return new NetworkNodeInterface(world, pos);
}
}

View File

@@ -1,25 +1,10 @@
{
"forge_marker": 1,
"defaults": {
"model": "cube_all",
"textures": {
"all": "refinedstorage:blocks/interface_disconnected"
}
},
"variants": {
"inventory": [
{
"transform": "forge:default-block"
}
],
"connected": {
"true": {
"textures": {
"all": "refinedstorage:blocks/interface_connected"
}
},
"false": {
}
"connected=true": {
"model": "refinedstorage:block/interface_connected"
},
"connected=false": {
"model": "refinedstorage:block/interface_disconnected"
}
}
}

View File

@@ -27,8 +27,8 @@
"gui.refinedstorage:destructor": "Destructor",
"gui.refinedstorage:constructor": "Constructor",
"gui.refinedstorage.relay": "Relay",
"gui.refinedstorage:interface.import": "Interface Import",
"gui.refinedstorage:interface.export": "Interface Export",
"gui.refinedstorage.interface.import": "Interface Import",
"gui.refinedstorage.interface.export": "Interface Export",
"gui.refinedstorage:crafting_monitor": "Crafting Monitor",
"gui.refinedstorage:wireless_crafting_monitor": "Wireless Crafting Monitor",
"gui.refinedstorage:crafting_monitor.tooltip.requested": "%d requested",
@@ -195,7 +195,7 @@
"block.refinedstorage.64k_storage_block": "64k Storage Block",
"block.refinedstorage.creative_storage_block": "Creative Storage Block",
"block.refinedstorage.relay": "Relay",
"block.refinedstorage:interface": "Interface",
"block.refinedstorage.interface": "Interface",
"block.refinedstorage:crafting_monitor": "Crafting Monitor",
"block.refinedstorage:wireless_transmitter": "Wireless Transmitter",
"block.refinedstorage:wireless_transmitter.tooltip": "Must be placed on %s.",

View File

@@ -0,0 +1,6 @@
{
"parent": "block/cube_all",
"textures": {
"all": "refinedstorage:block/interface_connected"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "block/cube_all",
"textures": {
"all": "refinedstorage:block/interface_disconnected"
}
}

View File

@@ -0,0 +1,3 @@
{
"parent": "refinedstorage:block/interface_disconnected"
}

View File

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