diff --git a/.github/actions/ctnh_prepare_workspace/action.yml b/.github/actions/ctnh_prepare_workspace/action.yml index 9edaf272298..32c838ac649 100644 --- a/.github/actions/ctnh_prepare_workspace/action.yml +++ b/.github/actions/ctnh_prepare_workspace/action.yml @@ -194,10 +194,14 @@ runs: - name: Setup Java 17 uses: actions/setup-java@v4 with: - distribution: temurin - java-version: '17' + distribution: microsoft + java-version: '17.0.16' - name: Setup Gradle uses: gradle/actions/setup-gradle@v4 with: cache-read-only: ${{ github.event_name == 'pull_request' }} + + - name: Show Java version + run: java -version + shell: bash \ No newline at end of file diff --git a/build.gradle b/build.gradle index 47f449c7db8..f64039eee3d 100644 --- a/build.gradle +++ b/build.gradle @@ -98,7 +98,7 @@ tasks.withType(JavaCompile).configureEach { } lombok { - version = "1.18.38" + version = "1.18.46" } jacoco { diff --git a/gradle/forge.versions.toml b/gradle/forge.versions.toml index 1b56a35e86f..0a8d2d51d12 100644 --- a/gradle/forge.versions.toml +++ b/gradle/forge.versions.toml @@ -17,7 +17,7 @@ ftbteams = "2001.3.0" ftbquests = "2001.4.11" ftbchunks = "2001.3.4" ccTweaked = "1.114.3" -create = "6.0.6-150" +create = "6.0.8-291" ponder = "1.0.80" flywheel = "1.0.4" diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 00940a3d58b..59343e8c651 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,7 +5,7 @@ minecraftForge = "1.20.1-47.4.1" parchment = "2023.09.03" # https://parchmentmc.org/docs/getting-started shadow = "8.3.5" spotless = "8.1.0" -modDevGradle = "2.0.141" +modDevGradle = "2.0.142" lombok = "8.14" jetbrains-annotations = "26.0.1" renderNurse = "0.0.12" diff --git a/gradle/scripts/moddevgradle.gradle b/gradle/scripts/moddevgradle.gradle index 9f136295b35..10c1632c8bd 100644 --- a/gradle/scripts/moddevgradle.gradle +++ b/gradle/scripts/moddevgradle.gradle @@ -22,7 +22,11 @@ configurations.configureEach { legacyForge { // Specify Forge version - version = libs.versions.minecraftForge.get() + + enable { + forgeVersion = libs.versions.minecraftForge.get() + disableRecompilation = false + } parchment { minecraftVersion = libs.versions.minecraft.get() diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/FluidRecipeCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/FluidRecipeCapability.java index 269b833678c..b89d77c1a00 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/FluidRecipeCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/FluidRecipeCapability.java @@ -335,14 +335,14 @@ public boolean shouldBypassDistinct() { @Override public List getXEIIngredients(List contents, GTRecipeDefinition recipe, IO io) { - var list = createXEIContainerContents(contents, recipe, io); - return list.stream() - .map(FluidEntryList::getStacks) - .map(fluidStacks -> fluidStacks.stream() - .map(fluidStack -> EmiStack.of(fluidStack.getFluid(), fluidStack.getTag(), - fluidStack.getAmount())) - .toList()) - .map(EmiIngredient::of) - .toList(); + List emiIngredients = new ArrayList<>(); + for (var content : contents) { + var list = mapFluid(content).getStacks().stream() + .map(fluidStack -> EmiStack.of(fluidStack.getFluid(), fluidStack.getTag(), fluidStack.getAmount()) + .setChance(content.getChance())) + .toList(); + emiIngredients.add(EmiIngredient.of(list)); + } + return emiIngredients; } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/ItemRecipeCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/ItemRecipeCapability.java index 917e94d3cb5..32eaa3a4f06 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/ItemRecipeCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/ItemRecipeCapability.java @@ -393,11 +393,13 @@ public boolean shouldBypassDistinct() { @Override public List getXEIIngredients(List contents, GTRecipeDefinition recipe, IO io) { - var list = createXEIContainerContents(contents, recipe, io); - return list.stream() - .map(ItemEntryList::getStacks) - .map(stacks -> stacks.stream().map(EmiStack::of).toList()) - .map(EmiIngredient::of) - .toList(); + List emiIngredients = new ArrayList<>(); + for (var content : contents) { + var list = mapItem(content).getStacks().stream() + .map(stack -> EmiStack.of(stack).setChance(content.getChance())) + .toList(); + emiIngredients.add(EmiIngredient.of(list)); + } + return emiIngredients; } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/ComponentItem.java b/src/main/java/com/gregtechceu/gtceu/api/item/ComponentItem.java index b45213e753e..cedf5612def 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/ComponentItem.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/ComponentItem.java @@ -338,8 +338,8 @@ public ItemStack getCraftingRemainingItem(ItemStack itemStack) { @Override public boolean hasCraftingRemainingItem(ItemStack stack) { for (IItemComponent component : components) { - if (component instanceof IRecipeRemainder recipeRemainder) { - return recipeRemainder.getRecipeRemained(stack) != ItemStack.EMPTY; + if (component instanceof IRecipeRemainder) { + return true; } } return super.hasCraftingRemainingItem(stack); diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java b/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java index 774b701c33c..d47d174aef1 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java @@ -14,6 +14,7 @@ import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.recipe.RecipeHelper; import com.gregtechceu.gtceu.api.recipe.handler.RecipeHandlerGroup; +import com.gregtechceu.gtceu.api.recipe.ingredient.ToolIngredient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.GTMaterialItems; @@ -140,6 +141,14 @@ public static GTToolType getToolFromSymbol(char symbol) { return symbols.get(symbol); } + public static ToolIngredient getIngredientFromSymbol(char symbol) { + GTToolType toolType = getToolFromSymbol(symbol); + if (toolType == null) { + throw new IllegalArgumentException("No tool type with symbol '%s'".formatted(symbol)); + } + return new ToolIngredient(toolType); + } + @UnmodifiableView public static CharSet getToolSymbols() { return CharSets.unmodifiable(symbols.keySet()); diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/ingredient/ToolIngredient.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/ingredient/ToolIngredient.java new file mode 100644 index 00000000000..23d92d5d5c8 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/ingredient/ToolIngredient.java @@ -0,0 +1,107 @@ +package com.gregtechceu.gtceu.api.recipe.ingredient; + +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.item.tool.GTToolType; +import com.gregtechceu.gtceu.common.data.GTItems; + +import net.minecraft.core.Holder; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraftforge.common.crafting.AbstractIngredient; +import net.minecraftforge.common.crafting.IIngredientSerializer; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Stream; + +import static com.gregtechceu.gtceu.common.item.ToolBoxBehavior.LAST_USED_TOOL_TAG; +import static com.gregtechceu.gtceu.common.item.ToolBoxBehavior.TOOL_TYPES; + +public class ToolIngredient extends AbstractIngredient { + + public static final ResourceLocation TYPE = GTCEu.id("tool"); + + private final GTToolType toolType; + private ItemStack[] cachedStacks; + + public ToolIngredient(GTToolType toolType) { + super(Stream.of(new Ingredient.TagValue(toolType.craftingTags.get(0)))); + this.toolType = toolType; + } + + @Override + public ItemStack @NotNull [] getItems() { + if (cachedStacks == null) { + List stacks = new ArrayList<>(); + for (Holder holder : BuiltInRegistries.ITEM.getTagOrEmpty(toolType.craftingTags.get(0))) { + stacks.add(new ItemStack(holder)); + } + stacks.add(GTItems.TOOL_BOX.asStack()); + cachedStacks = stacks.toArray(ItemStack[]::new); + } + return cachedStacks; + } + + @Override + public boolean test(@Nullable ItemStack input) { + if (input == null || input.isEmpty()) { + return false; + } + if (input.is(toolType.craftingTags.get(0))) { + return true; + } + if (input.is(GTItems.TOOL_BOX.asItem()) && + input.getOrCreateTag().getString(TOOL_TYPES).contains(toolType.name)) { + input.getOrCreateTag().putString(LAST_USED_TOOL_TAG, toolType.name); + return true; + } + return false; + } + + @Override + public boolean isSimple() { + return false; + } + + @Override + public @NotNull IIngredientSerializer getSerializer() { + return Serializer.INSTANCE; + } + + @Override + public @NotNull JsonElement toJson() { + JsonObject json = new JsonObject(); + json.addProperty("type", TYPE.toString()); + json.addProperty("toolType", toolType.name); + return json; + } + + public static class Serializer implements IIngredientSerializer { + + public static final Serializer INSTANCE = new Serializer(); + + @Override + public @NotNull ToolIngredient parse(FriendlyByteBuf buffer) { + return new ToolIngredient(GTToolType.getTypes().get(buffer.readUtf())); + } + + @Override + public @NotNull ToolIngredient parse(@NotNull JsonObject json) { + return new ToolIngredient(GTToolType.getTypes().get(json.get("toolType").getAsString())); + } + + @Override + public void write(FriendlyByteBuf buffer, ToolIngredient ingredient) { + buffer.writeUtf(ingredient.toolType.name); + } + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index d9b68454ee3..7e0455d52d8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -237,6 +237,7 @@ public void commonSetup(FMLCommonSetupEvent event) { event.enqueueWork(() -> { CraftingHelper.register(NBTPredicateIngredient.TYPE, NBTPredicateIngredient.Serializer.INSTANCE); CraftingHelper.register(FluidContainerIngredient.TYPE, FluidContainerIngredient.SERIALIZER); + CraftingHelper.register(ToolIngredient.TYPE, ToolIngredient.Serializer.INSTANCE); if (GTCEu.Mods.isCCTweakedLoaded()) { GTCEu.LOGGER.info("CC: Tweaked found. Enabling integration..."); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java index 89c8e339f45..6c17d7b4d89 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java @@ -2171,6 +2171,12 @@ public static ItemEntry createFluidCell(Material mat, int capacit public static ItemEntry WIRELESS; public static ItemEntry CAMERA; + public static ItemEntry TOOL_BOX = REGISTRATE.item("tool_box", ComponentItem::create) + .lang("Tool Box") + .properties(p -> p.stacksTo(1)) + .model((ctx, prov) -> prov.generated(ctx::getEntry, prov.modLoc("item/tool_box/closed"))) + .onRegister(attach(ToolBoxBehavior.INSTANCE)) + .register(); public static ItemEntry TERMINAL = REGISTRATE.item("terminal", ComponentItem::create) .lang("Terminal") .properties(p -> p.stacksTo(1)) diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/ToolBoxBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/ToolBoxBehavior.java new file mode 100644 index 00000000000..c6b4fe5d222 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/item/ToolBoxBehavior.java @@ -0,0 +1,157 @@ +package com.gregtechceu.gtceu.common.item; + +import com.gregtechceu.gtceu.api.gui.GuiTextures; +import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; +import com.gregtechceu.gtceu.api.item.IGTTool; +import com.gregtechceu.gtceu.api.item.component.IAddInformation; +import com.gregtechceu.gtceu.api.item.component.IItemUIFactory; +import com.gregtechceu.gtceu.api.item.component.IRecipeRemainder; +import com.gregtechceu.gtceu.api.item.tool.GTToolType; +import com.gregtechceu.gtceu.api.item.tool.ToolHelper; +import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; + +import com.lowdragmc.lowdraglib.gui.factory.HeldItemUIFactory; +import com.lowdragmc.lowdraglib.gui.modular.ModularUI; +import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; +import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; + +import net.minecraft.ChatFormatting; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.StringTag; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.ForgeHooks; + +import it.unimi.dsi.fastutil.objects.ReferenceArraySet; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +public class ToolBoxBehavior implements IItemUIFactory, IRecipeRemainder, IAddInformation { + + private static final int SLOTS = 9; + private static final String INVENTORY_TAG = "inventory"; + public static final String TOOL_TYPES = "tool_types"; + public static final String LAST_USED_TOOL_TAG = "last_used_tool"; + + public static final ToolBoxBehavior INSTANCE = new ToolBoxBehavior(); + + private ToolBoxBehavior() {} + + public static CustomItemStackHandler getInventory(ItemStack stack) { + CustomItemStackHandler handler = new CustomItemStackHandler(SLOTS); + handler.setFilter(candidate -> candidate.getItem() instanceof IGTTool tool && tool.getToolType() != null); + + CompoundTag tag = stack.getTag(); + if (tag != null && tag.contains(INVENTORY_TAG)) { + handler.deserializeNBT(tag.getCompound(INVENTORY_TAG)); + } + handler.setOnContentsChanged(() -> { + stack.getOrCreateTag().put(INVENTORY_TAG, handler.serializeNBT()); + Set toolTypes = new ReferenceArraySet<>(); + for (int slot = 0; slot < handler.getSlots(); slot++) { + ItemStack toolStack = handler.getStackInSlot(slot); + if (!toolStack.isEmpty()) { + toolTypes.addAll(ToolHelper.getToolTypes(toolStack)); + } + } + String types = ""; + for (var type : toolTypes) { + types += type.name; + types += " "; + } + stack.getOrCreateTag().put(TOOL_TYPES, StringTag.valueOf(types)); + }); + return handler; + } + + @Override + public ModularUI createUI(HeldItemUIFactory.HeldItemHolder holder, Player player) { + ItemStack stack = holder.getHeld(); + CustomItemStackHandler toolboxInventory = getInventory(stack); + ModularUI ui = new ModularUI(176, 121, holder, player) + .background(GuiTextures.BACKGROUND) + .widget(new LabelWidget(7, 5, stack.getDescriptionId())); + + for (int slot = 0; slot < SLOTS; slot++) { + ui.widget(new SlotWidget(toolboxInventory, slot, 7 + slot * 18, 19) + .setBackgroundTexture(GuiTextures.SLOT)); + } + ui.widget(createPlayerInventory(player.getInventory(), player.getInventory().selected)); + return ui; + } + + private static WidgetGroup createPlayerInventory(Inventory inventory, int lockedHotbarSlot) { + WidgetGroup group = new WidgetGroup(7, 39, 162, 76); + for (int row = 0; row < 3; row++) { + for (int column = 0; column < 9; column++) { + int slot = column + (row + 1) * 9; + group.addWidget(new SlotWidget(inventory, slot, column * 18, row * 18) + .setBackgroundTexture(GuiTextures.SLOT) + .setLocationInfo(true, false)); + } + } + for (int slot = 0; slot < 9; slot++) { + boolean isHeldToolboxSlot = slot == lockedHotbarSlot; + group.addWidget(new SlotWidget(inventory, slot, slot * 18, 58, + !isHeldToolboxSlot, !isHeldToolboxSlot) + .setBackgroundTexture(GuiTextures.SLOT) + .setLocationInfo(true, true)); + } + return group; + } + + @Override + public ItemStack getRecipeRemained(ItemStack stack) { + ItemStack result = stack.copy(); + String lastUsedTool = result.getOrCreateTag().getString(LAST_USED_TOOL_TAG); + if (lastUsedTool.isEmpty()) { + return result; + } + + GTToolType requestedToolType = GTToolType.getTypes().get(lastUsedTool); + result.removeTagKey(LAST_USED_TOOL_TAG); + if (requestedToolType == null) { + return result; + } + + CustomItemStackHandler inventory = getInventory(result); + for (int slot = 0; slot < inventory.getSlots(); slot++) { + ItemStack toolStack = inventory.getStackInSlot(slot); + if (toolStack.getItem() instanceof IGTTool tool && tool.getToolType() != null && + tool.getToolType() == requestedToolType) { + ToolHelper.damageItemWhenCrafting(toolStack, ForgeHooks.getCraftingPlayer()); + inventory.setStackInSlot(slot, toolStack); + break; + } + } + return result; + } + + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltip, TooltipFlag flag) { + List contents = new ArrayList<>(); + CustomItemStackHandler inventory = getInventory(stack); + for (int slot = 0; slot < inventory.getSlots(); slot++) { + ItemStack toolStack = inventory.getStackInSlot(slot); + if (!toolStack.isEmpty()) { + contents.add(Component.literal(" * ").withStyle(ChatFormatting.DARK_GRAY) + .append(toolStack.getHoverName().copy().withStyle(ChatFormatting.AQUA)) + .append(Component.literal(" %d / %d".formatted( + toolStack.getMaxDamage() - toolStack.getDamageValue(), toolStack.getMaxDamage())) + .withStyle(ChatFormatting.GREEN))); + } + } + if (contents.isEmpty()) { + tooltip.add(Component.translatable("item.gtceu.tool_box.empty").withStyle(ChatFormatting.GRAY)); + } else { + tooltip.addAll(contents); + } + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java index ae90262c34c..3a15a529e5d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java @@ -14,8 +14,10 @@ import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredPartMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; import com.gregtechceu.gtceu.common.data.GTItems; +import com.gregtechceu.gtceu.common.item.ToolBoxBehavior; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; @@ -261,6 +263,18 @@ private void fixProblemsWithTools(byte problems, Player entityPlayer) { return; } } + + if (itemStack.is(GTItems.TOOL_BOX.asItem())) { + CustomItemStackHandler inventory = ToolBoxBehavior.getInventory(itemStack); + for (int slot = 0; slot < inventory.getSlots(); slot++) { + ItemStack toolStack = inventory.getStackInSlot(slot); + if (!toolStack.isEmpty() && ToolHelper.is(toolStack, toolToMatch)) { + fixProblemWithTool(i, toolStack, entityPlayer); + inventory.setStackInSlot(slot, toolStack); + break; + } + } + } } if (entityPlayer instanceof ServerPlayer player) { diff --git a/src/main/java/com/gregtechceu/gtceu/data/lang/ItemLang.java b/src/main/java/com/gregtechceu/gtceu/data/lang/ItemLang.java index 9b47bcbb63f..5c7144da819 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/lang/ItemLang.java +++ b/src/main/java/com/gregtechceu/gtceu/data/lang/ItemLang.java @@ -61,6 +61,7 @@ private static void initItemNames(RegistrateLangProvider provider) { private static void initItemTooltips(RegistrateLangProvider provider) { provider.add("item.gtceu.empty_mold.tooltip", "§7Raw Plate to make Molds and Extrude Shapes"); provider.add("item.gtceu.nano_saber.tooltip", "§7Ryujin no ken wo kurae!"); + provider.add("item.gtceu.tool_box.empty", "Can store up to 9 tools."); provider.add("item.gtceu.plate_casting_mold.tooltip", "§7Mold for making Plates"); provider.add("item.gtceu.casing_casting_mold.tooltip", "§7Mold for making Item Casings"); provider.add("item.gtceu.gear_casting_mold.tooltip", "§7Mold for making Gears"); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/VanillaRecipeHelper.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/VanillaRecipeHelper.java index e9d7013bf87..d500347efe8 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/VanillaRecipeHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/VanillaRecipeHelper.java @@ -378,7 +378,7 @@ public static void addShapedRecipe(Consumer provider, boolean se } for (var it = foundTools.iterator(); it.hasNext();) { char c = it.nextChar(); - builder.define(c, ToolHelper.getToolFromSymbol(c).craftingTags.get(0)); + builder.define(c, ToolHelper.getIngredientFromSymbol(c)); } builder.save(provider); @@ -479,7 +479,7 @@ public static void addShapedEnergyTransferRecipe(Consumer provid } for (var it = foundTools.iterator(); it.hasNext();) { char c = it.nextChar(); - builder.define(c, ToolHelper.getToolFromSymbol(c).craftingTags.get(0)); + builder.define(c, ToolHelper.getIngredientFromSymbol(c)); } builder.save(provider); @@ -551,7 +551,7 @@ public static void addShapedFluidContainerRecipe(Consumer provid } for (var it = foundTools.iterator(); it.hasNext();) { char c = it.nextChar(); - builder.define(c, ToolHelper.getToolFromSymbol(c).craftingTags.get(0)); + builder.define(c, ToolHelper.getIngredientFromSymbol(c)); } builder.save(provider); @@ -618,7 +618,7 @@ public static void addShapelessRecipe(Consumer provider, @NotNul } else if (content instanceof ItemProviderEntry entry) { builder.requires(entry.asStack()); } else if (content instanceof Character c) { - builder.requires(ToolHelper.getToolFromSymbol(c).craftingTags.get(0)); + builder.requires(ToolHelper.getIngredientFromSymbol(c)); } } builder.save(provider); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java index 8ea508e563c..499855027e2 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java @@ -37,6 +37,8 @@ public static void init(Consumer provider) { "SGS", "PBP", "PWP", 'S', new MaterialEntry(screw, WroughtIron), 'G', Tags.Items.GLASS_PANES, 'B', new ItemStack(Items.BOOK), 'P', new MaterialEntry(plate, WroughtIron), 'W', new MaterialEntry(wireGtSingle, RedAlloy)); + VanillaRecipeHelper.addShapedRecipe(provider, true, "tool_box", TOOL_BOX.asStack(), + "SGS", "SSS", 'S', new MaterialEntry(plate, Bronze), 'G', Tags.Items.CHESTS_WOODEN); // Machine Memory Card Recipe VanillaRecipeHelper.addShapedRecipe(provider, true, "machine_memory_card", MACHINE_MEMORY_CARD.asStack(), "PWP", "SLS", "PPP", 'P', new MaterialEntry(plate, Steel), 'W', @@ -517,7 +519,7 @@ public static void init(Consumer provider) { .duration(200) .save(provider); - VanillaRecipeHelper.addShapedRecipe(provider, "cake_from_dough", new ItemStack(Items.CAKE), + VanillaRecipeHelper.addShapedFluidContainerRecipe(provider, "cake_from_dough", new ItemStack(Items.CAKE), "MMM", "SES", " D ", 'E', Items.EGG, 'S', Items.SUGAR, @@ -554,7 +556,7 @@ public static void init(Consumer provider) { .duration(200) .save(provider); - VanillaRecipeHelper.addShapedRecipe(provider, "cake", new ItemStack(Items.CAKE), + VanillaRecipeHelper.addShapedFluidContainerRecipe(provider, "cake", new ItemStack(Items.CAKE), "BBB", "SMS", "DDD", 'B', Items.SWEET_BERRIES, 'S', Items.SUGAR, diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/VanillaStandardRecipes.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/VanillaStandardRecipes.java index d9b8c06d767..52c2220d974 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/VanillaStandardRecipes.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/VanillaStandardRecipes.java @@ -476,7 +476,8 @@ private static void woodRecipes(Consumer provider) { new MaterialEntry(gem, Coke), 'S', new ItemStack(Items.STICK)); VanillaRecipeHelper.addShapedRecipe(provider, "torch_coke_dust", new ItemStack(Blocks.TORCH, 8), "C", "S", 'C', new MaterialEntry(dust, Coke), 'S', new ItemStack(Items.STICK)); - VanillaRecipeHelper.addShapedRecipe(provider, "torch_creosote", new ItemStack(Blocks.TORCH, 16), "WB", "S ", + VanillaRecipeHelper.addShapedFluidContainerRecipe(provider, "torch_creosote", new ItemStack(Blocks.TORCH, 16), + "WB", "S ", 'W', ItemTags.WOOL, 'S', new ItemStack(Items.STICK), 'B', new FluidContainerIngredient(Creosote.getFluidTag(), 1000)); VanillaRecipeHelper.addShapedRecipe(provider, "soul_torch", new ItemStack(Blocks.SOUL_TORCH, 1), "WB",