Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/generated/resources/assets/gtceu/lang/en_ud.json
Original file line number Diff line number Diff line change
Expand Up @@ -4865,6 +4865,8 @@
"item.gtceu.tool.wire_cutter": "ɹǝʇʇnƆ ǝɹıM %s",
"item.gtceu.tool.wrench": "ɥɔuǝɹM %s",
"item.gtceu.tool.wrench.tooltip": "sǝuıɥɔɐW ǝןʇuɐɯsıp oʇ ʞɔıןɔ ʇɟǝן pןoH8§",
"item.gtceu.tool_box": "xoᗺ ןoo⟘",
"item.gtceu.tool_box.empty": "˙sןooʇ 6 oʇ dn ǝɹoʇs uɐƆ",
"item.gtceu.transistor": "ɹoʇsısuɐɹ⟘",
"item.gtceu.transistor.tooltip": "ʇuǝuodɯoƆ ɔıuoɹʇɔǝןƎ ɔısɐᗺㄥ§",
"item.gtceu.treated_wood_boat": "ʇɐoᗺ pooM pǝʇɐǝɹ⟘",
Expand Down
2 changes: 2 additions & 0 deletions src/generated/resources/assets/gtceu/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -4865,6 +4865,8 @@
"item.gtceu.tool.wire_cutter": "%s Wire Cutter",
"item.gtceu.tool.wrench": "%s Wrench",
"item.gtceu.tool.wrench.tooltip": "§8Hold left click to dismantle Machines",
"item.gtceu.tool_box": "Tool Box",
"item.gtceu.tool_box.empty": "Can store up to 9 tools.",
"item.gtceu.transistor": "Transistor",
"item.gtceu.transistor.tooltip": "§7Basic Electronic Component",
"item.gtceu.treated_wood_boat": "Treated Wood Boat",
Expand Down
14 changes: 14 additions & 0 deletions src/generated/resources/assets/gtceu/models/item/tool_box.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"parent": "minecraft:item/generated",
"overrides": [
{
"model": "gtceu:item/tool_box/opened",
"predicate": {
"gtceu:tool_box_opened": 1.0
}
}
],
"textures": {
"layer0": "gtceu:item/tool_box/closed"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "gtceu:item/tool_box/opened"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.gregtechceu.gtceu.api.recipe.RecipeHelper;
import com.gregtechceu.gtceu.api.recipe.content.Content;
import com.gregtechceu.gtceu.api.recipe.ingredient.SizedIngredient;
import com.gregtechceu.gtceu.api.recipe.ingredient.ToolIngredient;
import com.gregtechceu.gtceu.api.registry.GTRegistries;
import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler;
import com.gregtechceu.gtceu.common.data.GTItems;
Expand Down Expand Up @@ -68,6 +69,7 @@
import net.minecraftforge.common.TierSortingRegistry;
import net.minecraftforge.event.ForgeEventFactory;

import com.google.common.base.Preconditions;
import it.unimi.dsi.fastutil.chars.Char2ReferenceMap;
import it.unimi.dsi.fastutil.chars.Char2ReferenceOpenHashMap;
import it.unimi.dsi.fastutil.chars.CharSet;
Expand Down Expand Up @@ -145,6 +147,12 @@ public static GTToolType getToolFromSymbol(char symbol) {
return symbols.get(symbol);
}

public static ToolIngredient getIngredientFromSymbol(char symbol) {
GTToolType toolType = getToolFromSymbol(symbol);
Preconditions.checkNotNull(toolType, "No tool type with symbol '%s'", symbol);
return new ToolIngredient(toolType);
}

@UnmodifiableView
public static CharSet getToolSymbols() {
return CharSets.unmodifiable(symbols.keySet());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
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 com.gregtechceu.gtceu.common.item.ToolBoxBehavior;

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;

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 (this.cachedStacks == null) {
List<ItemStack> list = new ArrayList<>();
for (Holder<Item> holder : BuiltInRegistries.ITEM.getTagOrEmpty(toolType.craftingTags.get(0))) {
list.add(new ItemStack(holder));
}
list.add(GTItems.TOOL_BOX.asStack());
this.cachedStacks = list.toArray(ItemStack[]::new);
}
return this.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()) &&
ToolBoxBehavior.getAvailableTools(input).contains(toolType.craftingTags.get(0))) {
input.getOrCreateTagElement("last_used_tool").putString("type", toolType.name);
return true;
}
return false;
}

@Override
public boolean isSimple() {
return false;
}

@Override
public @NotNull IIngredientSerializer<? extends Ingredient> getSerializer() {
return ToolIngredient.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<ToolIngredient> {

public static final ToolIngredient.Serializer INSTANCE = new ToolIngredient.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);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,7 @@ public void commonSetup(FMLCommonSetupEvent event) {
CraftingHelper.register(IntProviderIngredient.TYPE, IntProviderIngredient.SERIALIZER);
CraftingHelper.register(NBTPredicateIngredient.TYPE, NBTPredicateIngredient.Serializer.INSTANCE);
CraftingHelper.register(FluidContainerIngredient.TYPE, FluidContainerIngredient.SERIALIZER);
CraftingHelper.register(ToolIngredient.TYPE, ToolIngredient.Serializer.INSTANCE);

// register the map ingredient converters for all of our ingredients
MapIngredientTypeManager.registerMapIngredient(FluidIngredient.class, FluidTagMapIngredient::from);
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java
Original file line number Diff line number Diff line change
Expand Up @@ -2171,6 +2171,24 @@ public static ItemEntry<ComponentItem> createFluidCell(Material mat, int capacit

public static ItemEntry<Item> WIRELESS;
public static ItemEntry<Item> CAMERA;
public static ItemEntry<ComponentItem> TOOL_BOX = REGISTRATE.item("tool_box", ComponentItem::create)
.lang("Tool Box")
.properties(p -> p.stacksTo(1))
.onRegister(attach(ToolBoxBehavior.INSTANCE))
.model((ctx, prov) -> {
var rootModel = prov.generated(ctx::getEntry, prov.modLoc("item/tool_box/closed"));
prov.getBuilder("item/tool_box/opened")
.parent(new ModelFile.UncheckedModelFile("item/generated"))
.texture("layer0", prov.modLoc("item/tool_box/opened"));
rootModel.override()
.predicate(ToolBoxBehavior.MODEL_OVERRIDE_KEY, 1.0f)
.model(new ModelFile.UncheckedModelFile(prov.modLoc("item/tool_box/opened")))
.end();
})
.onRegister(modelPredicate(ToolBoxBehavior.MODEL_OVERRIDE_KEY,
() -> () -> (stack, level, entity, layer) -> ToolBoxBehavior.isOpened(stack) ? 1.0f : 0.0f))
.register();

public static ItemEntry<ComponentItem> TERMINAL = REGISTRATE.item("terminal", ComponentItem::create)
.lang("Terminal")
.properties(p -> p.stacksTo(1))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,11 @@ public static Flow createTitleBar(MachineDefinition definition, int panelWidth)
return createTitleBar(definition, panelWidth, background);
}

public static Flow createTitleBar(MachineDefinition definition, int panelWidth, UITexture background) {
var displayItem = definition.asStack();
public static Flow createTitleBar(ItemStack displayItem, int panelWidth) {
return createTitleBar(displayItem, panelWidth, GTGuiTextures.BACKGROUND);
}

public static Flow createTitleBar(ItemStack displayItem, int panelWidth, UITexture background) {
String machineName = displayItem.getHoverName().getString();
machineName = machineName.replaceAll("§.", "").trim();

Expand Down Expand Up @@ -94,6 +97,10 @@ public static Flow createTitleBar(MachineDefinition definition, int panelWidth,
.size(Math.min(minPanelWidth, textTitleWidth), textHeight));
}

public static Flow createTitleBar(MachineDefinition definition, int panelWidth, UITexture background) {
return createTitleBar(definition.asStack(), panelWidth, background);
}

public static ToggleButton createPowerButton(BooleanSupplier getter, BooleanConsumer setter,
PanelSyncManager syncManager) {
BooleanSyncValue power = new BooleanSyncValue(getter, setter);
Expand Down
Loading
Loading