Skip to content
Merged
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
1 change: 1 addition & 0 deletions src/generated/resources/assets/gtceu/lang/en_ud.json
Original file line number Diff line number Diff line change
Expand Up @@ -2427,6 +2427,7 @@
"gtceu.gui.item_auto_output.allow_input.enabled": "ǝpıs ʇndʇno ǝɥʇ ɯoɹɟ ʇnduı sɯǝʇı ʍoןןɐ",
"gtceu.gui.item_auto_output.tooltip.disabled": "pǝןqɐsıᗡ ʇndʇnO-oʇnⱯ ɯǝʇI",
"gtceu.gui.item_auto_output.tooltip.enabled": "pǝןqɐuƎ ʇndʇnO-oʇnⱯ ɯǝʇI",
"gtceu.gui.item_collector.range": " :ǝbuɐᴚ",
"gtceu.gui.item_input_from_output": "%s :ʇndʇnO ɯoɹɟ ʇnduI ɯǝʇI",
"gtceu.gui.item_lock.tooltip.disabled": "pǝןqɐsıᗡ buıʞɔoꞀ ɯǝʇI",
"gtceu.gui.item_lock.tooltip.enabled": "pǝןqɐuƎ buıʞɔoꞀ ɯǝʇI",
Expand Down
1 change: 1 addition & 0 deletions src/generated/resources/assets/gtceu/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -2427,6 +2427,7 @@
"gtceu.gui.item_auto_output.allow_input.enabled": "allow items input from the output side",
"gtceu.gui.item_auto_output.tooltip.disabled": "Item Auto-Output Disabled",
"gtceu.gui.item_auto_output.tooltip.enabled": "Item Auto-Output Enabled",
"gtceu.gui.item_collector.range": "Range: ",
"gtceu.gui.item_input_from_output": "Item Input from Output: %s",
"gtceu.gui.item_lock.tooltip.disabled": "Item Locking Disabled",
"gtceu.gui.item_lock.tooltip.enabled": "Item Locking Enabled",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -521,8 +521,6 @@ public class GTMachines {
.recipeType(DUMMY_RECIPES)
.modelProperty(GTMachineModelProperties.IS_ACTIVE, false)
.modelProperty(GTMachineModelProperties.IS_WORKING_ENABLED, false)
.editableUI(ItemCollectorMachine.EDITABLE_UI_CREATOR.apply(GTCEu.id("item_collector"),
ItemCollectorMachine.getINVENTORY_SIZES()[tier]))
.model(createItemCollectorModel(GTCEu.id("block/machines/item_collector")))
.tooltips(
Component.translatable("gtceu.machine.item_collector.tooltip"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.gregtechceu.gtceu.api.machine.MachineDefinition;
import com.gregtechceu.gtceu.api.machine.SimpleTieredMachine;
import com.gregtechceu.gtceu.api.machine.feature.IAutoOutputItem;
import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine;
import com.gregtechceu.gtceu.api.mui.base.IPanelHandler;
import com.gregtechceu.gtceu.api.mui.base.drawable.IDrawable;
Expand Down Expand Up @@ -31,6 +32,7 @@
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraftforge.items.IItemHandler;

import com.mojang.blaze3d.platform.InputConstants;
import it.unimi.dsi.fastutil.booleans.BooleanConsumer;
Expand Down Expand Up @@ -111,7 +113,13 @@ public static ItemSlot createBatterySlot(SimpleTieredMachine tieredMachine, Pane
return new ItemSlot().syncHandler("battery").background(GTGuiTextures.SLOT, GTGuiTextures.CHARGER_OVERLAY);
}

public static ToggleButton createAutoOutputItemButton(SimpleTieredMachine machine, PanelSyncManager syncManager) {
public static ItemSlot createBatterySlot(IItemHandler itemHandler, int slot, PanelSyncManager syncManager) {
ItemSlotSH battery = new ItemSlotSH(new ModularSlot(itemHandler, slot));
syncManager.syncValue("battery", battery);
return new ItemSlot().syncHandler("battery").background(GTGuiTextures.SLOT, GTGuiTextures.CHARGER_OVERLAY);
}

public static ToggleButton createAutoOutputItemButton(IAutoOutputItem machine, PanelSyncManager syncManager) {
BooleanSyncValue itemOutputs = new BooleanSyncValue(machine::isAutoOutputItems,
machine::setAutoOutputItems);
syncManager.syncValue("auto_output_items", itemOutputs);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,47 +1,50 @@
package com.gregtechceu.gtceu.common.machine.electric;

import com.gregtechceu.gtceu.api.GTValues;
import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper;
import com.gregtechceu.gtceu.api.capability.IWorkable;
import com.gregtechceu.gtceu.api.capability.recipe.IO;
import com.gregtechceu.gtceu.api.cover.filter.ItemFilter;
import com.gregtechceu.gtceu.api.gui.GuiTextures;
import com.gregtechceu.gtceu.api.gui.WidgetUtils;
import com.gregtechceu.gtceu.api.gui.editor.EditableMachineUI;
import com.gregtechceu.gtceu.api.gui.editor.EditableUI;
import com.gregtechceu.gtceu.api.gui.widget.IntInputWidget;
import com.gregtechceu.gtceu.api.gui.widget.SlotWidget;
import com.gregtechceu.gtceu.api.item.tool.GTToolType;
import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity;
import com.gregtechceu.gtceu.api.machine.TickableSubscription;
import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine;
import com.gregtechceu.gtceu.api.machine.feature.IAutoOutputItem;
import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine;
import com.gregtechceu.gtceu.api.machine.feature.IMachineLife;
import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine;
import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties;
import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler;
import com.gregtechceu.gtceu.api.mui.base.drawable.IKey;
import com.gregtechceu.gtceu.api.mui.factory.PosGuiData;
import com.gregtechceu.gtceu.api.mui.utils.Alignment;
import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager;
import com.gregtechceu.gtceu.api.mui.value.sync.SyncHandlers;
import com.gregtechceu.gtceu.api.mui.widgets.TextWidget;
import com.gregtechceu.gtceu.api.mui.widgets.layout.Column;
import com.gregtechceu.gtceu.api.mui.widgets.layout.Flow;
import com.gregtechceu.gtceu.api.mui.widgets.slot.ItemSlot;
import com.gregtechceu.gtceu.api.mui.widgets.textfield.TextFieldWidget;
import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler;
import com.gregtechceu.gtceu.client.mui.screen.ModularPanel;
import com.gregtechceu.gtceu.client.mui.screen.UISettings;
import com.gregtechceu.gtceu.common.data.GTItems;
import com.gregtechceu.gtceu.common.data.mui.GTMuiMachineUtil;
import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets;
import com.gregtechceu.gtceu.common.mui.GTGuiTextures;
import com.gregtechceu.gtceu.config.ConfigHolder;
import com.gregtechceu.gtceu.data.lang.LangHandler;
import com.gregtechceu.gtceu.utils.GTTransferUtils;

import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture;
import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup;
import com.lowdragmc.lowdraglib.syncdata.ISubscription;
import com.lowdragmc.lowdraglib.syncdata.annotation.DescSynced;
import com.lowdragmc.lowdraglib.syncdata.annotation.Persisted;
import com.lowdragmc.lowdraglib.syncdata.annotation.RequireRerender;
import com.lowdragmc.lowdraglib.syncdata.field.ManagedFieldHolder;
import com.lowdragmc.lowdraglib.utils.Position;

import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.Util;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.TickTask;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.util.Mth;
Expand All @@ -62,14 +65,13 @@

import java.util.List;
import java.util.Set;
import java.util.function.BiFunction;

import javax.annotation.ParametersAreNonnullByDefault;

@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class ItemCollectorMachine extends TieredEnergyMachine
implements IAutoOutputItem, IFancyUIMachine, IMachineLife, IWorkable {
implements IAutoOutputItem, IMuiMachine, IMachineLife, IWorkable {

protected static final ManagedFieldHolder MANAGED_FIELD_HOLDER = new ManagedFieldHolder(ItemCollectorMachine.class,
TieredEnergyMachine.MANAGED_FIELD_HOLDER);
Expand Down Expand Up @@ -402,106 +404,6 @@ public void setWorkingEnabled(boolean workingEnabled) {
updateCollectionSubscription();
}

//////////////////////////////////////
// ********** GUI ***********//
//////////////////////////////////////

public static BiFunction<ResourceLocation, Integer, EditableMachineUI> EDITABLE_UI_CREATOR = Util
.memoize((path, inventorySize) -> new EditableMachineUI("misc", path, () -> {
var template = createTemplate(inventorySize).createDefault();
var energyBar = createEnergyBar().createDefault();
var batterySlot = createBatterySlot().createDefault();

var energyGroup = new WidgetGroup(0, 0, energyBar.getSize().width, energyBar.getSize().height + 20);
batterySlot.setSelfPosition(
new Position((energyBar.getSize().width - 18) / 2, energyBar.getSize().height + 1));
energyGroup.addWidget(energyBar);
energyGroup.addWidget(batterySlot);
var group = new WidgetGroup(0, 0,
Math.max(energyGroup.getSize().width + template.getSize().width + 4 + 8, 172),
Math.max(template.getSize().height + 8 + 30, energyGroup.getSize().height + 8));
var size = group.getSize();
energyGroup.setSelfPosition(new Position(3, (size.height - energyGroup.getSize().height) / 2));

template.setSelfPosition(new Position(
(size.width - energyGroup.getSize().width - 4 - template.getSize().width) / 2 + 2 +
energyGroup.getSize().width + 2,
(size.height - template.getSize().height) / 2 + 15));

group.addWidget(energyGroup);
group.addWidget(template);
return group;
}, (template, machine) -> {
if (machine instanceof ItemCollectorMachine itemCollectorMachine) {
createTemplate(inventorySize).setupUI(template, itemCollectorMachine);
createEnergyBar().setupUI(template, itemCollectorMachine);
createBatterySlot().setupUI(template, itemCollectorMachine);
var rangeSelector = new IntInputWidget((template.getSize().width - 80) / 2, 5, 80, 20,
itemCollectorMachine::getRange, itemCollectorMachine::setRange);
rangeSelector.setMin(1);
rangeSelector.setMax(itemCollectorMachine.maxRange);
template.addWidget(rangeSelector);
}
}));

protected static EditableUI<SlotWidget, ItemCollectorMachine> createBatterySlot() {
return new EditableUI<>("battery_slot", SlotWidget.class, () -> {
var slotWidget = new SlotWidget();
slotWidget.setBackground(GuiTextures.SLOT, GuiTextures.CHARGER_OVERLAY);
return slotWidget;
}, (slotWidget, machine) -> {
slotWidget.setHandlerSlot(machine.chargerInventory, 0);
slotWidget.setCanPutItems(true);
slotWidget.setCanTakeItems(true);
slotWidget.setHoverTooltips(LangHandler.getMultiLang("gtceu.gui.charger_slot.tooltip",
GTValues.VNF[machine.getTier()], GTValues.VNF[machine.getTier()]).toArray(new MutableComponent[0]));
});
}

protected static EditableUI<WidgetGroup, ItemCollectorMachine> createTemplate(int inventorySize) {
return new EditableUI<>("functional_container", WidgetGroup.class, () -> {
int rowSize = (int) Math.sqrt(inventorySize);
WidgetGroup main = new WidgetGroup(0, 0, rowSize * 18 + 8 + 25, rowSize * 18 + 8);

for (int y = 0; y < rowSize; y++) {
for (int x = 0; x < rowSize; x++) {
int index = y * rowSize + x;
SlotWidget slotWidget = new SlotWidget();
slotWidget.initTemplate();
slotWidget.setSelfPosition(new Position(24 + x * 18, 4 + y * 18));
slotWidget.setBackground(GuiTextures.SLOT);
slotWidget.setId("slot_" + index);
main.addWidget(slotWidget);
}
}

SlotWidget filterSlotWidget = new SlotWidget();
filterSlotWidget.initTemplate();
filterSlotWidget
.setSelfPosition(new Position(4, (main.getSize().height - filterSlotWidget.getSize().height) / 2));
filterSlotWidget.setBackground(GuiTextures.SLOT, GuiTextures.FILTER_SLOT_OVERLAY);
filterSlotWidget.setId("filter_slot");
main.addWidget(filterSlotWidget);
main.setBackground(GuiTextures.BACKGROUND_INVERSE);
return main;
}, (group, machine) -> {
WidgetUtils.widgetByIdForEach(group, "^slot_[0-9]+$", SlotWidget.class, slot -> {
var index = WidgetUtils.widgetIdIndex(slot);
if (index >= 0 && index < machine.output.getSlots()) {
slot.setHandlerSlot(machine.output, index);
slot.setCanTakeItems(true);
slot.setCanPutItems(false);
}
});
WidgetUtils.widgetByIdForEach(group, "^filter_slot$", SlotWidget.class, slot -> {
slot.setHandlerSlot(machine.filterInventory, 0);
slot.setCanTakeItems(true);
slot.setCanPutItems(true);
});

});
}

//////////////////////////////////////
// ******* Rendering ********//
//////////////////////////////////////
Expand Down Expand Up @@ -566,4 +468,48 @@ protected InteractionResult onSoftMalletClick(Player playerIn, InteractionHand h
}
return InteractionResult.PASS;
}

@Override
public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) {
return new ModularPanel(getDefinition().getName())
.height(220)
.child(GTMuiWidgets.createTitleBar(getDefinition(), 174))
.bindPlayerInventory()
.child(Flow.column()
.coverChildrenHeight()
.widthRel(1)
.crossAxisAlignment(Alignment.CrossAxis.START)
.child(Flow.row()
.coverChildren()
.childPadding(2)
.margin(5)
.horizontalCenter()
.child(new TextWidget<>(IKey.lang("gtceu.gui.item_collector.range")))
.child(new TextFieldWidget()
.setNumbers(1, maxRange)
.value(SyncHandlers.intNumber(this::getRange, this::setRange))))
.child(Flow.row()
.coverChildrenHeight()
.widthRel(1)
.child(new ItemSlot()
.slot(filterInventory, 0)
.background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY)
.margin(7))
.child(GTMuiMachineUtil
.createSquareSlotGroupFromInventory(output, "main_inv", syncManager)
.horizontalCenter())))
.child(new Column()
.coverChildren()
.leftRel(1.0f)
.reverseLayout(true)
.bottom(16)
.padding(0, 8, 4, 4)
.childPadding(2)
.excludeAreaInXei()
.background(GTGuiTextures.BACKGROUND.getSubArea(0.25f, 0f, 1.0f, 1.0f))
.child(GTMuiWidgets.createBatterySlot(getChargerInventory(), 0, syncManager))
.child(GTMuiWidgets.createPowerButton(this::isWorkingEnabled, this::setWorkingEnabled,
syncManager))
.child(GTMuiWidgets.createAutoOutputItemButton(this, syncManager)));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1669,6 +1669,7 @@ public static void init(RegistrateLangProvider provider) {
"Place the cover on the target block, right-click it with a data stick and put that data stick into a data access hatch in the multiblock.",
"Then select the data access hatch as the target, and set the slot index of your data stick in the number field that appeared.");
provider.add("gtceu.tooltip.player_bind", "Bound to player: %s");
provider.add("gtceu.gui.item_collector.range", "Range: ");
}

/**
Expand Down