diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RS.java b/src/main/java/com/raoulvdberge/refinedstorage/RS.java index bdcdf3301..452c946b3 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RS.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RS.java @@ -8,9 +8,11 @@ import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.StorageDiskFactoryIt import com.raoulvdberge.refinedstorage.item.*; import com.raoulvdberge.refinedstorage.item.group.MainItemGroup; import com.raoulvdberge.refinedstorage.network.NetworkHandler; +import com.raoulvdberge.refinedstorage.recipe.UpgradeWithEnchantedBookRecipeSerializer; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; +import net.minecraft.item.crafting.IRecipeSerializer; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @@ -30,6 +32,7 @@ public final class RS { public RS() { FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onCommonSetup); FMLJavaModLoadingContext.get().getModEventBus().addGenericListener(Item.class, this::onRegisterItems); + FMLJavaModLoadingContext.get().getModEventBus().addGenericListener(IRecipeSerializer.class, this::onRegisterRecipeSerializers); } @SubscribeEvent @@ -40,6 +43,11 @@ public final class RS { API.instance().getStorageDiskRegistry().add(StorageDiskFactoryFluid.ID, new StorageDiskFactoryFluid()); } + @SubscribeEvent + public void onRegisterRecipeSerializers(RegistryEvent.Register> e) { + e.getRegistry().register(new UpgradeWithEnchantedBookRecipeSerializer().setRegistryName(RS.ID, "upgrade_with_enchanted_book")); + } + @SubscribeEvent public void onRegisterBlocks(RegistryEvent.Register e) { @@ -82,6 +90,10 @@ public final class RS { } e.getRegistry().register(new ItemStorageHousing()); + + for (ItemUpgrade.Type type : ItemUpgrade.Type.values()) { + e.getRegistry().register(new ItemUpgrade(type)); + } } /* TODO diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/RSConfig.java index 075018733..66c4dfcf8 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSConfig.java @@ -97,7 +97,9 @@ public class RSConfig { public int craftingUpgradeUsage; public int stackUpgradeUsage; public int silkTouchUpgradeUsage; - public int fortuneUpgradeUsagePerFortune; + public int fortune1UpgradeUsagePerFortune; + public int fortune2UpgradeUsagePerFortune; + public int fortune3UpgradeUsagePerFortune; //endregion //region Readers and Writers @@ -248,7 +250,9 @@ public class RSConfig { craftingUpgradeUsage = config.getInt("crafting", UPGRADES, 5, 0, Integer.MAX_VALUE, "The additional energy used per Crafting Upgrade"); stackUpgradeUsage = config.getInt("stack", UPGRADES, 12, 0, Integer.MAX_VALUE, "The additional energy used per Stack Upgrade"); silkTouchUpgradeUsage = config.getInt("silkTouch", UPGRADES, 15, 0, Integer.MAX_VALUE, "The additional energy used by the Silk Touch Upgrade"); - fortuneUpgradeUsagePerFortune = config.getInt("fortune", UPGRADES, 10, 0, Integer.MAX_VALUE, "The additional energy used by the Fortune Upgrade, multiplied by the level of the enchantment"); + fortune1UpgradeUsagePerFortune = config.getInt("fortune1", UPGRADES, 10, 0, Integer.MAX_VALUE, "The additional energy used by the Fortune 1 Upgrade"); + fortune2UpgradeUsagePerFortune = config.getInt("fortune2", UPGRADES, 10, 0, Integer.MAX_VALUE, "The additional energy used by the Fortune 2 Upgrade"); + fortune3UpgradeUsagePerFortune = config.getInt("fortune3", UPGRADES, 10, 0, Integer.MAX_VALUE, "The additional energy used by the Fortune 3 Upgrade"); //endregion //region Readers and Writers diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSItems.java b/src/main/java/com/raoulvdberge/refinedstorage/RSItems.java index 1306410eb..ccbb7b266 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSItems.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSItems.java @@ -57,9 +57,27 @@ public final class RSItems { public static final ItemStorageDisk CREATIVE_STORAGE_DISK = null; public static final ItemPattern PATTERN = new ItemPattern(); - public static final ItemUpgrade UPGRADE = new ItemUpgrade(); public static final ItemFilter FILTER = new ItemFilter(); + @ObjectHolder(RS.ID + ":upgrade") + public static final ItemUpgrade UPGRADE = null; + @ObjectHolder(RS.ID + ":speed_upgrade") + public static final ItemUpgrade SPEED_UPGRADE = null; + @ObjectHolder(RS.ID + ":range_upgrade") + public static final ItemUpgrade RANGE_UPGRADE = null; + @ObjectHolder(RS.ID + ":crafting_upgrade") + public static final ItemUpgrade CRAFTING_UPGRADE = null; + @ObjectHolder(RS.ID + ":stack_upgrade") + public static final ItemUpgrade STACK_UPGRADE = null; + @ObjectHolder(RS.ID + ":silk_touch_upgrade") + public static final ItemUpgrade SILK_TOUCH_UPGRADE = null; + @ObjectHolder(RS.ID + ":fortune_1_upgrade") + public static final ItemUpgrade FORTUNE_1_UPGRADE = null; + @ObjectHolder(RS.ID + ":fortune_2_upgrade") + public static final ItemUpgrade FORTUNE_2_UPGRADE = null; + @ObjectHolder(RS.ID + ":fortune_3_upgrade") + public static final ItemUpgrade FORTUNE_3_UPGRADE = null; + @ObjectHolder(RS.ID + ":network_card") public static final ItemNetworkCard NETWORK_CARD = null; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeConstructor.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeConstructor.java index c1744a5ce..376cbb41b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeConstructor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeConstructor.java @@ -238,7 +238,7 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable, }*/ } } - } else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { + } else if (upgrades.hasUpgrade(ItemUpgrade.Type.CRAFTING)) { ItemStack craft = itemFilters.getStackInSlot(0); network.getCraftingManager().request(this, craft, 1); @@ -250,7 +250,7 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable, if (took != null) { DefaultDispenseItemBehavior.doDispense(world, took, 6, getDirection(), new Position(getDispensePositionX(), getDispensePositionY(), getDispensePositionZ())); - } else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { + } else if (upgrades.hasUpgrade(ItemUpgrade.Type.CRAFTING)) { ItemStack craft = itemFilters.getStackInSlot(0); network.getCraftingManager().request(this, craft, 1); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafter.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafter.java index fc51b54b8..c8437c967 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafter.java @@ -236,7 +236,7 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC @Override public int getUpdateInterval() { - switch (upgrades.getUpgradeCount(ItemUpgrade.TYPE_SPEED)) { + switch (upgrades.getUpgradeCount(ItemUpgrade.Type.SPEED)) { case 0: return 10; case 1: @@ -254,7 +254,7 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC @Override public int getMaximumSuccessfulCraftingUpdates() { - switch (upgrades.getUpgradeCount(ItemUpgrade.TYPE_SPEED)) { + switch (upgrades.getUpgradeCount(ItemUpgrade.Type.SPEED)) { case 0: return 1; case 1: diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExporter.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExporter.java index 0c6f2c3aa..0d0a93042 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExporter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExporter.java @@ -88,7 +88,7 @@ public class NetworkNodeExporter extends NetworkNode implements IComparable, ITy ItemStack took = network.extractItem(slot, Math.min(slot.getMaxStackSize(), stackSize), compare, Action.SIMULATE); if (took == null) { - if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { + if (upgrades.hasUpgrade(ItemUpgrade.Type.CRAFTING)) { network.getCraftingManager().request(new SlottedCraftingRequest(this, filterSlot), slot, stackSize); } } else if (ItemHandlerHelper.insertItem(handler, took, true).isEmpty()) { @@ -141,7 +141,7 @@ public class NetworkNodeExporter extends NetworkNode implements IComparable, ITy handler.fill(took, IFluidHandler.FluidAction.EXECUTE); } } - } else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { + } else if (upgrades.hasUpgrade(ItemUpgrade.Type.CRAFTING)) { network.getCraftingManager().request(this, stack, toExtract); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidInterface.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidInterface.java index 895a2a6e4..408d8d597 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidInterface.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidInterface.java @@ -138,7 +138,7 @@ public class NetworkNodeFluidInterface extends NetworkNode { // That means we still have to autocraft 2 fluids. delta -= result == null ? 0 : result.getAmount(); - if (delta > 0 && upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { + if (delta > 0 && upgrades.hasUpgrade(ItemUpgrade.Type.CRAFTING)) { network.getCraftingManager().request(this, wanted, delta); } } else if (delta < 0) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java index b7d6fcdfa..443f50f13 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java @@ -118,7 +118,7 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable { // That means we still have to autocraft 2 items. delta -= result == null ? 0 : result.getCount(); - if (delta > 0 && upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { + if (delta > 0 && upgrades.hasUpgrade(ItemUpgrade.Type.CRAFTING)) { network.getCraftingManager().request(new SlottedCraftingRequest(this, i), wanted, delta); } } else if (delta < 0) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeWirelessTransmitter.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeWirelessTransmitter.java index 5b80f9a27..1eab329ef 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeWirelessTransmitter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeWirelessTransmitter.java @@ -52,7 +52,7 @@ public class NetworkNodeWirelessTransmitter extends NetworkNode implements IWire @Override public int getRange() { - return RS.INSTANCE.config.wirelessTransmitterBaseRange + (upgrades.getUpgradeCount(ItemUpgrade.TYPE_RANGE) * RS.INSTANCE.config.wirelessTransmitterRangePerUpgrade); + return RS.INSTANCE.config.wirelessTransmitterBaseRange + (upgrades.getUpgradeCount(ItemUpgrade.Type.RANGE) * RS.INSTANCE.config.wirelessTransmitterRangePerUpgrade); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/inventory/item/ItemHandlerUpgrade.java b/src/main/java/com/raoulvdberge/refinedstorage/inventory/item/ItemHandlerUpgrade.java index 49d7b1dd4..a8c5c2f1a 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/inventory/item/ItemHandlerUpgrade.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/inventory/item/ItemHandlerUpgrade.java @@ -1,17 +1,19 @@ package com.raoulvdberge.refinedstorage.inventory.item; import com.raoulvdberge.refinedstorage.inventory.item.validator.ItemValidatorBasic; +import com.raoulvdberge.refinedstorage.inventory.item.validator.ItemValidatorUpgrade; import com.raoulvdberge.refinedstorage.item.ItemUpgrade; +import net.minecraft.item.ItemStack; import javax.annotation.Nullable; import java.util.function.Consumer; public class ItemHandlerUpgrade extends ItemHandlerBase { - public ItemHandlerUpgrade(int size, @Nullable Consumer listener, ItemUpgrade... supportedUpgrades) { + public ItemHandlerUpgrade(int size, @Nullable Consumer listener, ItemUpgrade.Type... supportedUpgrades) { super(size, listener, new ItemValidatorBasic[supportedUpgrades.length]); for (int i = 0; i < supportedUpgrades.length; ++i) { - this.validators[i] = new ItemValidatorBasic(supportedUpgrades[i]); + this.validators[i] = new ItemValidatorUpgrade(supportedUpgrades[i]); } } @@ -21,8 +23,9 @@ public class ItemHandlerUpgrade extends ItemHandlerBase { public int getSpeed(int speed, int speedIncrease) { for (int i = 0; i < getSlots(); ++i) { - /*TODO if (!getStackInSlot(i).isEmpty() && getStackInSlot(i).getItemDamage() == ItemUpgrade.TYPE_SPEED) {*/ - if (false) { + ItemStack slot = getStackInSlot(i); + + if (slot.getItem() instanceof ItemUpgrade && ((ItemUpgrade) slot.getItem()).getType() == ItemUpgrade.Type.SPEED) { speed -= speedIncrease; } } @@ -30,16 +33,25 @@ public class ItemHandlerUpgrade extends ItemHandlerBase { return speed; } - public boolean hasUpgrade(int type) { - return getUpgradeCount(type) > 0; + public boolean hasUpgrade(ItemUpgrade.Type type) { + for (int i = 0; i < getSlots(); ++i) { + ItemStack slot = getStackInSlot(i); + + if (slot.getItem() instanceof ItemUpgrade && ((ItemUpgrade) slot.getItem()).getType() == type) { + return true; + } + } + + return false; } - public int getUpgradeCount(int type) { + public int getUpgradeCount(ItemUpgrade.Type type) { int upgrades = 0; for (int i = 0; i < getSlots(); ++i) { - /*TODO if (!getStackInSlot(i).isEmpty() && getStackInSlot(i).getItemDamage() == type) {*/ - if (false) { + ItemStack slot = getStackInSlot(i); + + if (slot.getItem() instanceof ItemUpgrade && ((ItemUpgrade) slot.getItem()).getType() == type) { upgrades++; } } @@ -51,7 +63,11 @@ public class ItemHandlerUpgrade extends ItemHandlerBase { int usage = 0; for (int i = 0; i < getSlots(); ++i) { - // TODO usage += ItemUpgrade.getEnergyUsage(getStackInSlot(i)); + ItemStack slot = getStackInSlot(i); + + if (slot.getItem() instanceof ItemUpgrade) { + usage += ((ItemUpgrade) slot.getItem()).getType().getEnergyUsage(); + } } return usage; @@ -61,9 +77,10 @@ public class ItemHandlerUpgrade extends ItemHandlerBase { int maxFortune = 0; for (int i = 0; i < getSlots(); ++i) { - if (!getStackInSlot(i).isEmpty()) { - // TODO int fortune = ItemUpgrade.getFortuneLevel(getStackInSlot(i)); - int fortune = 0; + ItemStack slot = getStackInSlot(i); + + if (slot.getItem() instanceof ItemUpgrade) { + int fortune = ((ItemUpgrade) slot.getItem()).getType().getFortuneLevel(); if (fortune > maxFortune) { maxFortune = fortune; @@ -75,7 +92,7 @@ public class ItemHandlerUpgrade extends ItemHandlerBase { } public int getItemInteractCount() { - return hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1; + return hasUpgrade(ItemUpgrade.Type.STACK) ? 64 : 1; } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/inventory/item/validator/ItemValidatorUpgrade.java b/src/main/java/com/raoulvdberge/refinedstorage/inventory/item/validator/ItemValidatorUpgrade.java new file mode 100644 index 000000000..8fd5a688b --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/inventory/item/validator/ItemValidatorUpgrade.java @@ -0,0 +1,19 @@ +package com.raoulvdberge.refinedstorage.inventory.item.validator; + +import com.raoulvdberge.refinedstorage.item.ItemUpgrade; +import net.minecraft.item.ItemStack; + +import java.util.function.Predicate; + +public class ItemValidatorUpgrade implements Predicate { + private ItemUpgrade.Type type; + + public ItemValidatorUpgrade(ItemUpgrade.Type type) { + this.type = type; + } + + @Override + public boolean test(ItemStack stack) { + return stack.getItem() instanceof ItemUpgrade && ((ItemUpgrade) stack.getItem()).getType() == type; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemUpgrade.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemUpgrade.java index bb0b5a56c..37c2b77cb 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemUpgrade.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemUpgrade.java @@ -1,108 +1,112 @@ package com.raoulvdberge.refinedstorage.item; import com.raoulvdberge.refinedstorage.RS; -import com.raoulvdberge.refinedstorage.item.info.ItemInfo; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; -public class ItemUpgrade extends ItemBase { - public static final int TYPE_RANGE = 1; - public static final int TYPE_SPEED = 2; - public static final int TYPE_CRAFTING = 3; - public static final int TYPE_STACK = 4; - public static final int TYPE_SILK_TOUCH = 6; - public static final int TYPE_FORTUNE_1 = 7; - public static final int TYPE_FORTUNE_2 = 8; - public static final int TYPE_FORTUNE_3 = 9; +import javax.annotation.Nullable; +import java.util.List; - public ItemUpgrade() { - super(new ItemInfo(RS.ID, "upgrade")); +public class ItemUpgrade extends Item { + public enum Type { + NORMAL("normal"), + SPEED("speed"), + RANGE("range"), + CRAFTING("crafting"), + STACK("stack"), + SILK_TOUCH("silk_touch"), + FORTUNE_1("fortune_1"), + FORTUNE_2("fortune_2"), + FORTUNE_3("fortune_3"); - //setHasSubtypes(true); - //setMaxDamage(0); + private final String name; + + Type(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public int getEnergyUsage() { + switch (this) { + case NORMAL: + return 0; + case RANGE: + return RS.INSTANCE.config.rangeUpgradeUsage; + case SPEED: + return RS.INSTANCE.config.speedUpgradeUsage; + case CRAFTING: + return RS.INSTANCE.config.craftingUpgradeUsage; + case STACK: + return RS.INSTANCE.config.stackUpgradeUsage; + case SILK_TOUCH: + return RS.INSTANCE.config.silkTouchUpgradeUsage; + case FORTUNE_1: + return RS.INSTANCE.config.fortune1UpgradeUsagePerFortune; + case FORTUNE_2: + return RS.INSTANCE.config.fortune2UpgradeUsagePerFortune; + case FORTUNE_3: + return RS.INSTANCE.config.fortune3UpgradeUsagePerFortune; + default: + throw new IllegalStateException("What even am I?"); + } + } + + public int getFortuneLevel() { + switch (this) { + case FORTUNE_1: + return 1; + case FORTUNE_2: + return 2; + case FORTUNE_3: + return 3; + default: + return 0; + } + } } -/* TODO - @Override - @SideOnly(Side.CLIENT) - public void registerModels(IModelRegistration modelRegistration) { - modelRegistration.setModelVariants( - this, - new ResourceLocation(RS.ID, "upgrade"), - new ResourceLocation(RS.ID, "range_upgrade"), - new ResourceLocation(RS.ID, "speed_upgrade"), - new ResourceLocation(RS.ID, "stack_upgrade"), - new ResourceLocation(RS.ID, "silk_touch_upgrade"), - new ResourceLocation(RS.ID, "fortune_upgrade") - ); - modelRegistration.setModel(this, 0, new ModelResourceLocation(RS.ID + ":upgrade", "inventory")); - modelRegistration.setModel(this, TYPE_RANGE, new ModelResourceLocation(RS.ID + ":range_upgrade", "inventory")); - modelRegistration.setModel(this, TYPE_SPEED, new ModelResourceLocation(RS.ID + ":speed_upgrade", "inventory")); - modelRegistration.setModel(this, TYPE_CRAFTING, new ModelResourceLocation(RS.ID + ":crafting_upgrade", "inventory")); - modelRegistration.setModel(this, TYPE_STACK, new ModelResourceLocation(RS.ID + ":stack_upgrade", "inventory")); - modelRegistration.setModel(this, TYPE_SILK_TOUCH, new ModelResourceLocation(RS.ID + ":silk_touch_upgrade", "inventory")); - modelRegistration.setModel(this, TYPE_FORTUNE_1, new ModelResourceLocation(RS.ID + ":fortune_upgrade", "inventory")); - modelRegistration.setModel(this, TYPE_FORTUNE_2, new ModelResourceLocation(RS.ID + ":fortune_upgrade", "inventory")); - modelRegistration.setModel(this, TYPE_FORTUNE_3, new ModelResourceLocation(RS.ID + ":fortune_upgrade", "inventory")); + private final Type type; + + public ItemUpgrade(Type type) { + super(new Item.Properties().group(RS.MAIN_GROUP)); + + this.type = type; + + this.setRegistryName(RS.ID, type == Type.NORMAL ? "upgrade" : type.getName() + "_upgrade"); + } + + @Override + public void addInformation(ItemStack stack, @Nullable World world, List tooltip, ITooltipFlag flag) { + super.addInformation(stack, world, tooltip, flag); + + if (type.getFortuneLevel() > 0) { + tooltip.add( + new TranslationTextComponent("enchantment.minecraft.fortune") + .appendText(" ") + .appendSibling(new TranslationTextComponent("enchantment.level." + type.getFortuneLevel())) + .setStyle(new Style().setColor(TextFormatting.GRAY)) + ); + } } @Override public boolean hasEffect(ItemStack stack) { - return stack.getMetadata() == TYPE_SILK_TOUCH || getFortuneLevel(stack) > 0; + return type == Type.SILK_TOUCH || + type == Type.FORTUNE_1 || + type == Type.FORTUNE_2 || + type == Type.FORTUNE_3; } - @Override - public void addInformation(ItemStack stack, @Nullable World world, List tooltip, ITooltipFlag flag) { - super.addInformation(stack, world, tooltip, flag); - - if (getFortuneLevel(stack) > 0) { - tooltip.add(I18n.format("enchantment.lootBonusDigger") + " " + I18n.format("enchantment.level." + getFortuneLevel(stack))); - } + public Type getType() { + return type; } - - @Override - public void getSubItems(CreativeTabs tab, NonNullList items) { - if (!isInCreativeTab(tab)) { - return; - } - - for (int i = 0; i <= 9; ++i) { - if (i != 5) { // Removal of interdimensional upgrade - items.add(new ItemStack(this, 1, i)); - } - } - } - - public static int getFortuneLevel(@Nullable ItemStack stack) { - if (stack != null) { - if (stack.getMetadata() == TYPE_FORTUNE_1) { - return 1; - } else if (stack.getMetadata() == TYPE_FORTUNE_2) { - return 2; - } else if (stack.getMetadata() == TYPE_FORTUNE_3) { - return 3; - } - } - - return 0; - } - - public static int getEnergyUsage(ItemStack stack) { - switch (stack.getItemDamage()) { - case TYPE_RANGE: - return RS.INSTANCE.config.rangeUpgradeUsage; - case TYPE_SPEED: - return RS.INSTANCE.config.speedUpgradeUsage; - case TYPE_CRAFTING: - return RS.INSTANCE.config.craftingUpgradeUsage; - case TYPE_STACK: - return RS.INSTANCE.config.stackUpgradeUsage; - case TYPE_SILK_TOUCH: - return RS.INSTANCE.config.silkTouchUpgradeUsage; - case TYPE_FORTUNE_1: - case TYPE_FORTUNE_2: - case TYPE_FORTUNE_3: - return RS.INSTANCE.config.fortuneUpgradeUsagePerFortune * getFortuneLevel(stack); - default: - return 0; - } - }*/ } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index 2db92e539..77d6dc8a5 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -90,10 +90,6 @@ public class ProxyCommon { public void registerRecipes(RegistryEvent.Register e) { e.getRegistry().register(new RecipeCover().setRegistryName(new ResourceLocation(RS.ID, "cover"))); e.getRegistry().register(new RecipeHollowCover().setRegistryName(new ResourceLocation(RS.ID, "hollow_cover"))); - e.getRegistry().register(new RecipeUpgradeWithEnchantedBook("fortune", 1, ItemUpgrade.TYPE_FORTUNE_1).setRegistryName(new ResourceLocation(RS.ID, "fortune_1_upgrade"))); - e.getRegistry().register(new RecipeUpgradeWithEnchantedBook("fortune", 2, ItemUpgrade.TYPE_FORTUNE_2).setRegistryName(new ResourceLocation(RS.ID, "fortune_2_upgrade"))); - e.getRegistry().register(new RecipeUpgradeWithEnchantedBook("fortune", 3, ItemUpgrade.TYPE_FORTUNE_3).setRegistryName(new ResourceLocation(RS.ID, "fortune_3_upgrade"))); - e.getRegistry().register(new RecipeUpgradeWithEnchantedBook("silk_touch", 1, ItemUpgrade.TYPE_SILK_TOUCH).setRegistryName(new ResourceLocation(RS.ID, "silk_touch_upgrade"))); } @SubscribeEvent diff --git a/src/main/java/com/raoulvdberge/refinedstorage/recipe/RecipeUpgradeWithEnchantedBook.java b/src/main/java/com/raoulvdberge/refinedstorage/recipe/UpgradeWithEnchantedBookRecipe.java similarity index 57% rename from src/main/java/com/raoulvdberge/refinedstorage/recipe/RecipeUpgradeWithEnchantedBook.java rename to src/main/java/com/raoulvdberge/refinedstorage/recipe/UpgradeWithEnchantedBookRecipe.java index 1162f30ce..c12d89483 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/recipe/RecipeUpgradeWithEnchantedBook.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/recipe/UpgradeWithEnchantedBookRecipe.java @@ -1,36 +1,29 @@ package com.raoulvdberge.refinedstorage.recipe; -/* -TODO -import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.RSItems; import net.minecraft.block.Blocks; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentData; -import net.minecraft.init.Blocks; -import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.inventory.CraftingInventory; import net.minecraft.item.EnchantedBookItem; -import net.minecraft.item.ItemEnchantedBook; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; import net.minecraft.item.crafting.ShapedRecipe; -import net.minecraft.item.crafting.ShapedRecipes; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.ListNBT; import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.registry.Registry; import net.minecraft.world.World; +import net.minecraftforge.registries.ForgeRegistries; -// MC JSON recipes don't like comparing to NBT, that's why we need a custom recipe class. -// We need to compare to NBT for the enchanted book. -public class RecipeUpgradeWithEnchantedBook extends ShapedRecipe { +public class UpgradeWithEnchantedBookRecipe extends ShapedRecipe { private EnchantmentData enchant; + private ItemStack result; - public RecipeUpgradeWithEnchantedBook(String enchantmentId, int enchantmentLevel, int upgradeId) { - super(RS.ID, 3, 3, NonNullList.from(Ingredient.EMPTY, + public UpgradeWithEnchantedBookRecipe(ResourceLocation recipeId, Enchantment enchantment, int enchantmentLevel, ItemStack result) { + super(recipeId, "", 3, 3, NonNullList.from(Ingredient.EMPTY, Ingredient.fromStacks(new ItemStack(RSItems.QUARTZ_ENRICHED_IRON)), - Ingredient.fromStacks(EnchantedBookItem.getEnchantedItemStack(new EnchantmentData(Registry.ENCHANTMENT.getOrDefault(new ResourceLocation("minecraft", enchantmentId)), enchantmentLevel))), + Ingredient.fromStacks(EnchantedBookItem.getEnchantedItemStack(new EnchantmentData(enchantment, enchantmentLevel))), Ingredient.fromStacks(new ItemStack(RSItems.QUARTZ_ENRICHED_IRON)), Ingredient.fromStacks(new ItemStack(Blocks.BOOKSHELF)), Ingredient.fromStacks(new ItemStack(RSItems.UPGRADE)), @@ -38,21 +31,30 @@ public class RecipeUpgradeWithEnchantedBook extends ShapedRecipe { Ingredient.fromStacks(new ItemStack(RSItems.QUARTZ_ENRICHED_IRON)), Ingredient.fromStacks(new ItemStack(RSItems.QUARTZ_ENRICHED_IRON)), Ingredient.fromStacks(new ItemStack(RSItems.QUARTZ_ENRICHED_IRON)) - ), new ItemStack(RSItems.UPGRADE, 1)); + ), result); - this.enchant = new EnchantmentData(Enchantment.getEnchantmentByLocation(enchantmentId), enchantmentLevel); + this.enchant = new EnchantmentData(enchantment, enchantmentLevel); + this.result = result; + } + + public EnchantmentData getEnchant() { + return enchant; + } + + public ItemStack getResult() { + return result; } @Override - public boolean matches(InventoryCrafting inv, World world) { + public boolean matches(CraftingInventory inv, World world) { if (super.matches(inv, world)) { - ListNBT enchantments = ItemEnchantedBook.getEnchantments(inv.getStackInSlot(1)); + ListNBT enchantments = EnchantedBookItem.getEnchantments(inv.getStackInSlot(1)); for (int i = 0; i < enchantments.size(); ++i) { CompoundNBT enchantmentNbt = enchantments.getCompound(i); // @Volatile: NBT tags from ItemEnchantedBook - if (Enchantment.getEnchantmentByID(enchantmentNbt.getShort("id")) == enchant.enchantment && enchantmentNbt.getShort("lvl") == enchant.enchantmentLevel) { + if (ForgeRegistries.ENCHANTMENTS.getValue(new ResourceLocation(enchantmentNbt.getString("id"))) == enchant.enchantment && enchantmentNbt.getShort("lvl") == enchant.enchantmentLevel) { return true; } } @@ -61,4 +63,3 @@ public class RecipeUpgradeWithEnchantedBook extends ShapedRecipe { return false; } } -*/ \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/recipe/UpgradeWithEnchantedBookRecipeSerializer.java b/src/main/java/com/raoulvdberge/refinedstorage/recipe/UpgradeWithEnchantedBookRecipeSerializer.java new file mode 100644 index 000000000..418c031bc --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/recipe/UpgradeWithEnchantedBookRecipeSerializer.java @@ -0,0 +1,41 @@ +package com.raoulvdberge.refinedstorage.recipe; + +import com.google.gson.JsonObject; +import com.mojang.realmsclient.util.JsonUtils; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.ForgeRegistryEntry; + +import javax.annotation.Nullable; + +public class UpgradeWithEnchantedBookRecipeSerializer extends ForgeRegistryEntry> implements IRecipeSerializer { + @Override + public UpgradeWithEnchantedBookRecipe read(ResourceLocation recipeId, JsonObject json) { + ItemStack result = new ItemStack(ForgeRegistries.ITEMS.getValue(new ResourceLocation(json.getAsJsonPrimitive("result").getAsString()))); + Enchantment enchantment = ForgeRegistries.ENCHANTMENTS.getValue(new ResourceLocation(json.getAsJsonObject("enchantment").getAsJsonPrimitive("id").getAsString())); + int level = JsonUtils.func_225172_a("level", json.getAsJsonObject("enchantment"), 1); + + return new UpgradeWithEnchantedBookRecipe(recipeId, enchantment, level, result); + } + + @Nullable + @Override + public UpgradeWithEnchantedBookRecipe read(ResourceLocation recipeId, PacketBuffer buffer) { + ItemStack result = buffer.readItemStack(); + Enchantment enchantment = ForgeRegistries.ENCHANTMENTS.getValue(buffer.readResourceLocation()); + int level = buffer.readInt(); + + return new UpgradeWithEnchantedBookRecipe(recipeId, enchantment, level, result); + } + + @Override + public void write(PacketBuffer buffer, UpgradeWithEnchantedBookRecipe recipe) { + buffer.writeItemStack(recipe.getResult()); + buffer.writeResourceLocation(recipe.getEnchant().enchantment.getRegistryName()); + buffer.writeInt(recipe.getEnchant().enchantmentLevel); + } +} diff --git a/src/main/resources/assets/refinedstorage/lang/en_us.json b/src/main/resources/assets/refinedstorage/lang/en_us.json index 4b9b1709e..c65514f27 100644 --- a/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -256,15 +256,15 @@ "item.refinedstorage.1024k_fluid_storage_part": "1024k Fluid Storage Part", "item.refinedstorage.4096k_fluid_storage_part": "4096k Fluid Storage Part", "item.refinedstorage:pattern": "Pattern", - "item.refinedstorage:upgrade.0": "Upgrade", - "item.refinedstorage:upgrade.1": "Range Upgrade", - "item.refinedstorage:upgrade.2": "Speed Upgrade", - "item.refinedstorage:upgrade.3": "Crafting Upgrade", - "item.refinedstorage:upgrade.4": "Stack Upgrade", - "item.refinedstorage:upgrade.6": "Silk Touch Upgrade", - "item.refinedstorage:upgrade.7": "Fortune Upgrade", - "item.refinedstorage:upgrade.8": "Fortune Upgrade", - "item.refinedstorage:upgrade.9": "Fortune Upgrade", + "item.refinedstorage.upgrade": "Upgrade", + "item.refinedstorage.range_upgrade": "Range Upgrade", + "item.refinedstorage.speed_upgrade": "Speed Upgrade", + "item.refinedstorage.crafting_upgrade": "Crafting Upgrade", + "item.refinedstorage.stack_upgrade": "Stack Upgrade", + "item.refinedstorage.silk_touch_upgrade": "Silk Touch Upgrade", + "item.refinedstorage.fortune_1_upgrade": "Fortune Upgrade", + "item.refinedstorage.fortune_2_upgrade": "Fortune Upgrade", + "item.refinedstorage.fortune_3_upgrade": "Fortune Upgrade", "item.refinedstorage.storage_housing": "Storage Housing", "item.refinedstorage:filter": "Filter", "item.refinedstorage.network_card": "Network Card", diff --git a/src/main/resources/assets/refinedstorage/models/item/fortune_upgrade.json b/src/main/resources/assets/refinedstorage/models/item/fortune_1_upgrade.json old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/assets/refinedstorage/models/item/fortune_upgrade.json rename to src/main/resources/assets/refinedstorage/models/item/fortune_1_upgrade.json diff --git a/src/main/resources/assets/refinedstorage/models/item/fortune_2_upgrade.json b/src/main/resources/assets/refinedstorage/models/item/fortune_2_upgrade.json new file mode 100644 index 000000000..20de58971 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/fortune_2_upgrade.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage:items/fortune_upgrade" + } +} diff --git a/src/main/resources/assets/refinedstorage/models/item/fortune_3_upgrade.json b/src/main/resources/assets/refinedstorage/models/item/fortune_3_upgrade.json new file mode 100644 index 000000000..20de58971 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/fortune_3_upgrade.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage:items/fortune_upgrade" + } +} diff --git a/src/main/resources/assets/refinedstorage/recipes/crafting_upgrade.json b/src/main/resources/assets/refinedstorage/recipes/crafting_upgrade.json deleted file mode 100644 index d1f1ea20b..000000000 --- a/src/main/resources/assets/refinedstorage/recipes/crafting_upgrade.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "forge:ore_shaped", - "pattern": [ - "EOE", - "CUC", - "EEE" - ], - "key": { - "E": { - "item": "refinedstorage:quartz_enriched_iron" - }, - "C": { - "type": "forge:ore_dict", - "ore": "workbench" - }, - "O": { - "item": "#construction_core" - }, - "U": { - "item": "refinedstorage:upgrade", - "data": 0 - } - }, - "result": { - "item": "refinedstorage:upgrade", - "data": 3 - } -} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/recipes/range_upgrade.json b/src/main/resources/assets/refinedstorage/recipes/range_upgrade.json deleted file mode 100644 index 7f58e827d..000000000 --- a/src/main/resources/assets/refinedstorage/recipes/range_upgrade.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "forge:ore_shaped", - "pattern": [ - "EPE", - "PUP", - "EEE" - ], - "key": { - "E": { - "item": "refinedstorage:quartz_enriched_iron" - }, - "P": { - "type": "forge:ore_dict", - "ore": "enderpearl" - }, - "U": { - "item": "refinedstorage:upgrade", - "data": 0 - } - }, - "result": { - "item": "refinedstorage:upgrade", - "data": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/refinedstorage/recipes/crafting_upgrade.json b/src/main/resources/data/refinedstorage/recipes/crafting_upgrade.json new file mode 100644 index 000000000..e56b9f89d --- /dev/null +++ b/src/main/resources/data/refinedstorage/recipes/crafting_upgrade.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "EOE", + "CUC", + "EEE" + ], + "key": { + "E": { + "item": "refinedstorage:quartz_enriched_iron" + }, + "C": { + "tag": "refinedstorage:crafting_tables" + }, + "O": { + "item": "refinedstorage:construction_core" + }, + "U": { + "item": "refinedstorage:upgrade" + } + }, + "result": { + "item": "refinedstorage:crafting_upgrade" + } +} \ No newline at end of file diff --git a/src/main/resources/data/refinedstorage/recipes/fortune_1_upgrade.json b/src/main/resources/data/refinedstorage/recipes/fortune_1_upgrade.json new file mode 100644 index 000000000..b68fb72ec --- /dev/null +++ b/src/main/resources/data/refinedstorage/recipes/fortune_1_upgrade.json @@ -0,0 +1,8 @@ +{ + "type": "refinedstorage:upgrade_with_enchanted_book", + "enchantment": { + "level": 1, + "id": "minecraft:fortune" + }, + "result": "refinedstorage:fortune_1_upgrade" +} \ No newline at end of file diff --git a/src/main/resources/data/refinedstorage/recipes/fortune_2_upgrade.json b/src/main/resources/data/refinedstorage/recipes/fortune_2_upgrade.json new file mode 100644 index 000000000..4688b5cbc --- /dev/null +++ b/src/main/resources/data/refinedstorage/recipes/fortune_2_upgrade.json @@ -0,0 +1,8 @@ +{ + "type": "refinedstorage:upgrade_with_enchanted_book", + "enchantment": { + "level": 2, + "id": "minecraft:fortune" + }, + "result": "refinedstorage:fortune_2_upgrade" +} \ No newline at end of file diff --git a/src/main/resources/data/refinedstorage/recipes/fortune_3_upgrade.json b/src/main/resources/data/refinedstorage/recipes/fortune_3_upgrade.json new file mode 100644 index 000000000..a14e3874e --- /dev/null +++ b/src/main/resources/data/refinedstorage/recipes/fortune_3_upgrade.json @@ -0,0 +1,8 @@ +{ + "type": "refinedstorage:upgrade_with_enchanted_book", + "enchantment": { + "level": 3, + "id": "minecraft:fortune" + }, + "result": "refinedstorage:fortune_3_upgrade" +} \ No newline at end of file diff --git a/src/main/resources/data/refinedstorage/recipes/range_upgrade.json b/src/main/resources/data/refinedstorage/recipes/range_upgrade.json new file mode 100644 index 000000000..69b60281a --- /dev/null +++ b/src/main/resources/data/refinedstorage/recipes/range_upgrade.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "EPE", + "PUP", + "EEE" + ], + "key": { + "E": { + "item": "refinedstorage:quartz_enriched_iron" + }, + "P": { + "tag": "forge:ender_pearls" + }, + "U": { + "item": "refinedstorage:upgrade" + } + }, + "result": { + "item": "refinedstorage:range_upgrade" + } +} \ No newline at end of file diff --git a/src/main/resources/data/refinedstorage/recipes/silk_touch_upgrade.json b/src/main/resources/data/refinedstorage/recipes/silk_touch_upgrade.json new file mode 100644 index 000000000..ebc94e1bb --- /dev/null +++ b/src/main/resources/data/refinedstorage/recipes/silk_touch_upgrade.json @@ -0,0 +1,7 @@ +{ + "type": "refinedstorage:upgrade_with_enchanted_book", + "enchantment": { + "id": "minecraft:silk_touch" + }, + "result": "refinedstorage:silk_touch_upgrade" +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/recipes/speed_upgrade.json b/src/main/resources/data/refinedstorage/recipes/speed_upgrade.json similarity index 71% rename from src/main/resources/assets/refinedstorage/recipes/speed_upgrade.json rename to src/main/resources/data/refinedstorage/recipes/speed_upgrade.json index 3204f7ae0..51495213f 100644 --- a/src/main/resources/assets/refinedstorage/recipes/speed_upgrade.json +++ b/src/main/resources/data/refinedstorage/recipes/speed_upgrade.json @@ -13,12 +13,10 @@ "item": "minecraft:sugar" }, "U": { - "item": "refinedstorage:upgrade", - "data": 0 + "item": "refinedstorage:upgrade" } }, "result": { - "item": "refinedstorage:upgrade", - "data": 2 + "item": "refinedstorage:speed_upgrade" } } \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/recipes/stack_upgrade.json b/src/main/resources/data/refinedstorage/recipes/stack_upgrade.json similarity index 64% rename from src/main/resources/assets/refinedstorage/recipes/stack_upgrade.json rename to src/main/resources/data/refinedstorage/recipes/stack_upgrade.json index eda50bbf2..4638f086a 100644 --- a/src/main/resources/assets/refinedstorage/recipes/stack_upgrade.json +++ b/src/main/resources/data/refinedstorage/recipes/stack_upgrade.json @@ -10,12 +10,10 @@ "item": "minecraft:sugar" }, "S": { - "item": "refinedstorage:upgrade", - "data": 2 + "item": "refinedstorage:speed_upgrade" } }, "result": { - "item": "refinedstorage:upgrade", - "data": 4 + "item": "refinedstorage:stack_upgrade" } } \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/recipes/upgrade.json b/src/main/resources/data/refinedstorage/recipes/upgrade.json similarity index 61% rename from src/main/resources/assets/refinedstorage/recipes/upgrade.json rename to src/main/resources/data/refinedstorage/recipes/upgrade.json index 97fba6a3d..23fa5466a 100644 --- a/src/main/resources/assets/refinedstorage/recipes/upgrade.json +++ b/src/main/resources/data/refinedstorage/recipes/upgrade.json @@ -10,15 +10,13 @@ "item": "refinedstorage:quartz_enriched_iron" }, "G": { - "type": "forge:ore_dict", - "ore": "blockGlass" + "tag": "forge:glass" }, "P": { - "item": "#improved_processor" + "item": "refinedstorage:improved_processor" } }, "result": { - "item": "refinedstorage:upgrade", - "data": 0 + "item": "refinedstorage:upgrade" } } \ No newline at end of file diff --git a/src/main/resources/data/refinedstorage/tags/items/crafting_tables.json b/src/main/resources/data/refinedstorage/tags/items/crafting_tables.json new file mode 100644 index 000000000..9019c8810 --- /dev/null +++ b/src/main/resources/data/refinedstorage/tags/items/crafting_tables.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:crafting_table" + ] +} \ No newline at end of file