From 6256c8cd614f007d54852ffab799f7b885408149 Mon Sep 17 00:00:00 2001 From: HoleFish <48403212+HoleFish@users.noreply.github.com> Date: Sat, 13 Jan 2024 02:37:04 +0800 Subject: [PATCH] Add a mode for EEC to void all enchanted and damaged outputs (#116) * add mode * Void All Of Them! * spotless * Move buttons --------- Co-authored-by: kuba6000 --- .../KubaTechGTMultiBlockBase.java | 10 +++--- .../kubatech/loaders/MobHandlerLoader.java | 3 +- ...T_MetaTileEntity_ExtremeEntityCrusher.java | 36 ++++++++++++++++--- ...ileEntity_ExtremeIndustrialGreenhouse.java | 10 +++--- ...T_MetaTileEntity_MegaIndustrialApiary.java | 10 +++--- 5 files changed, 52 insertions(+), 17 deletions(-) diff --git a/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java b/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java index 119ce940..100649b3 100644 --- a/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java +++ b/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java @@ -52,6 +52,7 @@ import com.gtnewhorizons.modularui.common.widget.Column; import com.gtnewhorizons.modularui.common.widget.DrawableWidget; import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; import com.gtnewhorizons.modularui.common.widget.SlotWidget; import gregtech.api.enums.GT_Values; @@ -314,15 +315,16 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont .widget(createBatchModeButton(builder)) .widget(createLockToSingleRecipeButton(builder)); - DynamicPositionedColumn configurationElements = new DynamicPositionedColumn(); + DynamicPositionedRow configurationElements = new DynamicPositionedRow(); addConfigurationWidgets(configurationElements, buildContext); builder.widget( - configurationElements.setAlignment(MainAxisAlignment.END) - .setPos(getPowerSwitchButtonPos().subtract(0, 18))); + configurationElements.setSpace(2) + .setAlignment(MainAxisAlignment.SPACE_BETWEEN) + .setPos(getRecipeLockingButtonPos().add(18, 0))); } - protected void addConfigurationWidgets(DynamicPositionedColumn configurationElements, UIBuildContext buildContext) { + protected void addConfigurationWidgets(DynamicPositionedRow configurationElements, UIBuildContext buildContext) { } diff --git a/src/main/java/kubatech/loaders/MobHandlerLoader.java b/src/main/java/kubatech/loaders/MobHandlerLoader.java index e131a9de..ba92d74d 100644 --- a/src/main/java/kubatech/loaders/MobHandlerLoader.java +++ b/src/main/java/kubatech/loaders/MobHandlerLoader.java @@ -100,7 +100,7 @@ public MobEECRecipe(List transformedDrops, MobRecipe recipe) { } public ItemStack[] generateOutputs(Random rnd, GT_MetaTileEntity_ExtremeEntityCrusher MTE, double attackDamage, - int lootinglevel, boolean preferInfernalDrops) { + int lootinglevel, boolean preferInfernalDrops, boolean voidAllDamagedAndEnchantedItems) { MTE.lEUt = mEUt; MTE.mMaxProgresstime = Math.max(MOB_SPAWN_INTERVAL, (int) ((recipe.maxEntityHealth / attackDamage) * 10d)); ArrayList stacks = new ArrayList<>(this.mOutputs.size()); @@ -112,6 +112,7 @@ public ItemStack[] generateOutputs(Random rnd, GT_MetaTileEntity_ExtremeEntityCr MTE.getBaseMetaTileEntity() .getZCoord()); for (MobDrop o : this.mOutputs) { + if (voidAllDamagedAndEnchantedItems && (o.damages != null || o.enchantable != null)) continue; int chance = o.chance; double dChance = (double) chance / 100d; diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeEntityCrusher.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeEntityCrusher.java index d02a07c2..f9d89116 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeEntityCrusher.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeEntityCrusher.java @@ -86,7 +86,7 @@ import com.gtnewhorizons.modularui.api.math.Color; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; import com.gtnewhorizons.modularui.common.widget.SlotWidget; import com.kuba6000.mobsinfo.api.utils.FastRandom; import com.mojang.authlib.GameProfile; @@ -206,6 +206,7 @@ public void onUnload() { private byte mGlassTier = 0; private boolean mAnimationEnabled = true; private boolean mIsProducingInfernalDrops = true; + private boolean voidAllDamagedAndEnchantedItems = false; private EntityRenderer entityRenderer = null; private boolean renderEntity = false; @@ -218,6 +219,7 @@ public void saveNBTData(NBTTagCompound aNBT) { aNBT.setBoolean("mAnimationEnabled", mAnimationEnabled); aNBT.setByte("mGlassTier", mGlassTier); aNBT.setBoolean("mIsProducingInfernalDrops", mIsProducingInfernalDrops); + aNBT.setBoolean("voidAllDamagedAndEnchantedItems", voidAllDamagedAndEnchantedItems); if (weaponCache.getStackInSlot(0) != null) aNBT.setTag( "weaponCache", weaponCache.getStackInSlot(0) @@ -232,6 +234,7 @@ public void loadNBTData(NBTTagCompound aNBT) { mGlassTier = aNBT.getByte("mGlassTier"); mIsProducingInfernalDrops = !aNBT.hasKey("mIsProducingInfernalDrops") || aNBT.getBoolean("mIsProducingInfernalDrops"); + voidAllDamagedAndEnchantedItems = aNBT.getBoolean("voidAllDamagedAndEnchantedItems"); if (aNBT.hasKey("weaponCache")) weaponCache.setStackInSlot(0, ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag("weaponCache"))); } @@ -543,7 +546,8 @@ public CheckRecipeResult checkProcessing() { if (isInRitualMode && isRitualValid()) { if (getMaxInputEu() < recipe.mEUt / 4) return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt / 4); this.mOutputFluids = new FluidStack[] { FluidRegistry.getFluidStack("xpjuice", 5000) }; - this.mOutputItems = recipe.generateOutputs(rand, this, 3, 0, mIsProducingInfernalDrops); + this.mOutputItems = recipe + .generateOutputs(rand, this, 3, 0, mIsProducingInfernalDrops, voidAllDamagedAndEnchantedItems); this.lEUt /= 4L; this.mMaxProgresstime = 400; } else { @@ -575,7 +579,8 @@ public CheckRecipeResult checkProcessing() { this, attackDamage, weaponCache.isValid ? weaponCache.looting : 0, - mIsProducingInfernalDrops); + mIsProducingInfernalDrops, + voidAllDamagedAndEnchantedItems); EECPlayer.currentWeapon = null; @@ -666,6 +671,9 @@ public String[] getInfoData() { info.add( "Is allowed to produce infernal drops: " + EnumChatFormatting.YELLOW + (mIsProducingInfernalDrops ? "Yes" : "No")); + info.add( + "Void all damaged and enchanted items: " + EnumChatFormatting.YELLOW + + (voidAllDamagedAndEnchantedItems ? "Yes" : "No")); info.add("Is in ritual mode: " + EnumChatFormatting.YELLOW + (isInRitualMode ? "Yes" : "No")); if (isInRitualMode) info.add( "Is connected to ritual: " @@ -684,7 +692,7 @@ public String[] getInfoData() { } @Override - protected void addConfigurationWidgets(DynamicPositionedColumn configurationElements, UIBuildContext buildContext) { + protected void addConfigurationWidgets(DynamicPositionedRow configurationElements, UIBuildContext buildContext) { configurationElements.setSynced(true); configurationElements.widget(new CycleButtonWidget().setToggle(() -> isInRitualMode, v -> { if (this.mMaxProgresstime > 0) { @@ -728,6 +736,26 @@ protected void addConfigurationWidgets(DynamicPositionedColumn configurationElem .addTooltip("Is allowed to spawn infernal mobs") .addTooltip(new Text("Does not affect mobs that are always infernal !").color(Color.GRAY.normal)) .setTooltipShowUpDelay(TOOLTIP_DELAY)); + configurationElements.widget(new CycleButtonWidget().setToggle(() -> voidAllDamagedAndEnchantedItems, v -> { + if (this.mMaxProgresstime > 0) { + GT_Utility.sendChatToPlayer(buildContext.getPlayer(), "Can't change mode when running !"); + return; + } + + voidAllDamagedAndEnchantedItems = v; + + if (!(buildContext.getPlayer() instanceof EntityPlayerMP)) return; + if (!voidAllDamagedAndEnchantedItems) GT_Utility.sendChatToPlayer(buildContext.getPlayer(), "Void nothing"); + else GT_Utility.sendChatToPlayer(buildContext.getPlayer(), "Void all damaged and enchanted items"); + }) + .setTextureGetter(toggleButtonTextureGetter) + .setVariableBackgroundGetter(toggleButtonBackgroundGetter) + .setSize(16, 16) + .addTooltip("Void all damaged and enchanted items") + .addTooltip( + new Text("Does not affect infernal drops and some special drops like Sticky Sword!") + .color(Color.GRAY.normal)) + .setTooltipShowUpDelay(TOOLTIP_DELAY)); } @Override diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java index 798beb07..6a7ff29c 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java @@ -94,6 +94,7 @@ import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; import com.gtnewhorizons.modularui.common.widget.DrawableWidget; import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; import com.gtnewhorizons.modularui.common.widget.SlotWidget; import com.gtnewhorizons.modularui.common.widget.TextWidget; @@ -609,7 +610,7 @@ public ItemStack transferStackInSlot(EntityPlayer aPlayer, int aSlotIndex) { } @Override - protected void addConfigurationWidgets(DynamicPositionedColumn configurationElements, UIBuildContext buildContext) { + protected void addConfigurationWidgets(DynamicPositionedRow configurationElements, UIBuildContext buildContext) { buildContext.addSyncedWindow(CONFIGURATION_WINDOW_ID, this::createConfigurationWindow); configurationElements.setSynced(false); configurationElements.widget( @@ -694,12 +695,13 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont .widget(createBatchModeButton(builder)) .widget(createLockToSingleRecipeButton(builder)); - DynamicPositionedColumn configurationElements = new DynamicPositionedColumn(); + DynamicPositionedRow configurationElements = new DynamicPositionedRow(); addConfigurationWidgets(configurationElements, buildContext); builder.widget( - configurationElements.setAlignment(MainAxisAlignment.END) - .setPos(getPowerSwitchButtonPos().subtract(0, 18))); + configurationElements.setSpace(2) + .setAlignment(MainAxisAlignment.SPACE_BETWEEN) + .setPos(getRecipeLockingButtonPos().add(18, 0))); } protected ModularWindow createConfigurationWindow(final EntityPlayer player) { diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java index 57fac5b5..8bca9849 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java @@ -89,6 +89,7 @@ import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; import com.gtnewhorizons.modularui.common.widget.DrawableWidget; import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; import com.gtnewhorizons.modularui.common.widget.SlotWidget; import com.gtnewhorizons.modularui.common.widget.TextWidget; @@ -760,16 +761,17 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont .widget(createBatchModeButton(builder)) .widget(createLockToSingleRecipeButton(builder)); - DynamicPositionedColumn configurationElements = new DynamicPositionedColumn(); + DynamicPositionedRow configurationElements = new DynamicPositionedRow(); addConfigurationWidgets(configurationElements, buildContext); builder.widget( - configurationElements.setAlignment(MainAxisAlignment.END) - .setPos(getPowerSwitchButtonPos().subtract(0, 18))); + configurationElements.setSpace(2) + .setAlignment(MainAxisAlignment.SPACE_BETWEEN) + .setPos(getRecipeLockingButtonPos().add(18, 0))); } @Override - protected void addConfigurationWidgets(DynamicPositionedColumn configurationElements, UIBuildContext buildContext) { + protected void addConfigurationWidgets(DynamicPositionedRow configurationElements, UIBuildContext buildContext) { buildContext.addSyncedWindow(CONFIGURATION_WINDOW_ID, this::createConfigurationWindow); configurationElements.setSynced(false); configurationElements.widget(