From 55e03982635b1237136d92d991144e79d7f93c12 Mon Sep 17 00:00:00 2001 From: BOLT_M4G1C Date: Fri, 5 Dec 2025 22:26:10 +0100 Subject: [PATCH 01/12] Adds the ability to copy recipes from the Epic Crafting Table Updated English localization (en_us.json) Updated Ukrainian localization (uk_ua.json) Updated Russian localization (ru_ru.json) Updated Chinese localization (zh_cn.json) Added a new Recipe Maker item for KubeJS scripts While copying recipes you can put the output item into the first hotbar slot, and it will get inserted into the copied code --- build.gradle | 2 +- .../init/ModCreativeModeTabs.java | 6 + .../item/RecipeMakerItem.java | 152 +++++++++++++++--- .../assets/extendedcrafting/lang/en_us.json | 2 + .../assets/extendedcrafting/lang/ru_ru.json | 3 +- .../assets/extendedcrafting/lang/uk_ua.json | 4 +- .../assets/extendedcrafting/lang/zh_cn.json | 3 + .../testing/recipes/table_11x11_test.json | 24 +++ 8 files changed, 170 insertions(+), 26 deletions(-) create mode 100644 src/test/resources/datapacks/testing/data/testing/recipes/table_11x11_test.json diff --git a/build.gradle b/build.gradle index 33498ed5..8f6c8d73 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { id 'org.spongepowered.mixin' version '0.7.+' } -version = '1.20.1-6.1.5u' +version = '1.20.1-6.1.6u' group = 'com.witherschat.extendedcrafting' base { diff --git a/src/main/java/com/blakebr0/extendedcrafting/init/ModCreativeModeTabs.java b/src/main/java/com/blakebr0/extendedcrafting/init/ModCreativeModeTabs.java index 6d0226bb..b5f31e45 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/init/ModCreativeModeTabs.java +++ b/src/main/java/com/blakebr0/extendedcrafting/init/ModCreativeModeTabs.java @@ -16,6 +16,7 @@ public final class ModCreativeModeTabs { public static final DeferredRegister REGISTRY = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, ExtendedCrafting.MOD_ID); + @SuppressWarnings("unused") public static final RegistryObject CREATIVE_TAB = REGISTRY.register("creative_tab", () -> CreativeModeTab.builder() .title(Component.translatable("itemGroup.extendedcrafting")) .icon(() -> new ItemStack(ModItems.LUMINESSENCE.get())) @@ -107,6 +108,11 @@ public final class ModCreativeModeTabs { NBTHelper.setString(stack, "Type", "CraftTweaker"); output.accept(stack, ModFeatureFlags.RECIPE_MAKER); + stack = new ItemStack(ModItems.RECIPE_MAKER.get()); + NBTHelper.setBoolean(stack, "Shapeless", false); + NBTHelper.setString(stack, "Type", "KubeJS"); + output.accept(stack, ModFeatureFlags.RECIPE_MAKER); + for (var singularity : SingularityRegistry.getInstance().getSingularities()) { if (singularity.isEnabled()) { output.accept(SingularityUtils.getItemForSingularity(singularity), ModFeatureFlags.SINGULARITIES); diff --git a/src/main/java/com/blakebr0/extendedcrafting/item/RecipeMakerItem.java b/src/main/java/com/blakebr0/extendedcrafting/item/RecipeMakerItem.java index fe4f0d65..b8c32a03 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/item/RecipeMakerItem.java +++ b/src/main/java/com/blakebr0/extendedcrafting/item/RecipeMakerItem.java @@ -12,6 +12,7 @@ import com.blakebr0.extendedcrafting.tileentity.BasicTableTileEntity; import com.blakebr0.extendedcrafting.tileentity.CraftingCoreTileEntity; import com.blakebr0.extendedcrafting.tileentity.EliteTableTileEntity; +import com.blakebr0.extendedcrafting.tileentity.EpicTableTileEntity; import com.blakebr0.extendedcrafting.tileentity.EnderCrafterTileEntity; import com.blakebr0.extendedcrafting.tileentity.FluxCrafterTileEntity; import com.blakebr0.extendedcrafting.tileentity.UltimateTableTileEntity; @@ -26,6 +27,7 @@ import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.item.crafting.Ingredient; @@ -37,6 +39,7 @@ import net.minecraftforge.fml.ModList; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.registries.ForgeRegistries; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -76,16 +79,45 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { ? "FluxCrafting" : "TableCrafting"; + int gridSlots = getGridSlots(inventory); + if (!hasItems(inventory, gridSlots)) { + player.sendSystemMessage(Localizable.of("message.extendedcrafting.no_items_in_grid").build()); + return InteractionResult.SUCCESS; + } + + var outputStack = player.getInventory().getItem(0); + if (outputStack.isEmpty()) { + player.sendSystemMessage(Localizable.of("message.extendedcrafting.no_output_item_warning").build()); + } + String string; if ("CraftTweaker".equals(type)) { string = isShapeless(stack) - ? makeShapelessCraftTweakerTableRecipe(inventory, block) - : makeShapedCraftTweakerTableRecipe(inventory, block); + ? makeShapelessCraftTweakerTableRecipe(inventory, block, outputStack) + : makeShapedCraftTweakerTableRecipe(inventory, block, outputStack); + + } else if ("KubeJS".equals(type)) { + String json = isShapeless(stack) + ? makeShapelessDatapackTableRecipe(inventory, block, outputStack) + : makeShapedDatapackTableRecipe(inventory, block, outputStack); + + if ("TOO MANY ITEMS".equals(json)) { + player.sendSystemMessage(Localizable.of("message.extendedcrafting.max_unique_items_exceeded").args(KEYS.length).build()); + return InteractionResult.SUCCESS; + } + + json = getString(json); + + var outputId = ForgeRegistries.ITEMS.getKey(outputStack.getItem()); + var outputItemId = (outputStack.isEmpty() || outputStack.getItem() == Items.AIR) ? "" : (outputId == null ? "minecraft:air" : outputId.toString()); + String comment = outputItemId.isEmpty() ? "" : "\n // " + outputItemId; + String idPart = outputItemId.isEmpty() ? "" : "\n .id('" + outputItemId + "');"; + string = "ServerEvents.recipes((event) => {" + comment + "\n event.custom({\n" + json + "\n })" + idPart + "\n});"; } else { string = isShapeless(stack) - ? makeShapelessDatapackTableRecipe(inventory, block) - : makeShapedDatapackTableRecipe(inventory, block); + ? makeShapelessDatapackTableRecipe(inventory, block, outputStack) + : makeShapedDatapackTableRecipe(inventory, block, outputStack); if ("TOO MANY ITEMS".equals(string)) { player.sendSystemMessage(Localizable.of("message.extendedcrafting.max_unique_items_exceeded").args(KEYS.length).build()); @@ -107,9 +139,21 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { } else if (tile instanceof CraftingCoreTileEntity core) { if (level.isClientSide()) { var type = NBTHelper.getString(stack, "Type"); - var string = "CraftTweaker".equals(type) - ? makeCraftTweakerCombinationRecipe(core) - : makeDatapackCombinationRecipe(core); + var outputStack = player.getInventory().getItem(0); + var outputId = ForgeRegistries.ITEMS.getKey(outputStack.getItem()); + var outputItemId = (outputStack.isEmpty() || outputStack.getItem() == Items.AIR) ? "" : (outputId == null ? "minecraft:air" : outputId.toString()); + String string; + if ("CraftTweaker".equals(type)) { + string = makeCraftTweakerCombinationRecipe(core); + } else if ("KubeJS".equals(type)) { + String json = makeDatapackCombinationRecipe(core); + json = getString(json); + String comment = outputItemId.isEmpty() ? "" : "\n // " + outputItemId; + String idPart = outputItemId.isEmpty() ? "" : "\n .id('" + outputItemId + "');"; + string = "ServerEvents.recipes((event) => {" + comment + "\n event.custom({\n" + json + "\n })" + idPart + "\n});"; + } else { + string = makeDatapackCombinationRecipe(core); + } setClipboard(string); @@ -122,11 +166,25 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { return InteractionResult.PASS; } - @Override - public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { - if (player.isCrouching()) { - var stack = player.getItemInHand(hand); + @NotNull + private String getString(String json) { + String[] lines = json.split("\n"); + StringBuilder sb = new StringBuilder(); + for (int i = 1; i < lines.length - 1; i++) { + if (i > 1) sb.append("\n"); + sb.append(lines[i]); + } + json = sb.toString(); + json = json.replaceAll("\"([^\"]+)\":", "$1:"); + json = json.replace("\"", "'"); + return json; + } + + @Override + public @NotNull InteractionResultHolder use(@NotNull Level level, Player player, @NotNull InteractionHand hand) { + var stack = player.getItemInHand(hand); + if (player.isCrouching()) { NBTHelper.flipBoolean(stack, "Shapeless"); if (level.isClientSide()) { @@ -139,8 +197,10 @@ public InteractionResultHolder use(Level level, Player player, Intera @OnlyIn(Dist.CLIENT) @Override - public void appendHoverText(ItemStack stack, Level level, List tooltip, TooltipFlag flag) { - tooltip.add(ModTooltips.TYPE.args(NBTHelper.getString(stack, "Type")).build()); + public void appendHoverText(@NotNull ItemStack stack, Level level, @NotNull List tooltip, @NotNull TooltipFlag flag) { + var type = NBTHelper.getString(stack, "Type"); + if (type.isEmpty()) type = "Datapack"; + tooltip.add(ModTooltips.TYPE.args(type).build()); tooltip.add(ModTooltips.MODE.args(getModeString(stack)).build()); } @@ -149,13 +209,24 @@ private static void setClipboard(String string) { } // Create a shaped CraftTweaker recipe for a Table, Flux Crafter or Ender Crafter - private static String makeShapedCraftTweakerTableRecipe(IItemHandler inventory, String type) { + private static String makeShapedCraftTweakerTableRecipe(IItemHandler inventory, String type, ItemStack output) { var string = new StringBuilder(); var uuid = UUID.randomUUID(); string.append("mods.extendedcrafting.").append(type).append(".addShaped(\"").append(uuid).append("\", "); if ("TableCrafting".equals(type)) string.append("0, "); - string.append("<>, [").append(NEW_LINE); + + var outputId = ForgeRegistries.ITEMS.getKey(output.getItem()); + var outputItem = outputId == null ? "item:minecraft:air" : "item:" + outputId; + string.append("<").append(outputItem).append(">"); + + if (ModConfigs.RECIPE_MAKER_USE_NBT.get() && !output.isEmpty() && output.hasTag() && ModList.get().isLoaded("crafttweaker")) { + var nbt = output.getTag(); + var tag = CraftTweakerUtils.writeTag(nbt); + string.append(".withTag(").append(tag).append(")"); + } + + string.append(", [").append(NEW_LINE); int slots = getGridSlots(inventory); int sr = (int) Math.sqrt(slots); @@ -217,13 +288,24 @@ private static String makeShapedCraftTweakerTableRecipe(IItemHandler inventory, } // Create a shapeless CraftTweaker recipe for a Table, Flux Crafter or Ender Crafter - private static String makeShapelessCraftTweakerTableRecipe(IItemHandler inventory, String type) { + private static String makeShapelessCraftTweakerTableRecipe(IItemHandler inventory, String type, ItemStack output) { var string = new StringBuilder(); var uuid = UUID.randomUUID(); string.append("mods.extendedcrafting.").append(type).append(".addShapeless(\"").append(uuid).append("\", "); if ("TableCrafting".equals(type)) string.append("0, "); - string.append("<>, [").append(NEW_LINE); + + var outputId = ForgeRegistries.ITEMS.getKey(output.getItem()); + var outputItem = outputId == null ? "item:minecraft:air" : "item:" + outputId; + string.append("<").append(outputItem).append(">"); + + if (ModConfigs.RECIPE_MAKER_USE_NBT.get() && !output.isEmpty() && output.hasTag() && ModList.get().isLoaded("crafttweaker")) { + var nbt = output.getTag(); + var tag = CraftTweakerUtils.writeTag(nbt); + string.append(".withTag(").append(tag).append(")"); + } + + string.append(", [").append(NEW_LINE); List slotsWithItems = new ArrayList<>(); int slots = getGridSlots(inventory); @@ -299,7 +381,7 @@ private static String makeCraftTweakerCombinationRecipe(CraftingCoreTileEntity t String item; if (ModConfigs.RECIPE_MAKER_USE_TAGS.get() && tagId != null) { - item = "tag:items:" + tagId; + item = "tag:items:" + tagId.location(); } else { var id = ForgeRegistries.ITEMS.getKey(stack.getItem()); item = id == null ? "item:minecraft:air" : "item:" + id; @@ -325,7 +407,7 @@ private static String makeCraftTweakerCombinationRecipe(CraftingCoreTileEntity t } // Create a shaped Datapack recipe for a Table, Flux Crafter or Ender Crafter - private static String makeShapedDatapackTableRecipe(IItemHandler inventory, String type) { + private static String makeShapedDatapackTableRecipe(IItemHandler inventory, String type, ItemStack output) { var object = new JsonObject(); var tableType = TableType.fromType(type); @@ -395,14 +477,19 @@ private static String makeShapedDatapackTableRecipe(IItemHandler inventory, Stri var result = new JsonObject(); - result.addProperty("item", ""); + var outputId = ForgeRegistries.ITEMS.getKey(output.getItem()); + result.addProperty("item", outputId == null ? "minecraft:air" : outputId.toString()); + if (ModConfigs.RECIPE_MAKER_USE_NBT.get() && !output.isEmpty() && output.hasTag()) { + assert output.getTag() != null; + result.addProperty("nbt", output.getTag().toString()); + } object.add("result", result); return GSON.toJson(object); } // Create a shapeless Datapack recipe for a Table Flux Crafter or Ender Crafter - private static String makeShapelessDatapackTableRecipe(IItemHandler inventory, String type) { + private static String makeShapelessDatapackTableRecipe(IItemHandler inventory, String type, ItemStack output) { var object = new JsonObject(); var tableType = TableType.fromType(type); @@ -441,7 +528,13 @@ private static String makeShapelessDatapackTableRecipe(IItemHandler inventory, S var result = new JsonObject(); - result.addProperty("item", ""); + var outputId = ForgeRegistries.ITEMS.getKey(output.getItem()); + String itemValue = (output.getItem() == Items.AIR) ? "" : (outputId == null ? "minecraft:air" : outputId.toString()); + result.addProperty("item", itemValue); + if (ModConfigs.RECIPE_MAKER_USE_NBT.get() && !output.isEmpty() && output.hasTag()) { + assert output.getTag() != null; + result.addProperty("nbt", output.getTag().toString()); + } object.add("result", result); return GSON.toJson(object); @@ -488,10 +581,12 @@ private static String makeDatapackCombinationRecipe(CraftingCoreTileEntity core) return GSON.toJson(object); } + private static boolean isTable(BlockEntity tile) { return tile instanceof BasicTableTileEntity || tile instanceof AdvancedTableTileEntity || tile instanceof EliteTableTileEntity || + tile instanceof EpicTableTileEntity || tile instanceof UltimateTableTileEntity || tile instanceof AutoTableTileEntity || tile instanceof EnderCrafterTileEntity || @@ -509,12 +604,23 @@ private static boolean isShapeless(ItemStack stack) { private static int getGridSlots(IItemHandler inventory) { int slots = inventory.getSlots(); - if (slots >= 81) return 81; + if (slots >= 121) return 121; + else if (slots >= 81) return 81; else if (slots >= 49) return 49; else if (slots >= 25) return 25; else return 9; } + private static boolean hasItems(IItemHandler inventory, int gridSlots) { + for (int i = 0; i < gridSlots; i++) { + if (!inventory.getStackInSlot(i).isEmpty()) { + return true; + } + } + + return false; + } + private enum TableType { TABLE("TableCrafting", "extendedcrafting:shaped_table", "extendedcrafting:shapeless_table"), ENDER_CRAFTER("EnderCrafting", "extendedcrafting:shaped_ender_crafter", "extendedcrafting:shapeless_ender_crafter"), diff --git a/src/main/resources/assets/extendedcrafting/lang/en_us.json b/src/main/resources/assets/extendedcrafting/lang/en_us.json index cee49df7..85e030f8 100644 --- a/src/main/resources/assets/extendedcrafting/lang/en_us.json +++ b/src/main/resources/assets/extendedcrafting/lang/en_us.json @@ -124,6 +124,8 @@ "message.extendedcrafting.copied_recipe": "Copied recipe to clipboard.", "message.extendedcrafting.nbt_requires_crafttweaker": "CraftTweaker is required to copy NBT.", "message.extendedcrafting.max_unique_items_exceeded": "You can only have a maximum of (%s) unique items in a shaped datapack recipe.", + "message.extendedcrafting.no_items_in_grid": "There are no items in the grid to copy.", + "message.extendedcrafting.no_output_item_warning": "There is no item in the first hotbar slot. You can put your output item in the first hotbar slot to include it in the copied recipe.", "jei.category.extendedcrafting.combination": "Combination Crafting", "jei.category.extendedcrafting.basic_crafting": "Basic Crafting", diff --git a/src/main/resources/assets/extendedcrafting/lang/ru_ru.json b/src/main/resources/assets/extendedcrafting/lang/ru_ru.json index 43aa36ab..9f65c543 100644 --- a/src/main/resources/assets/extendedcrafting/lang/ru_ru.json +++ b/src/main/resources/assets/extendedcrafting/lang/ru_ru.json @@ -98,6 +98,8 @@ "message.extendedcrafting.copied_recipe": "Рецепт скопирован в буфер обмена.", "message.extendedcrafting.nbt_requires_crafttweaker": "CraftTweaker требуется для копирования NBT.", "message.extendedcrafting.max_unique_items_exceeded": "Вы можете иметь максимум (%s) однотипных предметов в сформированном рецепте из дата-пака.", + "message.extendedcrafting.no_items_in_grid": "В сетке нет элементов для копирования.", + "message.extendedcrafting.no_output_item_warning": "В первом слоте быстрого доступа нет предмета. Вы можете положить выходной предмет в первый слот, чтобы включить его в копируемый рецепт.", "jei.category.extendedcrafting.combination": "Комбинированное создание", "jei.category.extendedcrafting.basic_crafting": "Создание на базовом верстаке", @@ -125,7 +127,6 @@ "singularity.extendedcrafting.nickel": "Никелевая", "singularity.extendedcrafting.electrum": "Электрумовая", "singularity.extendedcrafting.invar": "Инваровая", - "singularity.extendedcrafting.uranium": "Урановая", "singularity.extendedcrafting.platinum": "Платиновая", "book.extendedcrafting.name": "Extended Crafting", diff --git a/src/main/resources/assets/extendedcrafting/lang/uk_ua.json b/src/main/resources/assets/extendedcrafting/lang/uk_ua.json index a04ed87e..c1dd6bdf 100644 --- a/src/main/resources/assets/extendedcrafting/lang/uk_ua.json +++ b/src/main/resources/assets/extendedcrafting/lang/uk_ua.json @@ -102,6 +102,9 @@ "message.extendedcrafting.copied_recipe": "Рецепт скопійовано в буфер обміну.", "message.extendedcrafting.nbt_requires_crafttweaker": "Для копіювання NBT потрібен CraftTweaker.", "message.extendedcrafting.max_unique_items_exceeded": "Ви можете мати максимум (%s) унікальних предметів у формованому рецепті датапака.", + "message.extendedcrafting.no_items_in_grid": "У сітці немає елементів для копіювання.", + "message.extendedcrafting.no_output_item_warning": "У першому слоті швидкого доступу немає предмета. Ви можете покласти вихідний предмет у перший слот, щоб включити його в скопійований рецепт.", + "jei.category.extendedcrafting.combination": "Комбіноване майстрування", "jei.category.extendedcrafting.basic_crafting": "Базове майстрування", @@ -129,7 +132,6 @@ "singularity.extendedcrafting.nickel": "Нікелева", "singularity.extendedcrafting.electrum": "Електрумова", "singularity.extendedcrafting.invar": "Інварова", - "singularity.extendedcrafting.uranium": "Уранова", "singularity.extendedcrafting.platinum": "Платинова", "book.extendedcrafting.name": "Extended Crafting", diff --git a/src/main/resources/assets/extendedcrafting/lang/zh_cn.json b/src/main/resources/assets/extendedcrafting/lang/zh_cn.json index 2f865ed1..42175ac9 100644 --- a/src/main/resources/assets/extendedcrafting/lang/zh_cn.json +++ b/src/main/resources/assets/extendedcrafting/lang/zh_cn.json @@ -117,6 +117,9 @@ "message.extendedcrafting.copied_recipe": "复制配方到剪贴板。", "message.extendedcrafting.nbt_requires_crafttweaker": "警告:需安装CraftTweaker方可复制NBT。", "message.extendedcrafting.max_unique_items_exceeded": "在成型的数据包配方中,你最多只能有%s个唯一项目。", + "message.extendedcrafting.no_items_in_grid": "网格中没有可复制的物品。", + "message.extendedcrafting.no_output_item_warning": "第一个快捷栏槽位中没有物品。你可以将输出物品放入第一个快捷栏槽位,以便将其包含在复制的配方中。", + "jei.category.extendedcrafting.combination": "组合合成", "jei.category.extendedcrafting.basic_crafting": "基础合成", diff --git a/src/test/resources/datapacks/testing/data/testing/recipes/table_11x11_test.json b/src/test/resources/datapacks/testing/data/testing/recipes/table_11x11_test.json new file mode 100644 index 00000000..204477e1 --- /dev/null +++ b/src/test/resources/datapacks/testing/data/testing/recipes/table_11x11_test.json @@ -0,0 +1,24 @@ +{ + "type": "extendedcrafting:shaped_table", + "pattern": [ + "XXXXXXXXXXX", + "X X", + "X X", + "X X", + "X X", + "X X", + "X X", + "X X", + "X X", + "X X", + "XXXXXXXXXXX" + ], + "key": { + "X": { + "tag": "forge:ingots/gold" + } + }, + "result": { + "item": "minecraft:apple" + } +} \ No newline at end of file From b3c4966c087b21704a2171d228c9f9664be3b48b Mon Sep 17 00:00:00 2001 From: BOLT_M4G1C Date: Fri, 5 Dec 2025 22:45:55 +0100 Subject: [PATCH 02/12] Refactors Datapack recipe generation to include output stack in method signature and improves item handling --- .../item/RecipeMakerItem.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/blakebr0/extendedcrafting/item/RecipeMakerItem.java b/src/main/java/com/blakebr0/extendedcrafting/item/RecipeMakerItem.java index b8c32a03..23093455 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/item/RecipeMakerItem.java +++ b/src/main/java/com/blakebr0/extendedcrafting/item/RecipeMakerItem.java @@ -146,13 +146,13 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { if ("CraftTweaker".equals(type)) { string = makeCraftTweakerCombinationRecipe(core); } else if ("KubeJS".equals(type)) { - String json = makeDatapackCombinationRecipe(core); + String json = makeDatapackCombinationRecipe(core, outputStack); json = getString(json); String comment = outputItemId.isEmpty() ? "" : "\n // " + outputItemId; String idPart = outputItemId.isEmpty() ? "" : "\n .id('" + outputItemId + "');"; string = "ServerEvents.recipes((event) => {" + comment + "\n event.custom({\n" + json + "\n })" + idPart + "\n});"; } else { - string = makeDatapackCombinationRecipe(core); + string = makeDatapackCombinationRecipe(core, outputStack); } setClipboard(string); @@ -217,7 +217,7 @@ private static String makeShapedCraftTweakerTableRecipe(IItemHandler inventory, if ("TableCrafting".equals(type)) string.append("0, "); var outputId = ForgeRegistries.ITEMS.getKey(output.getItem()); - var outputItem = outputId == null ? "item:minecraft:air" : "item:" + outputId; + var outputItem = output.isEmpty() ? "" : (outputId == null ? "" : ""); string.append("<").append(outputItem).append(">"); if (ModConfigs.RECIPE_MAKER_USE_NBT.get() && !output.isEmpty() && output.hasTag() && ModList.get().isLoaded("crafttweaker")) { @@ -296,7 +296,7 @@ private static String makeShapelessCraftTweakerTableRecipe(IItemHandler inventor if ("TableCrafting".equals(type)) string.append("0, "); var outputId = ForgeRegistries.ITEMS.getKey(output.getItem()); - var outputItem = outputId == null ? "item:minecraft:air" : "item:" + outputId; + var outputItem = output.isEmpty() ? "" : (outputId == null ? "item:minecraft:air" : "item:" + outputId); string.append("<").append(outputItem).append(">"); if (ModConfigs.RECIPE_MAKER_USE_NBT.get() && !output.isEmpty() && output.hasTag() && ModList.get().isLoaded("crafttweaker")) { @@ -478,7 +478,8 @@ private static String makeShapedDatapackTableRecipe(IItemHandler inventory, Stri var result = new JsonObject(); var outputId = ForgeRegistries.ITEMS.getKey(output.getItem()); - result.addProperty("item", outputId == null ? "minecraft:air" : outputId.toString()); + String itemValue = (output.getItem() == Items.AIR) ? "" : (outputId == null ? "minecraft:air" : outputId.toString()); + result.addProperty("item", itemValue); if (ModConfigs.RECIPE_MAKER_USE_NBT.get() && !output.isEmpty() && output.hasTag()) { assert output.getTag() != null; result.addProperty("nbt", output.getTag().toString()); @@ -541,7 +542,7 @@ private static String makeShapelessDatapackTableRecipe(IItemHandler inventory, S } // Create a Datapack recipe for a combination crafting recipe - private static String makeDatapackCombinationRecipe(CraftingCoreTileEntity core) { + private static String makeDatapackCombinationRecipe(CraftingCoreTileEntity core, ItemStack output) { var object = new JsonObject(); object.addProperty("type", "extendedcrafting:combination"); @@ -575,7 +576,13 @@ private static String makeDatapackCombinationRecipe(CraftingCoreTileEntity core) var result = new JsonObject(); - result.addProperty("item", ""); + var outputId = ForgeRegistries.ITEMS.getKey(output.getItem()); + String itemValue = (output.getItem() == Items.AIR) ? "" : (outputId == null ? "minecraft:air" : outputId.toString()); + result.addProperty("item", itemValue); + if (ModConfigs.RECIPE_MAKER_USE_NBT.get() && !output.isEmpty() && output.hasTag()) { + assert output.getTag() != null; + result.addProperty("nbt", output.getTag().toString()); + } object.add("result", result); return GSON.toJson(object); From 8300986f08ea0b1a918e249149896449bd863440 Mon Sep 17 00:00:00 2001 From: BOLT_M4G1C Date: Sat, 6 Dec 2025 20:51:36 +0100 Subject: [PATCH 03/12] Adds Legendary Crafting Table and associated functionality Copying a shapeless recipe from any table is setting the correct tier --- .../block/LegendaryTableBlock.java | 85 +++++++++++ .../client/screen/LegendaryTableScreen.java | 30 ++++ .../extendedcrafting/compat/JadeCompat.java | 15 +- .../compat/jei/JeiCompat.java | 10 +- .../jei/category/table/EpicTableCategory.java | 3 +- .../table/LegendaryTableCategory.java | 141 ++++++++++++++++++ .../container/LegendaryTableContainer.java | 118 +++++++++++++++ .../crafting/recipe/ShapedTableRecipe.java | 6 +- .../crafting/recipe/ShapelessTableRecipe.java | 3 +- .../extendedcrafting/init/ModBlocks.java | 2 + .../init/ModContainerTypes.java | 2 + .../init/ModCreativeModeTabs.java | 1 + .../init/ModTileEntities.java | 4 +- .../item/RecipeMakerItem.java | 46 ++++-- .../tileentity/LegendaryTableTileEntity.java | 55 +++++++ .../blockstates/legendary_table.json | 7 + .../assets/extendedcrafting/lang/en_us.json | 4 + .../models/block/legendary_table.json | 88 +++++++++++ .../models/item/legendary_table.json | 35 +++++ .../textures/block/legendary_table_top.png | Bin 0 -> 410 bytes .../block/legendary_table_top.png.mcmeta | 6 + .../textures/gui/legendary_table.png | Bin 0 -> 3557 bytes .../textures/jei/legendary_crafting.png | Bin 0 -> 3075 bytes .../tags/blocks/mineable/pickaxe.json | 1 + .../tags/blocks/needs_stone_tool.json | 1 + .../testing/recipes/table_13x13_test.json | 26 ++++ 26 files changed, 666 insertions(+), 23 deletions(-) create mode 100644 src/main/java/com/blakebr0/extendedcrafting/block/LegendaryTableBlock.java create mode 100644 src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryTableScreen.java create mode 100644 src/main/java/com/blakebr0/extendedcrafting/compat/jei/category/table/LegendaryTableCategory.java create mode 100644 src/main/java/com/blakebr0/extendedcrafting/container/LegendaryTableContainer.java create mode 100644 src/main/java/com/blakebr0/extendedcrafting/tileentity/LegendaryTableTileEntity.java create mode 100644 src/main/resources/assets/extendedcrafting/blockstates/legendary_table.json create mode 100644 src/main/resources/assets/extendedcrafting/models/block/legendary_table.json create mode 100644 src/main/resources/assets/extendedcrafting/models/item/legendary_table.json create mode 100644 src/main/resources/assets/extendedcrafting/textures/block/legendary_table_top.png create mode 100644 src/main/resources/assets/extendedcrafting/textures/block/legendary_table_top.png.mcmeta create mode 100644 src/main/resources/assets/extendedcrafting/textures/gui/legendary_table.png create mode 100644 src/main/resources/assets/extendedcrafting/textures/jei/legendary_crafting.png create mode 100644 src/test/resources/datapacks/testing/data/testing/recipes/table_13x13_test.json diff --git a/src/main/java/com/blakebr0/extendedcrafting/block/LegendaryTableBlock.java b/src/main/java/com/blakebr0/extendedcrafting/block/LegendaryTableBlock.java new file mode 100644 index 00000000..452e562e --- /dev/null +++ b/src/main/java/com/blakebr0/extendedcrafting/block/LegendaryTableBlock.java @@ -0,0 +1,85 @@ +package com.blakebr0.extendedcrafting.block; + +import com.blakebr0.cucumber.block.BaseTileEntityBlock; +import com.blakebr0.cucumber.util.VoxelShapeBuilder; +import com.blakebr0.extendedcrafting.lib.ModTooltips; +import com.blakebr0.extendedcrafting.tileentity.LegendaryTableTileEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.Containers; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.NetworkHooks; + +import java.util.List; + +public class LegendaryTableBlock extends BaseTileEntityBlock { + public static final VoxelShape LEGENDARY_TABLE_SHAPE = VoxelShapeBuilder.builder() + .cuboid(2, 0, 2, 14, 2, 14) + .cuboid(3, 2, 3, 5, 10, 5) + .cuboid(11, 2, 11, 13, 10, 13) + .cuboid(11, 2, 3, 13, 10, 5) + .cuboid(3, 2, 11, 5, 10, 13) + .cuboid(0, 10, 0, 16, 16, 16) + .build(); + + public LegendaryTableBlock() { + super(SoundType.METAL, 5.0F, 10.0F, true); + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new LegendaryTableTileEntity(pos, state); + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult trace) { + if (!level.isClientSide()) { + var tile = level.getBlockEntity(pos); + + if (tile instanceof LegendaryTableTileEntity table) { + NetworkHooks.openScreen((ServerPlayer) player, table, pos); + } + } + + return InteractionResult.SUCCESS; + } + + @Override + public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) { + if (state.getBlock() != newState.getBlock()) { + var tile = level.getBlockEntity(pos); + + if (tile instanceof LegendaryTableTileEntity table) { + Containers.dropContents(level, pos, table.getInventory().getStacks()); + } + } + + super.onRemove(state, level, pos, newState, isMoving); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return LEGENDARY_TABLE_SHAPE; + } + + @OnlyIn(Dist.CLIENT) + @Override + public void appendHoverText(ItemStack stack, BlockGetter level, List tooltip, TooltipFlag flag) { + tooltip.add(ModTooltips.TIER.args(6).build()); + } +} diff --git a/src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryTableScreen.java b/src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryTableScreen.java new file mode 100644 index 00000000..c37d7eda --- /dev/null +++ b/src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryTableScreen.java @@ -0,0 +1,30 @@ +package com.blakebr0.extendedcrafting.client.screen; + +import com.blakebr0.cucumber.client.screen.BaseContainerScreen; +import com.blakebr0.extendedcrafting.ExtendedCrafting; +import com.blakebr0.extendedcrafting.container.LegendaryTableContainer; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; + +public class LegendaryTableScreen extends BaseContainerScreen { + public static final ResourceLocation BACKGROUND = new ResourceLocation(ExtendedCrafting.MOD_ID, "textures/gui/legendary_table.png"); + + public LegendaryTableScreen(LegendaryTableContainer container, Inventory inventory, Component title) { + super(container, inventory, title, BACKGROUND, 305, 350, 512, 512); + } + + @Override + protected void renderLabels(GuiGraphics gfx, int mouseX, int mouseY) { + var title = this.getTitle().getString(); + + gfx.drawString(this.font, title, 8, 6, 4210752, false); + gfx.drawString(this.font, this.playerInventoryTitle, 39, this.imageHeight - 94, 4210752, false); + } + + @Override + protected void renderBg(GuiGraphics gfx, float partialTicks, int mouseX, int mouseY) { + this.renderDefaultBg(gfx, partialTicks, mouseX, mouseY); + } +} diff --git a/src/main/java/com/blakebr0/extendedcrafting/compat/JadeCompat.java b/src/main/java/com/blakebr0/extendedcrafting/compat/JadeCompat.java index 3c714910..b73b5da9 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/compat/JadeCompat.java +++ b/src/main/java/com/blakebr0/extendedcrafting/compat/JadeCompat.java @@ -24,6 +24,7 @@ public class JadeCompat implements IWailaPlugin { private static final ResourceLocation ELITE_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "elite_table"); private static final ResourceLocation ULTIMATE_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "ultimate_table"); private static final ResourceLocation EPIC_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "epic_table"); + private static final ResourceLocation LEGENDARY_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "legendary_table"); private static final ResourceLocation BASIC_AUTO_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "basic_auto_table"); private static final ResourceLocation ADVANCED_AUTO_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "advanced_auto_table"); private static final ResourceLocation ELITE_AUTO_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "elite_auto_table"); @@ -117,7 +118,19 @@ public ResourceLocation getUid() { } }, EpicTableBlock.class); - registration.registerBlockComponent(new IBlockComponentProvider() { + registration.registerBlockComponent(new IBlockComponentProvider() { + @Override + public void appendTooltip(ITooltip tooltip, BlockAccessor accessor, IPluginConfig config) { + tooltip.add(ModTooltips.TIER.args(6).build()); + } + + @Override + public ResourceLocation getUid() { + return LEGENDARY_TABLE_PROVIDER; + } + }, LegendaryTableBlock.class); + + registration.registerBlockComponent(new IBlockComponentProvider() { @Override public void appendTooltip(ITooltip tooltip, BlockAccessor accessor, IPluginConfig config) { tooltip.add(ModTooltips.TIER.args(1).build()); diff --git a/src/main/java/com/blakebr0/extendedcrafting/compat/jei/JeiCompat.java b/src/main/java/com/blakebr0/extendedcrafting/compat/jei/JeiCompat.java index 4a616c1c..d2ed1eaf 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/compat/jei/JeiCompat.java +++ b/src/main/java/com/blakebr0/extendedcrafting/compat/jei/JeiCompat.java @@ -56,7 +56,8 @@ public void registerCategories(IRecipeCategoryRegistration registration) { new AdvancedTableCategory(helper), new EliteTableCategory(helper), new UltimateTableCategory(helper), - new EpicTableCategory(helper) + new EpicTableCategory(helper), + new LegendaryTableCategory(helper) ); } @@ -85,7 +86,7 @@ public void registerRecipes(IRecipeRegistration registration) { } if (ModConfigs.ENABLE_TABLES.get()) { - var recipes = Stream.of(1, 2, 3, 4, 5).collect(Collectors.toMap(tier -> tier, tier -> + var recipes = Stream.of(1, 2, 3, 4, 5, 6).collect(Collectors.toMap(tier -> tier, tier -> manager.byType(ModRecipeTypes.TABLE.get()).values() .stream() .filter(recipe -> tier == recipe.getTier()) @@ -97,6 +98,7 @@ public void registerRecipes(IRecipeRegistration registration) { registration.addRecipes(EliteTableCategory.RECIPE_TYPE, recipes.getOrDefault(3, new ArrayList<>())); registration.addRecipes(UltimateTableCategory.RECIPE_TYPE, recipes.getOrDefault(4, new ArrayList<>())); registration.addRecipes(EpicTableCategory.RECIPE_TYPE, recipes.getOrDefault(5, new ArrayList<>())); + registration.addRecipes(LegendaryTableCategory.RECIPE_TYPE, recipes.getOrDefault(6, new ArrayList<>())); } if (ModConfigs.ENABLE_COMPRESSOR.get()) { @@ -130,6 +132,7 @@ public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) { registration.addRecipeCatalyst(new ItemStack(ModBlocks.ELITE_TABLE.get()), EliteTableCategory.RECIPE_TYPE); registration.addRecipeCatalyst(new ItemStack(ModBlocks.ULTIMATE_TABLE.get()), UltimateTableCategory.RECIPE_TYPE); registration.addRecipeCatalyst(new ItemStack(ModBlocks.EPIC_TABLE.get()), EpicTableCategory.RECIPE_TYPE); + registration.addRecipeCatalyst(new ItemStack(ModBlocks.LEGENDARY_TABLE.get()), LegendaryTableCategory.RECIPE_TYPE); if (ModConfigs.TABLE_USE_VANILLA_RECIPES.get()) { registration.addRecipeCatalyst(new ItemStack(ModBlocks.BASIC_TABLE.get()), mezz.jei.api.constants.RecipeTypes.CRAFTING); @@ -181,6 +184,7 @@ public void registerRecipeTransferHandlers(IRecipeTransferRegistration registrat registration.addRecipeTransferHandler(EliteTableContainer.class, ModContainerTypes.ELITE_TABLE.get(), EliteTableCategory.RECIPE_TYPE, 1, 49, 50, 36); registration.addRecipeTransferHandler(UltimateTableContainer.class, ModContainerTypes.ULTIMATE_TABLE.get(), UltimateTableCategory.RECIPE_TYPE, 1, 81, 82, 36); registration.addRecipeTransferHandler(EpicTableContainer.class, ModContainerTypes.EPIC_TABLE.get(), EpicTableCategory.RECIPE_TYPE, 1, 121, 122, 36); + registration.addRecipeTransferHandler(LegendaryTableContainer.class, ModContainerTypes.LEGENDARY_TABLE.get(), LegendaryTableCategory.RECIPE_TYPE, 1, 169, 170, 36); if (ModConfigs.TABLE_USE_VANILLA_RECIPES.get()) { registration.addRecipeTransferHandler(BasicTableContainer.class, ModContainerTypes.BASIC_TABLE.get(), mezz.jei.api.constants.RecipeTypes.CRAFTING, 1, 9, 10, 36); @@ -234,7 +238,7 @@ public void registerGuiHandlers(IGuiHandlerRegistration registration) { registration.addRecipeClickArea(AdvancedAutoTableScreen.class, 121, 39, 21, 14, AdvancedTableCategory.RECIPE_TYPE); registration.addRecipeClickArea(EliteAutoTableScreen.class, 158, 72, 21, 14, EliteTableCategory.RECIPE_TYPE); registration.addRecipeClickArea(UltimateAutoTableScreen.class, 193, 90, 21, 14, UltimateTableCategory.RECIPE_TYPE); - registration.addRecipeClickArea(EpicAutoTableScreen.class, 237, 108, 21, 14, UltimateTableCategory.RECIPE_TYPE); + registration.addRecipeClickArea(EpicAutoTableScreen.class, 237, 108, 21, 14, EpicTableCategory.RECIPE_TYPE); } } diff --git a/src/main/java/com/blakebr0/extendedcrafting/compat/jei/category/table/EpicTableCategory.java b/src/main/java/com/blakebr0/extendedcrafting/compat/jei/category/table/EpicTableCategory.java index e7621e21..a6cbe667 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/compat/jei/category/table/EpicTableCategory.java +++ b/src/main/java/com/blakebr0/extendedcrafting/compat/jei/category/table/EpicTableCategory.java @@ -79,7 +79,8 @@ public void draw(ITableRecipe recipe, IRecipeSlotsView slots, GuiGraphics gfx, d matrix.popPose(); } - @Override + @SuppressWarnings("removal") + @Override public List getTooltipStrings(ITableRecipe recipe, IRecipeSlotsView slots, double mouseX, double mouseY) { var shapeless = recipe instanceof ShapelessTableRecipe; int sX = (shapeless ? 304 : 324) / 2, sY = 365 / 2; diff --git a/src/main/java/com/blakebr0/extendedcrafting/compat/jei/category/table/LegendaryTableCategory.java b/src/main/java/com/blakebr0/extendedcrafting/compat/jei/category/table/LegendaryTableCategory.java new file mode 100644 index 00000000..0f17e50e --- /dev/null +++ b/src/main/java/com/blakebr0/extendedcrafting/compat/jei/category/table/LegendaryTableCategory.java @@ -0,0 +1,141 @@ +package com.blakebr0.extendedcrafting.compat.jei.category.table; + +import com.blakebr0.cucumber.util.Localizable; +import com.blakebr0.extendedcrafting.ExtendedCrafting; +import com.blakebr0.extendedcrafting.api.crafting.ITableRecipe; +import com.blakebr0.extendedcrafting.compat.jei.JeiCompat; +import com.blakebr0.extendedcrafting.crafting.recipe.ShapedTableRecipe; +import com.blakebr0.extendedcrafting.crafting.recipe.ShapelessTableRecipe; +import com.blakebr0.extendedcrafting.init.ModBlocks; +import com.blakebr0.extendedcrafting.lib.ModTooltips; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.recipe.IFocusGroup; +import mezz.jei.api.recipe.RecipeIngredientRole; +import mezz.jei.api.recipe.RecipeType; +import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; + +import java.util.List; + +public class LegendaryTableCategory implements IRecipeCategory { + private static final ResourceLocation TEXTURE = new ResourceLocation(ExtendedCrafting.MOD_ID, "textures/jei/legendary_crafting.png"); + public static final RecipeType RECIPE_TYPE = RecipeType.create(ExtendedCrafting.MOD_ID, "legendary_crafting", ITableRecipe.class); + + private final IDrawable background; + private final IDrawable icon; + private final IDrawable shapeless; + private final IDrawable required; + + public LegendaryTableCategory(IGuiHelper helper) { + this.background = helper.drawableBuilder(TEXTURE, 0, 0, 234, 267).setTextureSize(292, 288).build(); + this.icon = helper.createDrawableIngredient(VanillaTypes.ITEM_STACK, new ItemStack(ModBlocks.LEGENDARY_TABLE.get())); + this.shapeless = helper.createDrawable(JeiCompat.ICONS, 17, 0, 15, 15); + this.required = helper.createDrawable(JeiCompat.ICONS, 0, 0, 15, 15); + } + + @Override + public RecipeType getRecipeType() { + return RECIPE_TYPE; + } + + @Override + public Component getTitle() { + return Localizable.of("jei.category.extendedcrafting.legendary_crafting").build(); + } + + @Override + public IDrawable getBackground(){ + return this.background; + } + + @Override + public IDrawable getIcon() { + return this.icon; + } + + @Override + public void draw(ITableRecipe recipe, IRecipeSlotsView slots, GuiGraphics gfx, double mouseX, double mouseY) { + var matrix = gfx.pose(); + + matrix.pushPose(); + matrix.scale(0.4F, 0.4F, 0.4F); + + var shapeless = recipe instanceof ShapelessTableRecipe; + + if (shapeless) this.shapeless.draw(gfx, 324, 401); + + if (recipe.hasRequiredTier()) + this.required.draw(gfx, shapeless ? 304 : 324, 401); + + matrix.popPose(); + } + + @SuppressWarnings("removal") + @Override + public List getTooltipStrings(ITableRecipe recipe, IRecipeSlotsView slots, double mouseX, double mouseY) { + var shapeless = recipe instanceof ShapelessTableRecipe; + float scale = 0.4F; + int sX = (int)((shapeless ? 304 : 324) * scale / 2), sY = (int)(401 * scale / 2); + int sX2 = (int)(324 * scale / 2); + + if (shapeless && mouseX > sX2 - 1 && mouseX < sX2 + 8 && mouseY > sY - 1 && mouseY < sY + 8) { + return List.of(ModTooltips.SHAPELESS.color(ChatFormatting.WHITE).build()); + } + if (recipe.hasRequiredTier() && mouseX > sX - 1 && mouseX < sX + 8 && mouseY > sY - 1 && mouseY < sY + 8) { + return List.of(ModTooltips.REQUIRES_TABLE.args(recipe.getTier()).color(ChatFormatting.WHITE).build()); + } + + return List.of(); + } + + @Override + public void setRecipe(IRecipeLayoutBuilder builder, ITableRecipe recipe, IFocusGroup focuses) { + var level = Minecraft.getInstance().level; + + assert level != null; + + var inputs = recipe.getIngredients(); + var output = recipe.getResultItem(level.registryAccess()); + + if (recipe instanceof ShapedTableRecipe shaped) { + int heightOffset = Math.floorDiv(13 - shaped.getHeight(), 2); + int widthOffset = Math.floorDiv(13 - shaped.getWidth(), 2); + int stackIndex = 0; + + for (int i = 0; i < 13; i++) { + for (int j = 0; j < 13; j++) { + var slot = builder.addSlot(RecipeIngredientRole.INPUT, j * 18 + 1, i * 18 + 1); + + if (i >= heightOffset && i < shaped.getHeight() + heightOffset && j >= widthOffset && j < shaped.getWidth() + widthOffset) { + slot.addIngredients(inputs.get(stackIndex++)); + } + } + } + } else if (recipe instanceof ShapelessTableRecipe) { + for (int i = 0; i < 13; i++) { + for (int j = 0; j < 13; j++) { + int index = j + (i * 13); + + if (index < inputs.size()) { + builder.addSlot(RecipeIngredientRole.INPUT, j * 18 + 1, i * 18 + 1).addIngredients(inputs.get(index)); + } + } + } + + builder.setShapeless(220, 262); + } + + builder.addSlot(RecipeIngredientRole.OUTPUT, 122, 246).addItemStack(output); + + builder.moveRecipeTransferButton(220, 255); + } +} diff --git a/src/main/java/com/blakebr0/extendedcrafting/container/LegendaryTableContainer.java b/src/main/java/com/blakebr0/extendedcrafting/container/LegendaryTableContainer.java new file mode 100644 index 00000000..f3a99058 --- /dev/null +++ b/src/main/java/com/blakebr0/extendedcrafting/container/LegendaryTableContainer.java @@ -0,0 +1,118 @@ +package com.blakebr0.extendedcrafting.container; + +import com.blakebr0.cucumber.container.BaseContainerMenu; +import com.blakebr0.cucumber.inventory.BaseItemStackHandler; +import com.blakebr0.extendedcrafting.container.inventory.ExtendedCraftingInventory; +import com.blakebr0.extendedcrafting.container.slot.TableOutputSlot; +import com.blakebr0.extendedcrafting.init.ModContainerTypes; +import com.blakebr0.extendedcrafting.init.ModRecipeTypes; +import com.blakebr0.extendedcrafting.tileentity.LegendaryTableTileEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.Container; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.inventory.ResultContainer; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; + +public class LegendaryTableContainer extends BaseContainerMenu { + private final Level level; + private final Container result; + + private LegendaryTableContainer(MenuType type, int id, Inventory playerInventory, FriendlyByteBuf buffer) { + this(type, id, playerInventory, LegendaryTableTileEntity.createInventoryHandler(), buffer.readBlockPos()); + } + + private LegendaryTableContainer(MenuType type, int id, Inventory playerInventory, BaseItemStackHandler inventory, BlockPos pos) { + super(type, id, pos); + this.level = playerInventory.player.level(); + this.result = new ResultContainer(); + + var matrix = new ExtendedCraftingInventory(this, inventory, 13); + + this.addSlot(new TableOutputSlot(this, matrix, this.result, 0, 278, 125)); + + int i, j; + for (i = 0; i < 13; i++) { + for (j = 0; j < 13; j++) { + this.addSlot(new Slot(matrix, j + i * 13, 8 + j * 18, 18 + i * 18)); + } + } + + for (i = 0; i < 3; i++) { + for (j = 0; j < 9; j++) { + this.addSlot(new Slot(playerInventory, j + i * 9 + 9, 44 + j * 18, 268 + i * 18)); + } + } + + for (j = 0; j < 9; j++) { + this.addSlot(new Slot(playerInventory, j, 44 + j * 18, 326)); + } + + this.slotsChanged(matrix); + } + + @Override + public void slotsChanged(Container matrix) { + var recipe = this.level.getRecipeManager().getRecipeFor(ModRecipeTypes.TABLE.get(), matrix, this.level); + + if (recipe.isPresent()) { + var result = recipe.get().assemble(matrix, this.level.registryAccess()); + this.result.setItem(0, result); + } else { + this.result.setItem(0, ItemStack.EMPTY); + } + + super.slotsChanged(matrix); + } + + @Override + public ItemStack quickMoveStack(Player player, int slotNumber) { + var itemstack = ItemStack.EMPTY; + var slot = this.slots.get(slotNumber); + + if (slot.hasItem()) { + var itemstack1 = slot.getItem(); + itemstack = itemstack1.copy(); + + if (slotNumber == 0) { + if (!this.moveItemStackTo(itemstack1, 170, 206, true)) { + return ItemStack.EMPTY; + } + + slot.onQuickCraft(itemstack1, itemstack); + } else if (slotNumber >= 170 && slotNumber < 206) { + if (!this.moveItemStackTo(itemstack1, 1, 170, false)) { + return ItemStack.EMPTY; + } + } else if (!this.moveItemStackTo(itemstack1, 170, 206, false)) { + return ItemStack.EMPTY; + } + + if (itemstack1.isEmpty()) { + slot.set(ItemStack.EMPTY); + } else { + slot.setChanged(); + } + + if (itemstack1.getCount() == itemstack.getCount()) { + return ItemStack.EMPTY; + } + + slot.onTake(player, itemstack1); + } + + return itemstack; + } + + public static LegendaryTableContainer create(int windowId, Inventory playerInventory, FriendlyByteBuf buffer) { + return new LegendaryTableContainer(ModContainerTypes.LEGENDARY_TABLE.get(), windowId, playerInventory, buffer); + } + + public static LegendaryTableContainer create(int windowId, Inventory playerInventory, BaseItemStackHandler inventory, BlockPos pos) { + return new LegendaryTableContainer(ModContainerTypes.LEGENDARY_TABLE.get(), windowId, playerInventory, inventory, pos); + } +} diff --git a/src/main/java/com/blakebr0/extendedcrafting/crafting/recipe/ShapedTableRecipe.java b/src/main/java/com/blakebr0/extendedcrafting/crafting/recipe/ShapedTableRecipe.java index c2f6eefd..22bdc3b4 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/crafting/recipe/ShapedTableRecipe.java +++ b/src/main/java/com/blakebr0/extendedcrafting/crafting/recipe/ShapedTableRecipe.java @@ -272,7 +272,8 @@ public int getTier() { : this.width < 6 && this.height < 6 ? 2 : this.width < 8 && this.height < 8 ? 3 : this.width < 10 && this.height < 10 ? 4 - : 5; + : this.width < 12 && this.height < 12 ? 5 + : 6; } /** @@ -286,7 +287,8 @@ private int getTierFromGridSize(IItemHandler inv) { : size < 26 ? 2 : size < 50 ? 3 : size < 82 ? 4 - : 5; + : size < 122 ? 5 + : 6; } /** diff --git a/src/main/java/com/blakebr0/extendedcrafting/crafting/recipe/ShapelessTableRecipe.java b/src/main/java/com/blakebr0/extendedcrafting/crafting/recipe/ShapelessTableRecipe.java index f29a68c5..8bb174a9 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/crafting/recipe/ShapelessTableRecipe.java +++ b/src/main/java/com/blakebr0/extendedcrafting/crafting/recipe/ShapelessTableRecipe.java @@ -229,7 +229,8 @@ private static int getTierFromSize(int size) { : size < 26 ? 2 : size < 50 ? 3 : size < 82 ? 4 - : 5; + : size < 122 ? 5 + : 6; } /** diff --git a/src/main/java/com/blakebr0/extendedcrafting/init/ModBlocks.java b/src/main/java/com/blakebr0/extendedcrafting/init/ModBlocks.java index fb5607eb..2a37b86c 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/init/ModBlocks.java +++ b/src/main/java/com/blakebr0/extendedcrafting/init/ModBlocks.java @@ -20,6 +20,7 @@ import com.blakebr0.extendedcrafting.block.FluxAlternatorBlock; import com.blakebr0.extendedcrafting.block.FluxCrafterBlock; import com.blakebr0.extendedcrafting.block.FrameBlock; +import com.blakebr0.extendedcrafting.block.LegendaryTableBlock; import com.blakebr0.extendedcrafting.block.PedestalBlock; import com.blakebr0.extendedcrafting.block.TheUltimateBlock; import com.blakebr0.extendedcrafting.block.UltimateAutoTableBlock; @@ -61,6 +62,7 @@ public final class ModBlocks { public static final RegistryObject ELITE_TABLE = register("elite_table", EliteTableBlock::new); public static final RegistryObject ULTIMATE_TABLE = register("ultimate_table", UltimateTableBlock::new); public static final RegistryObject EPIC_TABLE = register("epic_table", EpicTableBlock::new); + public static final RegistryObject LEGENDARY_TABLE = register("legendary_table", LegendaryTableBlock::new); public static final RegistryObject BASIC_AUTO_TABLE = register("basic_auto_table", BasicAutoTableBlock::new); public static final RegistryObject ADVANCED_AUTO_TABLE = register("advanced_auto_table", AdvancedAutoTableBlock::new); public static final RegistryObject ELITE_AUTO_TABLE = register("elite_auto_table", EliteAutoTableBlock::new); diff --git a/src/main/java/com/blakebr0/extendedcrafting/init/ModContainerTypes.java b/src/main/java/com/blakebr0/extendedcrafting/init/ModContainerTypes.java index f1c528d1..515f3ceb 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/init/ModContainerTypes.java +++ b/src/main/java/com/blakebr0/extendedcrafting/init/ModContainerTypes.java @@ -25,6 +25,7 @@ public final class ModContainerTypes { public static final RegistryObject> ELITE_TABLE = register("elite_table", () -> new MenuType<>((IContainerFactory) EliteTableContainer::create, FeatureFlagSet.of())); public static final RegistryObject> ULTIMATE_TABLE = register("ultimate_table", () -> new MenuType<>((IContainerFactory) UltimateTableContainer::create, FeatureFlagSet.of())); public static final RegistryObject> EPIC_TABLE = register("epic_table", () -> new MenuType<>((IContainerFactory) EpicTableContainer::create, FeatureFlagSet.of())); + public static final RegistryObject> LEGENDARY_TABLE = register("legendary_table", () -> new MenuType<>((IContainerFactory) LegendaryTableContainer::create, FeatureFlagSet.of())); public static final RegistryObject> BASIC_AUTO_TABLE = register("basic_auto_table", () -> new MenuType<>((IContainerFactory) BasicAutoTableContainer::create, FeatureFlagSet.of())); public static final RegistryObject> ADVANCED_AUTO_TABLE = register("advanced_auto_table", () -> new MenuType<>((IContainerFactory) AdvancedAutoTableContainer::create, FeatureFlagSet.of())); public static final RegistryObject> ELITE_AUTO_TABLE = register("elite_auto_table", () -> new MenuType<>((IContainerFactory) EliteAutoTableContainer::create, FeatureFlagSet.of())); @@ -45,6 +46,7 @@ public static void onClientSetup() { ELITE_TABLE.ifPresent(container -> MenuScreens.register(container, EliteTableScreen::new)); ULTIMATE_TABLE.ifPresent(container -> MenuScreens.register(container, UltimateTableScreen::new)); EPIC_TABLE.ifPresent(container -> MenuScreens.register(container, EpicTableScreen::new)); + LEGENDARY_TABLE.ifPresent(container -> MenuScreens.register(container, LegendaryTableScreen::new)); BASIC_AUTO_TABLE.ifPresent(container -> MenuScreens.register(container, BasicAutoTableScreen::new)); ADVANCED_AUTO_TABLE.ifPresent(container -> MenuScreens.register(container, AdvancedAutoTableScreen::new)); ELITE_AUTO_TABLE.ifPresent(container -> MenuScreens.register(container, EliteAutoTableScreen::new)); diff --git a/src/main/java/com/blakebr0/extendedcrafting/init/ModCreativeModeTabs.java b/src/main/java/com/blakebr0/extendedcrafting/init/ModCreativeModeTabs.java index b5f31e45..9db0eacf 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/init/ModCreativeModeTabs.java +++ b/src/main/java/com/blakebr0/extendedcrafting/init/ModCreativeModeTabs.java @@ -43,6 +43,7 @@ public final class ModCreativeModeTabs { output.accept(ModBlocks.ELITE_TABLE, ModFeatureFlags.TABLES); output.accept(ModBlocks.ULTIMATE_TABLE, ModFeatureFlags.TABLES); output.accept(ModBlocks.EPIC_TABLE, ModFeatureFlags.TABLES); + output.accept(ModBlocks.LEGENDARY_TABLE, ModFeatureFlags.TABLES); output.accept(ModBlocks.BASIC_AUTO_TABLE, ModFeatureFlags.TABLES, ModFeatureFlags.AUTO_TABLES); output.accept(ModBlocks.ADVANCED_AUTO_TABLE, ModFeatureFlags.TABLES, ModFeatureFlags.AUTO_TABLES); output.accept(ModBlocks.ELITE_AUTO_TABLE, ModFeatureFlags.TABLES, ModFeatureFlags.AUTO_TABLES); diff --git a/src/main/java/com/blakebr0/extendedcrafting/init/ModTileEntities.java b/src/main/java/com/blakebr0/extendedcrafting/init/ModTileEntities.java index c2e122ef..5b0fed8a 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/init/ModTileEntities.java +++ b/src/main/java/com/blakebr0/extendedcrafting/init/ModTileEntities.java @@ -17,6 +17,7 @@ import com.blakebr0.extendedcrafting.tileentity.EpicTableTileEntity; import com.blakebr0.extendedcrafting.tileentity.FluxAlternatorTileEntity; import com.blakebr0.extendedcrafting.tileentity.FluxCrafterTileEntity; +import com.blakebr0.extendedcrafting.tileentity.LegendaryTableTileEntity; import com.blakebr0.extendedcrafting.tileentity.PedestalTileEntity; import com.blakebr0.extendedcrafting.tileentity.TheUltimateBlockTileEntity; import com.blakebr0.extendedcrafting.tileentity.UltimateTableTileEntity; @@ -43,7 +44,8 @@ public final class ModTileEntities { public static final RegistryObject> ELITE_TABLE = register("elite_table", EliteTableTileEntity::new, () -> new Block[] { ModBlocks.ELITE_TABLE.get() }); public static final RegistryObject> ULTIMATE_TABLE = register("ultimate_table", UltimateTableTileEntity::new, () -> new Block[] { ModBlocks.ULTIMATE_TABLE.get() }); public static final RegistryObject> EPIC_TABLE = register("epic_table", EpicTableTileEntity::new, () -> new Block[] { ModBlocks.EPIC_TABLE.get() }); - public static final RegistryObject> BASIC_AUTO_TABLE = register("basic_auto_table", AutoTableTileEntity.Basic::new, () -> new Block[] { ModBlocks.BASIC_AUTO_TABLE.get() }); + public static final RegistryObject> LEGENDARY_TABLE = register("legendary_table", LegendaryTableTileEntity::new, () -> new Block[] { ModBlocks.LEGENDARY_TABLE.get() }); + public static final RegistryObject> BASIC_AUTO_TABLE = register("basic_auto_table", AutoTableTileEntity.Basic::new, () -> new Block[] { ModBlocks.BASIC_AUTO_TABLE.get() }); public static final RegistryObject> ADVANCED_AUTO_TABLE = register("advanced_auto_table", AutoTableTileEntity.Advanced::new, () -> new Block[] { ModBlocks.ADVANCED_AUTO_TABLE.get() }); public static final RegistryObject> ELITE_AUTO_TABLE = register("elite_auto_table", AutoTableTileEntity.Elite::new, () -> new Block[] { ModBlocks.ELITE_AUTO_TABLE.get() }); public static final RegistryObject> ULTIMATE_AUTO_TABLE = register("ultimate_auto_table", AutoTableTileEntity.Ultimate::new, () -> new Block[] { ModBlocks.ULTIMATE_AUTO_TABLE.get() }); diff --git a/src/main/java/com/blakebr0/extendedcrafting/item/RecipeMakerItem.java b/src/main/java/com/blakebr0/extendedcrafting/item/RecipeMakerItem.java index 23093455..9a301590 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/item/RecipeMakerItem.java +++ b/src/main/java/com/blakebr0/extendedcrafting/item/RecipeMakerItem.java @@ -16,6 +16,7 @@ import com.blakebr0.extendedcrafting.tileentity.EnderCrafterTileEntity; import com.blakebr0.extendedcrafting.tileentity.FluxCrafterTileEntity; import com.blakebr0.extendedcrafting.tileentity.UltimateTableTileEntity; +import com.blakebr0.extendedcrafting.tileentity.LegendaryTableTileEntity; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; @@ -93,13 +94,13 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { String string; if ("CraftTweaker".equals(type)) { string = isShapeless(stack) - ? makeShapelessCraftTweakerTableRecipe(inventory, block, outputStack) - : makeShapedCraftTweakerTableRecipe(inventory, block, outputStack); + ? makeShapelessCraftTweakerTableRecipe(inventory, block, outputStack, tile) + : makeShapedCraftTweakerTableRecipe(inventory, block, outputStack, tile); } else if ("KubeJS".equals(type)) { String json = isShapeless(stack) - ? makeShapelessDatapackTableRecipe(inventory, block, outputStack) - : makeShapedDatapackTableRecipe(inventory, block, outputStack); + ? makeShapelessDatapackTableRecipe(inventory, block, outputStack, tile) + : makeShapedDatapackTableRecipe(inventory, block, outputStack, tile); if ("TOO MANY ITEMS".equals(json)) { player.sendSystemMessage(Localizable.of("message.extendedcrafting.max_unique_items_exceeded").args(KEYS.length).build()); @@ -116,8 +117,8 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { } else { string = isShapeless(stack) - ? makeShapelessDatapackTableRecipe(inventory, block, outputStack) - : makeShapedDatapackTableRecipe(inventory, block, outputStack); + ? makeShapelessDatapackTableRecipe(inventory, block, outputStack, tile) + : makeShapedDatapackTableRecipe(inventory, block, outputStack, tile); if ("TOO MANY ITEMS".equals(string)) { player.sendSystemMessage(Localizable.of("message.extendedcrafting.max_unique_items_exceeded").args(KEYS.length).build()); @@ -209,12 +210,12 @@ private static void setClipboard(String string) { } // Create a shaped CraftTweaker recipe for a Table, Flux Crafter or Ender Crafter - private static String makeShapedCraftTweakerTableRecipe(IItemHandler inventory, String type, ItemStack output) { + private static String makeShapedCraftTweakerTableRecipe(IItemHandler inventory, String type, ItemStack output, BlockEntity tile) { var string = new StringBuilder(); var uuid = UUID.randomUUID(); string.append("mods.extendedcrafting.").append(type).append(".addShaped(\"").append(uuid).append("\", "); - if ("TableCrafting".equals(type)) string.append("0, "); + if ("TableCrafting".equals(type)) string.append(getTableTier(tile)).append(", "); var outputId = ForgeRegistries.ITEMS.getKey(output.getItem()); var outputItem = output.isEmpty() ? "" : (outputId == null ? "" : ""); @@ -288,12 +289,12 @@ private static String makeShapedCraftTweakerTableRecipe(IItemHandler inventory, } // Create a shapeless CraftTweaker recipe for a Table, Flux Crafter or Ender Crafter - private static String makeShapelessCraftTweakerTableRecipe(IItemHandler inventory, String type, ItemStack output) { + private static String makeShapelessCraftTweakerTableRecipe(IItemHandler inventory, String type, ItemStack output, BlockEntity tile) { var string = new StringBuilder(); var uuid = UUID.randomUUID(); string.append("mods.extendedcrafting.").append(type).append(".addShapeless(\"").append(uuid).append("\", "); - if ("TableCrafting".equals(type)) string.append("0, "); + if ("TableCrafting".equals(type)) string.append(getTableTier(tile)).append(", "); var outputId = ForgeRegistries.ITEMS.getKey(output.getItem()); var outputItem = output.isEmpty() ? "" : (outputId == null ? "item:minecraft:air" : "item:" + outputId); @@ -407,7 +408,7 @@ private static String makeCraftTweakerCombinationRecipe(CraftingCoreTileEntity t } // Create a shaped Datapack recipe for a Table, Flux Crafter or Ender Crafter - private static String makeShapedDatapackTableRecipe(IItemHandler inventory, String type, ItemStack output) { + private static String makeShapedDatapackTableRecipe(IItemHandler inventory, String type, ItemStack output, BlockEntity tile) { var object = new JsonObject(); var tableType = TableType.fromType(type); @@ -490,7 +491,7 @@ private static String makeShapedDatapackTableRecipe(IItemHandler inventory, Stri } // Create a shapeless Datapack recipe for a Table Flux Crafter or Ender Crafter - private static String makeShapelessDatapackTableRecipe(IItemHandler inventory, String type, ItemStack output) { + private static String makeShapelessDatapackTableRecipe(IItemHandler inventory, String type, ItemStack output, BlockEntity tile) { var object = new JsonObject(); var tableType = TableType.fromType(type); @@ -501,6 +502,11 @@ private static String makeShapelessDatapackTableRecipe(IItemHandler inventory, S object.addProperty("powerRate", ModConfigs.FLUX_CRAFTER_POWER_RATE.get()); } + if ("TableCrafting".equals(type)) { + int tier = getTableTier(tile); + object.addProperty("tier", tier); + } + var ingredients = new JsonArray(); int slots = getGridSlots(inventory); @@ -593,8 +599,9 @@ private static boolean isTable(BlockEntity tile) { return tile instanceof BasicTableTileEntity || tile instanceof AdvancedTableTileEntity || tile instanceof EliteTableTileEntity || - tile instanceof EpicTableTileEntity || tile instanceof UltimateTableTileEntity || + tile instanceof EpicTableTileEntity || + tile instanceof LegendaryTableTileEntity || tile instanceof AutoTableTileEntity || tile instanceof EnderCrafterTileEntity || tile instanceof FluxCrafterTileEntity; @@ -611,7 +618,8 @@ private static boolean isShapeless(ItemStack stack) { private static int getGridSlots(IItemHandler inventory) { int slots = inventory.getSlots(); - if (slots >= 121) return 121; + if (slots >= 169) return 169; + else if (slots >= 121) return 121; else if (slots >= 81) return 81; else if (slots >= 49) return 49; else if (slots >= 25) return 25; @@ -628,6 +636,16 @@ private static boolean hasItems(IItemHandler inventory, int gridSlots) { return false; } + private static int getTableTier(BlockEntity tile) { + if (tile instanceof BasicTableTileEntity) return 1; + if (tile instanceof AdvancedTableTileEntity) return 2; + if (tile instanceof EliteTableTileEntity) return 3; + if (tile instanceof UltimateTableTileEntity) return 4; + if (tile instanceof EpicTableTileEntity) return 5; + if (tile instanceof LegendaryTableTileEntity) return 6; + return 0; // Fallback + } + private enum TableType { TABLE("TableCrafting", "extendedcrafting:shaped_table", "extendedcrafting:shapeless_table"), ENDER_CRAFTER("EnderCrafting", "extendedcrafting:shaped_ender_crafter", "extendedcrafting:shapeless_ender_crafter"), diff --git a/src/main/java/com/blakebr0/extendedcrafting/tileentity/LegendaryTableTileEntity.java b/src/main/java/com/blakebr0/extendedcrafting/tileentity/LegendaryTableTileEntity.java new file mode 100644 index 00000000..8aaa24e9 --- /dev/null +++ b/src/main/java/com/blakebr0/extendedcrafting/tileentity/LegendaryTableTileEntity.java @@ -0,0 +1,55 @@ +package com.blakebr0.extendedcrafting.tileentity; + +import com.blakebr0.cucumber.inventory.BaseItemStackHandler; +import com.blakebr0.cucumber.tileentity.BaseInventoryTileEntity; +import com.blakebr0.cucumber.util.Localizable; +import com.blakebr0.extendedcrafting.container.LegendaryTableContainer; +import com.blakebr0.extendedcrafting.init.ModTileEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.util.LazyOptional; + +public class LegendaryTableTileEntity extends BaseInventoryTileEntity implements MenuProvider { + private final BaseItemStackHandler inventory; + + public LegendaryTableTileEntity(BlockPos pos, BlockState state) { + super(ModTileEntities.LEGENDARY_TABLE.get(), pos, state); + this.inventory = createInventoryHandler(this::setChangedAndDispatch); + } + + @Override + public BaseItemStackHandler getInventory() { + return this.inventory; + } + + @Override + public Component getDisplayName() { + return Localizable.of("container.extendedcrafting.legendary_table").build(); + } + + @Override + public AbstractContainerMenu createMenu(int windowId, Inventory playerInventory, Player player) { + return LegendaryTableContainer.create(windowId, playerInventory, this.inventory, this.getBlockPos()); + } + + @Override + public LazyOptional getCapability(Capability cap, Direction side) { + return !this.remove && cap == ForgeCapabilities.ITEM_HANDLER ? LazyOptional.empty() : super.getCapability(cap, side); + } + + public static BaseItemStackHandler createInventoryHandler() { + return createInventoryHandler(null); + } + + public static BaseItemStackHandler createInventoryHandler(Runnable onContentsChanged) { + return BaseItemStackHandler.create(169, onContentsChanged); + } +} diff --git a/src/main/resources/assets/extendedcrafting/blockstates/legendary_table.json b/src/main/resources/assets/extendedcrafting/blockstates/legendary_table.json new file mode 100644 index 00000000..28a32c21 --- /dev/null +++ b/src/main/resources/assets/extendedcrafting/blockstates/legendary_table.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "extendedcrafting:block/legendary_table" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/extendedcrafting/lang/en_us.json b/src/main/resources/assets/extendedcrafting/lang/en_us.json index 85e030f8..00f74713 100644 --- a/src/main/resources/assets/extendedcrafting/lang/en_us.json +++ b/src/main/resources/assets/extendedcrafting/lang/en_us.json @@ -19,6 +19,7 @@ "block.extendedcrafting.advanced_table": "Advanced Crafting Table", "block.extendedcrafting.elite_table": "Elite Crafting Table", "block.extendedcrafting.ultimate_table": "Ultimate Crafting Table", + "block.extendedcrafting.legendary_table": "Legendary Crafting Table", "block.extendedcrafting.epic_table": "Epic Crafting Table", "block.extendedcrafting.basic_auto_table": "Basic Auto Crafting Table", "block.extendedcrafting.advanced_auto_table": "Advanced Auto Crafting Table", @@ -83,6 +84,7 @@ "container.extendedcrafting.advanced_table": "Advanced Crafting", "container.extendedcrafting.elite_table": "Elite Crafting", "container.extendedcrafting.ultimate_table": "Ultimate Crafting", + "container.extendedcrafting.legendary_table": "Legendary Crafting", "container.extendedcrafting.epic_table": "Epic Crafting", "container.extendedcrafting.compressor": "Quantum Compressor", "container.extendedcrafting.ender_crafter": "Ender Crafting", @@ -132,6 +134,7 @@ "jei.category.extendedcrafting.advanced_crafting": "Advanced Crafting", "jei.category.extendedcrafting.elite_crafting": "Elite Crafting", "jei.category.extendedcrafting.ultimate_crafting": "Ultimate Crafting", + "jei.category.extendedcrafting.legendary_crafting": "Legendary Crafting", "jei.category.extendedcrafting.epic_crafting": "Epic Crafting", "jei.category.extendedcrafting.compressor": "Quantum Compression", "jei.category.extendedcrafting.ender_crafting": "Ender Crafting", @@ -143,6 +146,7 @@ "config.jade.plugin_extendedcrafting.advanced_table": "Advanced Table info", "config.jade.plugin_extendedcrafting.elite_table": "Elite Table info", "config.jade.plugin_extendedcrafting.ultimate_table": "Ultimate Table info", + "config.jade.plugin_extendedcrafting.legendary_table": "Legendary Table info", "config.jade.plugin_extendedcrafting.epic_table": "Epic Table info", "config.jade.plugin_extendedcrafting.basic_auto_table": "Basic Auto Table info", "config.jade.plugin_extendedcrafting.advanced_auto_table": "Advanced Auto Table info", diff --git a/src/main/resources/assets/extendedcrafting/models/block/legendary_table.json b/src/main/resources/assets/extendedcrafting/models/block/legendary_table.json new file mode 100644 index 00000000..b239d992 --- /dev/null +++ b/src/main/resources/assets/extendedcrafting/models/block/legendary_table.json @@ -0,0 +1,88 @@ +{ + "textures": { + "0": "extendedcrafting:block/black_iron_block", + "1": "extendedcrafting:block/legendary_table_top", + "2": "extendedcrafting:block/table_side", + "particle": "extendedcrafting:block/black_iron_block" + }, + "elements": [ + { + "name": "Cube", + "from": [2, 0, 2], + "to": [14, 2, 14], + "faces": { + "north": {"uv": [2, 2, 14, 4], "texture": "#0"}, + "east": {"uv": [2, 2, 14, 4], "texture": "#0"}, + "south": {"uv": [2, 2, 14, 4], "texture": "#0"}, + "west": {"uv": [2, 2, 14, 4], "texture": "#0"}, + "up": {"uv": [2, 2, 14, 14], "texture": "#0"}, + "down": {"uv": [2, 2, 14, 14], "texture": "#0"} + } + }, + { + "name": "Cube", + "from": [3, 2, 3], + "to": [5, 10, 5], + "faces": { + "north": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "east": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "south": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "west": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "up": {"uv": [1, 1, 3, 3], "texture": "#0"}, + "down": {"uv": [1, 1, 3, 3], "texture": "#0"} + } + }, + { + "name": "Cube", + "from": [11, 2, 11], + "to": [13, 10, 13], + "faces": { + "north": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "east": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "south": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "west": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "up": {"uv": [1, 1, 3, 3], "texture": "#0"}, + "down": {"uv": [1, 1, 3, 3], "texture": "#0"} + } + }, + { + "name": "Cube", + "from": [11, 2, 3], + "to": [13, 10, 5], + "faces": { + "north": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "east": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "south": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "west": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "up": {"uv": [1, 1, 3, 3], "texture": "#0"}, + "down": {"uv": [1, 1, 3, 3], "texture": "#0"} + } + }, + { + "name": "Cube", + "from": [3, 2, 11], + "to": [5, 10, 13], + "faces": { + "north": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "east": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "south": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "west": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "up": {"uv": [1, 1, 3, 3], "texture": "#0"}, + "down": {"uv": [1, 1, 3, 3], "texture": "#0"} + } + }, + { + "name": "Cube", + "from": [0, 10, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 6], "texture": "#2"}, + "east": {"uv": [0, 0, 16, 6], "texture": "#2"}, + "south": {"uv": [0, 0, 16, 6], "texture": "#2"}, + "west": {"uv": [0, 0, 16, 6], "texture": "#2"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/extendedcrafting/models/item/legendary_table.json b/src/main/resources/assets/extendedcrafting/models/item/legendary_table.json new file mode 100644 index 00000000..34576bda --- /dev/null +++ b/src/main/resources/assets/extendedcrafting/models/item/legendary_table.json @@ -0,0 +1,35 @@ +{ + "parent": "extendedcrafting:block/legendary_table", + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.25, 0.25, 0.25 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.5, 0.5, 0.5 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/extendedcrafting/textures/block/legendary_table_top.png b/src/main/resources/assets/extendedcrafting/textures/block/legendary_table_top.png new file mode 100644 index 0000000000000000000000000000000000000000..e5f5dbe21ffba2ce211b5fb14051d1c7a1b196fd GIT binary patch literal 410 zcmV;L0cHM)P)4l)-AkKoEvMA%}Pgn~QhP6(k7u0R&4RB3OFz+(+so z^dt&WK@8+n!3XeW9zqe(WfAQ`l*PD`#!5^7(}bPfnJ>fqIj>yaFP2LHgyV2c$GoG2 zl*lxFpoH&lL09LEj)ygJGDX|vwIqUTrfY-?+)y20;^GYLH2Zxzz7N35aL9YD20%NC5JCW8=krMfJ=Xt&NjX=D{X?mg2_c@% zk_dX+9p6VOMLUYpBj|1a4uWY4I!>l3m~d`JxVQ`F)lAi=)9G!y0313n9ZD$yuxP?e%B`0RSI^0Z;Wh0HZLxqaS=1 z;o>ssZ8w4dr4*wuOpkDrAN&Y{X$m^d{rn&c!awkXFF=VP2OfzwA^-pY07*qoM6N<$ Eg5u<@(f|Me literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extendedcrafting/textures/block/legendary_table_top.png.mcmeta b/src/main/resources/assets/extendedcrafting/textures/block/legendary_table_top.png.mcmeta new file mode 100644 index 00000000..0df89519 --- /dev/null +++ b/src/main/resources/assets/extendedcrafting/textures/block/legendary_table_top.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 40, + "interpolate": true + } +} \ No newline at end of file diff --git a/src/main/resources/assets/extendedcrafting/textures/gui/legendary_table.png b/src/main/resources/assets/extendedcrafting/textures/gui/legendary_table.png new file mode 100644 index 0000000000000000000000000000000000000000..ee28a774e68e1048a2cae7366bbb9c58cb2e7b9d GIT binary patch literal 3557 zcmd^CeNYo;8h?X9BZ`&IIi%9oy>)ul!(=z%tJxAjNf1t>7CFH?v{^O_M3ZdX-IxFZ zDb9%wTI;la-5kBUI^*4pA5ePji5~gOuxJ;6vks{Q4pny5CeU838}QU0{`3} zw=>yyKc4sZJkRg>Jdty#4^G-Q4V03b9iRhJGx5WEZmGGQs2pL_x?GwrGCIRNII z7k-lck#iydkoKB0viK~+N`hjnO47vS&`Oup4y^%*PjuNyYBS9vIdq=crbTa^@t}y= zq(w7h47kCbOy`?Z3t4(?;i?R(a5JSbp@|7dyo-PUR+=Xfm(^n92$vQWaS3=WJjPH& zG~qXE(WQbzB+IY{NoH6Y(I{043dhw*oJN@wN5w`{)DlFEtD`YI4pYS{@HiqyLqy|< z|3INT)|5-6>r(vA;GGuD=XpDUVNR!0>5Nh`Y#yf4XfznE#?)#Bv`}ybHlB1TY}~>z z1Rc#$tl7?+85<%Xk~xfn*P<}g(HyMy0IZGk^8^{gT%;XSDRChu(a=N%?CcKKB04uw z7;T}gw2kMWttwz^&u4gs%V&N9I`Dd&1IVqx5b*KHSgh873y#-sg=zQ+d89R$QDCRB zbedxvEJf?L!Y~&K+1QC>mL_?I&0rYISf$pCg^Z|Ul`7=1|Pis+F zwHSp;t-xb5aGbzZM6@Ono^gEC)WDd`xdlHmRjG)WI3ntWai&l+CXy!~Yiy#3T!yuh zFk!Qm%%d^8Ee}NkG!n^-g<+v%7+sVYg~33i**KoGQFNM4i^80hX0wT);1QK$idDo> zbew|HL{o|!l_>|RFDfPqr^pv#)zsL29YZ;U%8u+Ng)(l&Vv`iUCXgEOvC z#VYW3#9Dfb|H@)UL=_MuC8%4AQbJj26Y76#o-zZYu+DrMg8odoN6k1Umv@pZy)+N9 z^;kJ!FnCPp!_hpjAEqe2d#Go}%;6vqE(0S7-UNmiZG)4Gg(E6yONY&$>R#LQ>}=`LmL787jOByxr;$y+C?5D7whLWQQNFYC=+kv7 zkVx_9kj8SM426X{yPt%8WeLntAd1?Us4b ztxwd;sr3iSOO7};RDE%5|7X3CUu~WhF({KEzX9MaDVW64J*;)p>pyoCe>+f9Q}~B@ z)h*=iEoWLU$V;_HI?zL(UEEN7t-{#VU$A>iZT7vAUuK+=<;GmStjDi>5Cz=NOTf-2 zC$)q(9MAo|B%(HeqQ{T@XPvUFA>~a8(9Hx%Z-B`xB2LJa4+1F4vh^Rm$A-<0y)%0< zH28UgdBJGvQvxV#*oT|m+h1X<-k10Ig8jIrB2G~3_b3&{b?=SWVnhF2S1 zyPr6EXa}gLUcGo^f%?$)#9-+}dc;q8r+^h{Tqvrm_}V9R%Cg%gk^DQf?|)Uh@r@yB zU|#jUfC9cJ;;G51UTBj?(is`vU|iTd*%=^+UyLSrv?wBqNM)^TdPKqW2~Df<;`bNi zh&Q~!-Nl9NUexcG>ZCgSQ{Q&HnI|frtz6Q?p4)gL;p1*se8TCVl6QU6@C#W7I{*5z z=j4sMh3^g}MRx6I51!Hl+%!@Inre>U*c3Am;#yj+y3n&Vg1YIbY1CK$>$1LD@$asF z`E|DTrf=EbuZ%2mcc58DDBrWllxV)^nb9}&#qr}MCBbJANb#F*vtgE5;SH`DUulqB zSr#me!dX+AT|ypJr5|1H?#is6_2mdE?}IHDe|WDu@I|;+D%&^r3MGq?Z% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/extendedcrafting/textures/jei/legendary_crafting.png b/src/main/resources/assets/extendedcrafting/textures/jei/legendary_crafting.png new file mode 100644 index 0000000000000000000000000000000000000000..9c0ffd164d05ea39d39a98003153eee7d5fff29e GIT binary patch literal 3075 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 AZ2$lO literal 0 HcmV?d00001 diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json index 1f6befbc..917fd418 100644 --- a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -22,6 +22,7 @@ "extendedcrafting:ender_crafter", "extendedcrafting:epic_auto_table", "extendedcrafting:epic_table", + "extendedcrafting:legendary_table", "extendedcrafting:auto_ender_crafter", "extendedcrafting:flux_alternator", "extendedcrafting:flux_crafter", diff --git a/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json b/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json index 03447046..8e4fe7b3 100644 --- a/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json +++ b/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json @@ -14,6 +14,7 @@ "extendedcrafting:elite_table", "extendedcrafting:ultimate_table", "extendedcrafting:epic_table", + "extendedcrafting:legendary_table", "extendedcrafting:basic_auto_table", "extendedcrafting:advanced_auto_table", "extendedcrafting:elite_auto_table", diff --git a/src/test/resources/datapacks/testing/data/testing/recipes/table_13x13_test.json b/src/test/resources/datapacks/testing/data/testing/recipes/table_13x13_test.json new file mode 100644 index 00000000..48d37fa0 --- /dev/null +++ b/src/test/resources/datapacks/testing/data/testing/recipes/table_13x13_test.json @@ -0,0 +1,26 @@ +{ + "type": "extendedcrafting:shaped_table", + "pattern": [ + "XXXXXXXXXXXXX", + "X X", + "X X", + "X X", + "X X", + "X X", + "X X", + "X X", + "X X", + "X X", + "X X", + "X X", + "XXXXXXXXXXXXX" + ], + "key": { + "X": { + "tag": "forge:ingots/gold" + } + }, + "result": { + "item": "minecraft:apple" + } +} \ No newline at end of file From e3386ff3142c26b4db6cfd73f6d6e9b919914428 Mon Sep 17 00:00:00 2001 From: BOLT_M4G1C Date: Sat, 6 Dec 2025 21:04:17 +0100 Subject: [PATCH 04/12] Adds crafting recipe and loot table for Legendary Crafting Table --- .../loot_tables/blocks/legendary_table.json | 20 ++++++++++ .../recipes/legendary_table.json | 39 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 src/main/resources/data/extendedcrafting/loot_tables/blocks/legendary_table.json create mode 100644 src/main/resources/data/extendedcrafting/recipes/legendary_table.json diff --git a/src/main/resources/data/extendedcrafting/loot_tables/blocks/legendary_table.json b/src/main/resources/data/extendedcrafting/loot_tables/blocks/legendary_table.json new file mode 100644 index 00000000..18e3af13 --- /dev/null +++ b/src/main/resources/data/extendedcrafting/loot_tables/blocks/legendary_table.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "name": "extendedcrafting:legendary_table", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "extendedcrafting:legendary_table" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/extendedcrafting/recipes/legendary_table.json b/src/main/resources/data/extendedcrafting/recipes/legendary_table.json new file mode 100644 index 00000000..bd4b2482 --- /dev/null +++ b/src/main/resources/data/extendedcrafting/recipes/legendary_table.json @@ -0,0 +1,39 @@ +{ + "type": "minecraft:crafting_shaped", + "conditions": [ + { + "type": "cucumber:feature_flag", + "flag": "extendedcrafting:tables" + } + ], + "pattern": [ + "BAB", + "CIC", + "BSB" + ], + "key": { + "I": { + "tag": "forge:storage_blocks/netherite" + }, + "C": [ + { + "item": "extendedcrafting:epic_table" + }, + { + "item": "extendedcrafting:epic_auto_table" + } + ], + "B": { + "item": "extendedcrafting:enhanced_ender_component" + }, + "S": { + "item": "extendedcrafting:black_iron_slate" + }, + "A": { + "item": "extendedcrafting:enhanced_ender_catalyst" + } + }, + "result": { + "item": "extendedcrafting:legendary_table" + } +} \ No newline at end of file From 59f98def346f5b95c45896bc1b699ab335c1fdee Mon Sep 17 00:00:00 2001 From: BOLTMAGIC Date: Sat, 6 Dec 2025 21:06:32 +0100 Subject: [PATCH 05/12] Enhance README content --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 12e95524..01e1439e 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,12 @@ -# Extended Crafting: Unofficial +# Extended Crafting: Expanded Plus Adds some new ways to craft items, as well as extra crafting items and utilities. -Originally forked for use in Monifactory. "What if we tried more tables?" +Originally forked for use in Monifactory. "What if we tried more tables. -## Download +And forked again because 11x11 is still not enought for my modpack. +## Download +- [ExtendedCrafting: Expanded Plus (Curseforge)]() - [ExtendedCrafting: Monifactory Edition (Curseforge)](https://www.curseforge.com/minecraft/mc-mods/extended-crafting-monifactory-edition) - [BlakeBr0's Cucumber Library (required dependency)](https://www.curseforge.com/minecraft/mc-mods/cucumber) @@ -12,7 +14,7 @@ Originally forked for use in Monifactory. "What if we tried more tables?" ## What has changed from the original -- Added a new tier of table with a 11x11 grid and Netherite components +- Added a new tier of table with a 13x13 grid - Auto Table Speed is now configurable per tier (default to 8gt/0.4s per craft) - Auto Table item input logic reworked to allow the table to keep up, can now import more than one item per tick. - JEI Compatibility: Recipes with no tier restriction are only shown in the smallest table that can fit them. Tier-restricted recipes still show the warning icon. [TODO: Make this a config option] From 5f6fdb89c2ee2d0984a4d3000c788f9c76de1f07 Mon Sep 17 00:00:00 2001 From: BOLTMAGIC Date: Sun, 7 Dec 2025 11:05:17 +0100 Subject: [PATCH 06/12] Fix typos in README.md Corrected typos in the README file. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 01e1439e..89950eb2 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # Extended Crafting: Expanded Plus Adds some new ways to craft items, as well as extra crafting items and utilities. -Originally forked for use in Monifactory. "What if we tried more tables. +Originally forked for use in Monifactory. "What if we tried more tables? -And forked again because 11x11 is still not enought for my modpack. +And forked again because 11x11 is still not enough for my modpack. ## Download - [ExtendedCrafting: Expanded Plus (Curseforge)]() From ef7fa03ae5868d13057343fda575f239a13dd302 Mon Sep 17 00:00:00 2001 From: BOLT_M4G1C Date: Sun, 7 Dec 2025 13:27:40 +0100 Subject: [PATCH 07/12] Adds Legendary Auto Table with crafting functionality and associated assets --- README.md | 2 +- build.gradle | 6 +- .../block/LegendaryAutoTableBlock.java | 101 ++++++ .../screen/LegendaryAutoTableScreen.java | 195 +++++++++++ .../client/screen/LegendaryTableScreen.java | 2 +- .../compat/jei/JeiCompat.java | 4 + .../extendedcrafting/config/ModConfigs.java | 4 + .../container/AdvancedAutoTableContainer.java | 3 + .../container/AdvancedTableContainer.java | 3 + .../container/BasicAutoTableContainer.java | 3 + .../container/BasicTableContainer.java | 3 + .../container/EliteAutoTableContainer.java | 3 + .../container/EliteTableContainer.java | 3 + .../container/EpicAutoTableContainer.java | 3 + .../container/EpicTableContainer.java | 3 + .../LegendaryAutoTableContainer.java | 124 +++++++ .../container/LegendaryTableContainer.java | 3 + .../container/UltimateAutoTableContainer.java | 3 + .../container/UltimateTableContainer.java | 3 + .../extendedcrafting/init/ModBlocks.java | 2 + .../init/ModContainerTypes.java | 2 + .../init/ModCreativeModeTabs.java | 1 + .../init/ModTileEntities.java | 1 + .../tileentity/AutoTableTileEntity.java | 65 +++- .../blockstates/legendary_auto_table.json | 7 + .../assets/extendedcrafting/lang/en_us.json | 8 +- .../assets/extendedcrafting/lang/ja_jp.json | 220 ++++++++++++ .../assets/extendedcrafting/lang/ru_ru.json | 2 +- .../assets/extendedcrafting/lang/tr_tr.json | 232 +++++++++++++ .../assets/extendedcrafting/lang/uk_ua.json | 2 +- .../models/block/legendary_auto_table.json | 102 ++++++ .../models/item/legendary_auto_table.json | 35 ++ .../textures/gui/legendary_table.png | Bin 3557 -> 6366 bytes .../blocks/legendary_auto_table.json | 20 ++ .../recipes/legendary_auto_table.json | 35 ++ .../tags/blocks/mineable/pickaxe.json | 1 + .../tags/blocks/needs_stone_tool.json | 1 + src/main/resources/pack.mcmeta | 2 +- .../combination.test.zs | 0 .../compressor.test.zs | 0 .../ender_crafter.test.zs | 0 .../flux_crafter.test.zs | 0 .../table.test.zs | 0 .../kubejs_scripts/combination_test.js | 40 +++ .../kubejs_scripts/compression_test.js | 18 + .../kubejs_scripts/ender_crafter_test.js | 59 ++++ .../kubejs_scripts/flux_crafter_test.js | 63 ++++ .../resources/kubejs_scripts/table_test.js | 320 ++++++++++++++++++ 48 files changed, 1694 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/blakebr0/extendedcrafting/block/LegendaryAutoTableBlock.java create mode 100644 src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryAutoTableScreen.java create mode 100644 src/main/java/com/blakebr0/extendedcrafting/container/LegendaryAutoTableContainer.java create mode 100644 src/main/resources/assets/extendedcrafting/blockstates/legendary_auto_table.json create mode 100644 src/main/resources/assets/extendedcrafting/lang/ja_jp.json create mode 100644 src/main/resources/assets/extendedcrafting/lang/tr_tr.json create mode 100644 src/main/resources/assets/extendedcrafting/models/block/legendary_auto_table.json create mode 100644 src/main/resources/assets/extendedcrafting/models/item/legendary_auto_table.json create mode 100644 src/main/resources/data/extendedcrafting/loot_tables/blocks/legendary_auto_table.json create mode 100644 src/main/resources/data/extendedcrafting/recipes/legendary_auto_table.json rename src/test/resources/{scripts => crafttweaker_scripts}/combination.test.zs (100%) rename src/test/resources/{scripts => crafttweaker_scripts}/compressor.test.zs (100%) rename src/test/resources/{scripts => crafttweaker_scripts}/ender_crafter.test.zs (100%) rename src/test/resources/{scripts => crafttweaker_scripts}/flux_crafter.test.zs (100%) rename src/test/resources/{scripts => crafttweaker_scripts}/table.test.zs (100%) create mode 100644 src/test/resources/kubejs_scripts/combination_test.js create mode 100644 src/test/resources/kubejs_scripts/compression_test.js create mode 100644 src/test/resources/kubejs_scripts/ender_crafter_test.js create mode 100644 src/test/resources/kubejs_scripts/flux_crafter_test.js create mode 100644 src/test/resources/kubejs_scripts/table_test.js diff --git a/README.md b/README.md index 01e1439e..692c5c72 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Extended Crafting: Expanded Plus Adds some new ways to craft items, as well as extra crafting items and utilities. -Originally forked for use in Monifactory. "What if we tried more tables. +Originally forked for use in Monifactory. "What if we tried more tables"? And forked again because 11x11 is still not enought for my modpack. diff --git a/build.gradle b/build.gradle index 8f6c8d73..ac24a32a 100644 --- a/build.gradle +++ b/build.gradle @@ -107,12 +107,12 @@ dependencies { jar { manifest { attributes([ - 'Specification-Title': 'Extended Crafting: Monifactory Edition', - 'Specification-Vendor': 'WithersChat, BlakeBr0', + 'Specification-Title': 'Extended Crafting: Expanded Plus', + 'Specification-Vendor': 'BOLT_M4G1C, WithersChat, BlakeBr0', 'Specification-Version': '1', 'Implementation-Title': project.name, 'Implementation-Version': "${version.split('-').last()}", - 'Implementation-Vendor' : 'WithersChat, BlakeBr0', + 'Implementation-Vendor' : 'BOLT_M4G1C, WithersChat, BlakeBr0', 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") ]) } diff --git a/src/main/java/com/blakebr0/extendedcrafting/block/LegendaryAutoTableBlock.java b/src/main/java/com/blakebr0/extendedcrafting/block/LegendaryAutoTableBlock.java new file mode 100644 index 00000000..8db80983 --- /dev/null +++ b/src/main/java/com/blakebr0/extendedcrafting/block/LegendaryAutoTableBlock.java @@ -0,0 +1,101 @@ +package com.blakebr0.extendedcrafting.block; + +import com.blakebr0.cucumber.block.BaseTileEntityBlock; +import com.blakebr0.cucumber.helper.NBTHelper; +import com.blakebr0.cucumber.util.VoxelShapeBuilder; +import com.blakebr0.extendedcrafting.lib.ModTooltips; +import com.blakebr0.extendedcrafting.tileentity.AutoTableTileEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.Containers; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.NetworkHooks; + +import java.util.List; + +public class LegendaryAutoTableBlock extends BaseTileEntityBlock { + public static final VoxelShape LEGENDARY_AUTO_TABLE_SHAPE = VoxelShapeBuilder.builder() + .cuboid(2, 0, 2, 14, 2, 14) + .cuboid(3, 2, 3, 5, 10, 5) + .cuboid(11, 2, 11, 13, 10, 13) + .cuboid(11, 2, 3, 13, 10, 5) + .cuboid(3, 2, 11, 5, 10, 13) + .cuboid(0, 10, 0, 16, 16, 16) + .cuboid(4, 2, 4, 12, 10, 12) + .build(); + + public LegendaryAutoTableBlock() { + super(SoundType.METAL, 5.0F, 10.0F, true); + } + + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new AutoTableTileEntity.Legendary(pos, state); + } + + @Override + public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult trace) { + if (!level.isClientSide()) { + var tile = level.getBlockEntity(pos); + + if (tile instanceof AutoTableTileEntity.Legendary table) { + NetworkHooks.openScreen((ServerPlayer) player, table, pos); + } + } + + return InteractionResult.SUCCESS; + } + + @Override + public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) { + if (state.getBlock() != newState.getBlock()) { + var tile = level.getBlockEntity(pos); + + if (tile instanceof AutoTableTileEntity.Legendary table) { + Containers.dropContents(level, pos, table.getInventory().getStacks()); + } + } + + super.onRemove(state, level, pos, newState, isMoving); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return LEGENDARY_AUTO_TABLE_SHAPE; + } + + @OnlyIn(Dist.CLIENT) + @Override + public void appendHoverText(ItemStack stack, BlockGetter level, List tooltip, TooltipFlag flag) { + tooltip.add(ModTooltips.TIER.args(6).build()); + } + + @Override + public void setPlacedBy(Level level, BlockPos pos, BlockState state, LivingEntity entity, ItemStack stack) { + if (NBTHelper.hasKey(stack, "RecipeStorage")) { + var tile = level.getBlockEntity(pos); + + if (tile instanceof AutoTableTileEntity.Legendary table) { + var storage = stack.getTag().getCompound("RecipeStorage"); + + table.getRecipeStorage().deserializeNBT(storage); + } + } + } +} diff --git a/src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryAutoTableScreen.java b/src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryAutoTableScreen.java new file mode 100644 index 00000000..060b6fe7 --- /dev/null +++ b/src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryAutoTableScreen.java @@ -0,0 +1,195 @@ +package com.blakebr0.extendedcrafting.client.screen; + +import com.blakebr0.cucumber.client.render.GhostItemRenderer; +import com.blakebr0.cucumber.client.screen.BaseContainerScreen; +import com.blakebr0.cucumber.client.screen.widget.EnergyBarWidget; +import com.blakebr0.cucumber.inventory.BaseItemStackHandler; +import com.google.common.collect.Lists; +import com.blakebr0.extendedcrafting.ExtendedCrafting; +import com.blakebr0.extendedcrafting.client.screen.button.RecipeSelectButton; +import com.blakebr0.extendedcrafting.client.screen.button.ToggleTableRunningButton; +import com.blakebr0.extendedcrafting.container.LegendaryAutoTableContainer; +import com.blakebr0.extendedcrafting.lib.ModTooltips; +import com.blakebr0.extendedcrafting.tileentity.AutoTableTileEntity; +import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.Button; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.ItemStack; + +import java.util.List; + +public class LegendaryAutoTableScreen extends BaseContainerScreen { + public static final ResourceLocation BACKGROUND = new ResourceLocation(ExtendedCrafting.MOD_ID, "textures/gui/legendary_auto_table.png"); + private AutoTableTileEntity tile; + + public LegendaryAutoTableScreen(LegendaryAutoTableContainer container, Inventory inventory, Component title) { + super(container, inventory, title, BACKGROUND, 326, 350, 512, 512); + } + + @Override + public void init() { + super.init(); + + int x = this.getGuiLeft(); + int y = this.getGuiTop(); + var pos = this.getMenu().getBlockPos(); + + this.addRenderableWidget(new ToggleTableRunningButton(x + 292, y + 162, pos, this::isRunning)); + + this.tile = this.getTileEntity(); + + if (this.tile != null) { + this.addRenderableWidget(new RecipeSelectButton(x + 276, y + 7, pos, 0, this.tile.getRecipeStorage(), this::onSelectButtonTooltip)); + this.addRenderableWidget(new RecipeSelectButton(x + 289, y + 7, pos, 1, this.tile.getRecipeStorage(), this::onSelectButtonTooltip)); + this.addRenderableWidget(new RecipeSelectButton(x + 302, y + 7, pos, 2, this.tile.getRecipeStorage(), this::onSelectButtonTooltip)); + + this.addRenderableWidget(new EnergyBarWidget(x + 7, y + 95, this.tile.getEnergy())); + } + } + + @Override + protected void renderTooltip(GuiGraphics gfx, int mouseX, int mouseY) { + int x = this.getGuiLeft(); + int y = this.getGuiTop(); + + super.renderTooltip(gfx, mouseX, mouseY); + + if (mouseX > x + 292 && mouseX < x + 269 && mouseY > y + 161 && mouseY < y + 171) { + gfx.renderTooltip(this.font, ModTooltips.TOGGLE_AUTO_CRAFTING.color(ChatFormatting.WHITE).build(), mouseX, mouseY); + } + } + + @Override + protected void renderLabels(GuiGraphics gfx, int mouseX, int mouseY) { + var title = this.getTitle().getString(); + + gfx.drawString(this.font, title, 26, 6, 4210752, false); + gfx.drawString(this.font, this.playerInventoryTitle, 62, this.imageHeight - 94, 4210752, false); + } + + @Override + protected void renderBg(GuiGraphics gfx, float partialTicks, int mouseX, int mouseY) { + super.renderDefaultBg(gfx, partialTicks, mouseX, mouseY); + + int x = this.getGuiLeft(); + int y = this.getGuiTop(); + + if (this.isRunning()) { + int i2 = this.getProgressBarScaled(); + gfx.blit(BACKGROUND, x + 297, y + 161, 344, 0, 13, i2, 512, 512); + } + + var recipe = this.getSelectedRecipe(); + + if (recipe != null) { + var itemRenderer = Minecraft.getInstance().getItemRenderer(); + + for (int i = 0; i < 13; i++) { + for (int j = 0; j < 13; j++) { + int index = (i * 13) + j; + var item = recipe.getStackInSlot(index); + + GhostItemRenderer.renderItemIntoGui(item, x + 27 + (j * 18), y + 18 + (i * 18), itemRenderer); + } + } + + var output = recipe.getStackInSlot(recipe.getSlots() - 1); + + GhostItemRenderer.renderItemIntoGui(output, x + 261, y + 107, itemRenderer); + } + } + + private void onSelectButtonTooltip(Button button, GuiGraphics gfx, int mouseX, int mouseY) { + var index = ((RecipeSelectButton) button).getIndex(); + var isSelected = ((RecipeSelectButton) button).isSelected(); + var recipe = this.getRecipeInfo(index); + + if (recipe != null) { + List tooltip; + var hasRecipe = !recipe.getStacks().stream().allMatch(ItemStack::isEmpty); + + if (hasRecipe) { + var output = recipe.getStackInSlot(recipe.getSlots() - 1); + + tooltip = Lists.newArrayList( + Component.literal(output.getCount() + "x " + output.getHoverName().getString()), + Component.literal(""), + ModTooltips.AUTO_TABLE_DELETE_RECIPE.color(ChatFormatting.WHITE).build() + ); + + if (isSelected) { + tooltip.add(1, ModTooltips.SELECTED.color(ChatFormatting.GREEN).build()); + } + } else { + tooltip = Lists.newArrayList( + ModTooltips.AUTO_TABLE_SAVE_RECIPE.color(ChatFormatting.WHITE).build() + ); + + if (isSelected) { + tooltip.add(0, ModTooltips.SELECTED.color(ChatFormatting.GREEN).build()); + tooltip.add(1, Component.literal("")); + } + } + + gfx.renderComponentTooltip(this.font, tooltip, mouseX, mouseY); + } + } + + private AutoTableTileEntity getTileEntity() { + var level = this.getMinecraft().level; + + if (level != null) { + var tile = level.getBlockEntity(this.getMenu().getBlockPos()); + + if (tile instanceof AutoTableTileEntity table) + return table; + } + + return null; + } + + private boolean isRunning() { + if (this.tile == null) + return false; + + return this.tile.isRunning(); + } + + private BaseItemStackHandler getRecipeInfo(int selected) { + if (this.tile == null) + return null; + + return this.tile.getRecipeStorage().getRecipe(selected); + } + + private BaseItemStackHandler getSelectedRecipe() { + if (this.tile == null) + return null; + + return this.tile.getRecipeStorage().getSelectedRecipe(); + } + + private int getProgress() { + if (this.tile == null) + return 0; + + return this.tile.getProgress(); + } + + private int getProgressRequired() { + if (this.tile == null) + return 0; + + return this.tile.getProgressRequired(); + } + + private int getProgressBarScaled() { + int i = this.getProgress(); + int j = this.getProgressRequired(); + return j != 0 && i != 0 ? i * 16 / j : 0; + } +} diff --git a/src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryTableScreen.java b/src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryTableScreen.java index c37d7eda..10239310 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryTableScreen.java +++ b/src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryTableScreen.java @@ -20,7 +20,7 @@ protected void renderLabels(GuiGraphics gfx, int mouseX, int mouseY) { var title = this.getTitle().getString(); gfx.drawString(this.font, title, 8, 6, 4210752, false); - gfx.drawString(this.font, this.playerInventoryTitle, 39, this.imageHeight - 94, 4210752, false); + gfx.drawString(this.font, this.playerInventoryTitle, 43, this.imageHeight - 94, 4210752, false); } @Override diff --git a/src/main/java/com/blakebr0/extendedcrafting/compat/jei/JeiCompat.java b/src/main/java/com/blakebr0/extendedcrafting/compat/jei/JeiCompat.java index d2ed1eaf..c0b13865 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/compat/jei/JeiCompat.java +++ b/src/main/java/com/blakebr0/extendedcrafting/compat/jei/JeiCompat.java @@ -144,6 +144,7 @@ public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) { registration.addRecipeCatalyst(new ItemStack(ModBlocks.ELITE_AUTO_TABLE.get()), EliteTableCategory.RECIPE_TYPE); registration.addRecipeCatalyst(new ItemStack(ModBlocks.ULTIMATE_AUTO_TABLE.get()), UltimateTableCategory.RECIPE_TYPE); registration.addRecipeCatalyst(new ItemStack(ModBlocks.EPIC_AUTO_TABLE.get()), EpicTableCategory.RECIPE_TYPE); + registration.addRecipeCatalyst(new ItemStack(ModBlocks.LEGENDARY_AUTO_TABLE.get()), LegendaryTableCategory.RECIPE_TYPE); if (ModConfigs.TABLE_USE_VANILLA_RECIPES.get()) { registration.addRecipeCatalyst(new ItemStack(ModBlocks.BASIC_AUTO_TABLE.get()), mezz.jei.api.constants.RecipeTypes.CRAFTING); @@ -196,6 +197,7 @@ public void registerRecipeTransferHandlers(IRecipeTransferRegistration registrat registration.addRecipeTransferHandler(EliteAutoTableContainer.class, ModContainerTypes.ELITE_AUTO_TABLE.get(), EliteTableCategory.RECIPE_TYPE, 1, 49, 51, 36); registration.addRecipeTransferHandler(UltimateAutoTableContainer.class, ModContainerTypes.ULTIMATE_AUTO_TABLE.get(), UltimateTableCategory.RECIPE_TYPE, 1, 81, 83, 36); registration.addRecipeTransferHandler(EpicAutoTableContainer.class, ModContainerTypes.EPIC_AUTO_TABLE.get(), EpicTableCategory.RECIPE_TYPE, 1, 121, 123, 36); + registration.addRecipeTransferHandler(LegendaryAutoTableContainer.class, ModContainerTypes.LEGENDARY_AUTO_TABLE.get(), LegendaryTableCategory.RECIPE_TYPE, 1, 169, 170, 36); if (ModConfigs.TABLE_USE_VANILLA_RECIPES.get()) { registration.addRecipeTransferHandler(BasicAutoTableContainer.class, ModContainerTypes.BASIC_AUTO_TABLE.get(), mezz.jei.api.constants.RecipeTypes.CRAFTING, 1, 9, 11, 36); @@ -232,6 +234,7 @@ public void registerGuiHandlers(IGuiHandlerRegistration registration) { registration.addRecipeClickArea(EliteTableScreen.class, 139, 72, 21, 14, EliteTableCategory.RECIPE_TYPE); registration.addRecipeClickArea(UltimateTableScreen.class, 174, 90, 21, 14, UltimateTableCategory.RECIPE_TYPE); registration.addRecipeClickArea(EpicTableScreen.class, 210, 108, 21, 14, EpicTableCategory.RECIPE_TYPE); + registration.addRecipeClickArea(LegendaryTableScreen.class, 210, 108, 21, 14, LegendaryTableCategory.RECIPE_TYPE); if (ModConfigs.ENABLE_AUTO_TABLES.get()) { registration.addRecipeClickArea(BasicAutoTableScreen.class, 97, 36, 21, 14, BasicTableCategory.RECIPE_TYPE); @@ -239,6 +242,7 @@ public void registerGuiHandlers(IGuiHandlerRegistration registration) { registration.addRecipeClickArea(EliteAutoTableScreen.class, 158, 72, 21, 14, EliteTableCategory.RECIPE_TYPE); registration.addRecipeClickArea(UltimateAutoTableScreen.class, 193, 90, 21, 14, UltimateTableCategory.RECIPE_TYPE); registration.addRecipeClickArea(EpicAutoTableScreen.class, 237, 108, 21, 14, EpicTableCategory.RECIPE_TYPE); + registration.addRecipeClickArea(LegendaryAutoTableScreen.class, 237, 108, 21, 14, LegendaryTableCategory.RECIPE_TYPE); } } diff --git a/src/main/java/com/blakebr0/extendedcrafting/config/ModConfigs.java b/src/main/java/com/blakebr0/extendedcrafting/config/ModConfigs.java index 9e0ddaf2..a2616e02 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/config/ModConfigs.java +++ b/src/main/java/com/blakebr0/extendedcrafting/config/ModConfigs.java @@ -38,6 +38,7 @@ public final class ModConfigs { public static final ForgeConfigSpec.IntValue AUTO_TABLE_ELITE_CRAFTING_TIME; public static final ForgeConfigSpec.IntValue AUTO_TABLE_ULTIMATE_CRAFTING_TIME; public static final ForgeConfigSpec.IntValue AUTO_TABLE_EPIC_CRAFTING_TIME; + public static final ForgeConfigSpec.IntValue AUTO_TABLE_LEGENDARY_CRAFTING_TIME; public static final ForgeConfigSpec.BooleanValue ENABLE_COMPRESSOR; public static final ForgeConfigSpec.IntValue COMPRESSOR_POWER_CAPACITY; @@ -124,6 +125,9 @@ public final class ModConfigs { AUTO_TABLE_EPIC_CRAFTING_TIME = common .comment("How many ticks the Epic Auto Table takes to craft") .defineInRange("autoTableEpicCraftTime", 8, 1, Integer.MAX_VALUE); + AUTO_TABLE_LEGENDARY_CRAFTING_TIME = common + .comment("How many ticks the Legendary Auto Table takes to craft") + .defineInRange("autoTableLegendaryCraftTime", 8, 1, Integer.MAX_VALUE); common.pop(); common.comment("Settings for the Quantum Compressor.").push("Quantum Compression"); diff --git a/src/main/java/com/blakebr0/extendedcrafting/container/AdvancedAutoTableContainer.java b/src/main/java/com/blakebr0/extendedcrafting/container/AdvancedAutoTableContainer.java index 5d2b158a..989886bb 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/container/AdvancedAutoTableContainer.java +++ b/src/main/java/com/blakebr0/extendedcrafting/container/AdvancedAutoTableContainer.java @@ -60,6 +60,9 @@ private AdvancedAutoTableContainer(MenuType type, int id, Inventory playerInv @Override public void slotsChanged(Container matrix) { + if (this.level.isClientSide) { + return; + } var recipe = this.level.getRecipeManager().getRecipeFor(ModRecipeTypes.TABLE.get(), matrix, this.level); if (recipe.isPresent()) { diff --git a/src/main/java/com/blakebr0/extendedcrafting/container/AdvancedTableContainer.java b/src/main/java/com/blakebr0/extendedcrafting/container/AdvancedTableContainer.java index 5d30a914..4f76d4a0 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/container/AdvancedTableContainer.java +++ b/src/main/java/com/blakebr0/extendedcrafting/container/AdvancedTableContainer.java @@ -57,6 +57,9 @@ private AdvancedTableContainer(MenuType type, int id, Inventory playerInvento @Override public void slotsChanged(Container matrix) { + if (this.level.isClientSide) { + return; + } var recipe = this.level.getRecipeManager().getRecipeFor(ModRecipeTypes.TABLE.get(), matrix, this.level); if (recipe.isPresent()) { diff --git a/src/main/java/com/blakebr0/extendedcrafting/container/BasicAutoTableContainer.java b/src/main/java/com/blakebr0/extendedcrafting/container/BasicAutoTableContainer.java index 196f94f9..d54a0e9e 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/container/BasicAutoTableContainer.java +++ b/src/main/java/com/blakebr0/extendedcrafting/container/BasicAutoTableContainer.java @@ -64,6 +64,9 @@ private BasicAutoTableContainer(MenuType type, int id, Inventory playerInvent @Override public void slotsChanged(Container matrix) { + if (this.level.isClientSide) { + return; + } var recipe = this.level.getRecipeManager().getRecipeFor(ModRecipeTypes.TABLE.get(), matrix, this.level); this.isVanillaRecipe = false; diff --git a/src/main/java/com/blakebr0/extendedcrafting/container/BasicTableContainer.java b/src/main/java/com/blakebr0/extendedcrafting/container/BasicTableContainer.java index b8274b26..fee96da6 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/container/BasicTableContainer.java +++ b/src/main/java/com/blakebr0/extendedcrafting/container/BasicTableContainer.java @@ -61,6 +61,9 @@ private BasicTableContainer(MenuType type, int id, Inventory playerInventory, @Override public void slotsChanged(Container matrix) { + if (this.level.isClientSide) { + return; + } var recipe = this.level.getRecipeManager().getRecipeFor(ModRecipeTypes.TABLE.get(), matrix, this.level); this.isVanillaRecipe = false; diff --git a/src/main/java/com/blakebr0/extendedcrafting/container/EliteAutoTableContainer.java b/src/main/java/com/blakebr0/extendedcrafting/container/EliteAutoTableContainer.java index 930f7893..31173734 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/container/EliteAutoTableContainer.java +++ b/src/main/java/com/blakebr0/extendedcrafting/container/EliteAutoTableContainer.java @@ -60,6 +60,9 @@ private EliteAutoTableContainer(MenuType type, int id, Inventory playerInvent @Override public void slotsChanged(Container matrix) { + if (this.level.isClientSide) { + return; + } var recipe = this.level.getRecipeManager().getRecipeFor(ModRecipeTypes.TABLE.get(), matrix, this.level); if (recipe.isPresent()) { diff --git a/src/main/java/com/blakebr0/extendedcrafting/container/EliteTableContainer.java b/src/main/java/com/blakebr0/extendedcrafting/container/EliteTableContainer.java index 28499c95..9104ee92 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/container/EliteTableContainer.java +++ b/src/main/java/com/blakebr0/extendedcrafting/container/EliteTableContainer.java @@ -57,6 +57,9 @@ private EliteTableContainer(MenuType type, int id, Inventory playerInventory, @Override public void slotsChanged(Container matrix) { + if (this.level.isClientSide) { + return; + } var recipe = this.level.getRecipeManager().getRecipeFor(ModRecipeTypes.TABLE.get(), matrix, this.level); if (recipe.isPresent()) { diff --git a/src/main/java/com/blakebr0/extendedcrafting/container/EpicAutoTableContainer.java b/src/main/java/com/blakebr0/extendedcrafting/container/EpicAutoTableContainer.java index 28ce8726..13bb31be 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/container/EpicAutoTableContainer.java +++ b/src/main/java/com/blakebr0/extendedcrafting/container/EpicAutoTableContainer.java @@ -60,6 +60,9 @@ private EpicAutoTableContainer(MenuType type, int id, Inventory playerInvento @Override public void slotsChanged(Container matrix) { + if (this.level.isClientSide) { + return; + } var recipe = this.level.getRecipeManager().getRecipeFor(ModRecipeTypes.TABLE.get(), matrix, this.level); if (recipe.isPresent()) { diff --git a/src/main/java/com/blakebr0/extendedcrafting/container/EpicTableContainer.java b/src/main/java/com/blakebr0/extendedcrafting/container/EpicTableContainer.java index 86255796..093c0d30 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/container/EpicTableContainer.java +++ b/src/main/java/com/blakebr0/extendedcrafting/container/EpicTableContainer.java @@ -57,6 +57,9 @@ private EpicTableContainer(MenuType type, int id, Inventory playerInventory, @Override public void slotsChanged(Container matrix) { + if (this.level.isClientSide) { + return; + } var recipe = this.level.getRecipeManager().getRecipeFor(ModRecipeTypes.TABLE.get(), matrix, this.level); if (recipe.isPresent()) { diff --git a/src/main/java/com/blakebr0/extendedcrafting/container/LegendaryAutoTableContainer.java b/src/main/java/com/blakebr0/extendedcrafting/container/LegendaryAutoTableContainer.java new file mode 100644 index 00000000..03fb33f8 --- /dev/null +++ b/src/main/java/com/blakebr0/extendedcrafting/container/LegendaryAutoTableContainer.java @@ -0,0 +1,124 @@ +package com.blakebr0.extendedcrafting.container; + +import com.blakebr0.cucumber.container.BaseContainerMenu; +import com.blakebr0.cucumber.inventory.BaseItemStackHandler; +import com.blakebr0.extendedcrafting.container.inventory.ExtendedCraftingInventory; +import com.blakebr0.extendedcrafting.container.slot.AutoTableOutputSlot; +import com.blakebr0.extendedcrafting.container.slot.TableOutputSlot; +import com.blakebr0.extendedcrafting.init.ModContainerTypes; +import com.blakebr0.extendedcrafting.init.ModRecipeTypes; +import com.blakebr0.extendedcrafting.tileentity.AutoTableTileEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.Container; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.inventory.ResultContainer; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; + +public class LegendaryAutoTableContainer extends BaseContainerMenu { + private final Level level; + private final Container result; + + private LegendaryAutoTableContainer(MenuType type, int id, Inventory playerInventory, FriendlyByteBuf buffer) { + this(type, id, playerInventory, AutoTableTileEntity.Legendary.createInventoryHandler(), buffer.readBlockPos()); + } + + private LegendaryAutoTableContainer(MenuType type, int id, Inventory playerInventory, BaseItemStackHandler inventory, BlockPos pos) { + super(type, id, pos); + this.level = playerInventory.player.level(); + this.result = new ResultContainer(); + + var matrix = new ExtendedCraftingInventory(this, inventory, 13, true); + + this.addSlot(new TableOutputSlot(this, matrix, this.result, 0, 297, 126)); + + int i, j; + for (i = 0; i < 13; i++) { + for (j = 0; j < 13; j++) { + this.addSlot(new Slot(matrix, j + i * 13, 27 + j * 18, 18 + i * 18)); + } + } + + this.addSlot(new AutoTableOutputSlot(this, matrix, inventory, 169, 297, 170)); + + for (i = 0; i < 3; i++) { + for (j = 0; j < 9; j++) { + this.addSlot(new Slot(playerInventory, j + i * 9 + 9, 63 + j * 18, 268 + i * 18)); + } + } + + for (j = 0; j < 9; j++) { + this.addSlot(new Slot(playerInventory, j, 63 + j * 18, 326)); + } + + this.slotsChanged(matrix); + } + + @Override + public void slotsChanged(Container matrix) { + if (this.level.isClientSide) { + return; + } + var recipe = this.level.getRecipeManager().getRecipeFor(ModRecipeTypes.TABLE.get(), matrix, this.level); + + if (recipe.isPresent()) { + var result = recipe.get().assemble(matrix, this.level.registryAccess()); + this.result.setItem(0, result); + } else { + this.result.setItem(0, ItemStack.EMPTY); + } + + super.slotsChanged(matrix); + } + + @Override + public ItemStack quickMoveStack(Player player, int slotNumber) { + var itemstack = ItemStack.EMPTY; + var slot = this.slots.get(slotNumber); + + if (slot.hasItem()) { + var itemstack1 = slot.getItem(); + itemstack = itemstack1.copy(); + + if (slotNumber == 0 || slotNumber == 170) { + if (!this.moveItemStackTo(itemstack1, 171, 207, true)) { + return ItemStack.EMPTY; + } + + slot.onQuickCraft(itemstack1, itemstack); + } else if (slotNumber >= 171 && slotNumber < 207) { + if (!this.moveItemStackTo(itemstack1, 1, 170, false)) { + return ItemStack.EMPTY; + } + } else if (!this.moveItemStackTo(itemstack1, 171, 207, false)) { + return ItemStack.EMPTY; + } + + if (itemstack1.getCount() == 0) { + slot.set(ItemStack.EMPTY); + } else { + slot.setChanged(); + } + + if (itemstack1.getCount() == itemstack.getCount()) { + return ItemStack.EMPTY; + } + + slot.onTake(player, itemstack1); + } + + return itemstack; + } + + public static LegendaryAutoTableContainer create(int windowId, Inventory playerInventory, FriendlyByteBuf buffer) { + return new LegendaryAutoTableContainer(ModContainerTypes.LEGENDARY_AUTO_TABLE.get(), windowId, playerInventory, buffer); + } + + public static LegendaryAutoTableContainer create(int windowId, Inventory playerInventory, BaseItemStackHandler inventory, BlockPos pos) { + return new LegendaryAutoTableContainer(ModContainerTypes.LEGENDARY_AUTO_TABLE.get(), windowId, playerInventory, inventory, pos); + } +} diff --git a/src/main/java/com/blakebr0/extendedcrafting/container/LegendaryTableContainer.java b/src/main/java/com/blakebr0/extendedcrafting/container/LegendaryTableContainer.java index f3a99058..5ee6438b 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/container/LegendaryTableContainer.java +++ b/src/main/java/com/blakebr0/extendedcrafting/container/LegendaryTableContainer.java @@ -57,6 +57,9 @@ private LegendaryTableContainer(MenuType type, int id, Inventory playerInvent @Override public void slotsChanged(Container matrix) { + if (this.level.isClientSide) { + return; + } var recipe = this.level.getRecipeManager().getRecipeFor(ModRecipeTypes.TABLE.get(), matrix, this.level); if (recipe.isPresent()) { diff --git a/src/main/java/com/blakebr0/extendedcrafting/container/UltimateAutoTableContainer.java b/src/main/java/com/blakebr0/extendedcrafting/container/UltimateAutoTableContainer.java index 30a53913..b3de3e78 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/container/UltimateAutoTableContainer.java +++ b/src/main/java/com/blakebr0/extendedcrafting/container/UltimateAutoTableContainer.java @@ -60,6 +60,9 @@ private UltimateAutoTableContainer(MenuType type, int id, Inventory playerInv @Override public void slotsChanged(Container matrix) { + if (this.level.isClientSide) { + return; + } var recipe = this.level.getRecipeManager().getRecipeFor(ModRecipeTypes.TABLE.get(), matrix, this.level); if (recipe.isPresent()) { diff --git a/src/main/java/com/blakebr0/extendedcrafting/container/UltimateTableContainer.java b/src/main/java/com/blakebr0/extendedcrafting/container/UltimateTableContainer.java index b2330808..1ccd9f17 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/container/UltimateTableContainer.java +++ b/src/main/java/com/blakebr0/extendedcrafting/container/UltimateTableContainer.java @@ -57,6 +57,9 @@ private UltimateTableContainer(MenuType type, int id, Inventory playerInvento @Override public void slotsChanged(Container matrix) { + if (this.level.isClientSide) { + return; + } var recipe = this.level.getRecipeManager().getRecipeFor(ModRecipeTypes.TABLE.get(), matrix, this.level); if (recipe.isPresent()) { diff --git a/src/main/java/com/blakebr0/extendedcrafting/init/ModBlocks.java b/src/main/java/com/blakebr0/extendedcrafting/init/ModBlocks.java index 2a37b86c..99e7e29f 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/init/ModBlocks.java +++ b/src/main/java/com/blakebr0/extendedcrafting/init/ModBlocks.java @@ -21,6 +21,7 @@ import com.blakebr0.extendedcrafting.block.FluxCrafterBlock; import com.blakebr0.extendedcrafting.block.FrameBlock; import com.blakebr0.extendedcrafting.block.LegendaryTableBlock; +import com.blakebr0.extendedcrafting.block.LegendaryAutoTableBlock; import com.blakebr0.extendedcrafting.block.PedestalBlock; import com.blakebr0.extendedcrafting.block.TheUltimateBlock; import com.blakebr0.extendedcrafting.block.UltimateAutoTableBlock; @@ -68,6 +69,7 @@ public final class ModBlocks { public static final RegistryObject ELITE_AUTO_TABLE = register("elite_auto_table", EliteAutoTableBlock::new); public static final RegistryObject ULTIMATE_AUTO_TABLE = register("ultimate_auto_table", UltimateAutoTableBlock::new); public static final RegistryObject EPIC_AUTO_TABLE = register("epic_auto_table", EpicAutoTableBlock::new); + public static final RegistryObject LEGENDARY_AUTO_TABLE = register("legendary_auto_table", LegendaryAutoTableBlock::new); public static final RegistryObject COMPRESSOR = register("compressor", CompressorBlock::new); public static final RegistryObject ENDER_ALTERNATOR = register("ender_alternator", EnderAlternatorBlock::new); public static final RegistryObject ENDER_CRAFTER = register("ender_crafter", EnderCrafterBlock::new); diff --git a/src/main/java/com/blakebr0/extendedcrafting/init/ModContainerTypes.java b/src/main/java/com/blakebr0/extendedcrafting/init/ModContainerTypes.java index 515f3ceb..0fbb427b 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/init/ModContainerTypes.java +++ b/src/main/java/com/blakebr0/extendedcrafting/init/ModContainerTypes.java @@ -31,6 +31,7 @@ public final class ModContainerTypes { public static final RegistryObject> ELITE_AUTO_TABLE = register("elite_auto_table", () -> new MenuType<>((IContainerFactory) EliteAutoTableContainer::create, FeatureFlagSet.of())); public static final RegistryObject> ULTIMATE_AUTO_TABLE = register("ultimate_auto_table", () -> new MenuType<>((IContainerFactory) UltimateAutoTableContainer::create, FeatureFlagSet.of())); public static final RegistryObject> EPIC_AUTO_TABLE = register("epic_auto_table", () -> new MenuType<>((IContainerFactory) EpicAutoTableContainer::create, FeatureFlagSet.of())); + public static final RegistryObject> LEGENDARY_AUTO_TABLE = register("legendary_auto_table", () -> new MenuType<>((IContainerFactory) LegendaryAutoTableContainer::create, FeatureFlagSet.of())); public static final RegistryObject> COMPRESSOR = register("compressor", () -> new MenuType<>((IContainerFactory) CompressorContainer::create, FeatureFlagSet.of())); public static final RegistryObject> ENDER_CRAFTER = register("ender_crafter", () -> new MenuType<>((IContainerFactory) EnderCrafterContainer::create, FeatureFlagSet.of())); public static final RegistryObject> AUTO_ENDER_CRAFTER = register("auto_ender_crafter", () -> new MenuType<>((IContainerFactory) AutoEnderCrafterContainer::create, FeatureFlagSet.of())); @@ -52,6 +53,7 @@ public static void onClientSetup() { ELITE_AUTO_TABLE.ifPresent(container -> MenuScreens.register(container, EliteAutoTableScreen::new)); ULTIMATE_AUTO_TABLE.ifPresent(container -> MenuScreens.register(container, UltimateAutoTableScreen::new)); EPIC_AUTO_TABLE.ifPresent(container -> MenuScreens.register(container, EpicAutoTableScreen::new)); + LEGENDARY_AUTO_TABLE.ifPresent(container -> MenuScreens.register(container, LegendaryAutoTableScreen::new)); COMPRESSOR.ifPresent(container -> MenuScreens.register(container, CompressorScreen::new)); ENDER_CRAFTER.ifPresent(container -> MenuScreens.register(container, EnderCrafterScreen::new)); AUTO_ENDER_CRAFTER.ifPresent(container -> MenuScreens.register(container, AutoEnderCrafterScreen::new)); diff --git a/src/main/java/com/blakebr0/extendedcrafting/init/ModCreativeModeTabs.java b/src/main/java/com/blakebr0/extendedcrafting/init/ModCreativeModeTabs.java index 9db0eacf..cec9b717 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/init/ModCreativeModeTabs.java +++ b/src/main/java/com/blakebr0/extendedcrafting/init/ModCreativeModeTabs.java @@ -49,6 +49,7 @@ public final class ModCreativeModeTabs { output.accept(ModBlocks.ELITE_AUTO_TABLE, ModFeatureFlags.TABLES, ModFeatureFlags.AUTO_TABLES); output.accept(ModBlocks.ULTIMATE_AUTO_TABLE, ModFeatureFlags.TABLES, ModFeatureFlags.AUTO_TABLES); output.accept(ModBlocks.EPIC_AUTO_TABLE, ModFeatureFlags.TABLES, ModFeatureFlags.AUTO_TABLES); + output.accept(ModBlocks.LEGENDARY_AUTO_TABLE, ModFeatureFlags.TABLES, ModFeatureFlags.AUTO_TABLES); output.accept(ModBlocks.COMPRESSOR, ModFeatureFlags.COMPRESSOR); output.accept(ModBlocks.ENDER_ALTERNATOR, ModFeatureFlags.ENDER_CRAFTER); output.accept(ModBlocks.ENDER_CRAFTER, ModFeatureFlags.ENDER_CRAFTER); diff --git a/src/main/java/com/blakebr0/extendedcrafting/init/ModTileEntities.java b/src/main/java/com/blakebr0/extendedcrafting/init/ModTileEntities.java index 5b0fed8a..153bf5aa 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/init/ModTileEntities.java +++ b/src/main/java/com/blakebr0/extendedcrafting/init/ModTileEntities.java @@ -50,6 +50,7 @@ public final class ModTileEntities { public static final RegistryObject> ELITE_AUTO_TABLE = register("elite_auto_table", AutoTableTileEntity.Elite::new, () -> new Block[] { ModBlocks.ELITE_AUTO_TABLE.get() }); public static final RegistryObject> ULTIMATE_AUTO_TABLE = register("ultimate_auto_table", AutoTableTileEntity.Ultimate::new, () -> new Block[] { ModBlocks.ULTIMATE_AUTO_TABLE.get() }); public static final RegistryObject> EPIC_AUTO_TABLE = register("epic_auto_table", AutoTableTileEntity.Epic::new, () -> new Block[] { ModBlocks.EPIC_AUTO_TABLE.get() }); + public static final RegistryObject> LEGENDARY_AUTO_TABLE = register("legendary_auto_table", AutoTableTileEntity.Legendary::new, () -> new Block[] { ModBlocks.LEGENDARY_AUTO_TABLE.get() }); public static final RegistryObject> COMPRESSOR = register("compressor", CompressorTileEntity::new, () -> new Block[] { ModBlocks.COMPRESSOR.get() }); public static final RegistryObject> ENDER_CRAFTER = register("ender_crafter", EnderCrafterTileEntity::new, () -> new Block[] { ModBlocks.ENDER_CRAFTER.get() }); public static final RegistryObject> AUTO_ENDER_CRAFTER = register("auto_ender_crafter", AutoEnderCrafterTileEntity::new, () -> new Block[] { ModBlocks.AUTO_ENDER_CRAFTER.get() }); diff --git a/src/main/java/com/blakebr0/extendedcrafting/tileentity/AutoTableTileEntity.java b/src/main/java/com/blakebr0/extendedcrafting/tileentity/AutoTableTileEntity.java index 6a9eb8c8..7cb82979 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/tileentity/AutoTableTileEntity.java +++ b/src/main/java/com/blakebr0/extendedcrafting/tileentity/AutoTableTileEntity.java @@ -139,10 +139,13 @@ public static void tick(Level level, BlockPos pos, BlockState state, AutoTableTi var remaining = recipe.getRemainingItems(recipeInventory); for (int i = 0; i < recipeInventory.getContainerSize(); i++) { - if (!remaining.get(i).isEmpty()) { - inventory.setStackInSlot(i, remaining.get(i)); - } else { - inventory.setStackInSlot(i, StackHelper.shrink(inventory.getStackInSlot(i), 1, false)); + inventory.setStackInSlot(i, StackHelper.shrink(inventory.getStackInSlot(i), 1, false)); + + var remainingStack = remaining.get(i); + var currentStack = inventory.getStackInSlot(i); + + if (StackHelper.canCombineStacks(remainingStack, currentStack)) { + inventory.setStackInSlot(i, StackHelper.combineStacks(currentStack, remainingStack)); } } @@ -689,4 +692,58 @@ public static BaseItemStackHandler createInventoryHandler(Runnable onContentsCha }); } } + + public static class Legendary extends AutoTableTileEntity { + private final BaseItemStackHandler inventory; + private final BaseEnergyStorage energy; + private final TableRecipeStorage recipeStorage; + + public Legendary(BlockPos pos, BlockState state) { + super(ModTileEntities.LEGENDARY_AUTO_TABLE.get(), pos, state); + this.inventory = createInventoryHandler(this::onContentsChanged); + this.recipeStorage = new TableRecipeStorage(170); + this.energy = new BaseEnergyStorage(ModConfigs.AUTO_TABLE_POWER_CAPACITY.get() * 16, this::setChangedFast); + } + + @Override + public BaseItemStackHandler getInventory() { + return this.inventory; + } + + @Override + public Component getDisplayName() { + return Localizable.of("container.extendedcrafting.legendary_table").build(); + } + + @Override + public AbstractContainerMenu createMenu(int windowId, Inventory playerInventory, Player player) { + return LegendaryAutoTableContainer.create(windowId, playerInventory, this.inventory, this.getBlockPos()); + } + + @Override + public int getProgressRequired() { + return ModConfigs.AUTO_TABLE_LEGENDARY_CRAFTING_TIME.get(); + } + + @Override + public TableRecipeStorage getRecipeStorage() { + return this.recipeStorage; + } + + @Override + public BaseEnergyStorage getEnergy() { + return this.energy; + } + + public static BaseItemStackHandler createInventoryHandler() { + return createInventoryHandler(null); + } + + public static BaseItemStackHandler createInventoryHandler(Runnable onContentsChanged) { + return BaseItemStackHandler.create(170, onContentsChanged, builder -> { + builder.setOutputSlots(169); + builder.setCanInsert((slot, stack) -> false); + }); + } + } } diff --git a/src/main/resources/assets/extendedcrafting/blockstates/legendary_auto_table.json b/src/main/resources/assets/extendedcrafting/blockstates/legendary_auto_table.json new file mode 100644 index 00000000..f2abd98b --- /dev/null +++ b/src/main/resources/assets/extendedcrafting/blockstates/legendary_auto_table.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "extendedcrafting:block/legendary_auto_table" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/extendedcrafting/lang/en_us.json b/src/main/resources/assets/extendedcrafting/lang/en_us.json index 00f74713..31f874fa 100644 --- a/src/main/resources/assets/extendedcrafting/lang/en_us.json +++ b/src/main/resources/assets/extendedcrafting/lang/en_us.json @@ -1,5 +1,5 @@ { - "itemGroup.extendedcrafting": "Extended Crafting: Monifactory Edition", + "itemGroup.extendedcrafting": "Extended Crafting: Expanded Plus", "block.extendedcrafting.luminessence_block": "Luminessence Block", "block.extendedcrafting.black_iron_block": "Black Iron Block", @@ -19,13 +19,14 @@ "block.extendedcrafting.advanced_table": "Advanced Crafting Table", "block.extendedcrafting.elite_table": "Elite Crafting Table", "block.extendedcrafting.ultimate_table": "Ultimate Crafting Table", - "block.extendedcrafting.legendary_table": "Legendary Crafting Table", "block.extendedcrafting.epic_table": "Epic Crafting Table", + "block.extendedcrafting.legendary_table": "Legendary Crafting Table", "block.extendedcrafting.basic_auto_table": "Basic Auto Crafting Table", "block.extendedcrafting.advanced_auto_table": "Advanced Auto Crafting Table", "block.extendedcrafting.elite_auto_table": "Elite Auto Crafting Table", "block.extendedcrafting.ultimate_auto_table": "Ultimate Auto Crafting Table", "block.extendedcrafting.epic_auto_table": "Epic Auto Crafting Table", + "block.extendedcrafting.legendary_auto_table": "Legendary Auto Crafting Table", "block.extendedcrafting.compressor": "Quantum Compressor", "block.extendedcrafting.ender_alternator": "Ender Alternator", "block.extendedcrafting.ender_crafter": "Ender Crafter", @@ -134,8 +135,8 @@ "jei.category.extendedcrafting.advanced_crafting": "Advanced Crafting", "jei.category.extendedcrafting.elite_crafting": "Elite Crafting", "jei.category.extendedcrafting.ultimate_crafting": "Ultimate Crafting", - "jei.category.extendedcrafting.legendary_crafting": "Legendary Crafting", "jei.category.extendedcrafting.epic_crafting": "Epic Crafting", + "jei.category.extendedcrafting.legendary_crafting": "Legendary Crafting", "jei.category.extendedcrafting.compressor": "Quantum Compression", "jei.category.extendedcrafting.ender_crafting": "Ender Crafting", "jei.category.extendedcrafting.flux_crafting": "Flux Crafting", @@ -153,6 +154,7 @@ "config.jade.plugin_extendedcrafting.elite_auto_table": "Elite Auto Table info", "config.jade.plugin_extendedcrafting.ultimate_auto_table": "Ultimate Auto Table info", "config.jade.plugin_extendedcrafting.epic_auto_table": "Epic Auto Table info", + "config.jade.plugin_extendedcrafting.legendary_auto_table": "Legendary Auto Table info", "config.jade.plugin_extendedcrafting.compressor": "Quantum Compressor info", "config.jade.plugin_extendedcrafting.ender_crafter": "Ender Crafter info", "config.jade.plugin_extendedcrafting.auto_ender_crafter": "Auto Ender Crafter info", diff --git a/src/main/resources/assets/extendedcrafting/lang/ja_jp.json b/src/main/resources/assets/extendedcrafting/lang/ja_jp.json new file mode 100644 index 00000000..c2b23cd1 --- /dev/null +++ b/src/main/resources/assets/extendedcrafting/lang/ja_jp.json @@ -0,0 +1,220 @@ +{ + "itemGroup.extendedcrafting": "Extended Crafting: Expanded Plus", + + "block.extendedcrafting.luminessence_block": "ルミネッセンスブロック", + "block.extendedcrafting.black_iron_block": "ブラックアイアンブロック", + "block.extendedcrafting.redstone_ingot_block": "レッドストーンインゴットブロック", + "block.extendedcrafting.enhanced_redstone_ingot_block": "強化レッドストーンインゴットブロック", + "block.extendedcrafting.ender_ingot_block": "エンダーインゴットブロック", + "block.extendedcrafting.enhanced_ender_ingot_block": "強化エンダーインゴットブロック", + "block.extendedcrafting.crystaltine_block": "クリスタルタインブロック", + "block.extendedcrafting.the_ultimate_block": "アルティメットブロック", + "block.extendedcrafting.nether_star_block": "ネザースターブロック", + "block.extendedcrafting.flux_star_block": "フラックススターブロック", + "block.extendedcrafting.ender_star_block": "エンダースターブロック", + "block.extendedcrafting.frame": "ブラックアイアンフレーム", + "block.extendedcrafting.pedestal": "台座", + "block.extendedcrafting.crafting_core": "クラフティングコア", + "block.extendedcrafting.basic_table": "基本クラフティングテーブル", + "block.extendedcrafting.advanced_table": "上級クラフティングテーブル", + "block.extendedcrafting.elite_table": "エリートクラフティングテーブル", + "block.extendedcrafting.ultimate_table": "アルティメットクラフティングテーブル", + "block.extendedcrafting.epic_table": "エピッククラフティングテーブル", + "block.extendedcrafting.legendary_table": "レジェンダリークラフティングテーブル", + "block.extendedcrafting.basic_auto_table": "基本自動クラフティングテーブル", + "block.extendedcrafting.advanced_auto_table": "上級自動クラフティングテーブル", + "block.extendedcrafting.elite_auto_table": "エリート自動クラフティングテーブル", + "block.extendedcrafting.ultimate_auto_table": "アルティメット自動クラフティングテーブル", + "block.extendedcrafting.epic_auto_table": "エピック自動クラフティングテーブル", + "block.extendedcrafting.legendary_auto_table": "レジェンダリー自動クラフティングテーブル", + "block.extendedcrafting.compressor": "量子コンプレッサー", + "block.extendedcrafting.ender_alternator": "エンダーオルタネーター", + "block.extendedcrafting.ender_crafter": "エンダークラフター", + "block.extendedcrafting.auto_ender_crafter": "自動エンダークラフター", + "block.extendedcrafting.flux_alternator": "フラックスオルタネーター", + "block.extendedcrafting.flux_crafter": "フラックスクラフター", + "block.extendedcrafting.auto_flux_crafter": "自動フラックスクラフター", + + "item.extendedcrafting.luminessence": "ルミネッセンス", + "item.extendedcrafting.black_iron_ingot": "ブラックアイニングット", + "item.extendedcrafting.redstone_ingot": "レッドストーンインゴット", + "item.extendedcrafting.enhanced_redstone_ingot": "強化レッドストーンインゴット", + "item.extendedcrafting.ender_ingot": "エンダーインゴット", + "item.extendedcrafting.enhanced_ender_ingot": "強化エンダーインゴット", + "item.extendedcrafting.crystaltine_ingot": "クリスタルタインインゴット", + "item.extendedcrafting.the_ultimate_ingot": "アルティメットインゴット", + "item.extendedcrafting.black_iron_nugget": "ブラックアイアンナゲット", + "item.extendedcrafting.redstone_nugget": "レッドストーンナゲット", + "item.extendedcrafting.enhanced_redstone_nugget": "強化レッドストーンナゲット", + "item.extendedcrafting.ender_nugget": "エンダーナゲット", + "item.extendedcrafting.enhanced_ender_nugget": "強化エンダーナゲット", + "item.extendedcrafting.crystaltine_nugget": "クリスタルタインナゲット", + "item.extendedcrafting.the_ultimate_nugget": "アルティメットナゲット", + "item.extendedcrafting.black_iron_slate": "ブラックアイアンプレート", + "item.extendedcrafting.basic_catalyst": "基本触媒", + "item.extendedcrafting.advanced_catalyst": "上級触媒", + "item.extendedcrafting.elite_catalyst": "エリート触媒", + "item.extendedcrafting.ultimate_catalyst": "アルティメット触媒", + "item.extendedcrafting.epic_catalyst": "エピック触媒", + "item.extendedcrafting.redstone_catalyst": "レッドストーン触媒", + "item.extendedcrafting.enhanced_redstone_catalyst": "強化レッドストーン触媒", + "item.extendedcrafting.ender_catalyst": "エンダー触媒", + "item.extendedcrafting.enhanced_ender_catalyst": "強化エンダー触媒", + "item.extendedcrafting.crystaltine_catalyst": "クリスタルタイン触媒", + "item.extendedcrafting.the_ultimate_catalyst": "アルティメット触媒", + "item.extendedcrafting.basic_component": "基本コンポーネント", + "item.extendedcrafting.advanced_component": "上級コンポーネント", + "item.extendedcrafting.elite_component": "エリートコンポーネント", + "item.extendedcrafting.epic_component": "エピックコンポーネント", + "item.extendedcrafting.ultimate_component": "アルティメットコンポーネント", + "item.extendedcrafting.redstone_component": "レッドストーンコンポーネント", + "item.extendedcrafting.enhanced_redstone_component": "強化レッドストーンコンポーネント", + "item.extendedcrafting.ender_component": "エンダーコンポーネント", + "item.extendedcrafting.enhanced_ender_component": "強化エンダーコンポーネント", + "item.extendedcrafting.crystaltine_component": "クリスタルタインコンポーネント", + "item.extendedcrafting.the_ultimate_component": "アルティメットコンポーネント", + "item.extendedcrafting.flux_star": "フラックススター", + "item.extendedcrafting.ender_star": "エンダースター", + "item.extendedcrafting.handheld_table": "携帯クラフティングテーブル", + "item.extendedcrafting.recipe_maker": "レシピメーカー", + "item.extendedcrafting.singularity": "%s シンギュラリティ", + "item.extendedcrafting.ultimate_singularity": "アルティメットシンギュラリティ", + + "container.extendedcrafting.crafting_core": "クラフティングコア", + "container.extendedcrafting.basic_table": "基本クラフト", + "container.extendedcrafting.advanced_table": "上級クラフト", + "container.extendedcrafting.elite_table": "エリートクラフト", + "container.extendedcrafting.ultimate_table": "アルティメットクラフト", + "container.extendedcrafting.legendary_table": "レジェンダリークラフト", + "container.extendedcrafting.epic_table": "エピッククラフト", + "container.extendedcrafting.compressor": "量子コンプレッサー", + "container.extendedcrafting.ender_crafter": "エンダークラフト", + "container.extendedcrafting.flux_alternator": "フラックスオルタネーター", + "container.extendedcrafting.flux_crafter": "フラックスクラフト", + + "screen.extendedcrafting.crafting_core.pedestals": "台座: %s", + "screen.extendedcrafting.crafting_core.power_cost": "FE 消費: %s", + "screen.extendedcrafting.crafting_core.power_rate": "FE 速度: %s", + "screen.extendedcrafting.crafting_core.no_recipe": "レシピが見つかりません。", + "screen.extendedcrafting.crafting_core.no_power": "電力が不足しています。", + + "tooltip.extendedcrafting.empty": "空", + "tooltip.extendedcrafting.eject": "排出", + "tooltip.extendedcrafting.ejecting": "排出中...", + "tooltip.extendedcrafting.limited_input": "入力制限", + "tooltip.extendedcrafting.unlimited_input": "無制限入力", + "tooltip.extendedcrafting.toggle_auto_crafting": "自動クラフト切替", + "tooltip.extendedcrafting.selected": "選択中", + "tooltip.extendedcrafting.tier": "ティア: %s", + "tooltip.extendedcrafting.crafting": "クラフト中: %sx %s", + "tooltip.extendedcrafting.mode": "モード: %s", + "tooltip.extendedcrafting.type": "タイプ: %s", + "tooltip.extendedcrafting.num_items": "%s 個のアイテム", + "tooltip.extendedcrafting.and_x_more": "さらに %s ...", + "tooltip.extendedcrafting.ticks": "%s ティック", + "tooltip.extendedcrafting.seconds": "%s 秒", + "tooltip.extendedcrafting.shapeless": "レシピは無形です", + "tooltip.extendedcrafting.requires_table": "ティア %s のクラフティングテーブルが必要です", + "tooltip.extendedcrafting.items_required": "必要アイテム:", + "tooltip.extendedcrafting.recipe_count": "%s 個の保存レシピ", + "tooltip.extendedcrafting.per_alternator": "オルタネーターごとに %s", + "tooltip.extendedcrafting.singularity_id": "シンギュラリティ ID: %s", + "tooltip.extendedcrafting.added_by": "追加元: %s", + "tooltip.extendedcrafting.auto_table_save_recipe": "Shift + 左クリックでレシピを保存します。", + "tooltip.extendedcrafting.auto_table_delete_recipe": "Shift + 左クリックでレシピを削除します。", + + "message.extendedcrafting.changed_mode": "モードを %s に変更しました。", + "message.extendedcrafting.copied_recipe": "レシピをクリップボードにコピーしました。", + "message.extendedcrafting.nbt_requires_crafttweaker": "NBT をコピーするには CraftTweaker が必要です。", + "message.extendedcrafting.max_unique_items_exceeded": "シェイプドデータパックレシピでは最大 (%s) 種類のアイテムしか使用できません。", + "message.extendedcrafting.no_items_in_grid": "グリッドにアイテムがありません。", + "message.extendedcrafting.no_output_item_warning": "ホットバーの1番スロットにアイテムがありません。コピーしたレシピに出力アイテムを含めるためには、1番スロットに出力アイテムを置いてください。", + + "jei.category.extendedcrafting.combination": "コンビネーションクラフト", + "jei.category.extendedcrafting.basic_crafting": "基本クラフト", + "jei.category.extendedcrafting.advanced_crafting": "上級クラフト", + "jei.category.extendedcrafting.elite_crafting": "エリートクラフト", + "jei.category.extendedcrafting.ultimate_crafting": "アルティメットクラフト", + "jei.category.extendedcrafting.epic_crafting": "エピッククラフト", + "jei.category.extendedcrafting.legendary_crafting": "レジェンダリークラフト", + "jei.category.extendedcrafting.compressor": "量子圧縮", + "jei.category.extendedcrafting.ender_crafting": "エンダークラフト", + "jei.category.extendedcrafting.flux_crafting": "フラックスクラフト", + + "config.jade.plugin_extendedcrafting.pedestal": "台座情報", + "config.jade.plugin_extendedcrafting.crafting_core": "クラフティングコア情報", + "config.jade.plugin_extendedcrafting.basic_table": "基本テーブル情報", + "config.jade.plugin_extendedcrafting.advanced_table": "上級テーブル情報", + "config.jade.plugin_extendedcrafting.elite_table": "エリートテーブル情報", + "config.jade.plugin_extendedcrafting.ultimate_table": "アルティメットテーブル情報", + "config.jade.plugin_extendedcrafting.legendary_table": "レジェンダリーテーブル情報", + "config.jade.plugin_extendedcrafting.epic_table": "エピックテーブル情報", + "config.jade.plugin_extendedcrafting.basic_auto_table": "基本自動テーブル情報", + "config.jade.plugin_extendedcrafting.advanced_auto_table": "上級自動テーブル情報", + "config.jade.plugin_extendedcrafting.elite_auto_table": "エリート自動テーブル情報", + "config.jade.plugin_extendedcrafting.ultimate_auto_table": "アルティメット自動テーブル情報", + "config.jade.plugin_extendedcrafting.epic_auto_table": "エピック自動テーブル情報", + "config.jade.plugin_extendedcrafting.legendary_auto_table": "レジェンダリー自動テーブル情報", + "config.jade.plugin_extendedcrafting.compressor": "量子コンプレッサー情報", + "config.jade.plugin_extendedcrafting.ender_crafter": "エンダークラフター情報", + "config.jade.plugin_extendedcrafting.auto_ender_crafter": "自動エンダークラフター情報", + "config.jade.plugin_extendedcrafting.flux_crafter": "フラックスクラフター情報", + + "singularity.extendedcrafting.coal": "石炭", + "singularity.extendedcrafting.copper": "銅", + "singularity.extendedcrafting.iron": "鉄", + "singularity.extendedcrafting.lapis_lazuli": "ラピスラズリ", + "singularity.extendedcrafting.redstone": "レッドストーン", + "singularity.extendedcrafting.glowstone": "グロウストーン", + "singularity.extendedcrafting.gold": "金", + "singularity.extendedcrafting.diamond": "ダイヤモンド", + "singularity.extendedcrafting.emerald": "エメラルド", + "singularity.extendedcrafting.aluminum": "アルミニウム", + "singularity.extendedcrafting.tin": "錫", + "singularity.extendedcrafting.bronze": "ブロンズ", + "singularity.extendedcrafting.silver": "銀", + "singularity.extendedcrafting.lead": "鉛", + "singularity.extendedcrafting.steel": "鋼鉄", + "singularity.extendedcrafting.nickel": "ニッケル", + "singularity.extendedcrafting.electrum": "エレクトラム", + "singularity.extendedcrafting.invar": "インバー", + "singularity.extendedcrafting.platinum": "プラチナ", + + "book.extendedcrafting.name": "Extended Crafting", + "book.extendedcrafting.landing_text": "Extended Crafting は新しいクラフト方法や追加のクラフト素材・ユーティリティを追加します。$(br2)このガイドブックは、この Mod によって追加される各クラフト方法の機能を説明するものです。クラフトの内容はモッドパック作者によって決まります。", + + "book.extendedcrafting.category.crafting.name": "クラフト方法", + "book.extendedcrafting.category.crafting.description": "Extended Crafting によって追加されたさまざまなクラフト方法を紹介します。", + "book.extendedcrafting.category.components.name": "クラフトコンポーネント", + "book.extendedcrafting.category.components.description": "Extended Crafting で追加されるクラフトアイテムを紹介します。", + "book.extendedcrafting.category.utilities.name": "クラフトユーティリティ", + "book.extendedcrafting.category.utilities.description": "Extended Crafting で追加されるクラフトユーティリティを紹介します。", + + "book.extendedcrafting.entry.combination": "コンビネーションクラフト", + "book.extendedcrafting.entry.combination.page.1": "コンビネーションクラフトは、アイテムを組み合わせて $(italic)特別な$() ものを作り出す、ワールド上に設置するマルチブロックのクラフト方式です。$(br2)このセットアップは中央のクラフティングコアと、その周囲に最大3ブロックの半径で同じ高さに置かれた台座で構成されます。", + "book.extendedcrafting.entry.combination.page.2": "クラフティングコアには電力を供給する必要があります。$(br2)レシピにはクラフティングコアに置く中央アイテムと、周囲の台座に置く台座アイテムがあります。$(br)クラフティングコアの側面を右クリックすると、進行状況や電力コスト、蓄えられた電力などを確認できます。", + "book.extendedcrafting.entry.tables": "テーブルクラフト", + "book.extendedcrafting.entry.tables.page.1": "この Mod は $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$() のクラフティングテーブルを追加します。これらのテーブルは閉じてもインベントリを保持します。", + "book.extendedcrafting.entry.compression": "圧縮クラフト", + "book.extendedcrafting.entry.compression.page.1": "量子圧縮は、物質を限界まで圧縮する工程です。これは量子コンプレッサーを使用して行います。$(br2)量子コンプレッサーは大量のアイテムを蓄え圧縮できる動力機械です。投入されたアイテムは内部バッファに格納され、その蓄積量は青いバーで表示されます。", + "book.extendedcrafting.entry.compression.page.2": "レシピには $(bold)通常$() 触媒が必要です。触媒は左端スロットに置き、消費されません。$(br2)必要なアイテムが揃うとクラフトが開始されます。量子コンプレッサーはクラフト中のみ電力を使用します。$(br2)誤って不要なアイテムを入れた場合は、投入スロット上の排出ボタンで取り出せます。", + "book.extendedcrafting.entry.compression.page.3": "内部バッファのアイテムは虚無空間に保存され、排出操作以外で取り出せません。ブロックを壊すとアイテムは失われるため注意が必要です!$(br2)バッファは $(bold)数十億個$() のアイテムを蓄えられますが、デフォルトではレシピに必要な分のみ保持します。この制限はバッファ横のロックボタンで解除できます。", + "book.extendedcrafting.entry.ender_crafting": "エンダークラフト", + "book.extendedcrafting.entry.ender_crafting.page.1": "エンダークラフトは「待つ力」で行うクラフトです。エンダークラフターとエンダーオルタネーターを使用します。オルタネーターが多いほどクラフト速度が上がります。", + "book.extendedcrafting.entry.ender_crafting.page.2": "エンダーオルタネーターはエンダークラフターの周囲 $(bold)3ブロック以内$() ならどこにでも配置できます。上下方向でも構いません!", + "book.extendedcrafting.entry.auto_tables": "自動テーブルクラフト", + "book.extendedcrafting.entry.auto_tables.page.1": "自動クラフティングテーブルは、アイテム自動挿入や搬出に対応した強化クラフティングテーブルです。$(br2)テーブルの上にチェストを置き、そのチェストにアイテムを挿入することでテーブルにアイテムが補充されます。挿入には電力を使用します。", + "book.extendedcrafting.entry.auto_tables.page.2": "自動挿入を動作させるには、グリッドにレシピを配置し保存する必要があります。これは右上のレシピスロットを Shift+左クリックで行います。クリックすると選択でき、Shift+左クリックで削除できます。$(br2)アイテム搬出にはホッパーなどを使用できます。", + "book.extendedcrafting.entry.auto_tables.page.3": "出力スロット下の下矢印で自動クラフトを無効化できます。", + "book.extendedcrafting.entry.flux_crafting": "フラックスクラフト", + "book.extendedcrafting.entry.flux_crafting.page.1": "フラックスクラフトは「待つ力」と「エネルギー」で行うクラフトです。フラックスクラフターとフラックスオルタネーターを使用します。オルタネーターが多いほどクラフトが速くなります。", + "book.extendedcrafting.entry.flux_crafting.page.2": "フラックスオルタネーターはフラックスクラフターの周囲 $(bold)3ブロック以内$() なら上下左右どこでも設置できます!", + + "book.extendedcrafting.entry.singularities": "シンギュラリティ", + "book.extendedcrafting.entry.singularities.page.1": "シンギュラリティは極度に圧縮された素材です。$(bold)通常$() は $(l:crafting/compression)量子コンプレッサー$() を使って作られます。$(br2)シンギュラリティは多くの用途に $(bold)おそらく$() 使用できます。例えば $(l:components/ultimate_singularity)アルティメットシンギュラリティ$() など。", + "book.extendedcrafting.entry.ultimate_singularity": "アルティメットシンギュラリティ", + "book.extendedcrafting.entry.ultimate_singularity.page.1": "アルティメットシンギュラリティは $(bold)通常$()、$(l:crafting/tables)アルティメットクラフティングテーブル$() で作られます。$(br2)ほぼすべて、または大半のシンギュラリティを材料として使用します。", + + "book.extendedcrafting.entry.handheld_table": "携帯クラフティングテーブル", + "book.extendedcrafting.entry.handheld_table.page.1": "携帯クラフティングテーブルは持ち運べるクラフティングテーブルです。" +} \ No newline at end of file diff --git a/src/main/resources/assets/extendedcrafting/lang/ru_ru.json b/src/main/resources/assets/extendedcrafting/lang/ru_ru.json index 9f65c543..d26b2502 100644 --- a/src/main/resources/assets/extendedcrafting/lang/ru_ru.json +++ b/src/main/resources/assets/extendedcrafting/lang/ru_ru.json @@ -1,5 +1,5 @@ { - "itemGroup.extendedcrafting": "Extended Crafting", + "itemGroup.extendedcrafting": "Extended Crafting: Expanded Plus", "block.extendedcrafting.luminessence_block": "Блок люминесценции", "block.extendedcrafting.black_iron_block": "Блок чёрного железа", diff --git a/src/main/resources/assets/extendedcrafting/lang/tr_tr.json b/src/main/resources/assets/extendedcrafting/lang/tr_tr.json new file mode 100644 index 00000000..99944bc3 --- /dev/null +++ b/src/main/resources/assets/extendedcrafting/lang/tr_tr.json @@ -0,0 +1,232 @@ +{ + "itemGroup.extendedcrafting": "Extended Crafting: Expanded Plus", + + "block.extendedcrafting.luminessence_block": "Luminessence Bloğu", + "block.extendedcrafting.black_iron_block": "Siyah Demir Bloğu", + "block.extendedcrafting.redstone_ingot_block": "Redstone Külçesi Bloğu", + "block.extendedcrafting.enhanced_redstone_ingot_block": "Geliştirilmiş Redstone Külçesi Bloğu", + "block.extendedcrafting.ender_ingot_block": "Ender Külçesi Bloğu", + "block.extendedcrafting.enhanced_ender_ingot_block": "Geliştirilmiş Ender Külçesi Bloğu", + "block.extendedcrafting.crystaltine_block": "Crystaltine Bloğu", + "block.extendedcrafting.the_ultimate_block": "Ultimate Bloğu", + "block.extendedcrafting.nether_star_block": "Nether Yıldızı Bloğu", + "block.extendedcrafting.flux_star_block": "Flux Yıldızı Bloğu", + "block.extendedcrafting.ender_star_block": "Ender Yıldızı Bloğu", + "block.extendedcrafting.frame": "Siyah Demir Çerçeve", + "block.extendedcrafting.pedestal": "Kaide", + "block.extendedcrafting.crafting_core": "Zanaat Çekirdeği", + "block.extendedcrafting.basic_table": "Temel Zanaat Masası", + "block.extendedcrafting.advanced_table": "Gelişmiş Zanaat Masası", + "block.extendedcrafting.elite_table": "Elit Zanaat Masası", + "block.extendedcrafting.ultimate_table": "Ultimate Zanaat Masası", + "block.extendedcrafting.epic_table": "Epik Zanaat Masası", + "block.extendedcrafting.legendary_table": "Efsanevi Zanaat Masası", + "block.extendedcrafting.basic_auto_table": "Temel Otomatik Zanaat Masası", + "block.extendedcrafting.advanced_auto_table": "Gelişmiş Otomatik Zanaat Masası", + "block.extendedcrafting.elite_auto_table": "Elit Otomatik Zanaat Masası", + "block.extendedcrafting.ultimate_auto_table": "Ultimate Otomatik Zanaat Masası", + "block.extendedcrafting.epic_auto_table": "Epik Otomatik Zanaat Masası", + "block.extendedcrafting.legendary_auto_table": "Efsanevi Otomatik Zanaat Masası", + "block.extendedcrafting.compressor": "Kuantum Kompresörü", + "block.extendedcrafting.ender_alternator": "Ender Alternatör", + "block.extendedcrafting.ender_crafter": "Ender Zanaat Makinesi", + "block.extendedcrafting.auto_ender_crafter": "Otomatik Ender Zanaat Makinesi", + "block.extendedcrafting.flux_alternator": "Flux Alternatör", + "block.extendedcrafting.flux_crafter": "Flux Zanaat Makinesi", + "block.extendedcrafting.auto_flux_crafter": "Otomatik Flux Zanaat Makinesi", + + "item.extendedcrafting.luminessence": "Luminessence", + "item.extendedcrafting.black_iron_ingot": "Siyah Demir Külçesi", + "item.extendedcrafting.redstone_ingot": "Redstone Külçesi", + "item.extendedcrafting.enhanced_redstone_ingot": "Geliştirilmiş Redstone Külçesi", + "item.extendedcrafting.ender_ingot": "Ender Külçesi", + "item.extendedcrafting.enhanced_ender_ingot": "Geliştirilmiş Ender Külçesi", + "item.extendedcrafting.crystaltine_ingot": "Crystaltine Külçesi", + "item.extendedcrafting.the_ultimate_ingot": "Ultimate Külçesi", + "item.extendedcrafting.black_iron_nugget": "Siyah Demir Parçacığı", + "item.extendedcrafting.redstone_nugget": "Redstone Parçacığı", + "item.extendedcrafting.enhanced_redstone_nugget": "Geliştirilmiş Redstone Parçacığı", + "item.extendedcrafting.ender_nugget": "Ender Parçacığı", + "item.extendedcrafting.enhanced_ender_nugget": "Geliştirilmiş Ender Parçacığı", + "item.extendedcrafting.crystaltine_nugget": "Crystaltine Parçacığı", + "item.extendedcrafting.the_ultimate_nugget": "Ultimate Parçacığı", + "item.extendedcrafting.black_iron_slate": "Siyah Demir Levha", + + "item.extendedcrafting.basic_catalyst": "Temel Katalizör", + "item.extendedcrafting.advanced_catalyst": "Gelişmiş Katalizör", + "item.extendedcrafting.elite_catalyst": "Elit Katalizör", + "item.extendedcrafting.ultimate_catalyst": "Ultimate Katalizör", + "item.extendedcrafting.epic_catalyst": "Epik Katalizör", + "item.extendedcrafting.redstone_catalyst": "Redstone Katalizörü", + "item.extendedcrafting.enhanced_redstone_catalyst": "Geliştirilmiş Redstone Katalizörü", + "item.extendedcrafting.ender_catalyst": "Ender Katalizörü", + "item.extendedcrafting.enhanced_ender_catalyst": "Geliştirilmiş Ender Katalizörü", + "item.extendedcrafting.crystaltine_catalyst": "Crystaltine Katalizörü", + "item.extendedcrafting.the_ultimate_catalyst": "Ultimate Katalizör", + + "item.extendedcrafting.basic_component": "Temel Bileşen", + "item.extendedcrafting.advanced_component": "Gelişmiş Bileşen", + "item.extendedcrafting.elite_component": "Elit Bileşen", + "item.extendedcrafting.epic_component": "Epik Bileşen", + "item.extendedcrafting.ultimate_component": "Ultimate Bileşen", + "item.extendedcrafting.redstone_component": "Redstone Bileşeni", + "item.extendedcrafting.enhanced_redstone_component": "Geliştirilmiş Redstone Bileşeni", + "item.extendedcrafting.ender_component": "Ender Bileşeni", + "item.extendedcrafting.enhanced_ender_component": "Geliştirilmiş Ender Bileşeni", + "item.extendedcrafting.crystaltine_component": "Crystaltine Bileşeni", + "item.extendedcrafting.the_ultimate_component": "Ultimate Bileşeni", + + "item.extendedcrafting.flux_star": "Flux Yıldızı", + "item.extendedcrafting.ender_star": "Ender Yıldızı", + "item.extendedcrafting.handheld_table": "Taşınabilir Zanaat Masası", + "item.extendedcrafting.recipe_maker": "Tarif Oluşturucu", + + "item.extendedcrafting.singularity": "%s Tekillik", + "item.extendedcrafting.ultimate_singularity": "Ultimate Tekillik", + + "container.extendedcrafting.crafting_core": "Zanaat Çekirdeği", + "container.extendedcrafting.basic_table": "Temel Zanaat", + "container.extendedcrafting.advanced_table": "Gelişmiş Zanaat", + "container.extendedcrafting.elite_table": "Elit Zanaat", + "container.extendedcrafting.ultimate_table": "Ultimate Zanaat", + "container.extendedcrafting.legendary_table": "Efsanevi Zanaat", + "container.extendedcrafting.epic_table": "Epik Zanaat", + "container.extendedcrafting.compressor": "Kuantum Kompresörü", + "container.extendedcrafting.ender_crafter": "Ender Zanaat", + "container.extendedcrafting.flux_alternator": "Flux Alternatör", + "container.extendedcrafting.flux_crafter": "Flux Zanaat", + + "screen.extendedcrafting.crafting_core.pedestals": "Kaideler: %s", + "screen.extendedcrafting.crafting_core.power_cost": "FE Maliyeti: %s", + "screen.extendedcrafting.crafting_core.power_rate": "FE Hızı: %s", + "screen.extendedcrafting.crafting_core.no_recipe": "Tarif bulunamadı.", + "screen.extendedcrafting.crafting_core.no_power": "Yetersiz güç.", + + "tooltip.extendedcrafting.empty": "Boş", + "tooltip.extendedcrafting.eject": "Çıkart", + "tooltip.extendedcrafting.ejecting": "Çıkartılıyor...", + "tooltip.extendedcrafting.limited_input": "Sınırlı Girdi", + "tooltip.extendedcrafting.unlimited_input": "Sınırsız Girdi", + "tooltip.extendedcrafting.toggle_auto_crafting": "Otomatik Zanaatı Aç/Kapat", + "tooltip.extendedcrafting.selected": "Seçildi", + "tooltip.extendedcrafting.tier": "Seviye: %s", + "tooltip.extendedcrafting.crafting": "Zanaat: %sx %s", + "tooltip.extendedcrafting.mode": "Mod: %s", + "tooltip.extendedcrafting.type": "Tür: %s", + "tooltip.extendedcrafting.num_items": "%s Öğe", + "tooltip.extendedcrafting.and_x_more": "Ve %s tane daha...", + "tooltip.extendedcrafting.ticks": "%s Tick", + "tooltip.extendedcrafting.seconds": "%s Saniye", + "tooltip.extendedcrafting.shapeless": "Tarif şekilsizdir", + "tooltip.extendedcrafting.requires_table": "%s Seviye Zanaat Masası gerektirir", + "tooltip.extendedcrafting.items_required": "Gerekli Öğeler:", + "tooltip.extendedcrafting.recipe_count": "%s Kayıtlı Tarif", + "tooltip.extendedcrafting.per_alternator": "Alternatör başına %s", + "tooltip.extendedcrafting.singularity_id": "Tekillik ID: %s", + "tooltip.extendedcrafting.added_by": "Ekleyen: %s", + "tooltip.extendedcrafting.auto_table_save_recipe": "Shift + Sol Tık ile bu tarifi kaydedin.", + "tooltip.extendedcrafting.auto_table_delete_recipe": "Shift + Sol Tık ile bu tarifi silin.", + + "message.extendedcrafting.changed_mode": "Mod %s olarak değiştirildi.", + "message.extendedcrafting.copied_recipe": "Tarif panoya kopyalandı.", + "message.extendedcrafting.nbt_requires_crafttweaker": "NBT kopyalamak için CraftTweaker gereklidir.", + "message.extendedcrafting.max_unique_items_exceeded": "Şekilli bir datapack tarifinde en fazla (%s) benzersiz öğe kullanabilirsiniz.", + "message.extendedcrafting.no_items_in_grid": "Kopyalanacak ızgarada öğe yok.", + "message.extendedcrafting.no_output_item_warning": "Birinci hızlı erişim slotunda öğe yok. Kopyalanacak tarifte çıktı olarak kullanılmasını istiyorsanız çıktı öğesini ilk hızlı erişim slotuna koyabilirsiniz.", + + "jei.category.extendedcrafting.combination": "Kombinasyon Zanaatı", + "jei.category.extendedcrafting.basic_crafting": "Temel Zanaat", + "jei.category.extendedcrafting.advanced_crafting": "Gelişmiş Zanaat", + "jei.category.extendedcrafting.elite_crafting": "Elit Zanaat", + "jei.category.extendedcrafting.ultimate_crafting": "Ultimate Zanaat", + "jei.category.extendedcrafting.epic_crafting": "Epik Zanaat", + "jei.category.extendedcrafting.legendary_crafting": "Efsanevi Zanaat", + "jei.category.extendedcrafting.compressor": "Kuantum Sıkıştırma", + "jei.category.extendedcrafting.ender_crafting": "Ender Zanaatı", + "jei.category.extendedcrafting.flux_crafting": "Flux Zanaatı", + + "config.jade.plugin_extendedcrafting.pedestal": "Kaide bilgisi", + "config.jade.plugin_extendedcrafting.crafting_core": "Zanaat Çekirdeği bilgisi", + "config.jade.plugin_extendedcrafting.basic_table": "Temel Masa bilgisi", + "config.jade.plugin_extendedcrafting.advanced_table": "Gelişmiş Masa bilgisi", + "config.jade.plugin_extendedcrafting.elite_table": "Elit Masa bilgisi", + "config.jade.plugin_extendedcrafting.ultimate_table": "Ultimate Masa bilgisi", + "config.jade.plugin_extendedcrafting.legendary_table": "Efsanevi Masa bilgisi", + "config.jade.plugin_extendedcrafting.epic_table": "Epik Masa bilgisi", + "config.jade.plugin_extendedcrafting.basic_auto_table": "Temel Otomatik Masa bilgisi", + "config.jade.plugin_extendedcrafting.advanced_auto_table": "Gelişmiş Otomatik Masa bilgisi", + "config.jade.plugin_extendedcrafting.elite_auto_table": "Elit Otomatik Masa bilgisi", + "config.jade.plugin_extendedcrafting.ultimate_auto_table": "Ultimate Otomatik Masa bilgisi", + "config.jade.plugin_extendedcrafting.epic_auto_table": "Epik Otomatik Masa bilgisi", + "config.jade.plugin_extendedcrafting.legendary_auto_table": "Efsanevi Otomatik Masa bilgisi", + "config.jade.plugin_extendedcrafting.compressor": "Kuantum Kompresörü bilgisi", + "config.jade.plugin_extendedcrafting.ender_crafter": "Ender Zanaat Makinesi bilgisi", + "config.jade.plugin_extendedcrafting.auto_ender_crafter": "Otomatik Ender Zanaat Makinesi bilgisi", + "config.jade.plugin_extendedcrafting.flux_crafter": "Flux Zanaat Makinesi bilgisi", + + "singularity.extendedcrafting.coal": "Kömür", + "singularity.extendedcrafting.copper": "Bakır", + "singularity.extendedcrafting.iron": "Demir", + "singularity.extendedcrafting.lapis_lazuli": "Lapis Lazuli", + "singularity.extendedcrafting.redstone": "Redstone", + "singularity.extendedcrafting.glowstone": "Glowstone", + "singularity.extendedcrafting.gold": "Altın", + "singularity.extendedcrafting.diamond": "Elmas", + "singularity.extendedcrafting.emerald": "Zümrüt", + "singularity.extendedcrafting.aluminum": "Alüminyum", + "singularity.extendedcrafting.tin": "Kalay", + "singularity.extendedcrafting.bronze": "Bronz", + "singularity.extendedcrafting.silver": "Gümüş", + "singularity.extendedcrafting.lead": "Kurşun", + "singularity.extendedcrafting.steel": "Çelik", + "singularity.extendedcrafting.nickel": "Nikel", + "singularity.extendedcrafting.electrum": "Elektrum", + "singularity.extendedcrafting.invar": "İnvar", + "singularity.extendedcrafting.platinum": "Platin", + + "book.extendedcrafting.name": "Extended Crafting", + "book.extendedcrafting.landing_text": "Extended Crafting, eşya üretmenin yeni yollarını ve ek üretim öğelerini ve yardımcılarını ekler. $(br2)Bu rehber kitabı, bu moddaki farklı üretim yöntemlerinin nasıl çalıştığını açıklamak içindir. Nasıl uygulandığı mod paketi yapımcısına bağlıdır.", + + "book.extendedcrafting.category.crafting.name": "Zanaat Yöntemleri", + "book.extendedcrafting.category.crafting.description": "Bu bölüm, Extended Crafting tarafından eklenen farklı zanaat mekanizmalarını açıklar.", + + "book.extendedcrafting.category.components.name": "Zanaat Bileşenleri", + "book.extendedcrafting.category.components.description": "Bu bölüm, Extended Crafting tarafından eklenen farklı zanaat öğelerini açıklar.", + + "book.extendedcrafting.category.utilities.name": "Zanaat Araçları", + "book.extendedcrafting.category.utilities.description": "Bu bölüm, Extended Crafting tarafından eklenen zanaat yardımcılarını açıklar.", + + "book.extendedcrafting.entry.combination": "Kombinasyon Zanaatı", + "book.extendedcrafting.entry.combination.page.1": "Kombinasyon Zanaatı, dünyada kurulan çok-bloklu bir zanaat yapısıdır ve öğeler bir araya getirilerek $(italic)özel$() bir şey üretilir. $(br2)Bu yapı, ortada bir Zanaat Çekirdeği ve etrafına yerleştirilmiş kaidelerden oluşur. Kaideler, Zanaat Çekirdeğinin etrafında 3 blok yarıçap içinde herhangi bir yere yerleştirilebilir ve aynı Y seviyesinde olmalıdır.", + "book.extendedcrafting.entry.combination.page.2": "Bu yapının çalışması için Zanaat Çekirdeğine güç verilmelidir. $(br2)Tariflerde merkezde Zanaat Çekirdeğine konulan bir ana eşya ve çevredeki kaidelere konulan yan eşyalar bulunur. $(br)Zanaat Çekirdeğinin yanına sağ tıklamak, mevcut zanaat işlemi hakkında ilerleme veya güç maliyeti gibi bilgileri, ayrıca içinde ne kadar güç depolandığını gösterir.", + + "book.extendedcrafting.entry.tables": "Masa Zanaatı", + "book.extendedcrafting.entry.tables.page.1": "Bu mod, $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$() ve $(bold)9x9$() boyutlarında seviyeli zanaat masaları ekler. Bu masalar kapanınca envanterlerini korurlar.", + + "book.extendedcrafting.entry.compression": "Sıkıştırma Zanaatı", + "book.extendedcrafting.entry.compression.page.1": "Kuantum Sıkıştırma, öğelerin aşırı derecede sıkıştırılması işlemidir. Bu işlem bir Kuantum Kompresörü kullanılarak yapılır. $(br2)Kuantum Kompresörü, güç ile çalışan ve aşırı büyük miktarda malzemeyi tutup sıkıştırabilen bir makinedir. Makineye yerleştirilen öğeler, sıkıştırma için kullanılan dahili bir arabelleğe gider. Bu arabellek mavi bir çubuk olarak gösterilir.", + "book.extendedcrafting.entry.compression.page.2": "Her tarif $(bold)genellikle$() bir katalizör gerektirir. Katalizör sol taraftaki en uç yuvaya konur ve kullanılmaz. $(br2)Arabellekte yeterli öğe olduğunda makine öğeyi üretmeye başlar. Kuantum Kompresörü yalnızca üretim sırasında güç kullanır. $(br2)Eğer kompresöre yanlışlıkla kaybetmek istemediğiniz bir öğe koyarsanız, giriş yuvasının üzerindeki çıkart düğmesine basarak geri alabilirsiniz.", + "book.extendedcrafting.entry.compression.page.3": "Arabellek içindeki öğeler sonsuz boşlukta tutulur ve yalnızca çıkartılarak geri alınabilir. Bloğu kırmak, bu öğelerin sonsuza dek kaybolmasına sebep olur, bu yüzden dikkatli olun! $(br2)Kuantum Kompresörünün giriş arabelleği $(bold)milyarlarca$() öğe depolayabilir, ancak varsayılan olarak yalnızca tarifin gerektirdiği kadarını tutar. Bu sınırı, arabelleğin yanındaki kilit butonuna basarak kaldırabilirsiniz.", + + "book.extendedcrafting.entry.ender_crafting": "Ender Zanaatı", + "book.extendedcrafting.entry.ender_crafting.page.1": "Ender Zanaatı, bekleme gücünü kullanarak yapılan bir zanaattır. Ender Zanaatı kurulumu bir Ender Zanaat Makinesi ve Ender Alternatörlerden oluşur. Zanaat makinesi enerjiyi alternatörler aracılığıyla boşluktan çeker. Ne kadar çok alternatör varsa, o kadar hızlı üretir.", + "book.extendedcrafting.entry.ender_crafting.page.2": "Ender Alternatörler, Ender Zanaat Makinesinin etrafına $(bold)3 blok yarıçap$() içinde herhangi bir yere konabilir. Hatta yukarıya veya aşağıya bile!", + + "book.extendedcrafting.entry.auto_tables": "Otomatik Masa Zanaatı", + "book.extendedcrafting.entry.auto_tables.page.1": "Otomatik Zanaat Masaları, $(l:crafting/tables)Zanaat Masalarının$() yükseltilmiş bir sürümüdür ve öğeleri otomatik olarak alıp dışarı verebilirler. $(br2)Öğe yerleştirme, masanın üstüne bir sandık koyarak ve öğeleri bu sandığa yerleştirerek yapılır. Öğe yerleştirme güç kullanır.", + "book.extendedcrafting.entry.auto_tables.page.2": "Öğe yerleştirmenin çalışması için, önce ızgaraya bir tarif yerleştirip kaydetmeniz gerekir. Bu, sağ üstteki 3 tarif yuvasından birine shift+sol tıklayarak yapılır. Ardından tarifi üzerine tıklayarak seçebilirsiniz. TARİFİ shift+sol tıklayarak silebilirsiniz. $(br2)Öğeler, bir huninin veya başka uyumlu çıkarma mekanizmasının kullanılmasıyla masadan dışarı alınabilir.", + "book.extendedcrafting.entry.auto_tables.page.3": "Otomatik zanaatı, çıktı yuvasının altındaki aşağı ok tuşuna basarak devre dışı bırakabilirsiniz.", + + "book.extendedcrafting.entry.flux_crafting": "Flux Zanaatı", + "book.extendedcrafting.entry.flux_crafting.page.1": "Flux Zanaatı, hem bekleme gücünü hem de enerji gücünü kullanan bir zanaattır. Flux Zanaatı kurulumu bir Flux Zanaat Makinesi ve Flux Alternatörlerden oluşur. Makine enerjiyi alternatörlerden çeker. Ne kadar çok alternatör varsa o kadar hızlı üretir.", + "book.extendedcrafting.entry.flux_crafting.page.2": "Flux Alternatörler, Flux Zanaat Makinesinin etrafına $(bold)3 blok yarıçap$() içinde herhangi bir yere konabilir. Yukarıya veya aşağıya bile!", + + "book.extendedcrafting.entry.singularities": "Tekillikler", + "book.extendedcrafting.entry.singularities.page.1": "Tekillikler aşırı derecede sıkıştırılmış malzemelerdir. Bunlar $(bold)genellikle$() bir $(l:crafting/compression)Kuantum Kompresörü$() kullanılarak yapılır. $(br2)Tekillikler $(bold)muhtemelen$() birçok şey için kullanılabilir, örneğin $(l:components/ultimate_singularity)Ultimate Tekillik$().", + + "book.extendedcrafting.entry.ultimate_singularity": "Ultimate Tekillik", + "book.extendedcrafting.entry.ultimate_singularity.page.1": "Ultimate Tekillik, $(bold)genellikle$() $(l:crafting/tables)Ultimate Zanaat Masasında$() yapılır. $(br2)Genellikle mevcut tekilliklerin çoğundan veya tamamından oluşur.", + + "book.extendedcrafting.entry.handheld_table": "Taşınabilir Zanaat Masası", + "book.extendedcrafting.entry.handheld_table.page.1": "Taşınabilir Zanaat Masası normal bir Zanaat Masasıdır." +} diff --git a/src/main/resources/assets/extendedcrafting/lang/uk_ua.json b/src/main/resources/assets/extendedcrafting/lang/uk_ua.json index c1dd6bdf..5e169ac3 100644 --- a/src/main/resources/assets/extendedcrafting/lang/uk_ua.json +++ b/src/main/resources/assets/extendedcrafting/lang/uk_ua.json @@ -1,5 +1,5 @@ { - "itemGroup.extendedcrafting": "Extended Crafting", + "itemGroup.extendedcrafting": "Extended Crafting: Expanded Plus", "block.extendedcrafting.luminessence_block": "Люмінесцентний блок", "block.extendedcrafting.black_iron_block": "Блок чорного заліза", diff --git a/src/main/resources/assets/extendedcrafting/models/block/legendary_auto_table.json b/src/main/resources/assets/extendedcrafting/models/block/legendary_auto_table.json new file mode 100644 index 00000000..be55c6da --- /dev/null +++ b/src/main/resources/assets/extendedcrafting/models/block/legendary_auto_table.json @@ -0,0 +1,102 @@ +{ + "textures": { + "0": "extendedcrafting:block/black_iron_block", + "1": "extendedcrafting:block/legendary_table_top", + "2": "extendedcrafting:block/table_side", + "3": "extendedcrafting:block/auto_table_side", + "particle": "extendedcrafting:block/black_iron_block" + }, + "elements": [ + { + "name": "Cube", + "from": [2, 0, 2], + "to": [14, 2, 14], + "faces": { + "north": {"uv": [2, 2, 14, 4], "texture": "#0"}, + "east": {"uv": [2, 2, 14, 4], "texture": "#0"}, + "south": {"uv": [2, 2, 14, 4], "texture": "#0"}, + "west": {"uv": [2, 2, 14, 4], "texture": "#0"}, + "up": {"uv": [2, 2, 14, 14], "texture": "#0"}, + "down": {"uv": [2, 2, 14, 14], "texture": "#0"} + } + }, + { + "name": "Cube", + "from": [3, 2, 3], + "to": [5, 10, 5], + "faces": { + "north": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "east": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "south": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "west": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "up": {"uv": [1, 1, 3, 3], "texture": "#0"}, + "down": {"uv": [1, 1, 3, 3], "texture": "#0"} + } + }, + { + "name": "Cube", + "from": [11, 2, 11], + "to": [13, 10, 13], + "faces": { + "north": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "east": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "south": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "west": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "up": {"uv": [1, 1, 3, 3], "texture": "#0"}, + "down": {"uv": [1, 1, 3, 3], "texture": "#0"} + } + }, + { + "name": "Cube", + "from": [11, 2, 3], + "to": [13, 10, 5], + "faces": { + "north": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "east": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "south": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "west": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "up": {"uv": [1, 1, 3, 3], "rotation": 270, "texture": "#0"}, + "down": {"uv": [1, 1, 3, 3], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "Cube", + "from": [3, 2, 11], + "to": [5, 10, 13], + "faces": { + "north": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "east": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "south": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "west": {"uv": [1, 1, 3, 9], "texture": "#0"}, + "up": {"uv": [1, 1, 3, 3], "texture": "#0"}, + "down": {"uv": [1, 1, 3, 3], "texture": "#0"} + } + }, + { + "name": "Cube", + "from": [0, 10, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 6], "texture": "#2"}, + "east": {"uv": [0, 0, 16, 6], "texture": "#2"}, + "south": {"uv": [0, 0, 16, 6], "texture": "#2"}, + "west": {"uv": [0, 0, 16, 6], "texture": "#2"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + }, + { + "from": [4, 2, 4], + "to": [12, 10, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [12, 10, 12]}, + "faces": { + "north": {"uv": [4, 7, 12, 15], "texture": "#3"}, + "east": {"uv": [4, 7, 12, 15], "texture": "#3"}, + "south": {"uv": [4, 7, 12, 15], "texture": "#3"}, + "west": {"uv": [4, 7, 12, 15], "texture": "#3"}, + "up": {"uv": [0, 0, 8, 8], "texture": "#0"}, + "down": {"uv": [0, 0, 8, 8], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/extendedcrafting/models/item/legendary_auto_table.json b/src/main/resources/assets/extendedcrafting/models/item/legendary_auto_table.json new file mode 100644 index 00000000..6dc90de9 --- /dev/null +++ b/src/main/resources/assets/extendedcrafting/models/item/legendary_auto_table.json @@ -0,0 +1,35 @@ +{ + "parent": "extendedcrafting:block/legendary_auto_table", + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + }, + "ground": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 3, 0], + "scale":[ 0.25, 0.25, 0.25 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.5, 0.5, 0.5 ] + }, + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, 0], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 225, 0 ], + "translation": [ 0, 0, 0 ], + "scale": [ 0.40, 0.40, 0.40 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/extendedcrafting/textures/gui/legendary_table.png b/src/main/resources/assets/extendedcrafting/textures/gui/legendary_table.png index ee28a774e68e1048a2cae7366bbb9c58cb2e7b9d..b714ea1dc35470c32a5d4a08f17de2e78f6f052b 100644 GIT binary patch literal 6366 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 R5wDs+<+6rif&3l6{{mdixPAZt literal 3557 zcmd^CeNYo;8h?X9BZ`&IIi%9oy>)ul!(=z%tJxAjNf1t>7CFH?v{^O_M3ZdX-IxFZ zDb9%wTI;la-5kBUI^*4pA5ePji5~gOuxJ;6vks{Q4pny5CeU838}QU0{`3} zw=>yyKc4sZJkRg>Jdty#4^G-Q4V03b9iRhJGx5WEZmGGQs2pL_x?GwrGCIRNII z7k-lck#iydkoKB0viK~+N`hjnO47vS&`Oup4y^%*PjuNyYBS9vIdq=crbTa^@t}y= zq(w7h47kCbOy`?Z3t4(?;i?R(a5JSbp@|7dyo-PUR+=Xfm(^n92$vQWaS3=WJjPH& zG~qXE(WQbzB+IY{NoH6Y(I{043dhw*oJN@wN5w`{)DlFEtD`YI4pYS{@HiqyLqy|< z|3INT)|5-6>r(vA;GGuD=XpDUVNR!0>5Nh`Y#yf4XfznE#?)#Bv`}ybHlB1TY}~>z z1Rc#$tl7?+85<%Xk~xfn*P<}g(HyMy0IZGk^8^{gT%;XSDRChu(a=N%?CcKKB04uw z7;T}gw2kMWttwz^&u4gs%V&N9I`Dd&1IVqx5b*KHSgh873y#-sg=zQ+d89R$QDCRB zbedxvEJf?L!Y~&K+1QC>mL_?I&0rYISf$pCg^Z|Ul`7=1|Pis+F zwHSp;t-xb5aGbzZM6@Ono^gEC)WDd`xdlHmRjG)WI3ntWai&l+CXy!~Yiy#3T!yuh zFk!Qm%%d^8Ee}NkG!n^-g<+v%7+sVYg~33i**KoGQFNM4i^80hX0wT);1QK$idDo> zbew|HL{o|!l_>|RFDfPqr^pv#)zsL29YZ;U%8u+Ng)(l&Vv`iUCXgEOvC z#VYW3#9Dfb|H@)UL=_MuC8%4AQbJj26Y76#o-zZYu+DrMg8odoN6k1Umv@pZy)+N9 z^;kJ!FnCPp!_hpjAEqe2d#Go}%;6vqE(0S7-UNmiZG)4Gg(E6yONY&$>R#LQ>}=`LmL787jOByxr;$y+C?5D7whLWQQNFYC=+kv7 zkVx_9kj8SM426X{yPt%8WeLntAd1?Us4b ztxwd;sr3iSOO7};RDE%5|7X3CUu~WhF({KEzX9MaDVW64J*;)p>pyoCe>+f9Q}~B@ z)h*=iEoWLU$V;_HI?zL(UEEN7t-{#VU$A>iZT7vAUuK+=<;GmStjDi>5Cz=NOTf-2 zC$)q(9MAo|B%(HeqQ{T@XPvUFA>~a8(9Hx%Z-B`xB2LJa4+1F4vh^Rm$A-<0y)%0< zH28UgdBJGvQvxV#*oT|m+h1X<-k10Ig8jIrB2G~3_b3&{b?=SWVnhF2S1 zyPr6EXa}gLUcGo^f%?$)#9-+}dc;q8r+^h{Tqvrm_}V9R%Cg%gk^DQf?|)Uh@r@yB zU|#jUfC9cJ;;G51UTBj?(is`vU|iTd*%=^+UyLSrv?wBqNM)^TdPKqW2~Df<;`bNi zh&Q~!-Nl9NUexcG>ZCgSQ{Q&HnI|frtz6Q?p4)gL;p1*se8TCVl6QU6@C#W7I{*5z z=j4sMh3^g}MRx6I51!Hl+%!@Inre>U*c3Am;#yj+y3n&Vg1YIbY1CK$>$1LD@$asF z`E|DTrf=EbuZ%2mcc58DDBrWllxV)^nb9}&#qr}MCBbJANb#F*vtgE5;SH`DUulqB zSr#me!dX+AT|ypJr5|1H?#is6_2mdE?}IHDe|WDu@I|;+D%&^r3MGq?Z% diff --git a/src/main/resources/data/extendedcrafting/loot_tables/blocks/legendary_auto_table.json b/src/main/resources/data/extendedcrafting/loot_tables/blocks/legendary_auto_table.json new file mode 100644 index 00000000..d53b4fdf --- /dev/null +++ b/src/main/resources/data/extendedcrafting/loot_tables/blocks/legendary_auto_table.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "name": "extendedcrafting:legendary_auto_table", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "extendedcrafting:legendary_auto_table" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/extendedcrafting/recipes/legendary_auto_table.json b/src/main/resources/data/extendedcrafting/recipes/legendary_auto_table.json new file mode 100644 index 00000000..1433041c --- /dev/null +++ b/src/main/resources/data/extendedcrafting/recipes/legendary_auto_table.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:crafting_shaped", + "conditions": [ + { + "type": "cucumber:feature_flag", + "flag": "extendedcrafting:tables" + }, + { + "type": "cucumber:feature_flag", + "flag": "extendedcrafting:auto_tables" + } + ], + "pattern": [ + "BSB", + "CTC", + "BSB" + ], + "key": { + "T": { + "item": "extendedcrafting:legendary_table" + }, + "C": { + "item": "extendedcrafting:crystaltine_component" + }, + "B": { + "item": "extendedcrafting:black_iron_ingot" + }, + "S": { + "item": "extendedcrafting:redstone_component" + } + }, + "result": { + "item": "extendedcrafting:legendary_auto_table" + } +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json index 917fd418..3d422a65 100644 --- a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -23,6 +23,7 @@ "extendedcrafting:epic_auto_table", "extendedcrafting:epic_table", "extendedcrafting:legendary_table", + "extendedcrafting:legendary_auto_table", "extendedcrafting:auto_ender_crafter", "extendedcrafting:flux_alternator", "extendedcrafting:flux_crafter", diff --git a/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json b/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json index 8e4fe7b3..c1d3896e 100644 --- a/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json +++ b/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json @@ -15,6 +15,7 @@ "extendedcrafting:ultimate_table", "extendedcrafting:epic_table", "extendedcrafting:legendary_table", + "extendedcrafting:legendary_auto_table", "extendedcrafting:basic_auto_table", "extendedcrafting:advanced_auto_table", "extendedcrafting:elite_auto_table", diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta index b1248dab..cefeea03 100644 --- a/src/main/resources/pack.mcmeta +++ b/src/main/resources/pack.mcmeta @@ -1,6 +1,6 @@ { "pack": { - "description": "Extended Crafting: Monifactory Edition resources", + "description": "Extended Crafting: Expanded Plus resources", "pack_format": 15 } } diff --git a/src/test/resources/scripts/combination.test.zs b/src/test/resources/crafttweaker_scripts/combination.test.zs similarity index 100% rename from src/test/resources/scripts/combination.test.zs rename to src/test/resources/crafttweaker_scripts/combination.test.zs diff --git a/src/test/resources/scripts/compressor.test.zs b/src/test/resources/crafttweaker_scripts/compressor.test.zs similarity index 100% rename from src/test/resources/scripts/compressor.test.zs rename to src/test/resources/crafttweaker_scripts/compressor.test.zs diff --git a/src/test/resources/scripts/ender_crafter.test.zs b/src/test/resources/crafttweaker_scripts/ender_crafter.test.zs similarity index 100% rename from src/test/resources/scripts/ender_crafter.test.zs rename to src/test/resources/crafttweaker_scripts/ender_crafter.test.zs diff --git a/src/test/resources/scripts/flux_crafter.test.zs b/src/test/resources/crafttweaker_scripts/flux_crafter.test.zs similarity index 100% rename from src/test/resources/scripts/flux_crafter.test.zs rename to src/test/resources/crafttweaker_scripts/flux_crafter.test.zs diff --git a/src/test/resources/scripts/table.test.zs b/src/test/resources/crafttweaker_scripts/table.test.zs similarity index 100% rename from src/test/resources/scripts/table.test.zs rename to src/test/resources/crafttweaker_scripts/table.test.zs diff --git a/src/test/resources/kubejs_scripts/combination_test.js b/src/test/resources/kubejs_scripts/combination_test.js new file mode 100644 index 00000000..7616a960 --- /dev/null +++ b/src/test/resources/kubejs_scripts/combination_test.js @@ -0,0 +1,40 @@ +ServerEvents.recipes((event) => { + // minecraft:stone + event.custom({ + type: 'extendedcrafting:combination', + powerCost: 100000, + input: { + item: 'minecraft:iron_ingot' + }, + ingredients: [ + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + } + ], + result: { + item: 'minecraft:stone' + } + }) + .id('minecraft:stone'); +}); \ No newline at end of file diff --git a/src/test/resources/kubejs_scripts/compression_test.js b/src/test/resources/kubejs_scripts/compression_test.js new file mode 100644 index 00000000..20768591 --- /dev/null +++ b/src/test/resources/kubejs_scripts/compression_test.js @@ -0,0 +1,18 @@ +ServerEvents.recipes((event) => { + // minecraft:stone + event.custom({ + type: 'extendedcrafting:compressor', + powerCost: 500000, + inputCount: 10000, + ingredient: { + item: 'minecraft:carrot' + }, + catalyst: { + item: 'extendedcrafting:ender_catalyst' + }, + result: { + item: 'minecraft:stone' + } + }) + .id('minecraft:stone'); +}); \ No newline at end of file diff --git a/src/test/resources/kubejs_scripts/ender_crafter_test.js b/src/test/resources/kubejs_scripts/ender_crafter_test.js new file mode 100644 index 00000000..8d7722d2 --- /dev/null +++ b/src/test/resources/kubejs_scripts/ender_crafter_test.js @@ -0,0 +1,59 @@ +//Shaped +ServerEvents.recipes((event) => { + // minecraft:stone + event.custom({ + type: 'extendedcrafting:shaped_ender_crafter', + pattern: [ + 'AAA', + 'A A', + 'AAA' + ], + key: { + A: { + item: 'minecraft:gold_ingot' + } + }, + result: { + item: 'minecraft:stone' + } + }) + .id('minecraft:stone'); +}); + +//Shapeless +ServerEvents.recipes((event) => { + // minecraft:stone + event.custom({ + type: 'extendedcrafting:shapeless_ender_crafter', + ingredients: [ + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + } + ], + result: { + item: 'minecraft:stone' + } + }) + .id('minecraft:stone'); +}); \ No newline at end of file diff --git a/src/test/resources/kubejs_scripts/flux_crafter_test.js b/src/test/resources/kubejs_scripts/flux_crafter_test.js new file mode 100644 index 00000000..e29ef28b --- /dev/null +++ b/src/test/resources/kubejs_scripts/flux_crafter_test.js @@ -0,0 +1,63 @@ +//Shaped +ServerEvents.recipes((event) => { + // minecraft:stone + event.custom({ + type: 'extendedcrafting:shaped_flux_crafter', + powerRequired: 100000, + powerRate: 400, + pattern: [ + 'AAA', + 'A A', + 'AAA' + ], + key: { + A: { + item: 'minecraft:gold_ingot' + } + }, + result: { + item: 'minecraft:stone' + } + }) + .id('minecraft:stone'); +}); + +//SHapeless +ServerEvents.recipes((event) => { + // minecraft:stone + event.custom({ + type: 'extendedcrafting:shapeless_flux_crafter', + powerRequired: 100000, + powerRate: 400, + ingredients: [ + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + } + ], + result: { + item: 'minecraft:stone' + } + }) + .id('minecraft:stone'); +}); \ No newline at end of file diff --git a/src/test/resources/kubejs_scripts/table_test.js b/src/test/resources/kubejs_scripts/table_test.js new file mode 100644 index 00000000..f6a1a6af --- /dev/null +++ b/src/test/resources/kubejs_scripts/table_test.js @@ -0,0 +1,320 @@ +//Tier 1 Table +ServerEvents.recipes((event) => { + // minecraft:stone + event.custom({ + type: 'extendedcrafting:shaped_table', + pattern: [ + 'AAA', + 'A A', + 'AAA' + ], + key: { + A: { + item: 'minecraft:gold_ingot' + } + }, + result: { + item: 'minecraft:stone' + } + }) + .id('minecraft:stone'); +}); + +//Tier 2 Table +ServerEvents.recipes((event) => { + // minecraft:stone + event.custom({ + type: 'extendedcrafting:shaped_table', + pattern: [ + 'AAAAA', + 'A A', + 'A A', + 'A A', + 'AAAAA' + ], + key: { + A: { + item: 'minecraft:gold_ingot' + } + }, + result: { + item: 'minecraft:stone' + } + }) + .id('minecraft:stone'); +}); + +//Tier 3 Table +ServerEvents.recipes((event) => { + // minecraft:stone + event.custom({ + type: 'extendedcrafting:shaped_table', + pattern: [ + 'AAAAAAA', + 'A A', + 'A A', + 'A A', + 'A A', + 'A A', + 'AAAAAAA' + ], + key: { + A: { + item: 'minecraft:gold_ingot' + } + }, + result: { + item: 'minecraft:stone' + } + }) + .id('minecraft:stone'); +}); + +//Tier 4 Table +ServerEvents.recipes((event) => { + // minecraft:stone + event.custom({ + type: 'extendedcrafting:shaped_table', + pattern: [ + 'AAAAAAAAA', + 'A A', + 'A A', + 'A A', + 'A A', + 'A A', + 'A A', + 'A A', + 'AAAAAAAAA' + ], + key: { + A: { + item: 'minecraft:gold_ingot' + } + }, + result: { + item: 'minecraft:stone' + } + }) + .id('minecraft:stone'); +}); + +//Tier 5 Table +ServerEvents.recipes((event) => { + // minecraft:stone + event.custom({ + type: 'extendedcrafting:shaped_table', + pattern: [ + 'AAAAAAAAAAA', + 'A A', + 'A A', + 'A A', + 'A A', + 'A A', + 'A A', + 'A A', + 'A A', + 'A A', + 'AAAAAAAAAAA' + ], + key: { + A: { + item: 'minecraft:gold_ingot' + } + }, + result: { + item: 'minecraft:stone' + } + }) + .id('minecraft:stone'); +}); + +//Tier 6 Table +ServerEvents.recipes((event) => { + // minecraft:stone + event.custom({ + type: 'extendedcrafting:shaped_table', + pattern: [ + 'AAAAAAAAAAAAA', + 'A A', + 'A A', + 'A A', + 'A A', + 'A A', + 'A A', + 'A A', + 'A A', + 'A A', + 'A A', + 'A A', + 'AAAAAAAAAAAAA' + ], + key: { + A: { + item: 'minecraft:gold_ingot' + } + }, + result: { + item: 'minecraft:stone' + } + }) + .id('minecraft:stone'); +}); + +//Table Shapeless Test +ServerEvents.recipes((event) => { + // minecraft:stone + event.custom({ + type: 'extendedcrafting:shapeless_table', + tier: 6, + ingredients: [ + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + }, + { + item: 'minecraft:gold_ingot' + } + ], + result: { + item: 'minecraft:stone' + } + }) + .id('minecraft:stone'); +}); \ No newline at end of file From 78e6d37d1850b6daced8f746af192519ac8060d0 Mon Sep 17 00:00:00 2001 From: BOLT_M4G1C Date: Sun, 7 Dec 2025 13:32:26 +0100 Subject: [PATCH 08/12] Adds Legendary Auto Table with crafting functionality and associated assets --- .../textures/gui/legendary_auto_table.png | Bin 0 -> 7583 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/extendedcrafting/textures/gui/legendary_auto_table.png diff --git a/src/main/resources/assets/extendedcrafting/textures/gui/legendary_auto_table.png b/src/main/resources/assets/extendedcrafting/textures/gui/legendary_auto_table.png new file mode 100644 index 0000000000000000000000000000000000000000..6eea81a92cda248922745b3f029f2dd45e692288 GIT binary patch literal 7583 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 GxBdq)*+w=1 literal 0 HcmV?d00001 From 8dda45f841f5c0b72c21741b7a3572aa66a38240 Mon Sep 17 00:00:00 2001 From: BOLT_M4G1C Date: Sun, 7 Dec 2025 13:49:16 +0100 Subject: [PATCH 09/12] Updates localization files to include new crafting table sizes and improves translations for various items and components --- gradle.properties | 12 +- .../assets/extendedcrafting/lang/en_us.json | 2 +- .../assets/extendedcrafting/lang/ja_jp.json | 2 +- .../assets/extendedcrafting/lang/ko_kr.json | 282 ++++++++++++------ .../assets/extendedcrafting/lang/ru_ru.json | 2 +- .../assets/extendedcrafting/lang/tr_tr.json | 2 +- .../assets/extendedcrafting/lang/uk_ua.json | 2 +- .../assets/extendedcrafting/lang/zh_cn.json | 2 +- 8 files changed, 203 insertions(+), 103 deletions(-) diff --git a/gradle.properties b/gradle.properties index 45dc5a25..67c5dbf7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,10 +3,10 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false -forge_version=1.20.1-47.3.7 -cucumber_version=1.20.1-7.0.11 -jei_version=15.18.0.79 +forge_version=1.20.1-47.4.9 +cucumber_version=1.20.1-7.0.16 +jei_version=15.20.0.112 jei_mc_version=1.20.1 -jade_version=5672013 -patchouli_version=1.20.1-84-FORGE -crafttweaker_version=1.20.1:14.0.43 \ No newline at end of file +jade_version=11.13.2 +patchouli_version=1.20.1-84.1-FORGE +crafttweaker_version=1.20.1:14.0.59 \ No newline at end of file diff --git a/src/main/resources/assets/extendedcrafting/lang/en_us.json b/src/main/resources/assets/extendedcrafting/lang/en_us.json index 31f874fa..4781a64e 100644 --- a/src/main/resources/assets/extendedcrafting/lang/en_us.json +++ b/src/main/resources/assets/extendedcrafting/lang/en_us.json @@ -194,7 +194,7 @@ "book.extendedcrafting.entry.combination.page.1": "Combination Crafting is an in-world multi-block crafting setup where items are combined together to create something $(italic)special.$() $(br2)This setup consists of a Crafting Core in the center and pedestals placed around it. Pedestals can be placed anywhere around the Crafting Core in a 3 block radius, and must be on the same Y level.", "book.extendedcrafting.entry.combination.page.2": "Power must be provided to the Crafting Core for this structure to function. $(br2)Recipes have a center item which goes on the Crafting Core, and pedestal items which go on the pedestals around it. $(br)Right clicking on the side of the Crafting Core will show you information about the current crafting operation, such as progress or power cost, as well as how much power is stored in it.", "book.extendedcrafting.entry.tables": "Table Crafting", - "book.extendedcrafting.entry.tables.page.1": "This mod adds tiered crafting tables that come in $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), and $(bold)9x9$() sizes. These tables hold their inventories when closed.", + "book.extendedcrafting.entry.tables.page.1": "This mod adds tiered crafting tables that come in $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$() , $(bold)11x11$() , and $(bold)13x13$() sizes. These tables hold their inventories when closed.", "book.extendedcrafting.entry.compression": "Compression Crafting", "book.extendedcrafting.entry.compression.page.1": "Quantum Compression is the process of compressing items a little too much. This is done using a Quantum Compressor. $(br2)The Quantum Compressor is a powered machine that can hold and compress extremely large amounts of materials. Items placed inside the Quantum Compressor go into an internal buffer for use in compression. The buffer is represented as a blue bar.", "book.extendedcrafting.entry.compression.page.2": "Each recipe $(bold)usually$() requires a catalyst. The catalyst is placed in the left-most slot and does not get used up. $(br2)Once there are enough items in the buffer, the machine will begin to craft the item. The Quantum Compressor will only use power while crafting. $(br2)If you happen to put items into the compressor that you would rather not lose forever, you can press the eject button above the input slot to get them back.", diff --git a/src/main/resources/assets/extendedcrafting/lang/ja_jp.json b/src/main/resources/assets/extendedcrafting/lang/ja_jp.json index c2b23cd1..ff2de172 100644 --- a/src/main/resources/assets/extendedcrafting/lang/ja_jp.json +++ b/src/main/resources/assets/extendedcrafting/lang/ja_jp.json @@ -194,7 +194,7 @@ "book.extendedcrafting.entry.combination.page.1": "コンビネーションクラフトは、アイテムを組み合わせて $(italic)特別な$() ものを作り出す、ワールド上に設置するマルチブロックのクラフト方式です。$(br2)このセットアップは中央のクラフティングコアと、その周囲に最大3ブロックの半径で同じ高さに置かれた台座で構成されます。", "book.extendedcrafting.entry.combination.page.2": "クラフティングコアには電力を供給する必要があります。$(br2)レシピにはクラフティングコアに置く中央アイテムと、周囲の台座に置く台座アイテムがあります。$(br)クラフティングコアの側面を右クリックすると、進行状況や電力コスト、蓄えられた電力などを確認できます。", "book.extendedcrafting.entry.tables": "テーブルクラフト", - "book.extendedcrafting.entry.tables.page.1": "この Mod は $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$() のクラフティングテーブルを追加します。これらのテーブルは閉じてもインベントリを保持します。", + "book.extendedcrafting.entry.tables.page.1": "この Mod は $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$(), $(bold)11x11$(), $(bold)13x13$() のクラフティングテーブルを追加します。これらのテーブルは閉じてもインベントリを保持します。", "book.extendedcrafting.entry.compression": "圧縮クラフト", "book.extendedcrafting.entry.compression.page.1": "量子圧縮は、物質を限界まで圧縮する工程です。これは量子コンプレッサーを使用して行います。$(br2)量子コンプレッサーは大量のアイテムを蓄え圧縮できる動力機械です。投入されたアイテムは内部バッファに格納され、その蓄積量は青いバーで表示されます。", "book.extendedcrafting.entry.compression.page.2": "レシピには $(bold)通常$() 触媒が必要です。触媒は左端スロットに置き、消費されません。$(br2)必要なアイテムが揃うとクラフトが開始されます。量子コンプレッサーはクラフト中のみ電力を使用します。$(br2)誤って不要なアイテムを入れた場合は、投入スロット上の排出ボタンで取り出せます。", diff --git a/src/main/resources/assets/extendedcrafting/lang/ko_kr.json b/src/main/resources/assets/extendedcrafting/lang/ko_kr.json index 92d37947..2d1b711a 100644 --- a/src/main/resources/assets/extendedcrafting/lang/ko_kr.json +++ b/src/main/resources/assets/extendedcrafting/lang/ko_kr.json @@ -1,125 +1,225 @@ { - "itemGroup.extendedcrafting": "확장 조합", + "itemGroup.extendedcrafting": "확장 제작: 확장 플러스", - "block.extendedcrafting.luminessence_block": "발광성 블록", - "block.extendedcrafting.black_iron_block": "흑철 블록", - "block.extendedcrafting.redstone_ingot_block": "레드스톤괴 블록", - "block.extendedcrafting.ender_ingot_block": "엔더괴 블록", - "block.extendedcrafting.enhanced_ender_ingot_block": "향상된 엔더괴 블록", + "block.extendedcrafting.luminessence_block": "루미넨스 블록", + "block.extendedcrafting.black_iron_block": "블랙 아이언 블록", + "block.extendedcrafting.redstone_ingot_block": "레드스톤 주괴 블록", + "block.extendedcrafting.enhanced_redstone_ingot_block": "강화된 레드스톤 주괴 블록", + "block.extendedcrafting.ender_ingot_block": "엔더 주괴 블록", + "block.extendedcrafting.enhanced_ender_ingot_block": "강화된 엔더 주괴 블록", "block.extendedcrafting.crystaltine_block": "크리스탈틴 블록", - "block.extendedcrafting.the_ultimate_block": "궁극 블록", - "block.extendedcrafting.nether_star_block": "네더의 별 블록", - "block.extendedcrafting.ender_star_block": "엔더의 별 블록", - "block.extendedcrafting.frame": "흑철 틀", - "block.extendedcrafting.pedestal": "받침대", - "block.extendedcrafting.crafting_core": "조합 코어", - "block.extendedcrafting.basic_table": "기본 조합대", - "block.extendedcrafting.advanced_table": "고급 조합대", - "block.extendedcrafting.elite_table": "엘리트 조합대", - "block.extendedcrafting.ultimate_table": "최고 조합대", - "block.extendedcrafting.basic_auto_table": "기본 자동 조합대", - "block.extendedcrafting.advanced_auto_table": "고급 자동 조합대", - "block.extendedcrafting.elite_auto_table": "엘리트 자동 조합대", - "block.extendedcrafting.ultimate_auto_table": "최고 자동 조합대", - "block.extendedcrafting.compressor": "양자 압축기", - "block.extendedcrafting.ender_alternator": "엔더 교류 발전기", - "block.extendedcrafting.ender_crafter": "엔더 조합기", - - "item.extendedcrafting.luminessence": "발광성", - "item.extendedcrafting.black_iron_ingot": "흑철괴", - "item.extendedcrafting.redstone_ingot": "레드스톤괴", - "item.extendedcrafting.ender_ingot": "엔더괴", - "item.extendedcrafting.enhanced_ender_ingot": "향상된 엔더괴", - "item.extendedcrafting.crystaltine_ingot": "크리스탈틴괴", - "item.extendedcrafting.the_ultimate_ingot": "궁극괴", - "item.extendedcrafting.black_iron_nugget": "흑철 조각", - "item.extendedcrafting.redstone_nugget": "레드스톤 조각", - "item.extendedcrafting.ender_nugget": "엔더 조각", - "item.extendedcrafting.enhanced_ender_nugget": "향상된 엔더 조각", - "item.extendedcrafting.crystaltine_nugget": "크리스탈틴 조각", - "item.extendedcrafting.the_ultimate_nugget": "궁극 조각", - "item.extendedcrafting.black_iron_slate": "흑철 슬레이트", + "block.extendedcrafting.the_ultimate_block": "얼티밋 블록", + "block.extendedcrafting.nether_star_block": "네더 스타 블록", + "block.extendedcrafting.flux_star_block": "플럭스 스타 블록", + "block.extendedcrafting.ender_star_block": "엔더 스타 블록", + "block.extendedcrafting.frame": "블랙 아이언 프레임", + "block.extendedcrafting.pedestal": "제단", + "block.extendedcrafting.crafting_core": "제작 코어", + "block.extendedcrafting.basic_table": "기본 제작대", + "block.extendedcrafting.advanced_table": "고급 제작대", + "block.extendedcrafting.elite_table": "엘리트 제작대", + "block.extendedcrafting.ultimate_table": "얼티밋 제작대", + "block.extendedcrafting.epic_table": "에픽 제작대", + "block.extendedcrafting.legendary_table": "레전더리 제작대", + "block.extendedcrafting.basic_auto_table": "기본 자동 제작대", + "block.extendedcrafting.advanced_auto_table": "고급 자동 제작대", + "block.extendedcrafting.elite_auto_table": "엘리트 자동 제작대", + "block.extendedcrafting.ultimate_auto_table": "얼티밋 자동 제작대", + "block.extendedcrafting.epic_auto_table": "에픽 자동 제작대", + "block.extendedcrafting.legendary_auto_table": "레전더리 자동 제작대", + "block.extendedcrafting.compressor": "퀀텀 압축기", + "block.extendedcrafting.ender_alternator": "엔더 교류장치", + "block.extendedcrafting.ender_crafter": "엔더 제작기", + "block.extendedcrafting.auto_ender_crafter": "자동 엔더 제작기", + "block.extendedcrafting.flux_alternator": "플럭스 교류장치", + "block.extendedcrafting.flux_crafter": "플럭스 제작기", + "block.extendedcrafting.auto_flux_crafter": "자동 플럭스 제작기", + + "item.extendedcrafting.luminessence": "루미넨스", + "item.extendedcrafting.black_iron_ingot": "블랙 아이언 주괴", + "item.extendedcrafting.redstone_ingot": "레드스톤 주괴", + "item.extendedcrafting.enhanced_redstone_ingot": "강화된 레드스톤 주괴", + "item.extendedcrafting.ender_ingot": "엔더 주괴", + "item.extendedcrafting.enhanced_ender_ingot": "강화된 엔더 주괴", + "item.extendedcrafting.crystaltine_ingot": "크리스탈틴 주괴", + "item.extendedcrafting.the_ultimate_ingot": "얼티밋 주괴", + "item.extendedcrafting.black_iron_nugget": "블랙 아이언 너깃", + "item.extendedcrafting.redstone_nugget": "레드스톤 너깃", + "item.extendedcrafting.enhanced_redstone_nugget": "강화된 레드스톤 너깃", + "item.extendedcrafting.ender_nugget": "엔더 너깃", + "item.extendedcrafting.enhanced_ender_nugget": "강화된 엔더 너깃", + "item.extendedcrafting.crystaltine_nugget": "크리스탈틴 너깃", + "item.extendedcrafting.the_ultimate_nugget": "얼티밋 너깃", + "item.extendedcrafting.black_iron_slate": "블랙 아이언 슬레이트", "item.extendedcrafting.basic_catalyst": "기본 촉매", "item.extendedcrafting.advanced_catalyst": "고급 촉매", "item.extendedcrafting.elite_catalyst": "엘리트 촉매", - "item.extendedcrafting.ultimate_catalyst": "최고 촉매", + "item.extendedcrafting.ultimate_catalyst": "얼티밋 촉매", + "item.extendedcrafting.epic_catalyst": "에픽 촉매", "item.extendedcrafting.redstone_catalyst": "레드스톤 촉매", + "item.extendedcrafting.enhanced_redstone_catalyst": "강화된 레드스톤 촉매", "item.extendedcrafting.ender_catalyst": "엔더 촉매", - "item.extendedcrafting.enhanced_ender_catalyst": "향상된 엔더 촉매", + "item.extendedcrafting.enhanced_ender_catalyst": "강화된 엔더 촉매", "item.extendedcrafting.crystaltine_catalyst": "크리스탈틴 촉매", - "item.extendedcrafting.the_ultimate_catalyst": "궁극 촉매", - "item.extendedcrafting.basic_component": "기본 요소", - "item.extendedcrafting.advanced_component": "고급 요소", - "item.extendedcrafting.elite_component": "엘리트 요소", - "item.extendedcrafting.ultimate_component": "최고 요소", - "item.extendedcrafting.redstone_component": "레드스톤 요소", - "item.extendedcrafting.ender_component": "엔더 요소", - "item.extendedcrafting.enhanced_ender_component": "향상된 엔더 요소", - "item.extendedcrafting.crystaltine_component": "크리스탈틴 요소", - "item.extendedcrafting.the_ultimate_component": "궁극 요소", - "item.extendedcrafting.ender_star": "엔더의 별", - "item.extendedcrafting.handheld_table": "소형 조합대", - "item.extendedcrafting.recipe_maker": "조합법 메이커", + "item.extendedcrafting.the_ultimate_catalyst": "얼티밋 촉매", + "item.extendedcrafting.basic_component": "기본 부품", + "item.extendedcrafting.advanced_component": "고급 부품", + "item.extendedcrafting.elite_component": "엘리트 부품", + "item.extendedcrafting.epic_component": "에픽 부품", + "item.extendedcrafting.ultimate_component": "얼티밋 부품", + "item.extendedcrafting.redstone_component": "레드스톤 부품", + "item.extendedcrafting.enhanced_redstone_component": "강화된 레드스톤 부품", + "item.extendedcrafting.ender_component": "엔더 부품", + "item.extendedcrafting.enhanced_ender_component": "강화된 엔더 부품", + "item.extendedcrafting.crystaltine_component": "크리스탈틴 부품", + "item.extendedcrafting.the_ultimate_component": "얼티밋 부품", + "item.extendedcrafting.flux_star": "플럭스 스타", + "item.extendedcrafting.ender_star": "엔더 스타", + "item.extendedcrafting.handheld_table": "휴대용 제작대", + "item.extendedcrafting.recipe_maker": "레시피 메이커", "item.extendedcrafting.singularity": "%s 특이점", - "item.extendedcrafting.ultimate_singularity": "최고 특이점", - - "container.extendedcrafting.crafting_core": "조합 코어", - "container.extendedcrafting.basic_table": "기본 조합", - "container.extendedcrafting.advanced_table": "고급 조합", - "container.extendedcrafting.elite_table": "엘리트 조합", - "container.extendedcrafting.ultimate_table": "최고 조합", - "container.extendedcrafting.compressor": "양자 압축기", - "container.extendedcrafting.ender_crafter": "엔더 조합", - - "screen.extendedcrafting.crafting_core.pedestals": "받침대: %s", - "screen.extendedcrafting.crafting_core.power_cost": "FE 비용: %s", - "screen.extendedcrafting.crafting_core.power_rate": "FE 비율: %s", - "screen.extendedcrafting.crafting_core.no_recipe": "조합법을 찾을 수 없습니다.", + "item.extendedcrafting.ultimate_singularity": "얼티밋 특이점", + + "container.extendedcrafting.crafting_core": "제작 코어", + "container.extendedcrafting.basic_table": "기본 제작", + "container.extendedcrafting.advanced_table": "고급 제작", + "container.extendedcrafting.elite_table": "엘리트 제작", + "container.extendedcrafting.ultimate_table": "얼티밋 제작", + "container.extendedcrafting.legendary_table": "레전더리 제작", + "container.extendedcrafting.epic_table": "에픽 제작", + "container.extendedcrafting.compressor": "퀀텀 압축기", + "container.extendedcrafting.ender_crafter": "엔더 제작", + "container.extendedcrafting.flux_alternator": "플럭스 교류장치", + "container.extendedcrafting.flux_crafter": "플럭스 제작", + + "screen.extendedcrafting.crafting_core.pedestals": "제단: %s", + "screen.extendedcrafting.crafting_core.power_cost": "FE 소모: %s", + "screen.extendedcrafting.crafting_core.power_rate": "FE 속도: %s", + "screen.extendedcrafting.crafting_core.no_recipe": "레시피를 찾을 수 없습니다.", "screen.extendedcrafting.crafting_core.no_power": "전력이 부족합니다.", - "tooltip.extendedcrafting.empty": "없음", - "tooltip.extendedcrafting.eject": "꺼내기", - "tooltip.extendedcrafting.ejecting": "꺼내는 중...", - "tooltip.extendedcrafting.limited_input": "제한 입력", - "tooltip.extendedcrafting.unlimited_input": "무제한 입력", - "tooltip.extendedcrafting.toggle_auto_crafting": "자동 조합 전환", - "tooltip.extendedcrafting.tier": "티어: %s", - "tooltip.extendedcrafting.crafting": "조합: %sx %s", + "tooltip.extendedcrafting.empty": "비어 있음", + "tooltip.extendedcrafting.eject": "배출", + "tooltip.extendedcrafting.ejecting": "배출 중...", + "tooltip.extendedcrafting.limited_input": "입력 제한됨", + "tooltip.extendedcrafting.unlimited_input": "입력 무제한", + "tooltip.extendedcrafting.toggle_auto_crafting": "자동 제작 전환", + "tooltip.extendedcrafting.selected": "선택됨", + "tooltip.extendedcrafting.tier": "등급: %s", + "tooltip.extendedcrafting.crafting": "제작 중: %sx %s", "tooltip.extendedcrafting.mode": "모드: %s", - "tooltip.extendedcrafting.num_items": "아이템 %s개", - "tooltip.extendedcrafting.requires_table": "%s티어 조합대가 필요합니다.", + "tooltip.extendedcrafting.type": "유형: %s", + "tooltip.extendedcrafting.num_items": "%s 아이템", + "tooltip.extendedcrafting.and_x_more": "그리고 %s개 더...", + "tooltip.extendedcrafting.ticks": "%s 틱", + "tooltip.extendedcrafting.seconds": "%s 초", + "tooltip.extendedcrafting.shapeless": "이 레시피는 형태가 없습니다", + "tooltip.extendedcrafting.requires_table": "%s 등급 제작대 필요", "tooltip.extendedcrafting.items_required": "필요한 아이템:", + "tooltip.extendedcrafting.recipe_count": "%s 저장된 레시피", + "tooltip.extendedcrafting.per_alternator": "교류장치당 %s", "tooltip.extendedcrafting.singularity_id": "특이점 ID: %s", - "tooltip.extendedcrafting.added_by": "추가됨: %s", + "tooltip.extendedcrafting.added_by": "추가한 모드: %s", + "tooltip.extendedcrafting.auto_table_save_recipe": "Shift + 좌클릭으로 레시피 저장.", + "tooltip.extendedcrafting.auto_table_delete_recipe": "Shift + 좌클릭으로 레시피 삭제.", "message.extendedcrafting.changed_mode": "모드가 %s로 변경되었습니다.", + "message.extendedcrafting.copied_recipe": "레시피가 클립보드에 복사되었습니다.", + "message.extendedcrafting.nbt_requires_crafttweaker": "NBT 복사에는 CraftTweaker가 필요합니다.", + "message.extendedcrafting.max_unique_items_exceeded": "형태 있는 데이터팩 레시피는 최대 (%s)개의 고유 아이템만 사용할 수 있습니다.", + "message.extendedcrafting.no_items_in_grid": "복사할 아이템이 그리드에 없습니다.", + "message.extendedcrafting.no_output_item_warning": "첫 번째 핫바 슬롯에 아이템이 없습니다. 출력 아이템을 포함하려면 출력 아이템을 첫 번째 슬롯에 넣으세요.", + + "jei.category.extendedcrafting.combination": "조합 제작", + "jei.category.extendedcrafting.basic_crafting": "기본 제작", + "jei.category.extendedcrafting.advanced_crafting": "고급 제작", + "jei.category.extendedcrafting.elite_crafting": "엘리트 제작", + "jei.category.extendedcrafting.ultimate_crafting": "얼티밋 제작", + "jei.category.extendedcrafting.epic_crafting": "에픽 제작", + "jei.category.extendedcrafting.legendary_crafting": "레전더리 제작", + "jei.category.extendedcrafting.compressor": "퀀텀 압축", + "jei.category.extendedcrafting.ender_crafting": "엔더 제작", + "jei.category.extendedcrafting.flux_crafting": "플럭스 제작", - "jei.category.extendedcrafting.combination": "조합", - "jei.category.extendedcrafting.basic_crafting": "기본 조합", - "jei.category.extendedcrafting.advanced_crafting": "고급 조합", - "jei.category.extendedcrafting.elite_crafting": "엘리트 조합", - "jei.category.extendedcrafting.ultimate_crafting": "최고 조합", - "jei.category.extendedcrafting.compressor": "양자 압축", - "jei.category.extendedcrafting.ender_crafting": "엔더 조합", + "config.jade.plugin_extendedcrafting.pedestal": "제단 정보", + "config.jade.plugin_extendedcrafting.crafting_core": "제작 코어 정보", + "config.jade.plugin_extendedcrafting.basic_table": "기본 제작대 정보", + "config.jade.plugin_extendedcrafting.advanced_table": "고급 제작대 정보", + "config.jade.plugin_extendedcrafting.elite_table": "엘리트 제작대 정보", + "config.jade.plugin_extendedcrafting.ultimate_table": "얼티밋 제작대 정보", + "config.jade.plugin_extendedcrafting.legendary_table": "레전더리 제작대 정보", + "config.jade.plugin_extendedcrafting.epic_table": "에픽 제작대 정보", + "config.jade.plugin_extendedcrafting.basic_auto_table": "기본 자동 제작대 정보", + "config.jade.plugin_extendedcrafting.advanced_auto_table": "고급 자동 제작대 정보", + "config.jade.plugin_extendedcrafting.elite_auto_table": "엘리트 자동 제작대 정보", + "config.jade.plugin_extendedcrafting.ultimate_auto_table": "얼티밋 자동 제작대 정보", + "config.jade.plugin_extendedcrafting.epic_auto_table": "에픽 자동 제작대 정보", + "config.jade.plugin_extendedcrafting.legendary_auto_table": "레전더리 자동 제작대 정보", + "config.jade.plugin_extendedcrafting.compressor": "퀀텀 압축기 정보", + "config.jade.plugin_extendedcrafting.ender_crafter": "엔더 제작기 정보", + "config.jade.plugin_extendedcrafting.auto_ender_crafter": "자동 엔더 제작기 정보", + "config.jade.plugin_extendedcrafting.flux_crafter": "플럭스 제작기 정보", "singularity.extendedcrafting.coal": "석탄", + "singularity.extendedcrafting.copper": "구리", "singularity.extendedcrafting.iron": "철", "singularity.extendedcrafting.lapis_lazuli": "청금석", "singularity.extendedcrafting.redstone": "레드스톤", - "singularity.extendedcrafting.glowstone": "발광석", + "singularity.extendedcrafting.glowstone": "글로우스톤", "singularity.extendedcrafting.gold": "금", "singularity.extendedcrafting.diamond": "다이아몬드", "singularity.extendedcrafting.emerald": "에메랄드", "singularity.extendedcrafting.aluminum": "알루미늄", - "singularity.extendedcrafting.copper": "구리", "singularity.extendedcrafting.tin": "주석", "singularity.extendedcrafting.bronze": "청동", "singularity.extendedcrafting.silver": "은", "singularity.extendedcrafting.lead": "납", "singularity.extendedcrafting.steel": "강철", "singularity.extendedcrafting.nickel": "니켈", - "singularity.extendedcrafting.electrum": "호박금", - "singularity.extendedcrafting.invar": "불변강", - "singularity.extendedcrafting.uranium": "우라늄", - "singularity.extendedcrafting.platinum": "백금" + "singularity.extendedcrafting.electrum": "일렉트럼", + "singularity.extendedcrafting.invar": "인바", + "singularity.extendedcrafting.platinum": "플래티넘", + + "book.extendedcrafting.name": "확장 제작", + "book.extendedcrafting.landing_text": "확장 제작은 새로운 제작 방식과 추가 제작 재료 및 유틸리티를 추가합니다.$(br2)이 안내서는 모드에 포함된 다양한 제작 방식의 기능을 설명합니다. 구현 방식은 모드팩 제작자가 결정합니다.", + + "book.extendedcrafting.category.crafting.name": "제작 방식", + "book.extendedcrafting.category.crafting.description": "이 섹션에서는 확장 제작 모드가 추가한 제작 메커니즘을 설명합니다.", + "book.extendedcrafting.category.components.name": "제작 구성 요소", + "book.extendedcrafting.category.components.description": "이 섹션에서는 추가된 다양한 제작 재료를 설명합니다.", + "book.extendedcrafting.category.utilities.name": "제작 유틸리티", + "book.extendedcrafting.category.utilities.description": "이 섹션에서는 다양한 제작 유틸리티를 설명합니다.", + + "book.extendedcrafting.entry.combination": "조합 제작", + "book.extendedcrafting.entry.combination.page.1": "조합 제작은 월드 내에서 다중 블록 구조로 아이템을 결합해 $(italic)특별한$() 아이템을 만드는 방식입니다.$(br2)중앙의 제작 코어와, 그 주변 3블록 반경 내 같은 Y축에 배치된 제단으로 구성됩니다.", + "book.extendedcrafting.entry.combination.page.2": "구조가 작동하려면 제작 코어에 전력을 공급해야 합니다.$(br2)레시피는 코어 위에 올리는 중심 아이템과 제단 위에 올리는 주변 아이템으로 구성됩니다.$(br)제작 코어의 측면을 우클릭하면 진행 상황, 전력 소모, 저장된 전력량 등의 정보를 확인할 수 있습니다.", + + "book.extendedcrafting.entry.tables": "제작대", + "book.extendedcrafting.entry.tables.page.1": "이 모드는 $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$(), $(bold)11x11$(), $(bold)13x13$() 크기의 등급별 제작대를 추가합니다. 이 제작대들은 닫혀 있어도 인벤토리를 유지합니다.", + + "book.extendedcrafting.entry.compression": "압축 제작", + "book.extendedcrafting.entry.compression.page.1": "퀀텀 압축은 아이템을 극도로 압축하는 방식입니다. 이는 퀀텀 압축기를 사용하여 수행됩니다.$(br2)압축기는 대량의 재료를 저장하고 압축할 수 있는 전력 기반 기계입니다. 압축기에 넣은 아이템은 내부 버퍼에 저장되며 파란색 막대로 표시됩니다.", + "book.extendedcrafting.entry.compression.page.2": "각 레시피는 $(bold)보통$() 촉매가 필요합니다. 촉매는 가장 왼쪽 칸에 넣으며 소모되지 않습니다.$(br2)버퍼에 충분한 재료가 모이면 제작이 시작되며, 압축기는 제작 중에만 전력을 소모합니다.$(br2)잘못 넣은 재료가 있다면 입력 칸 위의 배출 버튼을 눌러 회수할 수 있습니다.", + "book.extendedcrafting.entry.compression.page.3": "버퍼 속 아이템은 끝없는 공간에 저장되며 배출만으로 회수할 수 있습니다. 블록을 부수면 버퍼의 아이템은 영구적으로 사라지니 주의하세요!$(br2)압축기의 입력 버퍼는 $(bold)수십억 개$()의 아이템을 저장할 수 있지만 기본적으로는 레시피가 요구하는 만큼만 저장됩니다. 옆의 잠금 버튼을 눌러 제한을 해제할 수 있습니다.", + + "book.extendedcrafting.entry.ender_crafting": "엔더 제작", + "book.extendedcrafting.entry.ender_crafting.page.1": "엔더 제작은 ‘기다림의 힘’을 사용하는 제작 방식입니다. 엔더 제작기는 교류장치로부터 에너지를 받아 제작을 수행합니다. 교류장치가 많을수록 제작 속도가 빨라집니다.", + "book.extendedcrafting.entry.ender_crafting.page.2": "엔더 교류장치는 제작기 주변 $(bold)3블록 반경$() 내 어디든 배치할 수 있으며, 위나 아래도 가능합니다!", + + "book.extendedcrafting.entry.auto_tables": "자동 제작대", + "book.extendedcrafting.entry.auto_tables.page.1": "자동 제작대는 업그레이드된 제작대로, 자동으로 아이템을 삽입하거나 추출할 수 있습니다.$(br2)아이템 삽입은 제작대 위에 상자를 올리고 상자에 아이템을 넣는 방식입니다. 삽입에는 전력이 필요합니다.", + "book.extendedcrafting.entry.auto_tables.page.2": "자동 삽입을 사용하려면 먼저 그리드에 레시피를 배치하고 저장해야 합니다. 저장은 오른쪽 상단의 3개 레시피 칸 중 하나를 Shift+좌클릭하여 합니다. 저장된 레시피는 클릭하여 선택할 수 있으며, Shift+좌클릭으로 삭제할 수 있습니다.$(br2)아이템 추출은 호퍼나 기타 추출 장치로 가능합니다.", + "book.extendedcrafting.entry.auto_tables.page.3": "출력 슬롯 아래의 아래쪽 화살표를 클릭하면 자동 제작을 비활성화할 수 있습니다.", + + "book.extendedcrafting.entry.flux_crafting": "플럭스 제작", + "book.extendedcrafting.entry.flux_crafting.page.1": "플럭스 제작은 기다림의 힘과 에너지의 힘을 모두 사용하는 제작 방식입니다. 플럭스 제작기는 플럭스 교류장치로부터 에너지를 전달받아 제작을 수행합니다. 교류장치가 많을수록 빨라집니다.", + "book.extendedcrafting.entry.flux_crafting.page.2": "플럭스 교류장치는 제작기 주변 $(bold)3블록 반경$() 내 어디든 배치할 수 있으며, 위나 아래도 가능합니다!", + + "book.extendedcrafting.entry.singularities": "특이점", + "book.extendedcrafting.entry.singularities.page.1": "특이점은 고도로 압축된 재료입니다. $(bold)보통$() $(l:crafting/compression)퀀텀 압축기$()로 제작됩니다.$(br2)특이점은 $(l:components/ultimate_singularity)얼티밋 특이점$() 같은 여러 용도로 사용될 수 있습니다.", + "book.extendedcrafting.entry.ultimate_singularity": "얼티밋 특이점", + "book.extendedcrafting.entry.ultimate_singularity.page.1": "얼티밋 특이점은 $(bold)보통$() $(l:crafting/tables)얼티밋 제작대$()에서 제작됩니다.$(br2)대부분 또는 모든 특이점으로 구성됩니다.", + + "book.extendedcrafting.entry.handheld_table": "휴대용 제작대", + "book.extendedcrafting.entry.handheld_table.page.1": "휴대용 제작대는 휴대 가능한 제작대입니다." } diff --git a/src/main/resources/assets/extendedcrafting/lang/ru_ru.json b/src/main/resources/assets/extendedcrafting/lang/ru_ru.json index d26b2502..b9ceb441 100644 --- a/src/main/resources/assets/extendedcrafting/lang/ru_ru.json +++ b/src/main/resources/assets/extendedcrafting/lang/ru_ru.json @@ -143,7 +143,7 @@ "book.extendedcrafting.entry.combination.page.1": "Combination Crafting is an in-world multi-block crafting setup where items are combined together to create something $(italic)special.$() $(br2)This setup consists of a Crafting Core in the center and pedestals placed around it. Pedestals can be placed anywhere around the Crafting Core in a 3 block radius, and must be on the same Y level.", "book.extendedcrafting.entry.combination.page.2": "Power must be provided to the Crafting Core for this structure to function. $(br2)Recipes have a center item which goes on the Crafting Core, and pedestal items which go on the pedestals around it. $(br)Right clicking on the side of the Crafting Core will show you information about the current crafting operation, such as progress or power cost, as well as how much power is stored in it.", "book.extendedcrafting.entry.tables": "Table Crafting", - "book.extendedcrafting.entry.tables.page.1": "This mod adds tiered crafting tables that come in $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), and $(bold)9x9$() sizes. These tables hold their inventories when closed.", + "book.extendedcrafting.entry.tables.page.1": "This mod adds tiered crafting tables that come in $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$() , $(bold)11x11$() , and $(bold)13x13$() sizes. These tables hold their inventories when closed.", "book.extendedcrafting.entry.compression": "Compression Crafting", "book.extendedcrafting.entry.compression.page.1": "Quantum Compression is the process of compressing items a little too much. This is done using a Quantum Compressor. $(br2)The Quantum Compressor is a powered machine that can hold and compress extremely large amounts of materials. Items placed inside the Quantum Compressor go into an internal buffer for use in compression. The buffer is represented as a blue bar.", "book.extendedcrafting.entry.compression.page.2": "Each recipe $(bold)usually$() requires a catalyst. The catalyst is placed in the left-most slot and does not get used up. $(br2)Once there are enough items in the buffer, the machine will begin to craft the item. The Quantum Compressor will only use power while crafting. $(br2)If you happen to put items into the compressor that you would rather not lose forever, you can press the eject button above the input slot to get them back.", diff --git a/src/main/resources/assets/extendedcrafting/lang/tr_tr.json b/src/main/resources/assets/extendedcrafting/lang/tr_tr.json index 99944bc3..b9598352 100644 --- a/src/main/resources/assets/extendedcrafting/lang/tr_tr.json +++ b/src/main/resources/assets/extendedcrafting/lang/tr_tr.json @@ -201,7 +201,7 @@ "book.extendedcrafting.entry.combination.page.2": "Bu yapının çalışması için Zanaat Çekirdeğine güç verilmelidir. $(br2)Tariflerde merkezde Zanaat Çekirdeğine konulan bir ana eşya ve çevredeki kaidelere konulan yan eşyalar bulunur. $(br)Zanaat Çekirdeğinin yanına sağ tıklamak, mevcut zanaat işlemi hakkında ilerleme veya güç maliyeti gibi bilgileri, ayrıca içinde ne kadar güç depolandığını gösterir.", "book.extendedcrafting.entry.tables": "Masa Zanaatı", - "book.extendedcrafting.entry.tables.page.1": "Bu mod, $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$() ve $(bold)9x9$() boyutlarında seviyeli zanaat masaları ekler. Bu masalar kapanınca envanterlerini korurlar.", + "book.extendedcrafting.entry.tables.page.1": "Bu mod, $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$(), $(bold)11x11$() ve $(bold)13x13$() boyutlarında seviyeli zanaat masaları ekler. Bu masalar kapanınca envanterlerini korurlar.", "book.extendedcrafting.entry.compression": "Sıkıştırma Zanaatı", "book.extendedcrafting.entry.compression.page.1": "Kuantum Sıkıştırma, öğelerin aşırı derecede sıkıştırılması işlemidir. Bu işlem bir Kuantum Kompresörü kullanılarak yapılır. $(br2)Kuantum Kompresörü, güç ile çalışan ve aşırı büyük miktarda malzemeyi tutup sıkıştırabilen bir makinedir. Makineye yerleştirilen öğeler, sıkıştırma için kullanılan dahili bir arabelleğe gider. Bu arabellek mavi bir çubuk olarak gösterilir.", diff --git a/src/main/resources/assets/extendedcrafting/lang/uk_ua.json b/src/main/resources/assets/extendedcrafting/lang/uk_ua.json index 5e169ac3..abdd537b 100644 --- a/src/main/resources/assets/extendedcrafting/lang/uk_ua.json +++ b/src/main/resources/assets/extendedcrafting/lang/uk_ua.json @@ -148,7 +148,7 @@ "book.extendedcrafting.entry.combination.page.1": "Комбіноване майстрування — це мультиблочна установка для майстрування, в якій предмети комбінуються разом, щоб змайструвати щось $(italic)особливе.$() $(br2)Ця установка складається з ядра майстрування в центрі та п'єдесталів, розташованих навколо нього. П'єдестали можна розміщувати будь-де навколо ядра майстрування в радіусі 3 блоків і вони повинні бути на одній висоті.", "book.extendedcrafting.entry.combination.page.2": "Щоб ця структура функціонувала, ядро майстрування повинно бути забезпечене енергією. $(br2)Рецепти мають центральний предмет, який розміщується на ядрі майстрування, і п'єдестальні предмети, які розміщуються на п'єдесталах навколо нього. $(br)Клацніть ПКМ по боковій частині ядра майстрування, щоб переглянути інформацію про поточне майстрування, наприклад прогрес або витрати енергії, а також скільки енергії зберігається в ньому.", "book.extendedcrafting.entry.tables": "Верстаки", - "book.extendedcrafting.entry.tables.page.1": "Цей мод додає нові верстаки розміром $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$() та $(bold)9x9$(). Ці верстаки зберігають предмети, які в них лежать, коли вони закриті.", + "book.extendedcrafting.entry.tables.page.1": "Цей мод додає нові верстаки розміром $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$(), $(bold)11x11$() та $(bold)13x13$(). Ці верстаки зберігають предмети, які в них лежать, коли вони закриті.", "book.extendedcrafting.entry.compression": "Компресійне майстрування", "book.extendedcrafting.entry.compression.page.1": "Квантова компресія — це процес надсильної компресії предметів. Для цього використовується квантовий компресор. $(br2)Квантовий компресор — це потужна машина, яка може утримувати та стискати надзвичайно великі обсяги матеріалів. Предмети, розміщені всередині квантового компресора, потрапляють у внутрішній буфер для компресії. Буфер представлений у вигляді синьої смуги.", "book.extendedcrafting.entry.compression.page.2": "Для кожного рецепту $(bold)зазвичай$() потрібен каталізатор. Каталізатор розміщується в крайньому лівому слоті і не витрачається. $(br2)Коли в буфері буде достатньо предметів, машина почне майструвати предмет. Квантовий компресор споживатиме енергію лише під час майстрування. $(br2)Якщо ви поклали в компресор предмети, які не хотіли б втрачати назавжди, ви можете натиснути кнопку Витягнути над вхідним слотом, щоб повернути їх.", diff --git a/src/main/resources/assets/extendedcrafting/lang/zh_cn.json b/src/main/resources/assets/extendedcrafting/lang/zh_cn.json index 42175ac9..d9fc2a90 100644 --- a/src/main/resources/assets/extendedcrafting/lang/zh_cn.json +++ b/src/main/resources/assets/extendedcrafting/lang/zh_cn.json @@ -179,7 +179,7 @@ "book.extendedcrafting.entry.combination.page.1": "组合合成是一个架设在世界上的多方块结构,使得物品组合在一起成为$(italic)特殊物品$()。$(br2)此结构在中央摆放一个合成核心且在其周围摆放基座。基座能放在合成核心半径三格范围内任意位置,且必须在同一高度。", "book.extendedcrafting.entry.combination.page.2": "为了使结构起作用,必须为合成核心提供能量。$(br2)配方中央位置的物品放在合成核心上,需放基座上的物品则放在其附近的基座上。$(br)右击合成核心的侧边会显示当前合成的信息,例如进度和能量消耗,以及其内部能量储量。", "book.extendedcrafting.entry.tables": "工作台合成", - "book.extendedcrafting.entry.tables.page.1": "本mod添加了$(bold)3x3$(),$(bold)5x5$(),$(bold)7x7$(),和$(bold)9x9$()大小的不同等级的工作台。关闭工作台时将会保存在其内部空间的物品。", + "book.extendedcrafting.entry.tables.page.1": "本mod添加了$(bold)3x3$(),$(bold)5x5$(),$(bold)7x7$(),$(bold)9x9$(),$(bold)11x11$(),和$(bold)13x13$()大小的不同等级的工作台。关闭工作台时将会保存在其内部空间的物品。", "book.extendedcrafting.entry.compression": "压缩合成", "book.extendedcrafting.entry.compression.page.1": "量子压缩是将物品压缩得有点多的过程。使用量子压缩机即可进行压缩。$(br2)量子压缩机是一个需要能量的机器,它能容纳及对极大数量的材料进行压缩。放在量子压缩机的物品将进入到其内部缓存槽以用于压缩。缓存槽会以蓝色的条状物显示。", "book.extendedcrafting.entry.compression.page.2": "每个配方$(bold)一般$()都需要一个催化剂。催化剂需被放置在最左边的槽位中,它不会被消耗。$(br2)一旦缓存槽有足够的材料,机器将会开始制作物品。量子压缩机只会在合成的过程中使用能量。$(br2)假如你将物品错误放入压缩机,你只需点击在输入槽上方的弹出按钮即可拿回物品。", From 79dce1910d75826b1a3d36c2265e88b5cb25e9db Mon Sep 17 00:00:00 2001 From: BOLT_M4G1C Date: Sun, 7 Dec 2025 14:12:47 +0100 Subject: [PATCH 10/12] Adds Legendary Auto Table provider and tooltip registration in JadeCompat --- gradle.properties | 2 +- .../extendedcrafting/compat/JadeCompat.java | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 67c5dbf7..af65b745 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,6 +7,6 @@ forge_version=1.20.1-47.4.9 cucumber_version=1.20.1-7.0.16 jei_version=15.20.0.112 jei_mc_version=1.20.1 -jade_version=11.13.2 +jade_version=5672013 patchouli_version=1.20.1-84.1-FORGE crafttweaker_version=1.20.1:14.0.59 \ No newline at end of file diff --git a/src/main/java/com/blakebr0/extendedcrafting/compat/JadeCompat.java b/src/main/java/com/blakebr0/extendedcrafting/compat/JadeCompat.java index b73b5da9..5fa42840 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/compat/JadeCompat.java +++ b/src/main/java/com/blakebr0/extendedcrafting/compat/JadeCompat.java @@ -18,7 +18,7 @@ @WailaPlugin public class JadeCompat implements IWailaPlugin { - private static final ResourceLocation CRAFTING_CORE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "crafting_core"); + private static final ResourceLocation CRAFTING_CORE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID + ":crafting_core"); private static final ResourceLocation BASIC_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "basic_table"); private static final ResourceLocation ADVANCED_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "advanced_table"); private static final ResourceLocation ELITE_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "elite_table"); @@ -30,6 +30,7 @@ public class JadeCompat implements IWailaPlugin { private static final ResourceLocation ELITE_AUTO_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "elite_auto_table"); private static final ResourceLocation ULTIMATE_AUTO_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "ultimate_auto_table"); private static final ResourceLocation EPIC_AUTO_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "epic_auto_table"); + private static final ResourceLocation LEGENDARY_AUTO_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "legendary_auto_table"); private static final ResourceLocation ENDER_CRAFTER_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "ender_crafter"); private static final ResourceLocation AUTO_ENDER_CRAFTER_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "auto_ender_crafter"); private static final ResourceLocation FLUX_CRAFTER_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "flux_crafter"); @@ -190,6 +191,18 @@ public ResourceLocation getUid() { } }, EpicAutoTableBlock.class); + registration.registerBlockComponent(new IBlockComponentProvider() { + @Override + public void appendTooltip(ITooltip tooltip, BlockAccessor accessor, IPluginConfig config) { + tooltip.add(ModTooltips.TIER.args(6).build()); + } + + @Override + public ResourceLocation getUid() { + return LEGENDARY_AUTO_TABLE_PROVIDER; + } + }, LegendaryAutoTableBlock.class); + registration.registerBlockComponent(new IBlockComponentProvider() { @Override public void appendTooltip(ITooltip tooltip, BlockAccessor accessor, IPluginConfig config) { From c23518fa4882bacb6cf1f8558096e2cce0083d6b Mon Sep 17 00:00:00 2001 From: BOLT_M4G1C Date: Wed, 17 Dec 2025 15:30:43 +0100 Subject: [PATCH 11/12] Removes Legendary Auto Table and associated components from the mod --- gradle.properties | 2 +- .../block/LegendaryAutoTableBlock.java | 101 --------- .../block/LegendaryTableBlock.java | 85 -------- .../screen/LegendaryAutoTableScreen.java | 195 ------------------ .../client/screen/LegendaryTableScreen.java | 30 --- .../extendedcrafting/compat/JadeCompat.java | 27 +-- .../compat/jei/JeiCompat.java | 14 +- .../table/LegendaryTableCategory.java | 141 ------------- .../extendedcrafting/config/ModConfigs.java | 4 - .../LegendaryAutoTableContainer.java | 124 ----------- .../container/LegendaryTableContainer.java | 121 ----------- .../extendedcrafting/init/ModBlocks.java | 4 - .../init/ModContainerTypes.java | 4 - .../init/ModCreativeModeTabs.java | 2 - .../init/ModTileEntities.java | 3 - .../item/RecipeMakerItem.java | 8 +- .../tileentity/AutoTableTileEntity.java | 54 ----- .../tileentity/LegendaryTableTileEntity.java | 55 ----- .../blockstates/legendary_auto_table.json | 7 - .../blockstates/legendary_table.json | 7 - .../assets/extendedcrafting/lang/en_us.json | 10 +- .../assets/extendedcrafting/lang/ja_jp.json | 10 +- .../assets/extendedcrafting/lang/ko_kr.json | 8 +- .../assets/extendedcrafting/lang/ru_ru.json | 4 +- .../assets/extendedcrafting/lang/tr_tr.json | 8 +- .../assets/extendedcrafting/lang/uk_ua.json | 2 +- .../assets/extendedcrafting/lang/zh_cn.json | 4 +- .../models/block/legendary_auto_table.json | 102 --------- .../models/block/legendary_table.json | 88 -------- .../models/item/legendary_auto_table.json | 35 ---- .../models/item/legendary_table.json | 35 ---- .../textures/block/legendary_table_top.png | Bin 410 -> 0 bytes .../block/legendary_table_top.png.mcmeta | 6 - .../textures/gui/legendary_auto_table.png | Bin 7583 -> 0 bytes .../textures/gui/legendary_table.png | Bin 6366 -> 0 bytes .../textures/jei/legendary_crafting.png | Bin 3075 -> 0 bytes .../blocks/legendary_auto_table.json | 20 -- .../loot_tables/blocks/legendary_table.json | 20 -- .../recipes/legendary_auto_table.json | 35 ---- .../recipes/legendary_table.json | 39 ---- .../tags/blocks/mineable/pickaxe.json | 2 - .../tags/blocks/needs_stone_tool.json | 2 - .../testing/recipes/table_13x13_test.json | 26 --- .../resources/kubejs_scripts/table_test.js | 190 ----------------- 44 files changed, 18 insertions(+), 1616 deletions(-) delete mode 100644 src/main/java/com/blakebr0/extendedcrafting/block/LegendaryAutoTableBlock.java delete mode 100644 src/main/java/com/blakebr0/extendedcrafting/block/LegendaryTableBlock.java delete mode 100644 src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryAutoTableScreen.java delete mode 100644 src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryTableScreen.java delete mode 100644 src/main/java/com/blakebr0/extendedcrafting/compat/jei/category/table/LegendaryTableCategory.java delete mode 100644 src/main/java/com/blakebr0/extendedcrafting/container/LegendaryAutoTableContainer.java delete mode 100644 src/main/java/com/blakebr0/extendedcrafting/container/LegendaryTableContainer.java delete mode 100644 src/main/java/com/blakebr0/extendedcrafting/tileentity/LegendaryTableTileEntity.java delete mode 100644 src/main/resources/assets/extendedcrafting/blockstates/legendary_auto_table.json delete mode 100644 src/main/resources/assets/extendedcrafting/blockstates/legendary_table.json delete mode 100644 src/main/resources/assets/extendedcrafting/models/block/legendary_auto_table.json delete mode 100644 src/main/resources/assets/extendedcrafting/models/block/legendary_table.json delete mode 100644 src/main/resources/assets/extendedcrafting/models/item/legendary_auto_table.json delete mode 100644 src/main/resources/assets/extendedcrafting/models/item/legendary_table.json delete mode 100644 src/main/resources/assets/extendedcrafting/textures/block/legendary_table_top.png delete mode 100644 src/main/resources/assets/extendedcrafting/textures/block/legendary_table_top.png.mcmeta delete mode 100644 src/main/resources/assets/extendedcrafting/textures/gui/legendary_auto_table.png delete mode 100644 src/main/resources/assets/extendedcrafting/textures/gui/legendary_table.png delete mode 100644 src/main/resources/assets/extendedcrafting/textures/jei/legendary_crafting.png delete mode 100644 src/main/resources/data/extendedcrafting/loot_tables/blocks/legendary_auto_table.json delete mode 100644 src/main/resources/data/extendedcrafting/loot_tables/blocks/legendary_table.json delete mode 100644 src/main/resources/data/extendedcrafting/recipes/legendary_auto_table.json delete mode 100644 src/main/resources/data/extendedcrafting/recipes/legendary_table.json delete mode 100644 src/test/resources/datapacks/testing/data/testing/recipes/table_13x13_test.json diff --git a/gradle.properties b/gradle.properties index af65b745..d422cbd9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,6 +7,6 @@ forge_version=1.20.1-47.4.9 cucumber_version=1.20.1-7.0.16 jei_version=15.20.0.112 jei_mc_version=1.20.1 -jade_version=5672013 +jade_version=6855440 patchouli_version=1.20.1-84.1-FORGE crafttweaker_version=1.20.1:14.0.59 \ No newline at end of file diff --git a/src/main/java/com/blakebr0/extendedcrafting/block/LegendaryAutoTableBlock.java b/src/main/java/com/blakebr0/extendedcrafting/block/LegendaryAutoTableBlock.java deleted file mode 100644 index 8db80983..00000000 --- a/src/main/java/com/blakebr0/extendedcrafting/block/LegendaryAutoTableBlock.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.blakebr0.extendedcrafting.block; - -import com.blakebr0.cucumber.block.BaseTileEntityBlock; -import com.blakebr0.cucumber.helper.NBTHelper; -import com.blakebr0.cucumber.util.VoxelShapeBuilder; -import com.blakebr0.extendedcrafting.lib.ModTooltips; -import com.blakebr0.extendedcrafting.tileentity.AutoTableTileEntity; -import net.minecraft.core.BlockPos; -import net.minecraft.network.chat.Component; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.Containers; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.TooltipFlag; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.SoundType; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.VoxelShape; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.network.NetworkHooks; - -import java.util.List; - -public class LegendaryAutoTableBlock extends BaseTileEntityBlock { - public static final VoxelShape LEGENDARY_AUTO_TABLE_SHAPE = VoxelShapeBuilder.builder() - .cuboid(2, 0, 2, 14, 2, 14) - .cuboid(3, 2, 3, 5, 10, 5) - .cuboid(11, 2, 11, 13, 10, 13) - .cuboid(11, 2, 3, 13, 10, 5) - .cuboid(3, 2, 11, 5, 10, 13) - .cuboid(0, 10, 0, 16, 16, 16) - .cuboid(4, 2, 4, 12, 10, 12) - .build(); - - public LegendaryAutoTableBlock() { - super(SoundType.METAL, 5.0F, 10.0F, true); - } - - @Override - public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new AutoTableTileEntity.Legendary(pos, state); - } - - @Override - public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult trace) { - if (!level.isClientSide()) { - var tile = level.getBlockEntity(pos); - - if (tile instanceof AutoTableTileEntity.Legendary table) { - NetworkHooks.openScreen((ServerPlayer) player, table, pos); - } - } - - return InteractionResult.SUCCESS; - } - - @Override - public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) { - if (state.getBlock() != newState.getBlock()) { - var tile = level.getBlockEntity(pos); - - if (tile instanceof AutoTableTileEntity.Legendary table) { - Containers.dropContents(level, pos, table.getInventory().getStacks()); - } - } - - super.onRemove(state, level, pos, newState, isMoving); - } - - @Override - public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return LEGENDARY_AUTO_TABLE_SHAPE; - } - - @OnlyIn(Dist.CLIENT) - @Override - public void appendHoverText(ItemStack stack, BlockGetter level, List tooltip, TooltipFlag flag) { - tooltip.add(ModTooltips.TIER.args(6).build()); - } - - @Override - public void setPlacedBy(Level level, BlockPos pos, BlockState state, LivingEntity entity, ItemStack stack) { - if (NBTHelper.hasKey(stack, "RecipeStorage")) { - var tile = level.getBlockEntity(pos); - - if (tile instanceof AutoTableTileEntity.Legendary table) { - var storage = stack.getTag().getCompound("RecipeStorage"); - - table.getRecipeStorage().deserializeNBT(storage); - } - } - } -} diff --git a/src/main/java/com/blakebr0/extendedcrafting/block/LegendaryTableBlock.java b/src/main/java/com/blakebr0/extendedcrafting/block/LegendaryTableBlock.java deleted file mode 100644 index 452e562e..00000000 --- a/src/main/java/com/blakebr0/extendedcrafting/block/LegendaryTableBlock.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.blakebr0.extendedcrafting.block; - -import com.blakebr0.cucumber.block.BaseTileEntityBlock; -import com.blakebr0.cucumber.util.VoxelShapeBuilder; -import com.blakebr0.extendedcrafting.lib.ModTooltips; -import com.blakebr0.extendedcrafting.tileentity.LegendaryTableTileEntity; -import net.minecraft.core.BlockPos; -import net.minecraft.network.chat.Component; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.Containers; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.TooltipFlag; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.SoundType; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.VoxelShape; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.network.NetworkHooks; - -import java.util.List; - -public class LegendaryTableBlock extends BaseTileEntityBlock { - public static final VoxelShape LEGENDARY_TABLE_SHAPE = VoxelShapeBuilder.builder() - .cuboid(2, 0, 2, 14, 2, 14) - .cuboid(3, 2, 3, 5, 10, 5) - .cuboid(11, 2, 11, 13, 10, 13) - .cuboid(11, 2, 3, 13, 10, 5) - .cuboid(3, 2, 11, 5, 10, 13) - .cuboid(0, 10, 0, 16, 16, 16) - .build(); - - public LegendaryTableBlock() { - super(SoundType.METAL, 5.0F, 10.0F, true); - } - - @Override - public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new LegendaryTableTileEntity(pos, state); - } - - @Override - public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult trace) { - if (!level.isClientSide()) { - var tile = level.getBlockEntity(pos); - - if (tile instanceof LegendaryTableTileEntity table) { - NetworkHooks.openScreen((ServerPlayer) player, table, pos); - } - } - - return InteractionResult.SUCCESS; - } - - @Override - public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) { - if (state.getBlock() != newState.getBlock()) { - var tile = level.getBlockEntity(pos); - - if (tile instanceof LegendaryTableTileEntity table) { - Containers.dropContents(level, pos, table.getInventory().getStacks()); - } - } - - super.onRemove(state, level, pos, newState, isMoving); - } - - @Override - public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return LEGENDARY_TABLE_SHAPE; - } - - @OnlyIn(Dist.CLIENT) - @Override - public void appendHoverText(ItemStack stack, BlockGetter level, List tooltip, TooltipFlag flag) { - tooltip.add(ModTooltips.TIER.args(6).build()); - } -} diff --git a/src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryAutoTableScreen.java b/src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryAutoTableScreen.java deleted file mode 100644 index 060b6fe7..00000000 --- a/src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryAutoTableScreen.java +++ /dev/null @@ -1,195 +0,0 @@ -package com.blakebr0.extendedcrafting.client.screen; - -import com.blakebr0.cucumber.client.render.GhostItemRenderer; -import com.blakebr0.cucumber.client.screen.BaseContainerScreen; -import com.blakebr0.cucumber.client.screen.widget.EnergyBarWidget; -import com.blakebr0.cucumber.inventory.BaseItemStackHandler; -import com.google.common.collect.Lists; -import com.blakebr0.extendedcrafting.ExtendedCrafting; -import com.blakebr0.extendedcrafting.client.screen.button.RecipeSelectButton; -import com.blakebr0.extendedcrafting.client.screen.button.ToggleTableRunningButton; -import com.blakebr0.extendedcrafting.container.LegendaryAutoTableContainer; -import com.blakebr0.extendedcrafting.lib.ModTooltips; -import com.blakebr0.extendedcrafting.tileentity.AutoTableTileEntity; -import net.minecraft.ChatFormatting; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.gui.components.Button; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.item.ItemStack; - -import java.util.List; - -public class LegendaryAutoTableScreen extends BaseContainerScreen { - public static final ResourceLocation BACKGROUND = new ResourceLocation(ExtendedCrafting.MOD_ID, "textures/gui/legendary_auto_table.png"); - private AutoTableTileEntity tile; - - public LegendaryAutoTableScreen(LegendaryAutoTableContainer container, Inventory inventory, Component title) { - super(container, inventory, title, BACKGROUND, 326, 350, 512, 512); - } - - @Override - public void init() { - super.init(); - - int x = this.getGuiLeft(); - int y = this.getGuiTop(); - var pos = this.getMenu().getBlockPos(); - - this.addRenderableWidget(new ToggleTableRunningButton(x + 292, y + 162, pos, this::isRunning)); - - this.tile = this.getTileEntity(); - - if (this.tile != null) { - this.addRenderableWidget(new RecipeSelectButton(x + 276, y + 7, pos, 0, this.tile.getRecipeStorage(), this::onSelectButtonTooltip)); - this.addRenderableWidget(new RecipeSelectButton(x + 289, y + 7, pos, 1, this.tile.getRecipeStorage(), this::onSelectButtonTooltip)); - this.addRenderableWidget(new RecipeSelectButton(x + 302, y + 7, pos, 2, this.tile.getRecipeStorage(), this::onSelectButtonTooltip)); - - this.addRenderableWidget(new EnergyBarWidget(x + 7, y + 95, this.tile.getEnergy())); - } - } - - @Override - protected void renderTooltip(GuiGraphics gfx, int mouseX, int mouseY) { - int x = this.getGuiLeft(); - int y = this.getGuiTop(); - - super.renderTooltip(gfx, mouseX, mouseY); - - if (mouseX > x + 292 && mouseX < x + 269 && mouseY > y + 161 && mouseY < y + 171) { - gfx.renderTooltip(this.font, ModTooltips.TOGGLE_AUTO_CRAFTING.color(ChatFormatting.WHITE).build(), mouseX, mouseY); - } - } - - @Override - protected void renderLabels(GuiGraphics gfx, int mouseX, int mouseY) { - var title = this.getTitle().getString(); - - gfx.drawString(this.font, title, 26, 6, 4210752, false); - gfx.drawString(this.font, this.playerInventoryTitle, 62, this.imageHeight - 94, 4210752, false); - } - - @Override - protected void renderBg(GuiGraphics gfx, float partialTicks, int mouseX, int mouseY) { - super.renderDefaultBg(gfx, partialTicks, mouseX, mouseY); - - int x = this.getGuiLeft(); - int y = this.getGuiTop(); - - if (this.isRunning()) { - int i2 = this.getProgressBarScaled(); - gfx.blit(BACKGROUND, x + 297, y + 161, 344, 0, 13, i2, 512, 512); - } - - var recipe = this.getSelectedRecipe(); - - if (recipe != null) { - var itemRenderer = Minecraft.getInstance().getItemRenderer(); - - for (int i = 0; i < 13; i++) { - for (int j = 0; j < 13; j++) { - int index = (i * 13) + j; - var item = recipe.getStackInSlot(index); - - GhostItemRenderer.renderItemIntoGui(item, x + 27 + (j * 18), y + 18 + (i * 18), itemRenderer); - } - } - - var output = recipe.getStackInSlot(recipe.getSlots() - 1); - - GhostItemRenderer.renderItemIntoGui(output, x + 261, y + 107, itemRenderer); - } - } - - private void onSelectButtonTooltip(Button button, GuiGraphics gfx, int mouseX, int mouseY) { - var index = ((RecipeSelectButton) button).getIndex(); - var isSelected = ((RecipeSelectButton) button).isSelected(); - var recipe = this.getRecipeInfo(index); - - if (recipe != null) { - List tooltip; - var hasRecipe = !recipe.getStacks().stream().allMatch(ItemStack::isEmpty); - - if (hasRecipe) { - var output = recipe.getStackInSlot(recipe.getSlots() - 1); - - tooltip = Lists.newArrayList( - Component.literal(output.getCount() + "x " + output.getHoverName().getString()), - Component.literal(""), - ModTooltips.AUTO_TABLE_DELETE_RECIPE.color(ChatFormatting.WHITE).build() - ); - - if (isSelected) { - tooltip.add(1, ModTooltips.SELECTED.color(ChatFormatting.GREEN).build()); - } - } else { - tooltip = Lists.newArrayList( - ModTooltips.AUTO_TABLE_SAVE_RECIPE.color(ChatFormatting.WHITE).build() - ); - - if (isSelected) { - tooltip.add(0, ModTooltips.SELECTED.color(ChatFormatting.GREEN).build()); - tooltip.add(1, Component.literal("")); - } - } - - gfx.renderComponentTooltip(this.font, tooltip, mouseX, mouseY); - } - } - - private AutoTableTileEntity getTileEntity() { - var level = this.getMinecraft().level; - - if (level != null) { - var tile = level.getBlockEntity(this.getMenu().getBlockPos()); - - if (tile instanceof AutoTableTileEntity table) - return table; - } - - return null; - } - - private boolean isRunning() { - if (this.tile == null) - return false; - - return this.tile.isRunning(); - } - - private BaseItemStackHandler getRecipeInfo(int selected) { - if (this.tile == null) - return null; - - return this.tile.getRecipeStorage().getRecipe(selected); - } - - private BaseItemStackHandler getSelectedRecipe() { - if (this.tile == null) - return null; - - return this.tile.getRecipeStorage().getSelectedRecipe(); - } - - private int getProgress() { - if (this.tile == null) - return 0; - - return this.tile.getProgress(); - } - - private int getProgressRequired() { - if (this.tile == null) - return 0; - - return this.tile.getProgressRequired(); - } - - private int getProgressBarScaled() { - int i = this.getProgress(); - int j = this.getProgressRequired(); - return j != 0 && i != 0 ? i * 16 / j : 0; - } -} diff --git a/src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryTableScreen.java b/src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryTableScreen.java deleted file mode 100644 index 10239310..00000000 --- a/src/main/java/com/blakebr0/extendedcrafting/client/screen/LegendaryTableScreen.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.blakebr0.extendedcrafting.client.screen; - -import com.blakebr0.cucumber.client.screen.BaseContainerScreen; -import com.blakebr0.extendedcrafting.ExtendedCrafting; -import com.blakebr0.extendedcrafting.container.LegendaryTableContainer; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.player.Inventory; - -public class LegendaryTableScreen extends BaseContainerScreen { - public static final ResourceLocation BACKGROUND = new ResourceLocation(ExtendedCrafting.MOD_ID, "textures/gui/legendary_table.png"); - - public LegendaryTableScreen(LegendaryTableContainer container, Inventory inventory, Component title) { - super(container, inventory, title, BACKGROUND, 305, 350, 512, 512); - } - - @Override - protected void renderLabels(GuiGraphics gfx, int mouseX, int mouseY) { - var title = this.getTitle().getString(); - - gfx.drawString(this.font, title, 8, 6, 4210752, false); - gfx.drawString(this.font, this.playerInventoryTitle, 43, this.imageHeight - 94, 4210752, false); - } - - @Override - protected void renderBg(GuiGraphics gfx, float partialTicks, int mouseX, int mouseY) { - this.renderDefaultBg(gfx, partialTicks, mouseX, mouseY); - } -} diff --git a/src/main/java/com/blakebr0/extendedcrafting/compat/JadeCompat.java b/src/main/java/com/blakebr0/extendedcrafting/compat/JadeCompat.java index 5fa42840..47de0b84 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/compat/JadeCompat.java +++ b/src/main/java/com/blakebr0/extendedcrafting/compat/JadeCompat.java @@ -16,6 +16,7 @@ import snownee.jade.api.WailaPlugin; import snownee.jade.api.config.IPluginConfig; +@SuppressWarnings("removal") @WailaPlugin public class JadeCompat implements IWailaPlugin { private static final ResourceLocation CRAFTING_CORE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID + ":crafting_core"); @@ -24,13 +25,11 @@ public class JadeCompat implements IWailaPlugin { private static final ResourceLocation ELITE_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "elite_table"); private static final ResourceLocation ULTIMATE_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "ultimate_table"); private static final ResourceLocation EPIC_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "epic_table"); - private static final ResourceLocation LEGENDARY_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "legendary_table"); private static final ResourceLocation BASIC_AUTO_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "basic_auto_table"); private static final ResourceLocation ADVANCED_AUTO_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "advanced_auto_table"); private static final ResourceLocation ELITE_AUTO_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "elite_auto_table"); private static final ResourceLocation ULTIMATE_AUTO_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "ultimate_auto_table"); private static final ResourceLocation EPIC_AUTO_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "epic_auto_table"); - private static final ResourceLocation LEGENDARY_AUTO_TABLE_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "legendary_auto_table"); private static final ResourceLocation ENDER_CRAFTER_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "ender_crafter"); private static final ResourceLocation AUTO_ENDER_CRAFTER_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "auto_ender_crafter"); private static final ResourceLocation FLUX_CRAFTER_PROVIDER = new ResourceLocation(ExtendedCrafting.MOD_ID, "flux_crafter"); @@ -119,18 +118,6 @@ public ResourceLocation getUid() { } }, EpicTableBlock.class); - registration.registerBlockComponent(new IBlockComponentProvider() { - @Override - public void appendTooltip(ITooltip tooltip, BlockAccessor accessor, IPluginConfig config) { - tooltip.add(ModTooltips.TIER.args(6).build()); - } - - @Override - public ResourceLocation getUid() { - return LEGENDARY_TABLE_PROVIDER; - } - }, LegendaryTableBlock.class); - registration.registerBlockComponent(new IBlockComponentProvider() { @Override public void appendTooltip(ITooltip tooltip, BlockAccessor accessor, IPluginConfig config) { @@ -191,18 +178,6 @@ public ResourceLocation getUid() { } }, EpicAutoTableBlock.class); - registration.registerBlockComponent(new IBlockComponentProvider() { - @Override - public void appendTooltip(ITooltip tooltip, BlockAccessor accessor, IPluginConfig config) { - tooltip.add(ModTooltips.TIER.args(6).build()); - } - - @Override - public ResourceLocation getUid() { - return LEGENDARY_AUTO_TABLE_PROVIDER; - } - }, LegendaryAutoTableBlock.class); - registration.registerBlockComponent(new IBlockComponentProvider() { @Override public void appendTooltip(ITooltip tooltip, BlockAccessor accessor, IPluginConfig config) { diff --git a/src/main/java/com/blakebr0/extendedcrafting/compat/jei/JeiCompat.java b/src/main/java/com/blakebr0/extendedcrafting/compat/jei/JeiCompat.java index c0b13865..af6791d2 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/compat/jei/JeiCompat.java +++ b/src/main/java/com/blakebr0/extendedcrafting/compat/jei/JeiCompat.java @@ -56,8 +56,7 @@ public void registerCategories(IRecipeCategoryRegistration registration) { new AdvancedTableCategory(helper), new EliteTableCategory(helper), new UltimateTableCategory(helper), - new EpicTableCategory(helper), - new LegendaryTableCategory(helper) + new EpicTableCategory(helper) ); } @@ -86,7 +85,7 @@ public void registerRecipes(IRecipeRegistration registration) { } if (ModConfigs.ENABLE_TABLES.get()) { - var recipes = Stream.of(1, 2, 3, 4, 5, 6).collect(Collectors.toMap(tier -> tier, tier -> + var recipes = Stream.of(1, 2, 3, 4, 5).collect(Collectors.toMap(tier -> tier, tier -> manager.byType(ModRecipeTypes.TABLE.get()).values() .stream() .filter(recipe -> tier == recipe.getTier()) @@ -98,8 +97,7 @@ public void registerRecipes(IRecipeRegistration registration) { registration.addRecipes(EliteTableCategory.RECIPE_TYPE, recipes.getOrDefault(3, new ArrayList<>())); registration.addRecipes(UltimateTableCategory.RECIPE_TYPE, recipes.getOrDefault(4, new ArrayList<>())); registration.addRecipes(EpicTableCategory.RECIPE_TYPE, recipes.getOrDefault(5, new ArrayList<>())); - registration.addRecipes(LegendaryTableCategory.RECIPE_TYPE, recipes.getOrDefault(6, new ArrayList<>())); - } + } if (ModConfigs.ENABLE_COMPRESSOR.get()) { registration.addRecipes(CompressorCraftingCategory.RECIPE_TYPE, manager.getAllRecipesFor(ModRecipeTypes.COMPRESSOR.get())); @@ -132,7 +130,6 @@ public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) { registration.addRecipeCatalyst(new ItemStack(ModBlocks.ELITE_TABLE.get()), EliteTableCategory.RECIPE_TYPE); registration.addRecipeCatalyst(new ItemStack(ModBlocks.ULTIMATE_TABLE.get()), UltimateTableCategory.RECIPE_TYPE); registration.addRecipeCatalyst(new ItemStack(ModBlocks.EPIC_TABLE.get()), EpicTableCategory.RECIPE_TYPE); - registration.addRecipeCatalyst(new ItemStack(ModBlocks.LEGENDARY_TABLE.get()), LegendaryTableCategory.RECIPE_TYPE); if (ModConfigs.TABLE_USE_VANILLA_RECIPES.get()) { registration.addRecipeCatalyst(new ItemStack(ModBlocks.BASIC_TABLE.get()), mezz.jei.api.constants.RecipeTypes.CRAFTING); @@ -144,7 +141,6 @@ public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) { registration.addRecipeCatalyst(new ItemStack(ModBlocks.ELITE_AUTO_TABLE.get()), EliteTableCategory.RECIPE_TYPE); registration.addRecipeCatalyst(new ItemStack(ModBlocks.ULTIMATE_AUTO_TABLE.get()), UltimateTableCategory.RECIPE_TYPE); registration.addRecipeCatalyst(new ItemStack(ModBlocks.EPIC_AUTO_TABLE.get()), EpicTableCategory.RECIPE_TYPE); - registration.addRecipeCatalyst(new ItemStack(ModBlocks.LEGENDARY_AUTO_TABLE.get()), LegendaryTableCategory.RECIPE_TYPE); if (ModConfigs.TABLE_USE_VANILLA_RECIPES.get()) { registration.addRecipeCatalyst(new ItemStack(ModBlocks.BASIC_AUTO_TABLE.get()), mezz.jei.api.constants.RecipeTypes.CRAFTING); @@ -185,7 +181,6 @@ public void registerRecipeTransferHandlers(IRecipeTransferRegistration registrat registration.addRecipeTransferHandler(EliteTableContainer.class, ModContainerTypes.ELITE_TABLE.get(), EliteTableCategory.RECIPE_TYPE, 1, 49, 50, 36); registration.addRecipeTransferHandler(UltimateTableContainer.class, ModContainerTypes.ULTIMATE_TABLE.get(), UltimateTableCategory.RECIPE_TYPE, 1, 81, 82, 36); registration.addRecipeTransferHandler(EpicTableContainer.class, ModContainerTypes.EPIC_TABLE.get(), EpicTableCategory.RECIPE_TYPE, 1, 121, 122, 36); - registration.addRecipeTransferHandler(LegendaryTableContainer.class, ModContainerTypes.LEGENDARY_TABLE.get(), LegendaryTableCategory.RECIPE_TYPE, 1, 169, 170, 36); if (ModConfigs.TABLE_USE_VANILLA_RECIPES.get()) { registration.addRecipeTransferHandler(BasicTableContainer.class, ModContainerTypes.BASIC_TABLE.get(), mezz.jei.api.constants.RecipeTypes.CRAFTING, 1, 9, 10, 36); @@ -197,7 +192,6 @@ public void registerRecipeTransferHandlers(IRecipeTransferRegistration registrat registration.addRecipeTransferHandler(EliteAutoTableContainer.class, ModContainerTypes.ELITE_AUTO_TABLE.get(), EliteTableCategory.RECIPE_TYPE, 1, 49, 51, 36); registration.addRecipeTransferHandler(UltimateAutoTableContainer.class, ModContainerTypes.ULTIMATE_AUTO_TABLE.get(), UltimateTableCategory.RECIPE_TYPE, 1, 81, 83, 36); registration.addRecipeTransferHandler(EpicAutoTableContainer.class, ModContainerTypes.EPIC_AUTO_TABLE.get(), EpicTableCategory.RECIPE_TYPE, 1, 121, 123, 36); - registration.addRecipeTransferHandler(LegendaryAutoTableContainer.class, ModContainerTypes.LEGENDARY_AUTO_TABLE.get(), LegendaryTableCategory.RECIPE_TYPE, 1, 169, 170, 36); if (ModConfigs.TABLE_USE_VANILLA_RECIPES.get()) { registration.addRecipeTransferHandler(BasicAutoTableContainer.class, ModContainerTypes.BASIC_AUTO_TABLE.get(), mezz.jei.api.constants.RecipeTypes.CRAFTING, 1, 9, 11, 36); @@ -234,7 +228,6 @@ public void registerGuiHandlers(IGuiHandlerRegistration registration) { registration.addRecipeClickArea(EliteTableScreen.class, 139, 72, 21, 14, EliteTableCategory.RECIPE_TYPE); registration.addRecipeClickArea(UltimateTableScreen.class, 174, 90, 21, 14, UltimateTableCategory.RECIPE_TYPE); registration.addRecipeClickArea(EpicTableScreen.class, 210, 108, 21, 14, EpicTableCategory.RECIPE_TYPE); - registration.addRecipeClickArea(LegendaryTableScreen.class, 210, 108, 21, 14, LegendaryTableCategory.RECIPE_TYPE); if (ModConfigs.ENABLE_AUTO_TABLES.get()) { registration.addRecipeClickArea(BasicAutoTableScreen.class, 97, 36, 21, 14, BasicTableCategory.RECIPE_TYPE); @@ -242,7 +235,6 @@ public void registerGuiHandlers(IGuiHandlerRegistration registration) { registration.addRecipeClickArea(EliteAutoTableScreen.class, 158, 72, 21, 14, EliteTableCategory.RECIPE_TYPE); registration.addRecipeClickArea(UltimateAutoTableScreen.class, 193, 90, 21, 14, UltimateTableCategory.RECIPE_TYPE); registration.addRecipeClickArea(EpicAutoTableScreen.class, 237, 108, 21, 14, EpicTableCategory.RECIPE_TYPE); - registration.addRecipeClickArea(LegendaryAutoTableScreen.class, 237, 108, 21, 14, LegendaryTableCategory.RECIPE_TYPE); } } diff --git a/src/main/java/com/blakebr0/extendedcrafting/compat/jei/category/table/LegendaryTableCategory.java b/src/main/java/com/blakebr0/extendedcrafting/compat/jei/category/table/LegendaryTableCategory.java deleted file mode 100644 index 0f17e50e..00000000 --- a/src/main/java/com/blakebr0/extendedcrafting/compat/jei/category/table/LegendaryTableCategory.java +++ /dev/null @@ -1,141 +0,0 @@ -package com.blakebr0.extendedcrafting.compat.jei.category.table; - -import com.blakebr0.cucumber.util.Localizable; -import com.blakebr0.extendedcrafting.ExtendedCrafting; -import com.blakebr0.extendedcrafting.api.crafting.ITableRecipe; -import com.blakebr0.extendedcrafting.compat.jei.JeiCompat; -import com.blakebr0.extendedcrafting.crafting.recipe.ShapedTableRecipe; -import com.blakebr0.extendedcrafting.crafting.recipe.ShapelessTableRecipe; -import com.blakebr0.extendedcrafting.init.ModBlocks; -import com.blakebr0.extendedcrafting.lib.ModTooltips; -import mezz.jei.api.constants.VanillaTypes; -import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; -import mezz.jei.api.gui.drawable.IDrawable; -import mezz.jei.api.gui.ingredient.IRecipeSlotsView; -import mezz.jei.api.helpers.IGuiHelper; -import mezz.jei.api.recipe.IFocusGroup; -import mezz.jei.api.recipe.RecipeIngredientRole; -import mezz.jei.api.recipe.RecipeType; -import mezz.jei.api.recipe.category.IRecipeCategory; -import net.minecraft.ChatFormatting; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; - -import java.util.List; - -public class LegendaryTableCategory implements IRecipeCategory { - private static final ResourceLocation TEXTURE = new ResourceLocation(ExtendedCrafting.MOD_ID, "textures/jei/legendary_crafting.png"); - public static final RecipeType RECIPE_TYPE = RecipeType.create(ExtendedCrafting.MOD_ID, "legendary_crafting", ITableRecipe.class); - - private final IDrawable background; - private final IDrawable icon; - private final IDrawable shapeless; - private final IDrawable required; - - public LegendaryTableCategory(IGuiHelper helper) { - this.background = helper.drawableBuilder(TEXTURE, 0, 0, 234, 267).setTextureSize(292, 288).build(); - this.icon = helper.createDrawableIngredient(VanillaTypes.ITEM_STACK, new ItemStack(ModBlocks.LEGENDARY_TABLE.get())); - this.shapeless = helper.createDrawable(JeiCompat.ICONS, 17, 0, 15, 15); - this.required = helper.createDrawable(JeiCompat.ICONS, 0, 0, 15, 15); - } - - @Override - public RecipeType getRecipeType() { - return RECIPE_TYPE; - } - - @Override - public Component getTitle() { - return Localizable.of("jei.category.extendedcrafting.legendary_crafting").build(); - } - - @Override - public IDrawable getBackground(){ - return this.background; - } - - @Override - public IDrawable getIcon() { - return this.icon; - } - - @Override - public void draw(ITableRecipe recipe, IRecipeSlotsView slots, GuiGraphics gfx, double mouseX, double mouseY) { - var matrix = gfx.pose(); - - matrix.pushPose(); - matrix.scale(0.4F, 0.4F, 0.4F); - - var shapeless = recipe instanceof ShapelessTableRecipe; - - if (shapeless) this.shapeless.draw(gfx, 324, 401); - - if (recipe.hasRequiredTier()) - this.required.draw(gfx, shapeless ? 304 : 324, 401); - - matrix.popPose(); - } - - @SuppressWarnings("removal") - @Override - public List getTooltipStrings(ITableRecipe recipe, IRecipeSlotsView slots, double mouseX, double mouseY) { - var shapeless = recipe instanceof ShapelessTableRecipe; - float scale = 0.4F; - int sX = (int)((shapeless ? 304 : 324) * scale / 2), sY = (int)(401 * scale / 2); - int sX2 = (int)(324 * scale / 2); - - if (shapeless && mouseX > sX2 - 1 && mouseX < sX2 + 8 && mouseY > sY - 1 && mouseY < sY + 8) { - return List.of(ModTooltips.SHAPELESS.color(ChatFormatting.WHITE).build()); - } - if (recipe.hasRequiredTier() && mouseX > sX - 1 && mouseX < sX + 8 && mouseY > sY - 1 && mouseY < sY + 8) { - return List.of(ModTooltips.REQUIRES_TABLE.args(recipe.getTier()).color(ChatFormatting.WHITE).build()); - } - - return List.of(); - } - - @Override - public void setRecipe(IRecipeLayoutBuilder builder, ITableRecipe recipe, IFocusGroup focuses) { - var level = Minecraft.getInstance().level; - - assert level != null; - - var inputs = recipe.getIngredients(); - var output = recipe.getResultItem(level.registryAccess()); - - if (recipe instanceof ShapedTableRecipe shaped) { - int heightOffset = Math.floorDiv(13 - shaped.getHeight(), 2); - int widthOffset = Math.floorDiv(13 - shaped.getWidth(), 2); - int stackIndex = 0; - - for (int i = 0; i < 13; i++) { - for (int j = 0; j < 13; j++) { - var slot = builder.addSlot(RecipeIngredientRole.INPUT, j * 18 + 1, i * 18 + 1); - - if (i >= heightOffset && i < shaped.getHeight() + heightOffset && j >= widthOffset && j < shaped.getWidth() + widthOffset) { - slot.addIngredients(inputs.get(stackIndex++)); - } - } - } - } else if (recipe instanceof ShapelessTableRecipe) { - for (int i = 0; i < 13; i++) { - for (int j = 0; j < 13; j++) { - int index = j + (i * 13); - - if (index < inputs.size()) { - builder.addSlot(RecipeIngredientRole.INPUT, j * 18 + 1, i * 18 + 1).addIngredients(inputs.get(index)); - } - } - } - - builder.setShapeless(220, 262); - } - - builder.addSlot(RecipeIngredientRole.OUTPUT, 122, 246).addItemStack(output); - - builder.moveRecipeTransferButton(220, 255); - } -} diff --git a/src/main/java/com/blakebr0/extendedcrafting/config/ModConfigs.java b/src/main/java/com/blakebr0/extendedcrafting/config/ModConfigs.java index a2616e02..9e0ddaf2 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/config/ModConfigs.java +++ b/src/main/java/com/blakebr0/extendedcrafting/config/ModConfigs.java @@ -38,7 +38,6 @@ public final class ModConfigs { public static final ForgeConfigSpec.IntValue AUTO_TABLE_ELITE_CRAFTING_TIME; public static final ForgeConfigSpec.IntValue AUTO_TABLE_ULTIMATE_CRAFTING_TIME; public static final ForgeConfigSpec.IntValue AUTO_TABLE_EPIC_CRAFTING_TIME; - public static final ForgeConfigSpec.IntValue AUTO_TABLE_LEGENDARY_CRAFTING_TIME; public static final ForgeConfigSpec.BooleanValue ENABLE_COMPRESSOR; public static final ForgeConfigSpec.IntValue COMPRESSOR_POWER_CAPACITY; @@ -125,9 +124,6 @@ public final class ModConfigs { AUTO_TABLE_EPIC_CRAFTING_TIME = common .comment("How many ticks the Epic Auto Table takes to craft") .defineInRange("autoTableEpicCraftTime", 8, 1, Integer.MAX_VALUE); - AUTO_TABLE_LEGENDARY_CRAFTING_TIME = common - .comment("How many ticks the Legendary Auto Table takes to craft") - .defineInRange("autoTableLegendaryCraftTime", 8, 1, Integer.MAX_VALUE); common.pop(); common.comment("Settings for the Quantum Compressor.").push("Quantum Compression"); diff --git a/src/main/java/com/blakebr0/extendedcrafting/container/LegendaryAutoTableContainer.java b/src/main/java/com/blakebr0/extendedcrafting/container/LegendaryAutoTableContainer.java deleted file mode 100644 index 03fb33f8..00000000 --- a/src/main/java/com/blakebr0/extendedcrafting/container/LegendaryAutoTableContainer.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.blakebr0.extendedcrafting.container; - -import com.blakebr0.cucumber.container.BaseContainerMenu; -import com.blakebr0.cucumber.inventory.BaseItemStackHandler; -import com.blakebr0.extendedcrafting.container.inventory.ExtendedCraftingInventory; -import com.blakebr0.extendedcrafting.container.slot.AutoTableOutputSlot; -import com.blakebr0.extendedcrafting.container.slot.TableOutputSlot; -import com.blakebr0.extendedcrafting.init.ModContainerTypes; -import com.blakebr0.extendedcrafting.init.ModRecipeTypes; -import com.blakebr0.extendedcrafting.tileentity.AutoTableTileEntity; -import net.minecraft.core.BlockPos; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.Container; -import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.inventory.MenuType; -import net.minecraft.world.inventory.ResultContainer; -import net.minecraft.world.inventory.Slot; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; - -public class LegendaryAutoTableContainer extends BaseContainerMenu { - private final Level level; - private final Container result; - - private LegendaryAutoTableContainer(MenuType type, int id, Inventory playerInventory, FriendlyByteBuf buffer) { - this(type, id, playerInventory, AutoTableTileEntity.Legendary.createInventoryHandler(), buffer.readBlockPos()); - } - - private LegendaryAutoTableContainer(MenuType type, int id, Inventory playerInventory, BaseItemStackHandler inventory, BlockPos pos) { - super(type, id, pos); - this.level = playerInventory.player.level(); - this.result = new ResultContainer(); - - var matrix = new ExtendedCraftingInventory(this, inventory, 13, true); - - this.addSlot(new TableOutputSlot(this, matrix, this.result, 0, 297, 126)); - - int i, j; - for (i = 0; i < 13; i++) { - for (j = 0; j < 13; j++) { - this.addSlot(new Slot(matrix, j + i * 13, 27 + j * 18, 18 + i * 18)); - } - } - - this.addSlot(new AutoTableOutputSlot(this, matrix, inventory, 169, 297, 170)); - - for (i = 0; i < 3; i++) { - for (j = 0; j < 9; j++) { - this.addSlot(new Slot(playerInventory, j + i * 9 + 9, 63 + j * 18, 268 + i * 18)); - } - } - - for (j = 0; j < 9; j++) { - this.addSlot(new Slot(playerInventory, j, 63 + j * 18, 326)); - } - - this.slotsChanged(matrix); - } - - @Override - public void slotsChanged(Container matrix) { - if (this.level.isClientSide) { - return; - } - var recipe = this.level.getRecipeManager().getRecipeFor(ModRecipeTypes.TABLE.get(), matrix, this.level); - - if (recipe.isPresent()) { - var result = recipe.get().assemble(matrix, this.level.registryAccess()); - this.result.setItem(0, result); - } else { - this.result.setItem(0, ItemStack.EMPTY); - } - - super.slotsChanged(matrix); - } - - @Override - public ItemStack quickMoveStack(Player player, int slotNumber) { - var itemstack = ItemStack.EMPTY; - var slot = this.slots.get(slotNumber); - - if (slot.hasItem()) { - var itemstack1 = slot.getItem(); - itemstack = itemstack1.copy(); - - if (slotNumber == 0 || slotNumber == 170) { - if (!this.moveItemStackTo(itemstack1, 171, 207, true)) { - return ItemStack.EMPTY; - } - - slot.onQuickCraft(itemstack1, itemstack); - } else if (slotNumber >= 171 && slotNumber < 207) { - if (!this.moveItemStackTo(itemstack1, 1, 170, false)) { - return ItemStack.EMPTY; - } - } else if (!this.moveItemStackTo(itemstack1, 171, 207, false)) { - return ItemStack.EMPTY; - } - - if (itemstack1.getCount() == 0) { - slot.set(ItemStack.EMPTY); - } else { - slot.setChanged(); - } - - if (itemstack1.getCount() == itemstack.getCount()) { - return ItemStack.EMPTY; - } - - slot.onTake(player, itemstack1); - } - - return itemstack; - } - - public static LegendaryAutoTableContainer create(int windowId, Inventory playerInventory, FriendlyByteBuf buffer) { - return new LegendaryAutoTableContainer(ModContainerTypes.LEGENDARY_AUTO_TABLE.get(), windowId, playerInventory, buffer); - } - - public static LegendaryAutoTableContainer create(int windowId, Inventory playerInventory, BaseItemStackHandler inventory, BlockPos pos) { - return new LegendaryAutoTableContainer(ModContainerTypes.LEGENDARY_AUTO_TABLE.get(), windowId, playerInventory, inventory, pos); - } -} diff --git a/src/main/java/com/blakebr0/extendedcrafting/container/LegendaryTableContainer.java b/src/main/java/com/blakebr0/extendedcrafting/container/LegendaryTableContainer.java deleted file mode 100644 index 5ee6438b..00000000 --- a/src/main/java/com/blakebr0/extendedcrafting/container/LegendaryTableContainer.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.blakebr0.extendedcrafting.container; - -import com.blakebr0.cucumber.container.BaseContainerMenu; -import com.blakebr0.cucumber.inventory.BaseItemStackHandler; -import com.blakebr0.extendedcrafting.container.inventory.ExtendedCraftingInventory; -import com.blakebr0.extendedcrafting.container.slot.TableOutputSlot; -import com.blakebr0.extendedcrafting.init.ModContainerTypes; -import com.blakebr0.extendedcrafting.init.ModRecipeTypes; -import com.blakebr0.extendedcrafting.tileentity.LegendaryTableTileEntity; -import net.minecraft.core.BlockPos; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.Container; -import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.inventory.MenuType; -import net.minecraft.world.inventory.ResultContainer; -import net.minecraft.world.inventory.Slot; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; - -public class LegendaryTableContainer extends BaseContainerMenu { - private final Level level; - private final Container result; - - private LegendaryTableContainer(MenuType type, int id, Inventory playerInventory, FriendlyByteBuf buffer) { - this(type, id, playerInventory, LegendaryTableTileEntity.createInventoryHandler(), buffer.readBlockPos()); - } - - private LegendaryTableContainer(MenuType type, int id, Inventory playerInventory, BaseItemStackHandler inventory, BlockPos pos) { - super(type, id, pos); - this.level = playerInventory.player.level(); - this.result = new ResultContainer(); - - var matrix = new ExtendedCraftingInventory(this, inventory, 13); - - this.addSlot(new TableOutputSlot(this, matrix, this.result, 0, 278, 125)); - - int i, j; - for (i = 0; i < 13; i++) { - for (j = 0; j < 13; j++) { - this.addSlot(new Slot(matrix, j + i * 13, 8 + j * 18, 18 + i * 18)); - } - } - - for (i = 0; i < 3; i++) { - for (j = 0; j < 9; j++) { - this.addSlot(new Slot(playerInventory, j + i * 9 + 9, 44 + j * 18, 268 + i * 18)); - } - } - - for (j = 0; j < 9; j++) { - this.addSlot(new Slot(playerInventory, j, 44 + j * 18, 326)); - } - - this.slotsChanged(matrix); - } - - @Override - public void slotsChanged(Container matrix) { - if (this.level.isClientSide) { - return; - } - var recipe = this.level.getRecipeManager().getRecipeFor(ModRecipeTypes.TABLE.get(), matrix, this.level); - - if (recipe.isPresent()) { - var result = recipe.get().assemble(matrix, this.level.registryAccess()); - this.result.setItem(0, result); - } else { - this.result.setItem(0, ItemStack.EMPTY); - } - - super.slotsChanged(matrix); - } - - @Override - public ItemStack quickMoveStack(Player player, int slotNumber) { - var itemstack = ItemStack.EMPTY; - var slot = this.slots.get(slotNumber); - - if (slot.hasItem()) { - var itemstack1 = slot.getItem(); - itemstack = itemstack1.copy(); - - if (slotNumber == 0) { - if (!this.moveItemStackTo(itemstack1, 170, 206, true)) { - return ItemStack.EMPTY; - } - - slot.onQuickCraft(itemstack1, itemstack); - } else if (slotNumber >= 170 && slotNumber < 206) { - if (!this.moveItemStackTo(itemstack1, 1, 170, false)) { - return ItemStack.EMPTY; - } - } else if (!this.moveItemStackTo(itemstack1, 170, 206, false)) { - return ItemStack.EMPTY; - } - - if (itemstack1.isEmpty()) { - slot.set(ItemStack.EMPTY); - } else { - slot.setChanged(); - } - - if (itemstack1.getCount() == itemstack.getCount()) { - return ItemStack.EMPTY; - } - - slot.onTake(player, itemstack1); - } - - return itemstack; - } - - public static LegendaryTableContainer create(int windowId, Inventory playerInventory, FriendlyByteBuf buffer) { - return new LegendaryTableContainer(ModContainerTypes.LEGENDARY_TABLE.get(), windowId, playerInventory, buffer); - } - - public static LegendaryTableContainer create(int windowId, Inventory playerInventory, BaseItemStackHandler inventory, BlockPos pos) { - return new LegendaryTableContainer(ModContainerTypes.LEGENDARY_TABLE.get(), windowId, playerInventory, inventory, pos); - } -} diff --git a/src/main/java/com/blakebr0/extendedcrafting/init/ModBlocks.java b/src/main/java/com/blakebr0/extendedcrafting/init/ModBlocks.java index 99e7e29f..fb5607eb 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/init/ModBlocks.java +++ b/src/main/java/com/blakebr0/extendedcrafting/init/ModBlocks.java @@ -20,8 +20,6 @@ import com.blakebr0.extendedcrafting.block.FluxAlternatorBlock; import com.blakebr0.extendedcrafting.block.FluxCrafterBlock; import com.blakebr0.extendedcrafting.block.FrameBlock; -import com.blakebr0.extendedcrafting.block.LegendaryTableBlock; -import com.blakebr0.extendedcrafting.block.LegendaryAutoTableBlock; import com.blakebr0.extendedcrafting.block.PedestalBlock; import com.blakebr0.extendedcrafting.block.TheUltimateBlock; import com.blakebr0.extendedcrafting.block.UltimateAutoTableBlock; @@ -63,13 +61,11 @@ public final class ModBlocks { public static final RegistryObject ELITE_TABLE = register("elite_table", EliteTableBlock::new); public static final RegistryObject ULTIMATE_TABLE = register("ultimate_table", UltimateTableBlock::new); public static final RegistryObject EPIC_TABLE = register("epic_table", EpicTableBlock::new); - public static final RegistryObject LEGENDARY_TABLE = register("legendary_table", LegendaryTableBlock::new); public static final RegistryObject BASIC_AUTO_TABLE = register("basic_auto_table", BasicAutoTableBlock::new); public static final RegistryObject ADVANCED_AUTO_TABLE = register("advanced_auto_table", AdvancedAutoTableBlock::new); public static final RegistryObject ELITE_AUTO_TABLE = register("elite_auto_table", EliteAutoTableBlock::new); public static final RegistryObject ULTIMATE_AUTO_TABLE = register("ultimate_auto_table", UltimateAutoTableBlock::new); public static final RegistryObject EPIC_AUTO_TABLE = register("epic_auto_table", EpicAutoTableBlock::new); - public static final RegistryObject LEGENDARY_AUTO_TABLE = register("legendary_auto_table", LegendaryAutoTableBlock::new); public static final RegistryObject COMPRESSOR = register("compressor", CompressorBlock::new); public static final RegistryObject ENDER_ALTERNATOR = register("ender_alternator", EnderAlternatorBlock::new); public static final RegistryObject ENDER_CRAFTER = register("ender_crafter", EnderCrafterBlock::new); diff --git a/src/main/java/com/blakebr0/extendedcrafting/init/ModContainerTypes.java b/src/main/java/com/blakebr0/extendedcrafting/init/ModContainerTypes.java index 0fbb427b..f1c528d1 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/init/ModContainerTypes.java +++ b/src/main/java/com/blakebr0/extendedcrafting/init/ModContainerTypes.java @@ -25,13 +25,11 @@ public final class ModContainerTypes { public static final RegistryObject> ELITE_TABLE = register("elite_table", () -> new MenuType<>((IContainerFactory) EliteTableContainer::create, FeatureFlagSet.of())); public static final RegistryObject> ULTIMATE_TABLE = register("ultimate_table", () -> new MenuType<>((IContainerFactory) UltimateTableContainer::create, FeatureFlagSet.of())); public static final RegistryObject> EPIC_TABLE = register("epic_table", () -> new MenuType<>((IContainerFactory) EpicTableContainer::create, FeatureFlagSet.of())); - public static final RegistryObject> LEGENDARY_TABLE = register("legendary_table", () -> new MenuType<>((IContainerFactory) LegendaryTableContainer::create, FeatureFlagSet.of())); public static final RegistryObject> BASIC_AUTO_TABLE = register("basic_auto_table", () -> new MenuType<>((IContainerFactory) BasicAutoTableContainer::create, FeatureFlagSet.of())); public static final RegistryObject> ADVANCED_AUTO_TABLE = register("advanced_auto_table", () -> new MenuType<>((IContainerFactory) AdvancedAutoTableContainer::create, FeatureFlagSet.of())); public static final RegistryObject> ELITE_AUTO_TABLE = register("elite_auto_table", () -> new MenuType<>((IContainerFactory) EliteAutoTableContainer::create, FeatureFlagSet.of())); public static final RegistryObject> ULTIMATE_AUTO_TABLE = register("ultimate_auto_table", () -> new MenuType<>((IContainerFactory) UltimateAutoTableContainer::create, FeatureFlagSet.of())); public static final RegistryObject> EPIC_AUTO_TABLE = register("epic_auto_table", () -> new MenuType<>((IContainerFactory) EpicAutoTableContainer::create, FeatureFlagSet.of())); - public static final RegistryObject> LEGENDARY_AUTO_TABLE = register("legendary_auto_table", () -> new MenuType<>((IContainerFactory) LegendaryAutoTableContainer::create, FeatureFlagSet.of())); public static final RegistryObject> COMPRESSOR = register("compressor", () -> new MenuType<>((IContainerFactory) CompressorContainer::create, FeatureFlagSet.of())); public static final RegistryObject> ENDER_CRAFTER = register("ender_crafter", () -> new MenuType<>((IContainerFactory) EnderCrafterContainer::create, FeatureFlagSet.of())); public static final RegistryObject> AUTO_ENDER_CRAFTER = register("auto_ender_crafter", () -> new MenuType<>((IContainerFactory) AutoEnderCrafterContainer::create, FeatureFlagSet.of())); @@ -47,13 +45,11 @@ public static void onClientSetup() { ELITE_TABLE.ifPresent(container -> MenuScreens.register(container, EliteTableScreen::new)); ULTIMATE_TABLE.ifPresent(container -> MenuScreens.register(container, UltimateTableScreen::new)); EPIC_TABLE.ifPresent(container -> MenuScreens.register(container, EpicTableScreen::new)); - LEGENDARY_TABLE.ifPresent(container -> MenuScreens.register(container, LegendaryTableScreen::new)); BASIC_AUTO_TABLE.ifPresent(container -> MenuScreens.register(container, BasicAutoTableScreen::new)); ADVANCED_AUTO_TABLE.ifPresent(container -> MenuScreens.register(container, AdvancedAutoTableScreen::new)); ELITE_AUTO_TABLE.ifPresent(container -> MenuScreens.register(container, EliteAutoTableScreen::new)); ULTIMATE_AUTO_TABLE.ifPresent(container -> MenuScreens.register(container, UltimateAutoTableScreen::new)); EPIC_AUTO_TABLE.ifPresent(container -> MenuScreens.register(container, EpicAutoTableScreen::new)); - LEGENDARY_AUTO_TABLE.ifPresent(container -> MenuScreens.register(container, LegendaryAutoTableScreen::new)); COMPRESSOR.ifPresent(container -> MenuScreens.register(container, CompressorScreen::new)); ENDER_CRAFTER.ifPresent(container -> MenuScreens.register(container, EnderCrafterScreen::new)); AUTO_ENDER_CRAFTER.ifPresent(container -> MenuScreens.register(container, AutoEnderCrafterScreen::new)); diff --git a/src/main/java/com/blakebr0/extendedcrafting/init/ModCreativeModeTabs.java b/src/main/java/com/blakebr0/extendedcrafting/init/ModCreativeModeTabs.java index cec9b717..b5f31e45 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/init/ModCreativeModeTabs.java +++ b/src/main/java/com/blakebr0/extendedcrafting/init/ModCreativeModeTabs.java @@ -43,13 +43,11 @@ public final class ModCreativeModeTabs { output.accept(ModBlocks.ELITE_TABLE, ModFeatureFlags.TABLES); output.accept(ModBlocks.ULTIMATE_TABLE, ModFeatureFlags.TABLES); output.accept(ModBlocks.EPIC_TABLE, ModFeatureFlags.TABLES); - output.accept(ModBlocks.LEGENDARY_TABLE, ModFeatureFlags.TABLES); output.accept(ModBlocks.BASIC_AUTO_TABLE, ModFeatureFlags.TABLES, ModFeatureFlags.AUTO_TABLES); output.accept(ModBlocks.ADVANCED_AUTO_TABLE, ModFeatureFlags.TABLES, ModFeatureFlags.AUTO_TABLES); output.accept(ModBlocks.ELITE_AUTO_TABLE, ModFeatureFlags.TABLES, ModFeatureFlags.AUTO_TABLES); output.accept(ModBlocks.ULTIMATE_AUTO_TABLE, ModFeatureFlags.TABLES, ModFeatureFlags.AUTO_TABLES); output.accept(ModBlocks.EPIC_AUTO_TABLE, ModFeatureFlags.TABLES, ModFeatureFlags.AUTO_TABLES); - output.accept(ModBlocks.LEGENDARY_AUTO_TABLE, ModFeatureFlags.TABLES, ModFeatureFlags.AUTO_TABLES); output.accept(ModBlocks.COMPRESSOR, ModFeatureFlags.COMPRESSOR); output.accept(ModBlocks.ENDER_ALTERNATOR, ModFeatureFlags.ENDER_CRAFTER); output.accept(ModBlocks.ENDER_CRAFTER, ModFeatureFlags.ENDER_CRAFTER); diff --git a/src/main/java/com/blakebr0/extendedcrafting/init/ModTileEntities.java b/src/main/java/com/blakebr0/extendedcrafting/init/ModTileEntities.java index 153bf5aa..2f0a8629 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/init/ModTileEntities.java +++ b/src/main/java/com/blakebr0/extendedcrafting/init/ModTileEntities.java @@ -17,7 +17,6 @@ import com.blakebr0.extendedcrafting.tileentity.EpicTableTileEntity; import com.blakebr0.extendedcrafting.tileentity.FluxAlternatorTileEntity; import com.blakebr0.extendedcrafting.tileentity.FluxCrafterTileEntity; -import com.blakebr0.extendedcrafting.tileentity.LegendaryTableTileEntity; import com.blakebr0.extendedcrafting.tileentity.PedestalTileEntity; import com.blakebr0.extendedcrafting.tileentity.TheUltimateBlockTileEntity; import com.blakebr0.extendedcrafting.tileentity.UltimateTableTileEntity; @@ -44,13 +43,11 @@ public final class ModTileEntities { public static final RegistryObject> ELITE_TABLE = register("elite_table", EliteTableTileEntity::new, () -> new Block[] { ModBlocks.ELITE_TABLE.get() }); public static final RegistryObject> ULTIMATE_TABLE = register("ultimate_table", UltimateTableTileEntity::new, () -> new Block[] { ModBlocks.ULTIMATE_TABLE.get() }); public static final RegistryObject> EPIC_TABLE = register("epic_table", EpicTableTileEntity::new, () -> new Block[] { ModBlocks.EPIC_TABLE.get() }); - public static final RegistryObject> LEGENDARY_TABLE = register("legendary_table", LegendaryTableTileEntity::new, () -> new Block[] { ModBlocks.LEGENDARY_TABLE.get() }); public static final RegistryObject> BASIC_AUTO_TABLE = register("basic_auto_table", AutoTableTileEntity.Basic::new, () -> new Block[] { ModBlocks.BASIC_AUTO_TABLE.get() }); public static final RegistryObject> ADVANCED_AUTO_TABLE = register("advanced_auto_table", AutoTableTileEntity.Advanced::new, () -> new Block[] { ModBlocks.ADVANCED_AUTO_TABLE.get() }); public static final RegistryObject> ELITE_AUTO_TABLE = register("elite_auto_table", AutoTableTileEntity.Elite::new, () -> new Block[] { ModBlocks.ELITE_AUTO_TABLE.get() }); public static final RegistryObject> ULTIMATE_AUTO_TABLE = register("ultimate_auto_table", AutoTableTileEntity.Ultimate::new, () -> new Block[] { ModBlocks.ULTIMATE_AUTO_TABLE.get() }); public static final RegistryObject> EPIC_AUTO_TABLE = register("epic_auto_table", AutoTableTileEntity.Epic::new, () -> new Block[] { ModBlocks.EPIC_AUTO_TABLE.get() }); - public static final RegistryObject> LEGENDARY_AUTO_TABLE = register("legendary_auto_table", AutoTableTileEntity.Legendary::new, () -> new Block[] { ModBlocks.LEGENDARY_AUTO_TABLE.get() }); public static final RegistryObject> COMPRESSOR = register("compressor", CompressorTileEntity::new, () -> new Block[] { ModBlocks.COMPRESSOR.get() }); public static final RegistryObject> ENDER_CRAFTER = register("ender_crafter", EnderCrafterTileEntity::new, () -> new Block[] { ModBlocks.ENDER_CRAFTER.get() }); public static final RegistryObject> AUTO_ENDER_CRAFTER = register("auto_ender_crafter", AutoEnderCrafterTileEntity::new, () -> new Block[] { ModBlocks.AUTO_ENDER_CRAFTER.get() }); diff --git a/src/main/java/com/blakebr0/extendedcrafting/item/RecipeMakerItem.java b/src/main/java/com/blakebr0/extendedcrafting/item/RecipeMakerItem.java index 9a301590..458a954b 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/item/RecipeMakerItem.java +++ b/src/main/java/com/blakebr0/extendedcrafting/item/RecipeMakerItem.java @@ -16,7 +16,6 @@ import com.blakebr0.extendedcrafting.tileentity.EnderCrafterTileEntity; import com.blakebr0.extendedcrafting.tileentity.FluxCrafterTileEntity; import com.blakebr0.extendedcrafting.tileentity.UltimateTableTileEntity; -import com.blakebr0.extendedcrafting.tileentity.LegendaryTableTileEntity; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; @@ -147,7 +146,7 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { if ("CraftTweaker".equals(type)) { string = makeCraftTweakerCombinationRecipe(core); } else if ("KubeJS".equals(type)) { - String json = makeDatapackCombinationRecipe(core, outputStack); + String json = makeDatapackCombinationRecipe(core, outputStack); json = getString(json); String comment = outputItemId.isEmpty() ? "" : "\n // " + outputItemId; String idPart = outputItemId.isEmpty() ? "" : "\n .id('" + outputItemId + "');"; @@ -601,7 +600,6 @@ private static boolean isTable(BlockEntity tile) { tile instanceof EliteTableTileEntity || tile instanceof UltimateTableTileEntity || tile instanceof EpicTableTileEntity || - tile instanceof LegendaryTableTileEntity || tile instanceof AutoTableTileEntity || tile instanceof EnderCrafterTileEntity || tile instanceof FluxCrafterTileEntity; @@ -618,8 +616,7 @@ private static boolean isShapeless(ItemStack stack) { private static int getGridSlots(IItemHandler inventory) { int slots = inventory.getSlots(); - if (slots >= 169) return 169; - else if (slots >= 121) return 121; + if (slots >= 121) return 121; else if (slots >= 81) return 81; else if (slots >= 49) return 49; else if (slots >= 25) return 25; @@ -642,7 +639,6 @@ private static int getTableTier(BlockEntity tile) { if (tile instanceof EliteTableTileEntity) return 3; if (tile instanceof UltimateTableTileEntity) return 4; if (tile instanceof EpicTableTileEntity) return 5; - if (tile instanceof LegendaryTableTileEntity) return 6; return 0; // Fallback } diff --git a/src/main/java/com/blakebr0/extendedcrafting/tileentity/AutoTableTileEntity.java b/src/main/java/com/blakebr0/extendedcrafting/tileentity/AutoTableTileEntity.java index 7cb82979..6a24775c 100644 --- a/src/main/java/com/blakebr0/extendedcrafting/tileentity/AutoTableTileEntity.java +++ b/src/main/java/com/blakebr0/extendedcrafting/tileentity/AutoTableTileEntity.java @@ -692,58 +692,4 @@ public static BaseItemStackHandler createInventoryHandler(Runnable onContentsCha }); } } - - public static class Legendary extends AutoTableTileEntity { - private final BaseItemStackHandler inventory; - private final BaseEnergyStorage energy; - private final TableRecipeStorage recipeStorage; - - public Legendary(BlockPos pos, BlockState state) { - super(ModTileEntities.LEGENDARY_AUTO_TABLE.get(), pos, state); - this.inventory = createInventoryHandler(this::onContentsChanged); - this.recipeStorage = new TableRecipeStorage(170); - this.energy = new BaseEnergyStorage(ModConfigs.AUTO_TABLE_POWER_CAPACITY.get() * 16, this::setChangedFast); - } - - @Override - public BaseItemStackHandler getInventory() { - return this.inventory; - } - - @Override - public Component getDisplayName() { - return Localizable.of("container.extendedcrafting.legendary_table").build(); - } - - @Override - public AbstractContainerMenu createMenu(int windowId, Inventory playerInventory, Player player) { - return LegendaryAutoTableContainer.create(windowId, playerInventory, this.inventory, this.getBlockPos()); - } - - @Override - public int getProgressRequired() { - return ModConfigs.AUTO_TABLE_LEGENDARY_CRAFTING_TIME.get(); - } - - @Override - public TableRecipeStorage getRecipeStorage() { - return this.recipeStorage; - } - - @Override - public BaseEnergyStorage getEnergy() { - return this.energy; - } - - public static BaseItemStackHandler createInventoryHandler() { - return createInventoryHandler(null); - } - - public static BaseItemStackHandler createInventoryHandler(Runnable onContentsChanged) { - return BaseItemStackHandler.create(170, onContentsChanged, builder -> { - builder.setOutputSlots(169); - builder.setCanInsert((slot, stack) -> false); - }); - } - } } diff --git a/src/main/java/com/blakebr0/extendedcrafting/tileentity/LegendaryTableTileEntity.java b/src/main/java/com/blakebr0/extendedcrafting/tileentity/LegendaryTableTileEntity.java deleted file mode 100644 index 8aaa24e9..00000000 --- a/src/main/java/com/blakebr0/extendedcrafting/tileentity/LegendaryTableTileEntity.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.blakebr0.extendedcrafting.tileentity; - -import com.blakebr0.cucumber.inventory.BaseItemStackHandler; -import com.blakebr0.cucumber.tileentity.BaseInventoryTileEntity; -import com.blakebr0.cucumber.util.Localizable; -import com.blakebr0.extendedcrafting.container.LegendaryTableContainer; -import com.blakebr0.extendedcrafting.init.ModTileEntities; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.network.chat.Component; -import net.minecraft.world.MenuProvider; -import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.ForgeCapabilities; -import net.minecraftforge.common.util.LazyOptional; - -public class LegendaryTableTileEntity extends BaseInventoryTileEntity implements MenuProvider { - private final BaseItemStackHandler inventory; - - public LegendaryTableTileEntity(BlockPos pos, BlockState state) { - super(ModTileEntities.LEGENDARY_TABLE.get(), pos, state); - this.inventory = createInventoryHandler(this::setChangedAndDispatch); - } - - @Override - public BaseItemStackHandler getInventory() { - return this.inventory; - } - - @Override - public Component getDisplayName() { - return Localizable.of("container.extendedcrafting.legendary_table").build(); - } - - @Override - public AbstractContainerMenu createMenu(int windowId, Inventory playerInventory, Player player) { - return LegendaryTableContainer.create(windowId, playerInventory, this.inventory, this.getBlockPos()); - } - - @Override - public LazyOptional getCapability(Capability cap, Direction side) { - return !this.remove && cap == ForgeCapabilities.ITEM_HANDLER ? LazyOptional.empty() : super.getCapability(cap, side); - } - - public static BaseItemStackHandler createInventoryHandler() { - return createInventoryHandler(null); - } - - public static BaseItemStackHandler createInventoryHandler(Runnable onContentsChanged) { - return BaseItemStackHandler.create(169, onContentsChanged); - } -} diff --git a/src/main/resources/assets/extendedcrafting/blockstates/legendary_auto_table.json b/src/main/resources/assets/extendedcrafting/blockstates/legendary_auto_table.json deleted file mode 100644 index f2abd98b..00000000 --- a/src/main/resources/assets/extendedcrafting/blockstates/legendary_auto_table.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "extendedcrafting:block/legendary_auto_table" - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/extendedcrafting/blockstates/legendary_table.json b/src/main/resources/assets/extendedcrafting/blockstates/legendary_table.json deleted file mode 100644 index 28a32c21..00000000 --- a/src/main/resources/assets/extendedcrafting/blockstates/legendary_table.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "extendedcrafting:block/legendary_table" - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/extendedcrafting/lang/en_us.json b/src/main/resources/assets/extendedcrafting/lang/en_us.json index 4781a64e..f49f77bf 100644 --- a/src/main/resources/assets/extendedcrafting/lang/en_us.json +++ b/src/main/resources/assets/extendedcrafting/lang/en_us.json @@ -20,13 +20,11 @@ "block.extendedcrafting.elite_table": "Elite Crafting Table", "block.extendedcrafting.ultimate_table": "Ultimate Crafting Table", "block.extendedcrafting.epic_table": "Epic Crafting Table", - "block.extendedcrafting.legendary_table": "Legendary Crafting Table", "block.extendedcrafting.basic_auto_table": "Basic Auto Crafting Table", "block.extendedcrafting.advanced_auto_table": "Advanced Auto Crafting Table", "block.extendedcrafting.elite_auto_table": "Elite Auto Crafting Table", "block.extendedcrafting.ultimate_auto_table": "Ultimate Auto Crafting Table", "block.extendedcrafting.epic_auto_table": "Epic Auto Crafting Table", - "block.extendedcrafting.legendary_auto_table": "Legendary Auto Crafting Table", "block.extendedcrafting.compressor": "Quantum Compressor", "block.extendedcrafting.ender_alternator": "Ender Alternator", "block.extendedcrafting.ender_crafter": "Ender Crafter", @@ -85,7 +83,6 @@ "container.extendedcrafting.advanced_table": "Advanced Crafting", "container.extendedcrafting.elite_table": "Elite Crafting", "container.extendedcrafting.ultimate_table": "Ultimate Crafting", - "container.extendedcrafting.legendary_table": "Legendary Crafting", "container.extendedcrafting.epic_table": "Epic Crafting", "container.extendedcrafting.compressor": "Quantum Compressor", "container.extendedcrafting.ender_crafter": "Ender Crafting", @@ -136,7 +133,6 @@ "jei.category.extendedcrafting.elite_crafting": "Elite Crafting", "jei.category.extendedcrafting.ultimate_crafting": "Ultimate Crafting", "jei.category.extendedcrafting.epic_crafting": "Epic Crafting", - "jei.category.extendedcrafting.legendary_crafting": "Legendary Crafting", "jei.category.extendedcrafting.compressor": "Quantum Compression", "jei.category.extendedcrafting.ender_crafting": "Ender Crafting", "jei.category.extendedcrafting.flux_crafting": "Flux Crafting", @@ -147,14 +143,12 @@ "config.jade.plugin_extendedcrafting.advanced_table": "Advanced Table info", "config.jade.plugin_extendedcrafting.elite_table": "Elite Table info", "config.jade.plugin_extendedcrafting.ultimate_table": "Ultimate Table info", - "config.jade.plugin_extendedcrafting.legendary_table": "Legendary Table info", "config.jade.plugin_extendedcrafting.epic_table": "Epic Table info", "config.jade.plugin_extendedcrafting.basic_auto_table": "Basic Auto Table info", "config.jade.plugin_extendedcrafting.advanced_auto_table": "Advanced Auto Table info", "config.jade.plugin_extendedcrafting.elite_auto_table": "Elite Auto Table info", "config.jade.plugin_extendedcrafting.ultimate_auto_table": "Ultimate Auto Table info", "config.jade.plugin_extendedcrafting.epic_auto_table": "Epic Auto Table info", - "config.jade.plugin_extendedcrafting.legendary_auto_table": "Legendary Auto Table info", "config.jade.plugin_extendedcrafting.compressor": "Quantum Compressor info", "config.jade.plugin_extendedcrafting.ender_crafter": "Ender Crafter info", "config.jade.plugin_extendedcrafting.auto_ender_crafter": "Auto Ender Crafter info", @@ -194,7 +188,7 @@ "book.extendedcrafting.entry.combination.page.1": "Combination Crafting is an in-world multi-block crafting setup where items are combined together to create something $(italic)special.$() $(br2)This setup consists of a Crafting Core in the center and pedestals placed around it. Pedestals can be placed anywhere around the Crafting Core in a 3 block radius, and must be on the same Y level.", "book.extendedcrafting.entry.combination.page.2": "Power must be provided to the Crafting Core for this structure to function. $(br2)Recipes have a center item which goes on the Crafting Core, and pedestal items which go on the pedestals around it. $(br)Right clicking on the side of the Crafting Core will show you information about the current crafting operation, such as progress or power cost, as well as how much power is stored in it.", "book.extendedcrafting.entry.tables": "Table Crafting", - "book.extendedcrafting.entry.tables.page.1": "This mod adds tiered crafting tables that come in $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$() , $(bold)11x11$() , and $(bold)13x13$() sizes. These tables hold their inventories when closed.", + "book.extendedcrafting.entry.tables.page.1": "This mod adds tiered crafting tables that come in $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$() and $(bold)11x11$() sizes. These tables hold their inventories when closed.", "book.extendedcrafting.entry.compression": "Compression Crafting", "book.extendedcrafting.entry.compression.page.1": "Quantum Compression is the process of compressing items a little too much. This is done using a Quantum Compressor. $(br2)The Quantum Compressor is a powered machine that can hold and compress extremely large amounts of materials. Items placed inside the Quantum Compressor go into an internal buffer for use in compression. The buffer is represented as a blue bar.", "book.extendedcrafting.entry.compression.page.2": "Each recipe $(bold)usually$() requires a catalyst. The catalyst is placed in the left-most slot and does not get used up. $(br2)Once there are enough items in the buffer, the machine will begin to craft the item. The Quantum Compressor will only use power while crafting. $(br2)If you happen to put items into the compressor that you would rather not lose forever, you can press the eject button above the input slot to get them back.", @@ -217,4 +211,4 @@ "book.extendedcrafting.entry.handheld_table": "Handheld Crafting Table", "book.extendedcrafting.entry.handheld_table.page.1": "The Handheld Crafting Table is a Crafting Table." -} \ No newline at end of file +} diff --git a/src/main/resources/assets/extendedcrafting/lang/ja_jp.json b/src/main/resources/assets/extendedcrafting/lang/ja_jp.json index ff2de172..6f877ea1 100644 --- a/src/main/resources/assets/extendedcrafting/lang/ja_jp.json +++ b/src/main/resources/assets/extendedcrafting/lang/ja_jp.json @@ -20,13 +20,11 @@ "block.extendedcrafting.elite_table": "エリートクラフティングテーブル", "block.extendedcrafting.ultimate_table": "アルティメットクラフティングテーブル", "block.extendedcrafting.epic_table": "エピッククラフティングテーブル", - "block.extendedcrafting.legendary_table": "レジェンダリークラフティングテーブル", "block.extendedcrafting.basic_auto_table": "基本自動クラフティングテーブル", "block.extendedcrafting.advanced_auto_table": "上級自動クラフティングテーブル", "block.extendedcrafting.elite_auto_table": "エリート自動クラフティングテーブル", "block.extendedcrafting.ultimate_auto_table": "アルティメット自動クラフティングテーブル", "block.extendedcrafting.epic_auto_table": "エピック自動クラフティングテーブル", - "block.extendedcrafting.legendary_auto_table": "レジェンダリー自動クラフティングテーブル", "block.extendedcrafting.compressor": "量子コンプレッサー", "block.extendedcrafting.ender_alternator": "エンダーオルタネーター", "block.extendedcrafting.ender_crafter": "エンダークラフター", @@ -85,7 +83,6 @@ "container.extendedcrafting.advanced_table": "上級クラフト", "container.extendedcrafting.elite_table": "エリートクラフト", "container.extendedcrafting.ultimate_table": "アルティメットクラフト", - "container.extendedcrafting.legendary_table": "レジェンダリークラフト", "container.extendedcrafting.epic_table": "エピッククラフト", "container.extendedcrafting.compressor": "量子コンプレッサー", "container.extendedcrafting.ender_crafter": "エンダークラフト", @@ -136,7 +133,6 @@ "jei.category.extendedcrafting.elite_crafting": "エリートクラフト", "jei.category.extendedcrafting.ultimate_crafting": "アルティメットクラフト", "jei.category.extendedcrafting.epic_crafting": "エピッククラフト", - "jei.category.extendedcrafting.legendary_crafting": "レジェンダリークラフト", "jei.category.extendedcrafting.compressor": "量子圧縮", "jei.category.extendedcrafting.ender_crafting": "エンダークラフト", "jei.category.extendedcrafting.flux_crafting": "フラックスクラフト", @@ -147,14 +143,12 @@ "config.jade.plugin_extendedcrafting.advanced_table": "上級テーブル情報", "config.jade.plugin_extendedcrafting.elite_table": "エリートテーブル情報", "config.jade.plugin_extendedcrafting.ultimate_table": "アルティメットテーブル情報", - "config.jade.plugin_extendedcrafting.legendary_table": "レジェンダリーテーブル情報", "config.jade.plugin_extendedcrafting.epic_table": "エピックテーブル情報", "config.jade.plugin_extendedcrafting.basic_auto_table": "基本自動テーブル情報", "config.jade.plugin_extendedcrafting.advanced_auto_table": "上級自動テーブル情報", "config.jade.plugin_extendedcrafting.elite_auto_table": "エリート自動テーブル情報", "config.jade.plugin_extendedcrafting.ultimate_auto_table": "アルティメット自動テーブル情報", "config.jade.plugin_extendedcrafting.epic_auto_table": "エピック自動テーブル情報", - "config.jade.plugin_extendedcrafting.legendary_auto_table": "レジェンダリー自動テーブル情報", "config.jade.plugin_extendedcrafting.compressor": "量子コンプレッサー情報", "config.jade.plugin_extendedcrafting.ender_crafter": "エンダークラフター情報", "config.jade.plugin_extendedcrafting.auto_ender_crafter": "自動エンダークラフター情報", @@ -194,7 +188,7 @@ "book.extendedcrafting.entry.combination.page.1": "コンビネーションクラフトは、アイテムを組み合わせて $(italic)特別な$() ものを作り出す、ワールド上に設置するマルチブロックのクラフト方式です。$(br2)このセットアップは中央のクラフティングコアと、その周囲に最大3ブロックの半径で同じ高さに置かれた台座で構成されます。", "book.extendedcrafting.entry.combination.page.2": "クラフティングコアには電力を供給する必要があります。$(br2)レシピにはクラフティングコアに置く中央アイテムと、周囲の台座に置く台座アイテムがあります。$(br)クラフティングコアの側面を右クリックすると、進行状況や電力コスト、蓄えられた電力などを確認できます。", "book.extendedcrafting.entry.tables": "テーブルクラフト", - "book.extendedcrafting.entry.tables.page.1": "この Mod は $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$(), $(bold)11x11$(), $(bold)13x13$() のクラフティングテーブルを追加します。これらのテーブルは閉じてもインベントリを保持します。", + "book.extendedcrafting.entry.tables.page.1": "この Mod は $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$(), $(bold)11x11$() のクラフティングテーブルを追加します。これらのテーブルは閉じてもインベントリを保持します。", "book.extendedcrafting.entry.compression": "圧縮クラフト", "book.extendedcrafting.entry.compression.page.1": "量子圧縮は、物質を限界まで圧縮する工程です。これは量子コンプレッサーを使用して行います。$(br2)量子コンプレッサーは大量のアイテムを蓄え圧縮できる動力機械です。投入されたアイテムは内部バッファに格納され、その蓄積量は青いバーで表示されます。", "book.extendedcrafting.entry.compression.page.2": "レシピには $(bold)通常$() 触媒が必要です。触媒は左端スロットに置き、消費されません。$(br2)必要なアイテムが揃うとクラフトが開始されます。量子コンプレッサーはクラフト中のみ電力を使用します。$(br2)誤って不要なアイテムを入れた場合は、投入スロット上の排出ボタンで取り出せます。", @@ -217,4 +211,4 @@ "book.extendedcrafting.entry.handheld_table": "携帯クラフティングテーブル", "book.extendedcrafting.entry.handheld_table.page.1": "携帯クラフティングテーブルは持ち運べるクラフティングテーブルです。" -} \ No newline at end of file +} diff --git a/src/main/resources/assets/extendedcrafting/lang/ko_kr.json b/src/main/resources/assets/extendedcrafting/lang/ko_kr.json index 2d1b711a..c80c65f2 100644 --- a/src/main/resources/assets/extendedcrafting/lang/ko_kr.json +++ b/src/main/resources/assets/extendedcrafting/lang/ko_kr.json @@ -20,13 +20,11 @@ "block.extendedcrafting.elite_table": "엘리트 제작대", "block.extendedcrafting.ultimate_table": "얼티밋 제작대", "block.extendedcrafting.epic_table": "에픽 제작대", - "block.extendedcrafting.legendary_table": "레전더리 제작대", "block.extendedcrafting.basic_auto_table": "기본 자동 제작대", "block.extendedcrafting.advanced_auto_table": "고급 자동 제작대", "block.extendedcrafting.elite_auto_table": "엘리트 자동 제작대", "block.extendedcrafting.ultimate_auto_table": "얼티밋 자동 제작대", "block.extendedcrafting.epic_auto_table": "에픽 자동 제작대", - "block.extendedcrafting.legendary_auto_table": "레전더리 자동 제작대", "block.extendedcrafting.compressor": "퀀텀 압축기", "block.extendedcrafting.ender_alternator": "엔더 교류장치", "block.extendedcrafting.ender_crafter": "엔더 제작기", @@ -85,7 +83,6 @@ "container.extendedcrafting.advanced_table": "고급 제작", "container.extendedcrafting.elite_table": "엘리트 제작", "container.extendedcrafting.ultimate_table": "얼티밋 제작", - "container.extendedcrafting.legendary_table": "레전더리 제작", "container.extendedcrafting.epic_table": "에픽 제작", "container.extendedcrafting.compressor": "퀀텀 압축기", "container.extendedcrafting.ender_crafter": "엔더 제작", @@ -136,7 +133,6 @@ "jei.category.extendedcrafting.elite_crafting": "엘리트 제작", "jei.category.extendedcrafting.ultimate_crafting": "얼티밋 제작", "jei.category.extendedcrafting.epic_crafting": "에픽 제작", - "jei.category.extendedcrafting.legendary_crafting": "레전더리 제작", "jei.category.extendedcrafting.compressor": "퀀텀 압축", "jei.category.extendedcrafting.ender_crafting": "엔더 제작", "jei.category.extendedcrafting.flux_crafting": "플럭스 제작", @@ -147,14 +143,12 @@ "config.jade.plugin_extendedcrafting.advanced_table": "고급 제작대 정보", "config.jade.plugin_extendedcrafting.elite_table": "엘리트 제작대 정보", "config.jade.plugin_extendedcrafting.ultimate_table": "얼티밋 제작대 정보", - "config.jade.plugin_extendedcrafting.legendary_table": "레전더리 제작대 정보", "config.jade.plugin_extendedcrafting.epic_table": "에픽 제작대 정보", "config.jade.plugin_extendedcrafting.basic_auto_table": "기본 자동 제작대 정보", "config.jade.plugin_extendedcrafting.advanced_auto_table": "고급 자동 제작대 정보", "config.jade.plugin_extendedcrafting.elite_auto_table": "엘리트 자동 제작대 정보", "config.jade.plugin_extendedcrafting.ultimate_auto_table": "얼티밋 자동 제작대 정보", "config.jade.plugin_extendedcrafting.epic_auto_table": "에픽 자동 제작대 정보", - "config.jade.plugin_extendedcrafting.legendary_auto_table": "레전더리 자동 제작대 정보", "config.jade.plugin_extendedcrafting.compressor": "퀀텀 압축기 정보", "config.jade.plugin_extendedcrafting.ender_crafter": "엔더 제작기 정보", "config.jade.plugin_extendedcrafting.auto_ender_crafter": "자동 엔더 제작기 정보", @@ -195,7 +189,7 @@ "book.extendedcrafting.entry.combination.page.2": "구조가 작동하려면 제작 코어에 전력을 공급해야 합니다.$(br2)레시피는 코어 위에 올리는 중심 아이템과 제단 위에 올리는 주변 아이템으로 구성됩니다.$(br)제작 코어의 측면을 우클릭하면 진행 상황, 전력 소모, 저장된 전력량 등의 정보를 확인할 수 있습니다.", "book.extendedcrafting.entry.tables": "제작대", - "book.extendedcrafting.entry.tables.page.1": "이 모드는 $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$(), $(bold)11x11$(), $(bold)13x13$() 크기의 등급별 제작대를 추가합니다. 이 제작대들은 닫혀 있어도 인벤토리를 유지합니다.", + "book.extendedcrafting.entry.tables.page.1": "이 모드는 $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$(), $(bold)11x11$() 크기의 등급별 제작대를 추가합니다. 이 제작대들은 닫혀 있어도 인벤토리를 유지합니다.", "book.extendedcrafting.entry.compression": "압축 제작", "book.extendedcrafting.entry.compression.page.1": "퀀텀 압축은 아이템을 극도로 압축하는 방식입니다. 이는 퀀텀 압축기를 사용하여 수행됩니다.$(br2)압축기는 대량의 재료를 저장하고 압축할 수 있는 전력 기반 기계입니다. 압축기에 넣은 아이템은 내부 버퍼에 저장되며 파란색 막대로 표시됩니다.", diff --git a/src/main/resources/assets/extendedcrafting/lang/ru_ru.json b/src/main/resources/assets/extendedcrafting/lang/ru_ru.json index b9ceb441..f98fdbec 100644 --- a/src/main/resources/assets/extendedcrafting/lang/ru_ru.json +++ b/src/main/resources/assets/extendedcrafting/lang/ru_ru.json @@ -143,7 +143,7 @@ "book.extendedcrafting.entry.combination.page.1": "Combination Crafting is an in-world multi-block crafting setup where items are combined together to create something $(italic)special.$() $(br2)This setup consists of a Crafting Core in the center and pedestals placed around it. Pedestals can be placed anywhere around the Crafting Core in a 3 block radius, and must be on the same Y level.", "book.extendedcrafting.entry.combination.page.2": "Power must be provided to the Crafting Core for this structure to function. $(br2)Recipes have a center item which goes on the Crafting Core, and pedestal items which go on the pedestals around it. $(br)Right clicking on the side of the Crafting Core will show you information about the current crafting operation, such as progress or power cost, as well as how much power is stored in it.", "book.extendedcrafting.entry.tables": "Table Crafting", - "book.extendedcrafting.entry.tables.page.1": "This mod adds tiered crafting tables that come in $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$() , $(bold)11x11$() , and $(bold)13x13$() sizes. These tables hold their inventories when closed.", + "book.extendedcrafting.entry.tables.page.1": "This mod adds tiered crafting tables that come in $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$() and $(bold)11x11$() sizes. These tables hold their inventories when closed.", "book.extendedcrafting.entry.compression": "Compression Crafting", "book.extendedcrafting.entry.compression.page.1": "Quantum Compression is the process of compressing items a little too much. This is done using a Quantum Compressor. $(br2)The Quantum Compressor is a powered machine that can hold and compress extremely large amounts of materials. Items placed inside the Quantum Compressor go into an internal buffer for use in compression. The buffer is represented as a blue bar.", "book.extendedcrafting.entry.compression.page.2": "Each recipe $(bold)usually$() requires a catalyst. The catalyst is placed in the left-most slot and does not get used up. $(br2)Once there are enough items in the buffer, the machine will begin to craft the item. The Quantum Compressor will only use power while crafting. $(br2)If you happen to put items into the compressor that you would rather not lose forever, you can press the eject button above the input slot to get them back.", @@ -163,4 +163,4 @@ "book.extendedcrafting.entry.handheld_table": "Handheld Crafting Table", "book.extendedcrafting.entry.handheld_table.page.1": "The Handheld Crafting Table is a Crafting Table." -} \ No newline at end of file +} diff --git a/src/main/resources/assets/extendedcrafting/lang/tr_tr.json b/src/main/resources/assets/extendedcrafting/lang/tr_tr.json index b9598352..0bd77c5c 100644 --- a/src/main/resources/assets/extendedcrafting/lang/tr_tr.json +++ b/src/main/resources/assets/extendedcrafting/lang/tr_tr.json @@ -20,13 +20,11 @@ "block.extendedcrafting.elite_table": "Elit Zanaat Masası", "block.extendedcrafting.ultimate_table": "Ultimate Zanaat Masası", "block.extendedcrafting.epic_table": "Epik Zanaat Masası", - "block.extendedcrafting.legendary_table": "Efsanevi Zanaat Masası", "block.extendedcrafting.basic_auto_table": "Temel Otomatik Zanaat Masası", "block.extendedcrafting.advanced_auto_table": "Gelişmiş Otomatik Zanaat Masası", "block.extendedcrafting.elite_auto_table": "Elit Otomatik Zanaat Masası", "block.extendedcrafting.ultimate_auto_table": "Ultimate Otomatik Zanaat Masası", "block.extendedcrafting.epic_auto_table": "Epik Otomatik Zanaat Masası", - "block.extendedcrafting.legendary_auto_table": "Efsanevi Otomatik Zanaat Masası", "block.extendedcrafting.compressor": "Kuantum Kompresörü", "block.extendedcrafting.ender_alternator": "Ender Alternatör", "block.extendedcrafting.ender_crafter": "Ender Zanaat Makinesi", @@ -89,7 +87,6 @@ "container.extendedcrafting.advanced_table": "Gelişmiş Zanaat", "container.extendedcrafting.elite_table": "Elit Zanaat", "container.extendedcrafting.ultimate_table": "Ultimate Zanaat", - "container.extendedcrafting.legendary_table": "Efsanevi Zanaat", "container.extendedcrafting.epic_table": "Epik Zanaat", "container.extendedcrafting.compressor": "Kuantum Kompresörü", "container.extendedcrafting.ender_crafter": "Ender Zanaat", @@ -140,7 +137,6 @@ "jei.category.extendedcrafting.elite_crafting": "Elit Zanaat", "jei.category.extendedcrafting.ultimate_crafting": "Ultimate Zanaat", "jei.category.extendedcrafting.epic_crafting": "Epik Zanaat", - "jei.category.extendedcrafting.legendary_crafting": "Efsanevi Zanaat", "jei.category.extendedcrafting.compressor": "Kuantum Sıkıştırma", "jei.category.extendedcrafting.ender_crafting": "Ender Zanaatı", "jei.category.extendedcrafting.flux_crafting": "Flux Zanaatı", @@ -151,14 +147,12 @@ "config.jade.plugin_extendedcrafting.advanced_table": "Gelişmiş Masa bilgisi", "config.jade.plugin_extendedcrafting.elite_table": "Elit Masa bilgisi", "config.jade.plugin_extendedcrafting.ultimate_table": "Ultimate Masa bilgisi", - "config.jade.plugin_extendedcrafting.legendary_table": "Efsanevi Masa bilgisi", "config.jade.plugin_extendedcrafting.epic_table": "Epik Masa bilgisi", "config.jade.plugin_extendedcrafting.basic_auto_table": "Temel Otomatik Masa bilgisi", "config.jade.plugin_extendedcrafting.advanced_auto_table": "Gelişmiş Otomatik Masa bilgisi", "config.jade.plugin_extendedcrafting.elite_auto_table": "Elit Otomatik Masa bilgisi", "config.jade.plugin_extendedcrafting.ultimate_auto_table": "Ultimate Otomatik Masa bilgisi", "config.jade.plugin_extendedcrafting.epic_auto_table": "Epik Otomatik Masa bilgisi", - "config.jade.plugin_extendedcrafting.legendary_auto_table": "Efsanevi Otomatik Masa bilgisi", "config.jade.plugin_extendedcrafting.compressor": "Kuantum Kompresörü bilgisi", "config.jade.plugin_extendedcrafting.ender_crafter": "Ender Zanaat Makinesi bilgisi", "config.jade.plugin_extendedcrafting.auto_ender_crafter": "Otomatik Ender Zanaat Makinesi bilgisi", @@ -201,7 +195,7 @@ "book.extendedcrafting.entry.combination.page.2": "Bu yapının çalışması için Zanaat Çekirdeğine güç verilmelidir. $(br2)Tariflerde merkezde Zanaat Çekirdeğine konulan bir ana eşya ve çevredeki kaidelere konulan yan eşyalar bulunur. $(br)Zanaat Çekirdeğinin yanına sağ tıklamak, mevcut zanaat işlemi hakkında ilerleme veya güç maliyeti gibi bilgileri, ayrıca içinde ne kadar güç depolandığını gösterir.", "book.extendedcrafting.entry.tables": "Masa Zanaatı", - "book.extendedcrafting.entry.tables.page.1": "Bu mod, $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$(), $(bold)11x11$() ve $(bold)13x13$() boyutlarında seviyeli zanaat masaları ekler. Bu masalar kapanınca envanterlerini korurlar.", + "book.extendedcrafting.entry.tables.page.1": "Bu mod, $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$()ve $(bold)11x11$() boyutlarında seviyeli zanaat masaları ekler. Bu masalar kapanınca envanterlerini korurlar.", "book.extendedcrafting.entry.compression": "Sıkıştırma Zanaatı", "book.extendedcrafting.entry.compression.page.1": "Kuantum Sıkıştırma, öğelerin aşırı derecede sıkıştırılması işlemidir. Bu işlem bir Kuantum Kompresörü kullanılarak yapılır. $(br2)Kuantum Kompresörü, güç ile çalışan ve aşırı büyük miktarda malzemeyi tutup sıkıştırabilen bir makinedir. Makineye yerleştirilen öğeler, sıkıştırma için kullanılan dahili bir arabelleğe gider. Bu arabellek mavi bir çubuk olarak gösterilir.", diff --git a/src/main/resources/assets/extendedcrafting/lang/uk_ua.json b/src/main/resources/assets/extendedcrafting/lang/uk_ua.json index abdd537b..1ff7f14d 100644 --- a/src/main/resources/assets/extendedcrafting/lang/uk_ua.json +++ b/src/main/resources/assets/extendedcrafting/lang/uk_ua.json @@ -148,7 +148,7 @@ "book.extendedcrafting.entry.combination.page.1": "Комбіноване майстрування — це мультиблочна установка для майстрування, в якій предмети комбінуються разом, щоб змайструвати щось $(italic)особливе.$() $(br2)Ця установка складається з ядра майстрування в центрі та п'єдесталів, розташованих навколо нього. П'єдестали можна розміщувати будь-де навколо ядра майстрування в радіусі 3 блоків і вони повинні бути на одній висоті.", "book.extendedcrafting.entry.combination.page.2": "Щоб ця структура функціонувала, ядро майстрування повинно бути забезпечене енергією. $(br2)Рецепти мають центральний предмет, який розміщується на ядрі майстрування, і п'єдестальні предмети, які розміщуються на п'єдесталах навколо нього. $(br)Клацніть ПКМ по боковій частині ядра майстрування, щоб переглянути інформацію про поточне майстрування, наприклад прогрес або витрати енергії, а також скільки енергії зберігається в ньому.", "book.extendedcrafting.entry.tables": "Верстаки", - "book.extendedcrafting.entry.tables.page.1": "Цей мод додає нові верстаки розміром $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$(), $(bold)11x11$() та $(bold)13x13$(). Ці верстаки зберігають предмети, які в них лежать, коли вони закриті.", + "book.extendedcrafting.entry.tables.page.1": "Цей мод додає нові верстаки розміром $(bold)3x3$(), $(bold)5x5$(), $(bold)7x7$(), $(bold)9x9$()та $(bold)11x11$(). Ці верстаки зберігають предмети, які в них лежать, коли вони закриті.", "book.extendedcrafting.entry.compression": "Компресійне майстрування", "book.extendedcrafting.entry.compression.page.1": "Квантова компресія — це процес надсильної компресії предметів. Для цього використовується квантовий компресор. $(br2)Квантовий компресор — це потужна машина, яка може утримувати та стискати надзвичайно великі обсяги матеріалів. Предмети, розміщені всередині квантового компресора, потрапляють у внутрішній буфер для компресії. Буфер представлений у вигляді синьої смуги.", "book.extendedcrafting.entry.compression.page.2": "Для кожного рецепту $(bold)зазвичай$() потрібен каталізатор. Каталізатор розміщується в крайньому лівому слоті і не витрачається. $(br2)Коли в буфері буде достатньо предметів, машина почне майструвати предмет. Квантовий компресор споживатиме енергію лише під час майстрування. $(br2)Якщо ви поклали в компресор предмети, які не хотіли б втрачати назавжди, ви можете натиснути кнопку Витягнути над вхідним слотом, щоб повернути їх.", diff --git a/src/main/resources/assets/extendedcrafting/lang/zh_cn.json b/src/main/resources/assets/extendedcrafting/lang/zh_cn.json index d9fc2a90..6b77acb2 100644 --- a/src/main/resources/assets/extendedcrafting/lang/zh_cn.json +++ b/src/main/resources/assets/extendedcrafting/lang/zh_cn.json @@ -179,7 +179,7 @@ "book.extendedcrafting.entry.combination.page.1": "组合合成是一个架设在世界上的多方块结构,使得物品组合在一起成为$(italic)特殊物品$()。$(br2)此结构在中央摆放一个合成核心且在其周围摆放基座。基座能放在合成核心半径三格范围内任意位置,且必须在同一高度。", "book.extendedcrafting.entry.combination.page.2": "为了使结构起作用,必须为合成核心提供能量。$(br2)配方中央位置的物品放在合成核心上,需放基座上的物品则放在其附近的基座上。$(br)右击合成核心的侧边会显示当前合成的信息,例如进度和能量消耗,以及其内部能量储量。", "book.extendedcrafting.entry.tables": "工作台合成", - "book.extendedcrafting.entry.tables.page.1": "本mod添加了$(bold)3x3$(),$(bold)5x5$(),$(bold)7x7$(),$(bold)9x9$(),$(bold)11x11$(),和$(bold)13x13$()大小的不同等级的工作台。关闭工作台时将会保存在其内部空间的物品。", + "book.extendedcrafting.entry.tables.page.1": "本mod添加了$(bold)3x3$(),$(bold)5x5$(),$(bold)7x7$(),$(bold)9x9$(),和$$(bold)11x11$() 大小的不同等级的工作台。关闭工作台时将会保存在其内部空间的物品。", "book.extendedcrafting.entry.compression": "压缩合成", "book.extendedcrafting.entry.compression.page.1": "量子压缩是将物品压缩得有点多的过程。使用量子压缩机即可进行压缩。$(br2)量子压缩机是一个需要能量的机器,它能容纳及对极大数量的材料进行压缩。放在量子压缩机的物品将进入到其内部缓存槽以用于压缩。缓存槽会以蓝色的条状物显示。", "book.extendedcrafting.entry.compression.page.2": "每个配方$(bold)一般$()都需要一个催化剂。催化剂需被放置在最左边的槽位中,它不会被消耗。$(br2)一旦缓存槽有足够的材料,机器将会开始制作物品。量子压缩机只会在合成的过程中使用能量。$(br2)假如你将物品错误放入压缩机,你只需点击在输入槽上方的弹出按钮即可拿回物品。", @@ -202,4 +202,4 @@ "book.extendedcrafting.entry.handheld_table": "手持工作台", "book.extendedcrafting.entry.handheld_table.page.1": "手持工作台是一个工作台。" -} \ No newline at end of file +} diff --git a/src/main/resources/assets/extendedcrafting/models/block/legendary_auto_table.json b/src/main/resources/assets/extendedcrafting/models/block/legendary_auto_table.json deleted file mode 100644 index be55c6da..00000000 --- a/src/main/resources/assets/extendedcrafting/models/block/legendary_auto_table.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "textures": { - "0": "extendedcrafting:block/black_iron_block", - "1": "extendedcrafting:block/legendary_table_top", - "2": "extendedcrafting:block/table_side", - "3": "extendedcrafting:block/auto_table_side", - "particle": "extendedcrafting:block/black_iron_block" - }, - "elements": [ - { - "name": "Cube", - "from": [2, 0, 2], - "to": [14, 2, 14], - "faces": { - "north": {"uv": [2, 2, 14, 4], "texture": "#0"}, - "east": {"uv": [2, 2, 14, 4], "texture": "#0"}, - "south": {"uv": [2, 2, 14, 4], "texture": "#0"}, - "west": {"uv": [2, 2, 14, 4], "texture": "#0"}, - "up": {"uv": [2, 2, 14, 14], "texture": "#0"}, - "down": {"uv": [2, 2, 14, 14], "texture": "#0"} - } - }, - { - "name": "Cube", - "from": [3, 2, 3], - "to": [5, 10, 5], - "faces": { - "north": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "east": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "south": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "west": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "up": {"uv": [1, 1, 3, 3], "texture": "#0"}, - "down": {"uv": [1, 1, 3, 3], "texture": "#0"} - } - }, - { - "name": "Cube", - "from": [11, 2, 11], - "to": [13, 10, 13], - "faces": { - "north": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "east": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "south": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "west": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "up": {"uv": [1, 1, 3, 3], "texture": "#0"}, - "down": {"uv": [1, 1, 3, 3], "texture": "#0"} - } - }, - { - "name": "Cube", - "from": [11, 2, 3], - "to": [13, 10, 5], - "faces": { - "north": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "east": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "south": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "west": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "up": {"uv": [1, 1, 3, 3], "rotation": 270, "texture": "#0"}, - "down": {"uv": [1, 1, 3, 3], "rotation": 90, "texture": "#0"} - } - }, - { - "name": "Cube", - "from": [3, 2, 11], - "to": [5, 10, 13], - "faces": { - "north": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "east": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "south": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "west": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "up": {"uv": [1, 1, 3, 3], "texture": "#0"}, - "down": {"uv": [1, 1, 3, 3], "texture": "#0"} - } - }, - { - "name": "Cube", - "from": [0, 10, 0], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 16, 6], "texture": "#2"}, - "east": {"uv": [0, 0, 16, 6], "texture": "#2"}, - "south": {"uv": [0, 0, 16, 6], "texture": "#2"}, - "west": {"uv": [0, 0, 16, 6], "texture": "#2"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#0"} - } - }, - { - "from": [4, 2, 4], - "to": [12, 10, 12], - "rotation": {"angle": 0, "axis": "y", "origin": [12, 10, 12]}, - "faces": { - "north": {"uv": [4, 7, 12, 15], "texture": "#3"}, - "east": {"uv": [4, 7, 12, 15], "texture": "#3"}, - "south": {"uv": [4, 7, 12, 15], "texture": "#3"}, - "west": {"uv": [4, 7, 12, 15], "texture": "#3"}, - "up": {"uv": [0, 0, 8, 8], "texture": "#0"}, - "down": {"uv": [0, 0, 8, 8], "texture": "#0"} - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/extendedcrafting/models/block/legendary_table.json b/src/main/resources/assets/extendedcrafting/models/block/legendary_table.json deleted file mode 100644 index b239d992..00000000 --- a/src/main/resources/assets/extendedcrafting/models/block/legendary_table.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "textures": { - "0": "extendedcrafting:block/black_iron_block", - "1": "extendedcrafting:block/legendary_table_top", - "2": "extendedcrafting:block/table_side", - "particle": "extendedcrafting:block/black_iron_block" - }, - "elements": [ - { - "name": "Cube", - "from": [2, 0, 2], - "to": [14, 2, 14], - "faces": { - "north": {"uv": [2, 2, 14, 4], "texture": "#0"}, - "east": {"uv": [2, 2, 14, 4], "texture": "#0"}, - "south": {"uv": [2, 2, 14, 4], "texture": "#0"}, - "west": {"uv": [2, 2, 14, 4], "texture": "#0"}, - "up": {"uv": [2, 2, 14, 14], "texture": "#0"}, - "down": {"uv": [2, 2, 14, 14], "texture": "#0"} - } - }, - { - "name": "Cube", - "from": [3, 2, 3], - "to": [5, 10, 5], - "faces": { - "north": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "east": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "south": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "west": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "up": {"uv": [1, 1, 3, 3], "texture": "#0"}, - "down": {"uv": [1, 1, 3, 3], "texture": "#0"} - } - }, - { - "name": "Cube", - "from": [11, 2, 11], - "to": [13, 10, 13], - "faces": { - "north": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "east": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "south": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "west": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "up": {"uv": [1, 1, 3, 3], "texture": "#0"}, - "down": {"uv": [1, 1, 3, 3], "texture": "#0"} - } - }, - { - "name": "Cube", - "from": [11, 2, 3], - "to": [13, 10, 5], - "faces": { - "north": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "east": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "south": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "west": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "up": {"uv": [1, 1, 3, 3], "texture": "#0"}, - "down": {"uv": [1, 1, 3, 3], "texture": "#0"} - } - }, - { - "name": "Cube", - "from": [3, 2, 11], - "to": [5, 10, 13], - "faces": { - "north": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "east": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "south": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "west": {"uv": [1, 1, 3, 9], "texture": "#0"}, - "up": {"uv": [1, 1, 3, 3], "texture": "#0"}, - "down": {"uv": [1, 1, 3, 3], "texture": "#0"} - } - }, - { - "name": "Cube", - "from": [0, 10, 0], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 16, 6], "texture": "#2"}, - "east": {"uv": [0, 0, 16, 6], "texture": "#2"}, - "south": {"uv": [0, 0, 16, 6], "texture": "#2"}, - "west": {"uv": [0, 0, 16, 6], "texture": "#2"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#0"} - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/extendedcrafting/models/item/legendary_auto_table.json b/src/main/resources/assets/extendedcrafting/models/item/legendary_auto_table.json deleted file mode 100644 index 6dc90de9..00000000 --- a/src/main/resources/assets/extendedcrafting/models/item/legendary_auto_table.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "extendedcrafting:block/legendary_auto_table", - "display": { - "gui": { - "rotation": [ 30, 225, 0 ], - "translation": [ 0, 0, 0], - "scale":[ 0.625, 0.625, 0.625 ] - }, - "ground": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 3, 0], - "scale":[ 0.25, 0.25, 0.25 ] - }, - "fixed": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 0, 0], - "scale":[ 0.5, 0.5, 0.5 ] - }, - "thirdperson_righthand": { - "rotation": [ 75, 45, 0 ], - "translation": [ 0, 2.5, 0], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson_righthand": { - "rotation": [ 0, 45, 0 ], - "translation": [ 0, 0, 0 ], - "scale": [ 0.40, 0.40, 0.40 ] - }, - "firstperson_lefthand": { - "rotation": [ 0, 225, 0 ], - "translation": [ 0, 0, 0 ], - "scale": [ 0.40, 0.40, 0.40 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/extendedcrafting/models/item/legendary_table.json b/src/main/resources/assets/extendedcrafting/models/item/legendary_table.json deleted file mode 100644 index 34576bda..00000000 --- a/src/main/resources/assets/extendedcrafting/models/item/legendary_table.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "extendedcrafting:block/legendary_table", - "display": { - "gui": { - "rotation": [ 30, 225, 0 ], - "translation": [ 0, 0, 0], - "scale":[ 0.625, 0.625, 0.625 ] - }, - "ground": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 3, 0], - "scale":[ 0.25, 0.25, 0.25 ] - }, - "fixed": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, 0, 0], - "scale":[ 0.5, 0.5, 0.5 ] - }, - "thirdperson_righthand": { - "rotation": [ 75, 45, 0 ], - "translation": [ 0, 2.5, 0], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson_righthand": { - "rotation": [ 0, 45, 0 ], - "translation": [ 0, 0, 0 ], - "scale": [ 0.40, 0.40, 0.40 ] - }, - "firstperson_lefthand": { - "rotation": [ 0, 225, 0 ], - "translation": [ 0, 0, 0 ], - "scale": [ 0.40, 0.40, 0.40 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/extendedcrafting/textures/block/legendary_table_top.png b/src/main/resources/assets/extendedcrafting/textures/block/legendary_table_top.png deleted file mode 100644 index e5f5dbe21ffba2ce211b5fb14051d1c7a1b196fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 410 zcmV;L0cHM)P)4l)-AkKoEvMA%}Pgn~QhP6(k7u0R&4RB3OFz+(+so z^dt&WK@8+n!3XeW9zqe(WfAQ`l*PD`#!5^7(}bPfnJ>fqIj>yaFP2LHgyV2c$GoG2 zl*lxFpoH&lL09LEj)ygJGDX|vwIqUTrfY-?+)y20;^GYLH2Zxzz7N35aL9YD20%NC5JCW8=krMfJ=Xt&NjX=D{X?mg2_c@% zk_dX+9p6VOMLUYpBj|1a4uWY4I!>l3m~d`JxVQ`F)lAi=)9G!y0313n9ZD$yuxP?e%B`0RSI^0Z;Wh0HZLxqaS=1 z;o>ssZ8w4dr4*wuOpkDrAN&Y{X$m^d{rn&c!awkXFF=VP2OfzwA^-pY07*qoM6N<$ Eg5u<@(f|Me diff --git a/src/main/resources/assets/extendedcrafting/textures/block/legendary_table_top.png.mcmeta b/src/main/resources/assets/extendedcrafting/textures/block/legendary_table_top.png.mcmeta deleted file mode 100644 index 0df89519..00000000 --- a/src/main/resources/assets/extendedcrafting/textures/block/legendary_table_top.png.mcmeta +++ /dev/null @@ -1,6 +0,0 @@ -{ - "animation": { - "frametime": 40, - "interpolate": true - } -} \ No newline at end of file diff --git a/src/main/resources/assets/extendedcrafting/textures/gui/legendary_auto_table.png b/src/main/resources/assets/extendedcrafting/textures/gui/legendary_auto_table.png deleted file mode 100644 index 6eea81a92cda248922745b3f029f2dd45e692288..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7583 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 GxBdq)*+w=1 diff --git a/src/main/resources/assets/extendedcrafting/textures/gui/legendary_table.png b/src/main/resources/assets/extendedcrafting/textures/gui/legendary_table.png deleted file mode 100644 index b714ea1dc35470c32a5d4a08f17de2e78f6f052b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6366 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 R5wDs+<+6rif&3l6{{mdixPAZt diff --git a/src/main/resources/assets/extendedcrafting/textures/jei/legendary_crafting.png b/src/main/resources/assets/extendedcrafting/textures/jei/legendary_crafting.png deleted file mode 100644 index 9c0ffd164d05ea39d39a98003153eee7d5fff29e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3075 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 AZ2$lO diff --git a/src/main/resources/data/extendedcrafting/loot_tables/blocks/legendary_auto_table.json b/src/main/resources/data/extendedcrafting/loot_tables/blocks/legendary_auto_table.json deleted file mode 100644 index d53b4fdf..00000000 --- a/src/main/resources/data/extendedcrafting/loot_tables/blocks/legendary_auto_table.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "name": "extendedcrafting:legendary_auto_table", - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "extendedcrafting:legendary_auto_table" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/extendedcrafting/loot_tables/blocks/legendary_table.json b/src/main/resources/data/extendedcrafting/loot_tables/blocks/legendary_table.json deleted file mode 100644 index 18e3af13..00000000 --- a/src/main/resources/data/extendedcrafting/loot_tables/blocks/legendary_table.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "name": "extendedcrafting:legendary_table", - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "extendedcrafting:legendary_table" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/extendedcrafting/recipes/legendary_auto_table.json b/src/main/resources/data/extendedcrafting/recipes/legendary_auto_table.json deleted file mode 100644 index 1433041c..00000000 --- a/src/main/resources/data/extendedcrafting/recipes/legendary_auto_table.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "conditions": [ - { - "type": "cucumber:feature_flag", - "flag": "extendedcrafting:tables" - }, - { - "type": "cucumber:feature_flag", - "flag": "extendedcrafting:auto_tables" - } - ], - "pattern": [ - "BSB", - "CTC", - "BSB" - ], - "key": { - "T": { - "item": "extendedcrafting:legendary_table" - }, - "C": { - "item": "extendedcrafting:crystaltine_component" - }, - "B": { - "item": "extendedcrafting:black_iron_ingot" - }, - "S": { - "item": "extendedcrafting:redstone_component" - } - }, - "result": { - "item": "extendedcrafting:legendary_auto_table" - } -} \ No newline at end of file diff --git a/src/main/resources/data/extendedcrafting/recipes/legendary_table.json b/src/main/resources/data/extendedcrafting/recipes/legendary_table.json deleted file mode 100644 index bd4b2482..00000000 --- a/src/main/resources/data/extendedcrafting/recipes/legendary_table.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "conditions": [ - { - "type": "cucumber:feature_flag", - "flag": "extendedcrafting:tables" - } - ], - "pattern": [ - "BAB", - "CIC", - "BSB" - ], - "key": { - "I": { - "tag": "forge:storage_blocks/netherite" - }, - "C": [ - { - "item": "extendedcrafting:epic_table" - }, - { - "item": "extendedcrafting:epic_auto_table" - } - ], - "B": { - "item": "extendedcrafting:enhanced_ender_component" - }, - "S": { - "item": "extendedcrafting:black_iron_slate" - }, - "A": { - "item": "extendedcrafting:enhanced_ender_catalyst" - } - }, - "result": { - "item": "extendedcrafting:legendary_table" - } -} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json index 3d422a65..1f6befbc 100644 --- a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -22,8 +22,6 @@ "extendedcrafting:ender_crafter", "extendedcrafting:epic_auto_table", "extendedcrafting:epic_table", - "extendedcrafting:legendary_table", - "extendedcrafting:legendary_auto_table", "extendedcrafting:auto_ender_crafter", "extendedcrafting:flux_alternator", "extendedcrafting:flux_crafter", diff --git a/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json b/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json index c1d3896e..03447046 100644 --- a/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json +++ b/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json @@ -14,8 +14,6 @@ "extendedcrafting:elite_table", "extendedcrafting:ultimate_table", "extendedcrafting:epic_table", - "extendedcrafting:legendary_table", - "extendedcrafting:legendary_auto_table", "extendedcrafting:basic_auto_table", "extendedcrafting:advanced_auto_table", "extendedcrafting:elite_auto_table", diff --git a/src/test/resources/datapacks/testing/data/testing/recipes/table_13x13_test.json b/src/test/resources/datapacks/testing/data/testing/recipes/table_13x13_test.json deleted file mode 100644 index 48d37fa0..00000000 --- a/src/test/resources/datapacks/testing/data/testing/recipes/table_13x13_test.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "extendedcrafting:shaped_table", - "pattern": [ - "XXXXXXXXXXXXX", - "X X", - "X X", - "X X", - "X X", - "X X", - "X X", - "X X", - "X X", - "X X", - "X X", - "X X", - "XXXXXXXXXXXXX" - ], - "key": { - "X": { - "tag": "forge:ingots/gold" - } - }, - "result": { - "item": "minecraft:apple" - } -} \ No newline at end of file diff --git a/src/test/resources/kubejs_scripts/table_test.js b/src/test/resources/kubejs_scripts/table_test.js index f6a1a6af..748e3eac 100644 --- a/src/test/resources/kubejs_scripts/table_test.js +++ b/src/test/resources/kubejs_scripts/table_test.js @@ -127,194 +127,4 @@ ServerEvents.recipes((event) => { }) .id('minecraft:stone'); }); - -//Tier 6 Table -ServerEvents.recipes((event) => { - // minecraft:stone - event.custom({ - type: 'extendedcrafting:shaped_table', - pattern: [ - 'AAAAAAAAAAAAA', - 'A A', - 'A A', - 'A A', - 'A A', - 'A A', - 'A A', - 'A A', - 'A A', - 'A A', - 'A A', - 'A A', - 'AAAAAAAAAAAAA' - ], - key: { - A: { - item: 'minecraft:gold_ingot' - } - }, - result: { - item: 'minecraft:stone' - } - }) - .id('minecraft:stone'); -}); - -//Table Shapeless Test -ServerEvents.recipes((event) => { - // minecraft:stone - event.custom({ - type: 'extendedcrafting:shapeless_table', - tier: 6, - ingredients: [ - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - }, - { - item: 'minecraft:gold_ingot' - } - ], - result: { - item: 'minecraft:stone' - } - }) - .id('minecraft:stone'); }); \ No newline at end of file From 2492932108b0c2001508d6103c5f13ead35fdb44 Mon Sep 17 00:00:00 2001 From: BOLT_M4G1C Date: Wed, 17 Dec 2025 15:34:40 +0100 Subject: [PATCH 12/12] Removes BOLT_M4G1C from vendor information in build.gradle and updates README to remove reference to 11x11 crafting table --- README.md | 3 --- build.gradle | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 89950eb2..335c64fd 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,7 @@ Adds some new ways to craft items, as well as extra crafting items and utilities. Originally forked for use in Monifactory. "What if we tried more tables? -And forked again because 11x11 is still not enough for my modpack. - ## Download -- [ExtendedCrafting: Expanded Plus (Curseforge)]() - [ExtendedCrafting: Monifactory Edition (Curseforge)](https://www.curseforge.com/minecraft/mc-mods/extended-crafting-monifactory-edition) - [BlakeBr0's Cucumber Library (required dependency)](https://www.curseforge.com/minecraft/mc-mods/cucumber) diff --git a/build.gradle b/build.gradle index ac24a32a..bb43d27a 100644 --- a/build.gradle +++ b/build.gradle @@ -108,11 +108,11 @@ jar { manifest { attributes([ 'Specification-Title': 'Extended Crafting: Expanded Plus', - 'Specification-Vendor': 'BOLT_M4G1C, WithersChat, BlakeBr0', + 'Specification-Vendor': 'WithersChat, BlakeBr0', 'Specification-Version': '1', 'Implementation-Title': project.name, 'Implementation-Version': "${version.split('-').last()}", - 'Implementation-Vendor' : 'BOLT_M4G1C, WithersChat, BlakeBr0', + 'Implementation-Vendor' : 'WithersChat, BlakeBr0', 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") ]) }