diff --git a/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java index b001618fa..2366558ed 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java @@ -99,6 +99,15 @@ public class ClientSetup { ).disableCache()); } + bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "crafter"), (base, registry) -> new FullbrightBakedModel( + base, + new ResourceLocation(RS.ID, "block/crafter/cutouts/side_connected"), + new ResourceLocation(RS.ID, "block/crafter/cutouts/side_connected_90"), + new ResourceLocation(RS.ID, "block/crafter/cutouts/side_connected_180"), + new ResourceLocation(RS.ID, "block/crafter/cutouts/side_connected_270"), + new ResourceLocation(RS.ID, "block/crafter/cutouts/front_connected") + )); + bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "pattern"), (base, registry) -> new PatternBakedModel(base)); ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/disk")); @@ -172,6 +181,7 @@ public class ClientSetup { ScreenManager.registerFactory(RSContainers.CONSTRUCTOR, ConstructorScreen::new); ScreenManager.registerFactory(RSContainers.DESTRUCTOR, DestructorScreen::new); ScreenManager.registerFactory(RSContainers.DISK_MANIPULATOR, DiskManipulatorScreen::new); + ScreenManager.registerFactory(RSContainers.CRAFTER, CrafterScreen::new); ClientRegistry.registerKeyBinding(RSKeyBindings.OPEN_WIRELESS_GRID); ClientRegistry.registerKeyBinding(RSKeyBindings.OPEN_WIRELESS_FLUID_GRID); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RS.java b/src/main/java/com/raoulvdberge/refinedstorage/RS.java index 30cdaef75..ef4eeab49 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RS.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RS.java @@ -29,6 +29,7 @@ import com.raoulvdberge.refinedstorage.container.factory.PositionalTileContainer import com.raoulvdberge.refinedstorage.item.*; import com.raoulvdberge.refinedstorage.item.blockitem.*; import com.raoulvdberge.refinedstorage.item.group.MainItemGroup; +import com.raoulvdberge.refinedstorage.loottable.CrafterLootFunctionSerializer; import com.raoulvdberge.refinedstorage.loottable.PortableGridBlockLootFunctionSerializer; import com.raoulvdberge.refinedstorage.loottable.StorageBlockLootFunctionSerializer; import com.raoulvdberge.refinedstorage.network.NetworkHandler; @@ -131,6 +132,7 @@ public final class RS { API.instance().getNetworkNodeRegistry().add(ConstructorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new ConstructorNetworkNode(world, pos))); API.instance().getNetworkNodeRegistry().add(DestructorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new DestructorNetworkNode(world, pos))); API.instance().getNetworkNodeRegistry().add(DiskManipulatorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new DiskManipulatorNetworkNode(world, pos))); + API.instance().getNetworkNodeRegistry().add(CrafterNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new CrafterNetworkNode(world, pos))); API.instance().getGridManager().add(GridBlockGridFactory.ID, new GridBlockGridFactory()); API.instance().getGridManager().add(WirelessGridGridFactory.ID, new WirelessGridGridFactory()); @@ -143,6 +145,7 @@ public final class RS { LootFunctionManager.registerFunction(new StorageBlockLootFunctionSerializer()); LootFunctionManager.registerFunction(new PortableGridBlockLootFunctionSerializer()); + LootFunctionManager.registerFunction(new CrafterLootFunctionSerializer()); } private INetworkNode readAndReturn(CompoundNBT tag, NetworkNode node) { @@ -194,6 +197,7 @@ public final class RS { e.getRegistry().register(new DiskManipulatorBlock()); e.getRegistry().register(new PortableGridBlock(PortableGridBlockItem.Type.NORMAL)); e.getRegistry().register(new PortableGridBlock(PortableGridBlockItem.Type.CREATIVE)); + e.getRegistry().register(new CrafterBlock()); } @SubscribeEvent @@ -234,6 +238,7 @@ public final class RS { e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(ConstructorTile::new, RSBlocks.CONSTRUCTOR).build(null).setRegistryName(RS.ID, "constructor"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(DestructorTile::new, RSBlocks.DESTRUCTOR).build(null).setRegistryName(RS.ID, "destructor"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(DiskManipulatorTile::new, RSBlocks.DISK_MANIPULATOR).build(null).setRegistryName(RS.ID, "disk_manipulator"))); + e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(CrafterTile::new, RSBlocks.CRAFTER).build(null).setRegistryName(RS.ID, "crafter"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(() -> new PortableGridTile(PortableGridBlockItem.Type.CREATIVE), RSBlocks.CREATIVE_PORTABLE_GRID).build(null).setRegistryName(RS.ID, "creative_portable_grid"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(() -> new PortableGridTile(PortableGridBlockItem.Type.NORMAL), RSBlocks.PORTABLE_GRID).build(null).setRegistryName(RS.ID, "portable_grid"))); @@ -269,6 +274,7 @@ public final class RS { e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory((windowId, inv, tile) -> new ConstructorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "constructor")); e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory((windowId, inv, tile) -> new DestructorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "destructor")); e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory((windowId, inv, tile) -> new DiskManipulatorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "disk_manipulator")); + e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory((windowId, inv, tile) -> new CrafterContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "crafter")); } @SubscribeEvent @@ -353,6 +359,7 @@ public final class RS { e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.CONSTRUCTOR)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.DESTRUCTOR)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.DISK_MANIPULATOR)); + e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.CRAFTER)); e.getRegistry().register(new WirelessGridItem(WirelessGridItem.Type.NORMAL)); e.getRegistry().register(new WirelessGridItem(WirelessGridItem.Type.CREATIVE)); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java index c09413dc8..153dd6845 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java @@ -78,8 +78,9 @@ public final class RSBlocks { public static final PortableGridBlock PORTABLE_GRID = null; @ObjectHolder(RS.ID + ":creative_portable_grid") public static final PortableGridBlock CREATIVE_PORTABLE_GRID = null; + @ObjectHolder(RS.ID + ":crafter") + public static final CrafterBlock CRAFTER = null; public static final BlockCraftingMonitor CRAFTING_MONITOR = null; - public static final BlockCrafter CRAFTER = null; public static final BlockCrafterManager CRAFTER_MANAGER = null; } \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java b/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java index 9d44577e0..c7aed72aa 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java @@ -45,9 +45,9 @@ public final class RSContainers { public static final ContainerType DESTRUCTOR = null; @ObjectHolder(RS.ID + ":disk_manipulator") public static final ContainerType DISK_MANIPULATOR = null; - - //@ObjectHolder(RS.ID + ":crafter") + @ObjectHolder(RS.ID + ":crafter") public static final ContainerType CRAFTER = null; + //@ObjectHolder(RS.ID + ":crafter_manager") public static final ContainerType CRAFTER_MANAGER = null; //@ObjectHolder(RS.ID + ":crafting_monitor") diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java index 6970e7524..65d033885 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java @@ -2,8 +2,6 @@ package com.raoulvdberge.refinedstorage; public class RSOldConfig { //region Energy - public int crafterUsage; - public int crafterPerPatternUsage; public int craftingMonitorUsage; public int crafterManagerUsage; //endregion @@ -28,8 +26,6 @@ public class RSOldConfig { /*private void loadConfig() { //region Energy - crafterUsage = config.getInt("crafter", ENERGY, 2, 0, Integer.MAX_VALUE, "The base energy used by Crafters"); - crafterPerPatternUsage = config.getInt("crafterPerPattern", ENERGY, 1, 0, Integer.MAX_VALUE, "The additional energy used per Pattern in a Crafter"); 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"); //endregion diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java b/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java index 5ad136a0b..e071ad6ec 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java @@ -78,11 +78,11 @@ public class RSTiles { public static final TileEntityType PORTABLE_GRID = null; @ObjectHolder(RS.ID + ":creative_portable_grid") public static final TileEntityType CREATIVE_PORTABLE_GRID = null; - - //@ObjectHolder(RS.ID + ":crafter") - public static final TileEntityType CRAFTER = null; + @ObjectHolder(RS.ID + ":crafter") + public static final TileEntityType CRAFTER = null; + //@ObjectHolder(RS.ID + ":crafter_manager") - public static final TileEntityType CRAFTER_MANAGER = null; + public static final TileEntityType CRAFTER_MANAGER = null; //@ObjectHolder(RS.ID + ":crafting_monitor") public static final TileEntityType CRAFTING_MONITOR = null; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingPatternContainer.java b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingPatternContainer.java index 69d78a201..b835ab720 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingPatternContainer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingPatternContainer.java @@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.api.autocrafting; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; @@ -15,15 +16,6 @@ import java.util.UUID; * Represents a network node that contains crafting patterns. */ public interface ICraftingPatternContainer { - /** - * @deprecated Use {@link #getUpdateInterval()} and/or {@link #getMaximumSuccessfulCraftingUpdates()} - * @return the amount of speed upgrades in the container - */ - @Deprecated - default int getSpeedUpgradeCount() { - return 0; - } - /** * Returns the interval of when a crafting step with a pattern in this container can update. * Minimum value is 0 (each tick). @@ -89,12 +81,10 @@ public interface ICraftingPatternContainer { /** * The name of this container for categorizing in the Crafting Manager GUI. - * Can be a localized or unlocalized name. - * If it's unlocalized, it will automatically localize the name. * * @return the name of this container */ - String getName(); + ITextComponent getName(); /** * @return the position of this container diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java index 6ded6fcfe..151b5aba5 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java @@ -374,7 +374,8 @@ public class CraftingManager implements ICraftingManager { IItemHandlerModifiable handler = container.getPatternInventory(); if (handler != null) { - this.containerInventories.computeIfAbsent(container.getName(), k -> new ArrayList<>()).add(handler); + // TODO: Maybe use ITextComponent instead of string... + this.containerInventories.computeIfAbsent(container.getName().getFormattedText(), k -> new ArrayList<>()).add(handler); } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafter.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/CrafterNetworkNode.java old mode 100755 new mode 100644 similarity index 89% rename from src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafter.java rename to src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/CrafterNetworkNode.java index dac9b5227..d3b806edb --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/CrafterNetworkNode.java @@ -17,9 +17,12 @@ import com.raoulvdberge.refinedstorage.util.WorldUtils; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; import net.minecraft.util.INameable; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; import net.minecraftforge.fluids.capability.IFluidHandler; @@ -33,7 +36,7 @@ import java.util.List; import java.util.Optional; import java.util.UUID; -public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternContainer { +public class CrafterNetworkNode extends NetworkNode implements ICraftingPatternContainer { public enum CrafterMode { IGNORE, SIGNAL_UNLOCKS_AUTOCRAFTING, @@ -51,7 +54,7 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC public static final ResourceLocation ID = new ResourceLocation(RS.ID, "crafter"); - public static final String DEFAULT_NAME = "gui.refinedstorage:crafter"; + private static final ITextComponent DEFAULT_NAME = new TranslationTextComponent("gui.refinedstorage.crafter"); private static final String NBT_DISPLAY_NAME = "DisplayName"; private static final String NBT_UUID = "CrafterUuid"; @@ -81,7 +84,8 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC private List patterns = new ArrayList<>(); - private UpgradeItemHandler upgrades = (UpgradeItemHandler) new UpgradeItemHandler(4 /* TODO, ItemUpgrade.TYPE_SPEED*/).addListener(new NetworkNodeInventoryListener(this)); + private UpgradeItemHandler upgrades = (UpgradeItemHandler) new UpgradeItemHandler(4, UpgradeItem.Type.SPEED) + .addListener(new NetworkNodeInventoryListener(this)); // Used to prevent infinite recursion on getRootContainer() when there's e.g. two crafters facing each other. private boolean visited = false; @@ -90,15 +94,13 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC private boolean locked = false; private boolean wasPowered; - private boolean reading; - @Nullable - private String displayName; + private ITextComponent displayName; @Nullable private UUID uuid = null; - public NetworkNodeCrafter(World world, BlockPos pos) { + public CrafterNetworkNode(World world, BlockPos pos) { super(world, pos); } @@ -120,7 +122,7 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC @Override public int getEnergyUsage() { - return RS.INSTANCE.config.crafterUsage + upgrades.getEnergyUsage() + (RS.INSTANCE.config.crafterPerPatternUsage * patterns.size()); + return RS.SERVER_CONFIG.getCrafter().getUsage() + upgrades.getEnergyUsage() + (RS.SERVER_CONFIG.getCrafter().getPatternUsage() * patterns.size()); } @Override @@ -161,8 +163,10 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC .forEach(task -> network.getCraftingManager().cancel(task.getId())); } - // @TODO @Override - protected void onDirectionChanged() { + @Override + public void onDirectionChanged(Direction direction) { + super.onDirectionChanged(direction); + if (network != null) { network.getCraftingManager().rebuild(); } @@ -172,19 +176,14 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC public void read(CompoundNBT tag) { super.read(tag); - // Fix cascading crafter invalidates while reading patterns - this.reading = true; - StackUtils.readItems(patternsInventory, 0, tag); - this.invalidate(); - - this.reading = false; + invalidate(); StackUtils.readItems(upgrades, 1, tag); if (tag.contains(NBT_DISPLAY_NAME)) { - displayName = tag.getString(NBT_DISPLAY_NAME); + displayName = ITextComponent.Serializer.fromJson(tag.getString(NBT_DISPLAY_NAME)); } if (tag.hasUniqueId(NBT_UUID)) { @@ -217,7 +216,7 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC StackUtils.writeItems(upgrades, 1, tag); if (displayName != null) { - tag.putString(NBT_DISPLAY_NAME, displayName); + tag.putString(NBT_DISPLAY_NAME, ITextComponent.Serializer.toJson(displayName)); } if (uuid != null) { @@ -312,7 +311,7 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC } @Override - public String getName() { + public ITextComponent getName() { if (displayName != null) { return displayName; } @@ -320,22 +319,22 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC TileEntity facing = getConnectedTile(); if (facing instanceof INameable && ((INameable) facing).getName() != null) { - return ((INameable) facing).getName().getString(); // TODO: DOes this even work + return ((INameable) facing).getName(); } if (facing != null) { - return world.getBlockState(facing.getPos()).getBlock().getTranslationKey() + ".name"; + return new TranslationTextComponent(world.getBlockState(facing.getPos()).getBlock().getTranslationKey()); } return DEFAULT_NAME; } - public void setDisplayName(String displayName) { + public void setDisplayName(ITextComponent displayName) { this.displayName = displayName; } @Nullable - public String getDisplayName() { + public ITextComponent getDisplayName() { return displayName; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCrafter.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCrafter.java deleted file mode 100755 index cfff372c5..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCrafter.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.raoulvdberge.refinedstorage.block; - -import net.minecraft.util.BlockRenderLayer; - -import javax.annotation.Nullable; - -public class BlockCrafter extends NetworkNodeBlock { - public BlockCrafter(Properties props) { - super(props); - } - - /* - @Override - @OnlyIn(Dist.CLIENT) - public void registerModels(IModelRegistration modelRegistration) { - modelRegistration.setModel(this, 0, new ModelResourceLocation(info.getId(), "connected=false,direction=north")); - - modelRegistration.addBakedModelOverride(info.getId(), base -> new FullbrightBakedModel( - base, - new ResourceLocation(RS.ID, "blocks/crafter/cutouts/side_connected"), - new ResourceLocation(RS.ID, "blocks/crafter/cutouts/side_connected_90"), - new ResourceLocation(RS.ID, "blocks/crafter/cutouts/side_connected_180"), - new ResourceLocation(RS.ID, "blocks/crafter/cutouts/side_connected_270"), - new ResourceLocation(RS.ID, "blocks/crafter/cutouts/front_connected") - )); - }*/ - - @Override - public BlockRenderLayer getRenderLayer() { - return BlockRenderLayer.CUTOUT; - } - - //@Override - @Nullable - public BlockDirection getDirection() { - return BlockDirection.ANY_FACE_PLAYER; - } - - /* TODO - @Override - public void onBlockPlacedBy(World world, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack stack) { - super.onBlockPlacedBy(world, pos, state, placer, stack); - - if (!world.isRemote) { - TileEntity tile = world.getTileEntity(pos); - - if (tile instanceof TileCrafter && stack.hasDisplayName()) { - ((TileCrafter) tile).getNode().setDisplayName(stack.getDisplayName().getFormattedText()); // TODO getFormattedText - ((TileCrafter) tile).getNode().markDirty(); - } - } - } - - @Override - public boolean onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { - return super.onBlockActivated(state, worldIn, pos, player, handIn, hit); - } - - @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.CRAFTER, player, world, pos, side); - } - - @Override - public List getDrops(BlockState state, LootContext.Builder builder) { - return super.getDrops(state, builder); - } - - @Override - public void getDrops(NonNullList drops, IBlockAccess world, BlockPos pos, BlockState state, int fortune) { - super.getDrops(drops, world, pos, state, fortune); - - String displayName = ((TileCrafter) world.getTileEntity(pos)).getNode().getDisplayName(); - - if (displayName != null) { - for (ItemStack drop : drops) { - if (drop.getItem() == Item.getItemFromBlock(this)) { - drop.setStackDisplayName(displayName); - } - } - } - }*/ - - @Override - public boolean hasConnectedState() { - return true; - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/CrafterBlock.java b/src/main/java/com/raoulvdberge/refinedstorage/block/CrafterBlock.java new file mode 100644 index 000000000..287316f39 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/CrafterBlock.java @@ -0,0 +1,84 @@ +package com.raoulvdberge.refinedstorage.block; + +import com.raoulvdberge.refinedstorage.RS; +import com.raoulvdberge.refinedstorage.container.CrafterContainer; +import com.raoulvdberge.refinedstorage.container.factory.PositionalTileContainerProvider; +import com.raoulvdberge.refinedstorage.tile.CrafterTile; +import com.raoulvdberge.refinedstorage.util.BlockUtils; +import com.raoulvdberge.refinedstorage.util.NetworkUtils; +import net.minecraft.block.BlockState; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraftforge.fml.network.NetworkHooks; + +import javax.annotation.Nullable; + +public class CrafterBlock extends NetworkNodeBlock { + public CrafterBlock() { + super(BlockUtils.DEFAULT_ROCK_PROPERTIES); + + this.setRegistryName(RS.ID, "crafter"); + } + + @Override + public BlockRenderLayer getRenderLayer() { + return BlockRenderLayer.CUTOUT; + } + + @Override + public BlockDirection getDirection() { + return BlockDirection.ANY_FACE_PLAYER; + } + + @Nullable + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new CrafterTile(); + } + + @Override + public void onBlockPlacedBy(World world, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack stack) { + super.onBlockPlacedBy(world, pos, state, placer, stack); + + if (!world.isRemote) { + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof CrafterTile && stack.hasDisplayName()) { + ((CrafterTile) tile).getNode().setDisplayName(stack.getDisplayName()); + ((CrafterTile) tile).getNode().markDirty(); + } + } + } + + @Override + @SuppressWarnings("deprecation") + public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { + if (!world.isRemote) { + return NetworkUtils.attemptModify(world, pos, hit.getFace(), player, () -> NetworkHooks.openGui( + (ServerPlayerEntity) player, + new PositionalTileContainerProvider( + ((CrafterTile) world.getTileEntity(pos)).getNode().getName(), + (tile, windowId, inventory, p) -> new CrafterContainer(tile, player, windowId), + pos + ), + pos + )); + } + + return true; + } + + @Override + public boolean hasConnectedState() { + return true; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java index b763905a6..0d3df78e7 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java @@ -31,6 +31,7 @@ public class ServerConfig { private Destructor destructor; private DiskManipulator diskManipulator; private PortableGrid portableGrid; + private Crafter crafter; public ServerConfig() { upgrades = new Upgrades(); @@ -58,6 +59,7 @@ public class ServerConfig { destructor = new Destructor(); diskManipulator = new DiskManipulator(); portableGrid = new PortableGrid(); + crafter = new Crafter(); spec = builder.build(); } @@ -162,6 +164,10 @@ public class ServerConfig { return portableGrid; } + public Crafter getCrafter() { + return crafter; + } + public ForgeConfigSpec getSpec() { return spec; } @@ -787,4 +793,26 @@ public class ServerConfig { return usage.get(); } } + + public class Crafter { + private final ForgeConfigSpec.IntValue usage; + private final ForgeConfigSpec.IntValue patternUsage; + + public Crafter() { + builder.push("crafter"); + + usage = builder.comment("The energy used by the Crafter").defineInRange("usage", 4, 0, Integer.MAX_VALUE); + patternUsage = builder.comment("The energy used for every Pattern in the Crafter").defineInRange("patternUsage", 1, 0, Integer.MAX_VALUE); + + builder.pop(); + } + + public int getUsage() { + return usage.get(); + } + + public int getPatternUsage() { + return patternUsage.get(); + } + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/CrafterContainer.java b/src/main/java/com/raoulvdberge/refinedstorage/container/CrafterContainer.java index 4897ce644..d76adbbd5 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/CrafterContainer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/CrafterContainer.java @@ -1,12 +1,12 @@ package com.raoulvdberge.refinedstorage.container; import com.raoulvdberge.refinedstorage.RSContainers; -import com.raoulvdberge.refinedstorage.tile.TileCrafter; +import com.raoulvdberge.refinedstorage.tile.CrafterTile; import net.minecraft.entity.player.PlayerEntity; import net.minecraftforge.items.SlotItemHandler; public class CrafterContainer extends BaseContainer { - public CrafterContainer(TileCrafter crafter, PlayerEntity player, int windowId) { + public CrafterContainer(CrafterTile crafter, PlayerEntity player, int windowId) { super(RSContainers.CRAFTER, crafter, player, windowId); for (int i = 0; i < 9; ++i) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/loottable/CrafterLootFunction.java b/src/main/java/com/raoulvdberge/refinedstorage/loottable/CrafterLootFunction.java new file mode 100644 index 000000000..75230f203 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/loottable/CrafterLootFunction.java @@ -0,0 +1,27 @@ +package com.raoulvdberge.refinedstorage.loottable; + +import com.raoulvdberge.refinedstorage.apiimpl.network.node.CrafterNetworkNode; +import com.raoulvdberge.refinedstorage.tile.CrafterTile; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.storage.loot.LootContext; +import net.minecraft.world.storage.loot.LootParameters; +import net.minecraft.world.storage.loot.functions.ILootFunction; + +public class CrafterLootFunction implements ILootFunction { + @Override + public ItemStack apply(ItemStack stack, LootContext lootContext) { + TileEntity tile = lootContext.get(LootParameters.BLOCK_ENTITY); + + CrafterNetworkNode removedNode = ((CrafterTile) tile).getRemovedNode(); + if (removedNode == null) { + removedNode = ((CrafterTile) tile).getNode(); + } + + if (removedNode.getDisplayName() != null) { + stack.setDisplayName(removedNode.getDisplayName()); + } + + return stack; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/loottable/CrafterLootFunctionSerializer.java b/src/main/java/com/raoulvdberge/refinedstorage/loottable/CrafterLootFunctionSerializer.java new file mode 100644 index 000000000..a4b0e0571 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/loottable/CrafterLootFunctionSerializer.java @@ -0,0 +1,24 @@ +package com.raoulvdberge.refinedstorage.loottable; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import com.google.gson.JsonSerializationContext; +import com.raoulvdberge.refinedstorage.RS; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.storage.loot.functions.ILootFunction; + +public class CrafterLootFunctionSerializer extends ILootFunction.Serializer { + public CrafterLootFunctionSerializer() { + super(new ResourceLocation(RS.ID, "crafter"), CrafterLootFunction.class); + } + + @Override + public void serialize(JsonObject jsonObject, CrafterLootFunction crafterLootFunction, JsonSerializationContext jsonSerializationContext) { + + } + + @Override + public CrafterLootFunction deserialize(JsonObject jsonObject, JsonDeserializationContext jsonDeserializationContext) { + return new CrafterLootFunction(); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/GuiCrafter.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/CrafterScreen.java similarity index 68% rename from src/main/java/com/raoulvdberge/refinedstorage/screen/GuiCrafter.java rename to src/main/java/com/raoulvdberge/refinedstorage/screen/CrafterScreen.java index 02c927faf..24c4f6921 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/GuiCrafter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/CrafterScreen.java @@ -2,14 +2,14 @@ package com.raoulvdberge.refinedstorage.screen; import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.container.CrafterContainer; -import com.raoulvdberge.refinedstorage.tile.TileCrafter; import com.raoulvdberge.refinedstorage.util.RenderUtils; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.text.ITextComponent; -public class GuiCrafter extends BaseScreen { - public GuiCrafter(CrafterContainer container, PlayerInventory inventory) { - super(container, 211, 137, inventory, null); +public class CrafterScreen extends BaseScreen { + public CrafterScreen(CrafterContainer container, PlayerInventory inventory, ITextComponent title) { + super(container, 211, 137, inventory, title); } @Override @@ -29,7 +29,7 @@ public class GuiCrafter extends BaseScreen { @Override public void renderForeground(int mouseX, int mouseY) { - renderString(7, 7, RenderUtils.shorten(I18n.format(TileCrafter.NAME.getValue()), 26)); + renderString(7, 7, RenderUtils.shorten(title.getFormattedText(), 26)); renderString(7, 43, I18n.format("container.inventory")); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/TileDataParameterClientListenerCrafter.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/TileDataParameterClientListenerCrafter.java index 55b1bb38e..63a47171e 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/TileDataParameterClientListenerCrafter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/TileDataParameterClientListenerCrafter.java @@ -7,7 +7,7 @@ public class TileDataParameterClientListenerCrafter implements TileDataParameter @Override public void onChanged(boolean initial, Boolean hasRoot) { if (!hasRoot) { - BaseScreen.executeLater(GuiCrafter.class, gui -> { + BaseScreen.executeLater(CrafterScreen.class, gui -> { gui.addSideButton(new CrafterModeSideButton(gui)); }); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/widget/sidebutton/CrafterModeSideButton.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/widget/sidebutton/CrafterModeSideButton.java index 5b55a250b..ff1874c08 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/widget/sidebutton/CrafterModeSideButton.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/widget/sidebutton/CrafterModeSideButton.java @@ -1,7 +1,7 @@ package com.raoulvdberge.refinedstorage.screen.widget.sidebutton; import com.raoulvdberge.refinedstorage.screen.BaseScreen; -import com.raoulvdberge.refinedstorage.tile.TileCrafter; +import com.raoulvdberge.refinedstorage.tile.CrafterTile; import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; import net.minecraft.client.resources.I18n; import net.minecraft.util.text.TextFormatting; @@ -13,16 +13,16 @@ public class CrafterModeSideButton extends SideButton { @Override public String getTooltip() { - return I18n.format("sidebutton.refinedstorage.crafter_mode") + "\n" + TextFormatting.GRAY + I18n.format("sidebutton.refinedstorage.crafter_mode." + TileCrafter.MODE.getValue()); + return I18n.format("sidebutton.refinedstorage.crafter_mode") + "\n" + TextFormatting.GRAY + I18n.format("sidebutton.refinedstorage.crafter_mode." + CrafterTile.MODE.getValue()); } @Override protected void renderButtonIcon(int x, int y) { - screen.blit(x, y, TileCrafter.MODE.getValue() * 16, 0, 16, 16); + screen.blit(x, y, CrafterTile.MODE.getValue() * 16, 0, 16, 16); } @Override public void onPress() { - TileDataManager.setParameter(TileCrafter.MODE, TileCrafter.MODE.getValue() + 1); + TileDataManager.setParameter(CrafterTile.MODE, CrafterTile.MODE.getValue() + 1); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/CrafterTile.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/CrafterTile.java new file mode 100644 index 000000000..9a53a9915 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/CrafterTile.java @@ -0,0 +1,47 @@ +package com.raoulvdberge.refinedstorage.tile; + +import com.raoulvdberge.refinedstorage.RSTiles; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.CrafterNetworkNode; +import com.raoulvdberge.refinedstorage.screen.TileDataParameterClientListenerCrafter; +import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; +import net.minecraft.network.datasync.DataSerializers; +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 CrafterTile extends NetworkNodeTile { + public static final TileDataParameter MODE = new TileDataParameter<>(DataSerializers.VARINT, CrafterNetworkNode.CrafterMode.IGNORE.ordinal(), t -> t.getNode().getMode().ordinal(), (t, v) -> t.getNode().setMode(CrafterNetworkNode.CrafterMode.getById(v))); + private static final TileDataParameter HAS_ROOT = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().getRootContainerNotSelf().isPresent(), null, (t, v) -> new TileDataParameterClientListenerCrafter().onChanged(t, v)); + + private LazyOptional patternsCapability = LazyOptional.of(() -> getNode().getPatternItems()); + + public CrafterTile() { + super(RSTiles.CRAFTER); + + dataManager.addWatchedParameter(MODE); + dataManager.addParameter(HAS_ROOT); + } + + @Override + @Nonnull + public CrafterNetworkNode createNode(World world, BlockPos pos) { + return new CrafterNetworkNode(world, pos); + } + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction direction) { + if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return patternsCapability.cast(); + } + + return super.getCapability(cap, direction); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileCrafter.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileCrafter.java deleted file mode 100755 index 7b6562ef2..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileCrafter.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.raoulvdberge.refinedstorage.tile; - -import com.raoulvdberge.refinedstorage.RSTiles; -import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCrafter; -import com.raoulvdberge.refinedstorage.screen.TileDataParameterClientListenerCrafter; -import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; -import net.minecraft.network.datasync.DataSerializers; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import javax.annotation.Nonnull; - -public class TileCrafter extends NetworkNodeTile { - public static final TileDataParameter NAME = new TileDataParameter<>(DataSerializers.STRING, NetworkNodeCrafter.DEFAULT_NAME, t -> t.getNode().getName()); - public static final TileDataParameter MODE = new TileDataParameter<>(DataSerializers.VARINT, NetworkNodeCrafter.CrafterMode.IGNORE.ordinal(), t -> t.getNode().getMode().ordinal(), (t, v) -> t.getNode().setMode(NetworkNodeCrafter.CrafterMode.getById(v))); - private static final TileDataParameter HAS_ROOT = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().getRootContainerNotSelf().isPresent(), null, (t, v) -> new TileDataParameterClientListenerCrafter().onChanged(t, v)); - - public TileCrafter() { - super(RSTiles.CRAFTER); - - dataManager.addWatchedParameter(NAME); - dataManager.addWatchedParameter(MODE); - dataManager.addParameter(HAS_ROOT); - } - - @Override - @Nonnull - public NetworkNodeCrafter createNode(World world, BlockPos pos) { - return new NetworkNodeCrafter(world, pos); - } - - /* TODO @Override - public boolean hasCapability(@Nonnull Capability capability, @Nullable Direction facing) { - return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); - } - - @Override - public T getCapability(@Nonnull Capability capability, @Nullable Direction facing) { - if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(getNode().getPatternItems()); - } - - return super.getCapability(capability, facing); - }*/ -} diff --git a/src/main/resources/assets/refinedstorage/blockstates/crafter.json b/src/main/resources/assets/refinedstorage/blockstates/crafter.json old mode 100755 new mode 100644 index 46864e96e..f2e80fa2b --- a/src/main/resources/assets/refinedstorage/blockstates/crafter.json +++ b/src/main/resources/assets/refinedstorage/blockstates/crafter.json @@ -1,135 +1,52 @@ { - "forge_marker": 1, - "defaults": { - "model": "refinedstorage:cube_cutout", - "textures": { - "particle": "refinedstorage:blocks/crafter/side", - "side": "refinedstorage:blocks/crafter/side", - "side_90": "refinedstorage:blocks/crafter/side_90", - "side_180": "refinedstorage:blocks/crafter/side_180", - "side_270": "refinedstorage:blocks/crafter/side_270", - "cutout_side": "refinedstorage:blocks/crafter/cutouts/side_disconnected", - "cutout_side_90": "refinedstorage:blocks/crafter/cutouts/side_disconnected_90", - "cutout_side_180": "refinedstorage:blocks/crafter/cutouts/side_disconnected_180", - "cutout_side_270": "refinedstorage:blocks/crafter/cutouts/side_disconnected_270", - "front": "refinedstorage:blocks/crafter/front", - "cutout_front": "refinedstorage:blocks/crafter/cutouts/front_disconnected" - }, - "uvlock": true - }, "variants": { - "connected": { - "true": { - "textures": { - "cutout_side": "refinedstorage:blocks/crafter/cutouts/side_connected", - "cutout_side_90": "refinedstorage:blocks/crafter/cutouts/side_connected_90", - "cutout_side_180": "refinedstorage:blocks/crafter/cutouts/side_connected_180", - "cutout_side_270": "refinedstorage:blocks/crafter/cutouts/side_connected_270", - "cutout_front": "refinedstorage:blocks/crafter/cutouts/front_connected" - } - }, - "false": { - "textures": { - } - } + "connected=false,direction=north": { + "model": "refinedstorage:block/crafter/disconnected/north", + "uvlock": true }, - "direction": { - "north": { - "textures": { - "down": "#side_180", - "up": "#side", - "north": "#front", - "east": "#side_90", - "south": "refinedstorage:blocks/crafter/bottom", - "west": "#side_270", - "cutout_down": "#cutout_side_180", - "cutout_up": "#cutout_side", - "cutout_north": "#cutout_front", - "cutout_east": "#cutout_side_90", - "cutout_south": "refinedstorage:blocks/crafter/bottom", - "cutout_west": "#cutout_side_270" - } - }, - "east": { - "textures": { - "down": "#side_90", - "up": "#side_90", - "north": "#side_270", - "east": "#front", - "south": "#side_90", - "west": "refinedstorage:blocks/crafter/bottom", - "cutout_down": "#cutout_side_90", - "cutout_up": "#cutout_side_90", - "cutout_north": "#cutout_side_270", - "cutout_east": "#cutout_front", - "cutout_south": "#cutout_side_90", - "cutout_west": "refinedstorage:blocks/crafter/bottom" - } - }, - "south": { - "textures": { - "down": "#side", - "up": "#side_180", - "north": "refinedstorage:blocks/crafter/bottom", - "east": "#side_270", - "south": "#front", - "west": "#side_90", - "cutout_down": "#cutout_side", - "cutout_up": "#cutout_side_180", - "cutout_north": "refinedstorage:blocks/crafter/bottom", - "cutout_east": "#cutout_side_270", - "cutout_south": "#cutout_front", - "cutout_west": "#cutout_side_90" - } - }, - "west": { - "textures": { - "down": "#side_270", - "up": "#side_270", - "north": "#side_90", - "east": "refinedstorage:blocks/crafter/bottom", - "south": "#side_270", - "west": "#front", - "cutout_down": "#cutout_side_270", - "cutout_up": "#cutout_side_270", - "cutout_north": "#cutout_side_90", - "cutout_east": "refinedstorage:blocks/crafter/bottom", - "cutout_south": "#cutout_side_270", - "cutout_west": "#cutout_front" - } - }, - "up": { - "textures": { - "down": "refinedstorage:blocks/crafter/bottom", - "up": "#front", - "north": "#side", - "east": "#side", - "south": "#side", - "west": "#side", - "cutout_down": "refinedstorage:blocks/crafter/bottom", - "cutout_up": "#cutout_front", - "cutout_north": "#cutout_side", - "cutout_east": "#cutout_side", - "cutout_south": "#cutout_side", - "cutout_west": "#cutout_side" - } - }, - "down": { - "textures": { - "down": "#front", - "up": "refinedstorage:blocks/crafter/bottom", - "north": "#side_180", - "east": "#side_180", - "south": "#side_180", - "west": "#side_180", - "cutout_down": "#cutout_front", - "cutout_up": "refinedstorage:blocks/crafter/bottom", - "cutout_north": "#cutout_side_180", - "cutout_east": "#cutout_side_180", - "cutout_south": "#cutout_side_180", - "cutout_west": "#cutout_side_180" - } - } + "connected=false,direction=east": { + "model": "refinedstorage:block/crafter/disconnected/east", + "uvlock": true + }, + "connected=false,direction=south": { + "model": "refinedstorage:block/crafter/disconnected/south", + "uvlock": true + }, + "connected=false,direction=west": { + "model": "refinedstorage:block/crafter/disconnected/west", + "uvlock": true + }, + "connected=false,direction=up": { + "model": "refinedstorage:block/crafter/disconnected/up", + "uvlock": true + }, + "connected=false,direction=down": { + "model": "refinedstorage:block/crafter/disconnected/down", + "uvlock": true + }, + "connected=true,direction=north": { + "model": "refinedstorage:block/crafter/connected/north", + "uvlock": true + }, + "connected=true,direction=east": { + "model": "refinedstorage:block/crafter/connected/east", + "uvlock": true + }, + "connected=true,direction=south": { + "model": "refinedstorage:block/crafter/connected/south", + "uvlock": true + }, + "connected=true,direction=west": { + "model": "refinedstorage:block/crafter/connected/west", + "uvlock": true + }, + "connected=true,direction=up": { + "model": "refinedstorage:block/crafter/connected/up", + "uvlock": true + }, + "connected=true,direction=down": { + "model": "refinedstorage:block/crafter/connected/down", + "uvlock": true } } } \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/lang/en_us.json b/src/main/resources/assets/refinedstorage/lang/en_us.json index bd81e5d26..700370295 100644 --- a/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -46,7 +46,7 @@ "gui.refinedstorage:crafting_monitor.crafter_is_locked": "Crafter is locked", "gui.refinedstorage.wireless_transmitter": "Wireless Transmitter", "gui.refinedstorage.wireless_transmitter.distance": "%d block(s)", - "gui.refinedstorage:crafter": "Crafter", + "gui.refinedstorage.crafter": "Crafter", "gui.refinedstorage.filter": "Filter", "gui.refinedstorage.filter.compare_nbt": "NBT", "gui.refinedstorage.filter.mod_filter": "Mod filter", @@ -205,7 +205,7 @@ "block.refinedstorage:crafting_monitor": "Crafting Monitor", "block.refinedstorage.wireless_transmitter": "Wireless Transmitter", "block.refinedstorage.wireless_transmitter.tooltip": "Must be placed on %s.", - "block.refinedstorage:crafter": "Crafter", + "block.refinedstorage.crafter": "Crafter", "block.refinedstorage.network_receiver": "Network Receiver", "block.refinedstorage.network_transmitter": "Network Transmitter", "block.refinedstorage.fluid_interface": "Fluid Interface", diff --git a/src/main/resources/assets/refinedstorage/models/block/crafter/connected/down.json b/src/main/resources/assets/refinedstorage/models/block/crafter/connected/down.json new file mode 100644 index 000000000..69f5cc1d2 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/crafter/connected/down.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/cube_cutout", + "textures": { + "particle": "refinedstorage:block/crafter/side", + "down": "refinedstorage:block/crafter/front", + "up": "refinedstorage:block/crafter/bottom", + "north": "refinedstorage:block/crafter/side_180", + "east": "refinedstorage:block/crafter/side_180", + "south": "refinedstorage:block/crafter/side_180", + "west": "refinedstorage:block/crafter/side_180", + "cutout_down": "refinedstorage:block/crafter/cutouts/front_connected", + "cutout_up": "refinedstorage:block/crafter/bottom", + "cutout_north": "refinedstorage:block/crafter/cutouts/side_connected_180", + "cutout_east": "refinedstorage:block/crafter/cutouts/side_connected_180", + "cutout_south": "refinedstorage:block/crafter/cutouts/side_connected_180", + "cutout_west": "refinedstorage:block/crafter/cutouts/side_connected_180" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/block/crafter/connected/east.json b/src/main/resources/assets/refinedstorage/models/block/crafter/connected/east.json new file mode 100644 index 000000000..72a832d5a --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/crafter/connected/east.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/cube_cutout", + "textures": { + "particle": "refinedstorage:block/crafter/side", + "down": "refinedstorage:block/crafter/side_90", + "up": "refinedstorage:block/crafter/side_90", + "north": "refinedstorage:block/crafter/side_270", + "east": "refinedstorage:block/crafter/front", + "south": "refinedstorage:block/crafter/side_90", + "west": "refinedstorage:block/crafter/bottom", + "cutout_down": "refinedstorage:block/crafter/cutouts/side_connected_90", + "cutout_up": "refinedstorage:block/crafter/cutouts/side_connected_90", + "cutout_north": "refinedstorage:block/crafter/cutouts/side_connected_270", + "cutout_east": "refinedstorage:block/crafter/cutouts/front_connected", + "cutout_south": "refinedstorage:block/crafter/cutouts/side_connected_90", + "cutout_west": "refinedstorage:block/crafter/bottom" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/block/crafter/connected/north.json b/src/main/resources/assets/refinedstorage/models/block/crafter/connected/north.json new file mode 100644 index 000000000..560bf6b33 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/crafter/connected/north.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/cube_cutout", + "textures": { + "particle": "refinedstorage:block/crafter/side", + "down": "refinedstorage:block/crafter/side_180", + "up": "refinedstorage:block/crafter/side", + "north": "refinedstorage:block/crafter/front", + "east": "refinedstorage:block/crafter/side_90", + "south": "refinedstorage:block/crafter/bottom", + "west": "refinedstorage:block/crafter/side_270", + "cutout_down": "refinedstorage:block/crafter/cutouts/side_connected_180", + "cutout_up": "refinedstorage:block/crafter/cutouts/side_connected", + "cutout_north": "refinedstorage:block/crafter/cutouts/front_connected", + "cutout_east": "refinedstorage:block/crafter/cutouts/side_connected_90", + "cutout_south": "refinedstorage:block/crafter/bottom", + "cutout_west": "refinedstorage:block/crafter/cutouts/side_connected_270" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/block/crafter/connected/south.json b/src/main/resources/assets/refinedstorage/models/block/crafter/connected/south.json new file mode 100644 index 000000000..1b15951de --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/crafter/connected/south.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/cube_cutout", + "textures": { + "particle": "refinedstorage:block/crafter/side", + "down": "refinedstorage:block/crafter/side", + "up": "refinedstorage:block/crafter/side_180", + "north": "refinedstorage:block/crafter/bottom", + "east": "refinedstorage:block/crafter/side_270", + "south": "refinedstorage:block/crafter/front", + "west": "refinedstorage:block/crafter/side_90", + "cutout_down": "refinedstorage:block/crafter/cutouts/side_connected", + "cutout_up": "refinedstorage:block/crafter/cutouts/side_connected_180", + "cutout_north": "refinedstorage:block/crafter/bottom", + "cutout_east": "refinedstorage:block/crafter/cutouts/side_connected_270", + "cutout_south": "refinedstorage:block/crafter/cutouts/front_connected", + "cutout_west": "refinedstorage:block/crafter/cutouts/side_connected_90" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/block/crafter/connected/up.json b/src/main/resources/assets/refinedstorage/models/block/crafter/connected/up.json new file mode 100644 index 000000000..7d7f4f88c --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/crafter/connected/up.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/cube_cutout", + "textures": { + "particle": "refinedstorage:block/crafter/side", + "down": "refinedstorage:block/crafter/bottom", + "up": "refinedstorage:block/crafter/front", + "north": "refinedstorage:block/crafter/side", + "east": "refinedstorage:block/crafter/side", + "south": "refinedstorage:block/crafter/side", + "west": "refinedstorage:block/crafter/side", + "cutout_down": "refinedstorage:block/crafter/bottom", + "cutout_up": "refinedstorage:block/crafter/cutouts/front_connected", + "cutout_north": "refinedstorage:block/crafter/cutouts/side_connected", + "cutout_east": "refinedstorage:block/crafter/cutouts/side_connected", + "cutout_south": "refinedstorage:block/crafter/cutouts/side_connected", + "cutout_west": "refinedstorage:block/crafter/cutouts/side_connected" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/block/crafter/connected/west.json b/src/main/resources/assets/refinedstorage/models/block/crafter/connected/west.json new file mode 100644 index 000000000..7d4425a9e --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/crafter/connected/west.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/cube_cutout", + "textures": { + "particle": "refinedstorage:block/crafter/side", + "down": "refinedstorage:block/crafter/side_270", + "up": "refinedstorage:block/crafter/side_270", + "north": "refinedstorage:block/crafter/side_90", + "east": "refinedstorage:block/crafter/bottom", + "south": "refinedstorage:block/crafter/side_270", + "west": "refinedstorage:block/crafter/front", + "cutout_down": "refinedstorage:block/crafter/cutouts/side_connected_270", + "cutout_up": "refinedstorage:block/crafter/cutouts/side_connected_270", + "cutout_north": "refinedstorage:block/crafter/cutouts/side_connected_90", + "cutout_east": "refinedstorage:block/crafter/bottom", + "cutout_south": "refinedstorage:block/crafter/cutouts/side_connected_270", + "cutout_west": "refinedstorage:block/crafter/cutouts/front_connected" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/block/crafter/disconnected/down.json b/src/main/resources/assets/refinedstorage/models/block/crafter/disconnected/down.json new file mode 100644 index 000000000..d4ea7798f --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/crafter/disconnected/down.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/cube_cutout", + "textures": { + "particle": "refinedstorage:block/crafter/side", + "down": "refinedstorage:block/crafter/front", + "up": "refinedstorage:block/crafter/bottom", + "north": "refinedstorage:block/crafter/side_180", + "east": "refinedstorage:block/crafter/side_180", + "south": "refinedstorage:block/crafter/side_180", + "west": "refinedstorage:block/crafter/side_180", + "cutout_down": "refinedstorage:block/crafter/cutouts/front_disconnected", + "cutout_up": "refinedstorage:block/crafter/bottom", + "cutout_north": "refinedstorage:block/crafter/cutouts/side_disconnected_180", + "cutout_east": "refinedstorage:block/crafter/cutouts/side_disconnected_180", + "cutout_south": "refinedstorage:block/crafter/cutouts/side_disconnected_180", + "cutout_west": "refinedstorage:block/crafter/cutouts/side_disconnected_180" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/block/crafter/disconnected/east.json b/src/main/resources/assets/refinedstorage/models/block/crafter/disconnected/east.json new file mode 100644 index 000000000..f0fbdbf24 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/crafter/disconnected/east.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/cube_cutout", + "textures": { + "particle": "refinedstorage:block/crafter/side", + "down": "refinedstorage:block/crafter/side_90", + "up": "refinedstorage:block/crafter/side_90", + "north": "refinedstorage:block/crafter/side_270", + "east": "refinedstorage:block/crafter/front", + "south": "refinedstorage:block/crafter/side_90", + "west": "refinedstorage:block/crafter/bottom", + "cutout_down": "refinedstorage:block/crafter/cutouts/side_disconnected_90", + "cutout_up": "refinedstorage:block/crafter/cutouts/side_disconnected_90", + "cutout_north": "refinedstorage:block/crafter/cutouts/side_disconnected_270", + "cutout_east": "refinedstorage:block/crafter/cutouts/front_disconnected", + "cutout_south": "refinedstorage:block/crafter/cutouts/side_disconnected_90", + "cutout_west": "refinedstorage:block/crafter/bottom" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/block/crafter/disconnected/north.json b/src/main/resources/assets/refinedstorage/models/block/crafter/disconnected/north.json new file mode 100644 index 000000000..e35e6c423 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/crafter/disconnected/north.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/cube_cutout", + "textures": { + "particle": "refinedstorage:block/crafter/side", + "down": "refinedstorage:block/crafter/side_180", + "up": "refinedstorage:block/crafter/side", + "north": "refinedstorage:block/crafter/front", + "east": "refinedstorage:block/crafter/side_90", + "south": "refinedstorage:block/crafter/bottom", + "west": "refinedstorage:block/crafter/side_270", + "cutout_down": "refinedstorage:block/crafter/cutouts/side_disconnected_180", + "cutout_up": "refinedstorage:block/crafter/cutouts/side_disconnected", + "cutout_north": "refinedstorage:block/crafter/cutouts/front_disconnected", + "cutout_east": "refinedstorage:block/crafter/cutouts/side_disconnected_90", + "cutout_south": "refinedstorage:block/crafter/bottom", + "cutout_west": "refinedstorage:block/crafter/cutouts/side_disconnected_270" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/block/crafter/disconnected/south.json b/src/main/resources/assets/refinedstorage/models/block/crafter/disconnected/south.json new file mode 100644 index 000000000..f60922bed --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/crafter/disconnected/south.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/cube_cutout", + "textures": { + "particle": "refinedstorage:block/crafter/side", + "down": "refinedstorage:block/crafter/side", + "up": "refinedstorage:block/crafter/side_180", + "north": "refinedstorage:block/crafter/bottom", + "east": "refinedstorage:block/crafter/side_270", + "south": "refinedstorage:block/crafter/front", + "west": "refinedstorage:block/crafter/side_90", + "cutout_down": "refinedstorage:block/crafter/cutouts/side_disconnected", + "cutout_up": "refinedstorage:block/crafter/cutouts/side_disconnected_180", + "cutout_north": "refinedstorage:block/crafter/bottom", + "cutout_east": "refinedstorage:block/crafter/cutouts/side_disconnected_270", + "cutout_south": "refinedstorage:block/crafter/cutouts/front_disconnected", + "cutout_west": "refinedstorage:block/crafter/cutouts/side_disconnected_90" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/block/crafter/disconnected/up.json b/src/main/resources/assets/refinedstorage/models/block/crafter/disconnected/up.json new file mode 100644 index 000000000..fab292e6e --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/crafter/disconnected/up.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/cube_cutout", + "textures": { + "particle": "refinedstorage:block/crafter/side", + "down": "refinedstorage:block/crafter/bottom", + "up": "refinedstorage:block/crafter/front", + "north": "refinedstorage:block/crafter/side", + "east": "refinedstorage:block/crafter/side", + "south": "refinedstorage:block/crafter/side", + "west": "refinedstorage:block/crafter/side", + "cutout_down": "refinedstorage:block/crafter/bottom", + "cutout_up": "refinedstorage:block/crafter/cutouts/front_disconnected", + "cutout_north": "refinedstorage:block/crafter/cutouts/side_disconnected", + "cutout_east": "refinedstorage:block/crafter/cutouts/side_disconnected", + "cutout_south": "refinedstorage:block/crafter/cutouts/side_disconnected", + "cutout_west": "refinedstorage:block/crafter/cutouts/side_disconnected" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/block/crafter/disconnected/west.json b/src/main/resources/assets/refinedstorage/models/block/crafter/disconnected/west.json new file mode 100644 index 000000000..17ba14e35 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/crafter/disconnected/west.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/cube_cutout", + "textures": { + "particle": "refinedstorage:block/crafter/side", + "down": "refinedstorage:block/crafter/side_270", + "up": "refinedstorage:block/crafter/side_270", + "north": "refinedstorage:block/crafter/side_90", + "east": "refinedstorage:block/crafter/bottom", + "south": "refinedstorage:block/crafter/side_270", + "west": "refinedstorage:block/crafter/front", + "cutout_down": "refinedstorage:block/crafter/cutouts/side_disconnected_270", + "cutout_up": "refinedstorage:block/crafter/cutouts/side_disconnected_270", + "cutout_north": "refinedstorage:block/crafter/cutouts/side_disconnected_90", + "cutout_east": "refinedstorage:block/crafter/bottom", + "cutout_south": "refinedstorage:block/crafter/cutouts/side_disconnected_270", + "cutout_west": "refinedstorage:block/crafter/cutouts/front_disconnected" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/item/crafter.json b/src/main/resources/assets/refinedstorage/models/item/crafter.json new file mode 100644 index 000000000..d3965021c --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/crafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/crafter/disconnected/north" +} \ No newline at end of file diff --git a/src/main/resources/data/refinedstorage/loot_tables/blocks/crafter.json b/src/main/resources/data/refinedstorage/loot_tables/blocks/crafter.json new file mode 100644 index 000000000..3ff7fbb8f --- /dev/null +++ b/src/main/resources/data/refinedstorage/loot_tables/blocks/crafter.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:crafter", + "functions": [ + { + "function": "refinedstorage:crafter" + } + ] + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/recipes/crafter.json b/src/main/resources/data/refinedstorage/recipes/crafter.json similarity index 70% rename from src/main/resources/assets/refinedstorage/recipes/crafter.json rename to src/main/resources/data/refinedstorage/recipes/crafter.json index 28c00f45d..760358ed1 100644 --- a/src/main/resources/assets/refinedstorage/recipes/crafter.json +++ b/src/main/resources/data/refinedstorage/recipes/crafter.json @@ -10,16 +10,16 @@ "item": "refinedstorage:quartz_enriched_iron" }, "C": { - "item": "#construction_core" + "item": "refinedstorage:construction_core" }, "A": { - "item": "#advanced_processor" + "item": "refinedstorage:advanced_processor" }, "M": { "item": "refinedstorage:machine_casing" }, "D": { - "item": "#destruction_core" + "item": "refinedstorage:destruction_core" } }, "result": {