diff options
author | querns <33518699+querns@users.noreply.github.com> | 2024-07-29 19:46:55 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-30 07:46:55 +0700 |
commit | 450a7874b06ff508987a4b0f3c3621ab4d9d28b3 (patch) | |
tree | 264f273abb9f06530e088ca780fbaf2285f7633f /src/main/java/gregtech/api/gui/widgets | |
parent | 9cff1eb7d1621cb14ef433a75cda62592a31b2cf (diff) | |
download | GT5-Unofficial-450a7874b06ff508987a4b0f3c3621ab4d9d28b3.tar.gz GT5-Unofficial-450a7874b06ff508987a4b0f3c3621ab4d9d28b3.tar.bz2 GT5-Unofficial-450a7874b06ff508987a4b0f3c3621ab4d9d28b3.zip |
Adds lockable output buses (#2787)
* Adds output locking for non-ME output buses
* Add data stick support for output bus filters
* Small optimization to output bus iteration
* spotless, my one true enemy
Diffstat (limited to 'src/main/java/gregtech/api/gui/widgets')
-rw-r--r-- | src/main/java/gregtech/api/gui/widgets/GT_PhantomItemButton.java | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/gui/widgets/GT_PhantomItemButton.java b/src/main/java/gregtech/api/gui/widgets/GT_PhantomItemButton.java new file mode 100644 index 0000000000..4e2d144aa7 --- /dev/null +++ b/src/main/java/gregtech/api/gui/widgets/GT_PhantomItemButton.java @@ -0,0 +1,92 @@ +package gregtech.api.gui.widgets; + +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; + +import org.apache.commons.lang3.NotImplementedException; +import org.jetbrains.annotations.Nullable; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizons.modularui.api.ModularUITextures; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.Text; +import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.interfaces.metatileentity.IItemLockable; + +/** + * Creates a phantom item in a GUI. Useful for filtering. + */ +public class GT_PhantomItemButton extends SlotWidget { + + public static final IDrawable[] FILTER_BACKGROUND = { ModularUITextures.ITEM_SLOT, + GT_UITextures.OVERLAY_SLOT_FILTER }; + + public GT_PhantomItemButton(final IItemLockable delegate) { + super(BaseSlot.phantom(new PhantomItemDelegate(delegate), 0)); + controlsAmount = false; + } + + @Override + public List<Text> getTooltip() { + return ImmutableList.of(new Text(StatCollector.translateToLocal("GT5U.bus.filterTooltip.empty"))); + } + + @Override + public List<String> getExtraTooltip() { + return ImmutableList.of(StatCollector.translateToLocal("GT5U.bus.filterTooltip.full")); + } + + @Override + public boolean onMouseScroll(int direction) { + return false; + } + + @SuppressWarnings("ClassCanBeRecord") + private static class PhantomItemDelegate implements IItemHandlerModifiable { + + private final IItemLockable delegate; + + public PhantomItemDelegate(final IItemLockable delegate) { + this.delegate = delegate; + } + + @Override + public void setStackInSlot(int slot, ItemStack itemStack) { + delegate.setLockedItem(itemStack); + } + + @Override + public int getSlots() { + return 1; + } + + @Override + public ItemStack getStackInSlot(int slot) { + return delegate.getLockedItem(); + } + + @Nullable + @Override + public ItemStack insertItem(int slot, ItemStack itemStack, boolean simulate) { + delegate.setLockedItem(itemStack); + return null; + } + + @Nullable + @Override + public ItemStack extractItem(int var1, int var2, boolean var3) { + throw new NotImplementedException("Extract item is disabled for GhostItemButtons."); + } + + @Override + public int getSlotLimit(int slot) { + return 1; + } + } +} |