diff options
Diffstat (limited to 'src/main/java/gregtech/common')
3 files changed, 113 insertions, 38 deletions
diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java index 34f038b2ea..1e7dc28e91 100644 --- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java +++ b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java @@ -3,7 +3,8 @@ package gregtech.common.tileentities.machines; import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_INPUT_HATCH; import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_INPUT_HATCH_ACTIVE; -import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.EnumSet; import java.util.Iterator; import java.util.List; @@ -16,20 +17,20 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -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.UITexture; import com.gtnewhorizons.modularui.api.math.Alignment; import com.gtnewhorizons.modularui.api.math.Color; import com.gtnewhorizons.modularui.api.math.Size; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; import com.gtnewhorizons.modularui.common.widget.ButtonWidget; import com.gtnewhorizons.modularui.common.widget.DrawableWidget; import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; @@ -48,6 +49,7 @@ import appeng.api.networking.security.MachineSource; import appeng.api.storage.IMEMonitor; import appeng.api.storage.data.IAEItemStack; import appeng.api.util.AECableType; +import appeng.core.localization.WailaText; import appeng.me.GridAccessException; import appeng.me.helpers.AENetworkProxy; import appeng.me.helpers.IGridProxyable; @@ -61,6 +63,10 @@ import gregtech.api.interfaces.modularui.IAddUIWidgets; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_Utility; import gregtech.common.gui.modularui.widget.AESlotWidget; @@ -140,9 +146,9 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch public void setAdditionalConnectionOption() { if (additionalConnection) { - gridProxy.setValidSides(EnumSet.complementOf(EnumSet.of(ForgeDirection.UNKNOWN))); + getProxy().setValidSides(EnumSet.complementOf(EnumSet.of(ForgeDirection.UNKNOWN))); } else { - gridProxy.setValidSides(EnumSet.of(getBaseMetaTileEntity().getFrontFacing())); + getProxy().setValidSides(EnumSet.of(getBaseMetaTileEntity().getFrontFacing())); } } @@ -176,9 +182,6 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch } @Override - public void gridChanged() {} - - @Override public boolean isPowered() { return getProxy() != null && getProxy().isPowered(); } @@ -260,7 +263,9 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch @Override public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { setAutoPullItemList(!autoPullItemList); - GT_Utility.sendChatToPlayer(aPlayer, "Automatic Item Pull " + autoPullItemList); + aPlayer.addChatMessage( + new ChatComponentTranslation( + "GT5U.machines.stocking_bus.auto_pull_toggle." + (autoPullItemList ? "enabled" : "disabled"))); } @Override @@ -295,7 +300,7 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch } setInventorySlotContents(getCircuitSlot(), circuit); setAdditionalConnectionOption(); - aPlayer.addChatMessage(new ChatComponentText("Loaded Config From Data Stick")); + aPlayer.addChatMessage(new ChatComponentTranslation("GT5U.machines.stocking_bus.loaded")); return true; } @@ -323,7 +328,7 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch } dataStick.stackTagCompound = tag; dataStick.setStackDisplayName("Stocking Input Bus Configuration"); - aPlayer.addChatMessage(new ChatComponentText("Saved Config to Data Stick")); + aPlayer.addChatMessage(new ChatComponentTranslation("GT5U.machines.stocking_bus.saved")); } private int getManualSlot() { @@ -435,7 +440,8 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch } @Override - public void endRecipeProcessing() { + public CheckRecipeResult endRecipeProcessing(GT_MetaTileEntity_MultiBlockBase controller) { + CheckRecipeResult checkRecipeResult = CheckRecipeResultRegistry.SUCCESSFUL; for (int i = 0; i < SLOT_COUNT; ++i) { if (savedStackSizes[i] != 0) { ItemStack oldStack = shadowInventory[i]; @@ -445,11 +451,17 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch IMEMonitor<IAEItemStack> sg = proxy.getStorage() .getItemInventory(); IAEItemStack request = AEItemStack.create(mInventory[i]); - request.setStackSize(savedStackSizes[i] - (oldStack == null ? 0 : oldStack.stackSize)); - sg.extractItems(request, Actionable.MODULATE, getRequestSource()); + int toExtract = savedStackSizes[i] - (oldStack == null ? 0 : oldStack.stackSize); + request.setStackSize(toExtract); + IAEItemStack result = sg.extractItems(request, Actionable.MODULATE, getRequestSource()); proxy.getEnergy() .extractAEPower(request.getStackSize(), Actionable.MODULATE, PowerMultiplier.CONFIG); setInventorySlotContents(i + SLOT_COUNT, oldStack); + if (result == null || result.getStackSize() != toExtract) { + controller.criticalStopMachine(); + checkRecipeResult = SimpleCheckRecipeResult + .ofFailurePersistOnShutdown("stocking_bus_fail_extraction"); + } } catch (final GridAccessException ignored) {} } savedStackSizes[i] = 0; @@ -457,6 +469,7 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch } } processingRecipe = false; + return checkRecipeResult; } public ItemStack updateInformationSlot(int aIndex, ItemStack aStack) { @@ -490,6 +503,11 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch } @Override + public int getGUIHeight() { + return 179; + } + + @Override public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { final SlotWidget[] aeSlotWidgets = new SlotWidget[16]; buildContext.addSyncedWindow(CONFIG_WINDOW_ID, this::createStackSizeConfigurationWindow); @@ -498,12 +516,18 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch .startFromSlot(0) .endAtSlot(15) .phantom(true) - .background(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_ARROW_ME) - .widgetCreator(slot -> new SlotWidget(slot) { + .slotCreator(index -> new BaseSlot(inventoryHandler, index, true) { + + @Override + public boolean isEnabled() { + return !autoPullItemList && super.isEnabled(); + } + }) + .widgetCreator(slot -> (SlotWidget) new SlotWidget(slot) { @Override protected void phantomClick(ClickData clickData, ItemStack cursorStack) { - if (clickData.mouseButton != 0 || autoPullItemList) return; + if (clickData.mouseButton != 0 || !getMcSlot().isEnabled()) return; final int aSlotIndex = getMcSlot().getSlotIndex(); if (cursorStack == null) { getMcSlot().putStack(null); @@ -518,13 +542,43 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch } } + @Override + public IDrawable[] getBackground() { + IDrawable slot; + if (autoPullItemList) { + slot = GT_UITextures.SLOT_DARK_GRAY; + } else { + slot = ModularUITextures.ITEM_SLOT; + } + return new IDrawable[] { slot, GT_UITextures.OVERLAY_SLOT_ARROW_ME }; + } + + @Override + public List<String> getExtraTooltip() { + if (autoPullItemList) { + return Collections.singletonList( + StatCollector.translateToLocal("GT5U.machines.stocking_bus.cannot_set_slot")); + } else { + return Collections + .singletonList(StatCollector.translateToLocal("modularui.phantom.single.clear")); + } + } + private boolean containsSuchStack(ItemStack tStack) { for (int i = 0; i < 16; ++i) { if (GT_Utility.areStacksEqual(mInventory[i], tStack, false)) return true; } return false; } + }.dynamicTooltip(() -> { + if (autoPullItemList) { + return Collections.singletonList( + StatCollector.translateToLocal("GT5U.machines.stocking_bus.cannot_set_slot")); + } else { + return Collections.emptyList(); + } }) + .setUpdateTooltipEveryTick(true)) .build() .setPos(7, 9)) .widget( @@ -549,26 +603,37 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch .openSyncedWindow(CONFIG_WINDOW_ID); } }) - .setPlayClickSound(true) .setBackground(() -> { - List<UITexture> ret = new ArrayList<>(); - ret.add(GT_UITextures.BUTTON_STANDARD); - if (autoPullItemList) ret.add(GT_UITextures.OVERLAY_BUTTON_AUTOPULL_ME); - else ret.add(GT_UITextures.OVERLAY_BUTTON_AUTOPULL_ME_DISABLED); - return ret.toArray(new IDrawable[0]); + if (autoPullItemList) { + return new IDrawable[] { GT_UITextures.BUTTON_STANDARD_PRESSED, + GT_UITextures.OVERLAY_BUTTON_AUTOPULL_ME }; + } else { + return new IDrawable[] { GT_UITextures.BUTTON_STANDARD, + GT_UITextures.OVERLAY_BUTTON_AUTOPULL_ME_DISABLED }; + } }) .addTooltips( - ImmutableList.of( - "Click to toggle automatic item pulling from ME.", - "Right-Click to edit minimum stack size for item pulling.")) + Arrays.asList( + StatCollector.translateToLocal("GT5U.machines.stocking_bus.auto_pull.tooltip"), + StatCollector.translateToLocal("GT5U.machines.stocking_bus.auto_pull.tooltip.1"))) .setSize(16, 16) .setPos(80, 10)) .widget(new FakeSyncWidget.BooleanSyncer(() -> autoPullItemList, this::setAutoPullItemList)) + .widget(TextWidget.dynamicString(() -> { + boolean isActive = isActive(); + boolean isPowered = isPowered(); + boolean isBooting = isBooting(); + EnumChatFormatting color = (isActive && isPowered) ? EnumChatFormatting.GREEN + : EnumChatFormatting.DARK_RED; + return color + WailaText.getPowerState(isActive, isPowered, isBooting); + }) + .setTextAlignment(Alignment.Center) + .setSize(90, 9) + .setPos(43, 84)) .widget( new SlotWidget(inventoryHandler, getManualSlot()) // ghost slots are prioritized over manual slot .setShiftClickPriority(11) - .setBackground(getGUITextureSet().getItemSlot()) .setPos(79, 45)); } @@ -587,7 +652,8 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch Alignment.TopRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)) .add(WIDTH - 3, 0))); builder.widget( - new TextWidget("Min Stack Size").setPos(3, 2) + TextWidget.localised("GT5U.machines.stocking_bus.min_stack_size") + .setPos(3, 2) .setSize(74, 14)) .widget( new TextFieldWidget().setSetterInt(val -> minAutoPullStackSize = val) @@ -616,8 +682,14 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch NBTTagCompound tag = accessor.getNBTData(); boolean autopull = tag.getBoolean("autoPull"); int minSize = tag.getInteger("minStackSize"); - currenttip.add(String.format("Auto-Pull from ME: %s", autopull ? "Enabled" : "Disabled")); - if (autopull) currenttip.add(String.format("Minimum Stack Size: %d", minSize)); + currenttip.add( + StatCollector.translateToLocal("GT5U.waila.stocking_bus.auto_pull." + (autopull ? "enabled" : "disabled"))); + if (autopull) { + currenttip.add( + StatCollector.translateToLocalFormatted( + "GT5U.waila.stocking_bus.min_stack_size", + GT_Utility.formatNumbers(minSize))); + } super.getWailaBody(itemStack, currenttip, accessor, config); } diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DrillerBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DrillerBase.java index 6470065923..e884922710 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DrillerBase.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DrillerBase.java @@ -845,9 +845,10 @@ public abstract class GT_MetaTileEntity_DrillerBase .setBackground(() -> { if (mChunkLoadingEnabled) { return new IDrawable[] { GT_UITextures.BUTTON_STANDARD_PRESSED, - GT_UITextures.OVERLAY_CHUNK_LOADING }; + GT_UITextures.OVERLAY_BUTTON_CHUNK_LOADING }; } - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_CHUNK_LOADING_OFF }; + return new IDrawable[] { GT_UITextures.BUTTON_STANDARD, + GT_UITextures.OVERLAY_BUTTON_CHUNK_LOADING_OFF }; }) .attachSyncer( new FakeSyncWidget.BooleanSyncer( @@ -869,9 +870,10 @@ public abstract class GT_MetaTileEntity_DrillerBase .setBackground(() -> { if (workState == STATE_ABORT) { return new IDrawable[] { GT_UITextures.BUTTON_STANDARD_PRESSED, - GT_UITextures.OVERLAY_RETRACT_PIPE, GT_UITextures.OVERLAY_BUTTON_LOCKED }; + GT_UITextures.OVERLAY_BUTTON_RETRACT_PIPE, GT_UITextures.OVERLAY_BUTTON_LOCKED }; } - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_RETRACT_PIPE }; + return new IDrawable[] { GT_UITextures.BUTTON_STANDARD, + GT_UITextures.OVERLAY_BUTTON_RETRACT_PIPE }; }) .attachSyncer( new FakeSyncWidget.IntegerSyncer(() -> workState, (newInt) -> workState = newInt), diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java index a48bb1dee8..935c8c0032 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java @@ -638,7 +638,7 @@ public abstract class GT_MetaTileEntity_OreDrillingPlantBase extends GT_MetaTile (ButtonWidget) new GT_LockedWhileActiveButton(this.getBaseMetaTileEntity(), builder) .setOnClick((clickData, widget) -> adjustChunkRadius(clickData.mouseButton == 0)) .setPlayClickSound(true) - .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_WORK_AREA) + .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_WORK_AREA) .attachSyncer( new FakeSyncWidget.IntegerSyncer(() -> chunkRadiusConfig, (val) -> chunkRadiusConfig = val), builder, @@ -657,9 +657,10 @@ public abstract class GT_MetaTileEntity_OreDrillingPlantBase extends GT_MetaTile .setBackground(() -> { if (replaceWithCobblestone) { return new IDrawable[] { GT_UITextures.BUTTON_STANDARD_PRESSED, - GT_UITextures.OVERLAY_REPLACE_COBBLE_ON }; + GT_UITextures.OVERLAY_BUTTON_REPLACE_COBBLE_ON }; } - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_REPLACE_COBBLE_OFF }; + return new IDrawable[] { GT_UITextures.BUTTON_STANDARD, + GT_UITextures.OVERLAY_BUTTON_REPLACE_COBBLE_OFF }; }) .attachSyncer( new FakeSyncWidget.BooleanSyncer( |