diff options
Diffstat (limited to 'src/main/java/gregtech/common/items')
-rw-r--r-- | src/main/java/gregtech/common/items/behaviors/BehaviourSprayColorInfinite.java | 77 |
1 files changed, 69 insertions, 8 deletions
diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourSprayColorInfinite.java b/src/main/java/gregtech/common/items/behaviors/BehaviourSprayColorInfinite.java index 924d160f2d..72a701db9f 100644 --- a/src/main/java/gregtech/common/items/behaviors/BehaviourSprayColorInfinite.java +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourSprayColorInfinite.java @@ -3,10 +3,12 @@ package gregtech.common.items.behaviors; import static gregtech.api.enums.GTValues.AuthorQuerns; import static net.minecraft.util.MovingObjectPosition.MovingObjectType.BLOCK; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.function.Consumer; +import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; @@ -16,6 +18,8 @@ import net.minecraft.util.StatCollector; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +import org.lwjgl.input.Keyboard; + import com.google.common.collect.ImmutableList; import com.gtnewhorizon.gtnhlib.GTNHLib; import com.gtnewhorizons.modularui.api.UIInfos; @@ -38,6 +42,7 @@ public class BehaviourSprayColorInfinite extends BehaviourSprayColor { private static final List<ItemStack> COLOR_SELECTIONS; public static final String COLOR_NBT_TAG = "current_color"; public static final String LOCK_NBT_TAG = "is_locked"; + public static final String PREVENT_SHAKE_TAG = "prevent_shake"; private byte mCurrentColor; @@ -106,9 +111,21 @@ public class BehaviourSprayColorInfinite extends BehaviourSprayColor { @Override public List<String> getAdditionalToolTips(final MetaBaseItem aItem, final List<String> aList, final ItemStack itemStack) { + final List<String> statuses = new ArrayList<>(); + if (isLocked(itemStack)) { + statuses.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.locked")); + } + if (isPreventingShake(itemStack)) { + statuses.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.preventing_shake")); + } + aList.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.infinite")); aList.add(mTooltipChain); aList.add(" "); + + if (!statuses.isEmpty()) { + aList.add(String.join(" :: ", statuses)); + } aList.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.more_info")); aList.add(AuthorQuerns); return aList; @@ -117,6 +134,9 @@ public class BehaviourSprayColorInfinite extends BehaviourSprayColor { @Override public Optional<List<String>> getAdditionalToolTipsWhileSneaking(final MetaBaseItem aItem, final List<String> aList, final ItemStack aStack) { + final String ctrlKey = Minecraft.isRunningOnMac + ? StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.ctrl_mac") + : StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.ctrl_pc"); aList.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.infinite")); aList.add(mTooltipChain); aList.add(" "); @@ -124,6 +144,8 @@ public class BehaviourSprayColorInfinite extends BehaviourSprayColor { aList.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.gui")); aList.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.pick")); aList.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.lock")); + aList.add( + StatCollector.translateToLocalFormatted("gt.behaviour.paintspray.infinite.tooltip.prevent_shake", ctrlKey)); aList.add(" "); aList.add(AuthorQuerns); @@ -131,9 +153,13 @@ public class BehaviourSprayColorInfinite extends BehaviourSprayColor { } // endregion - // region Raw Mouse Event Handlers + // region Raw Event Handlers @Override public boolean onLeftClick(MetaBaseItem item, ItemStack itemStack, EntityPlayer aPlayer) { + if (isPreventingShake(itemStack)) { + return false; + } + if (isLocked(itemStack)) { displayLockedMessage(); } else { @@ -146,6 +172,8 @@ public class BehaviourSprayColorInfinite extends BehaviourSprayColor { public boolean onMiddleClick(final MetaBaseItem item, final ItemStack itemStack, final EntityPlayer player) { if (player.isSneaking()) { sendPacket(GTPacketInfiniteSpraycan.Action.LOCK_CAN); + } else if (isCtrlDown()) { + sendPacket(GTPacketInfiniteSpraycan.Action.TOGGLE_SHAKE_LOCK); } else if (isLocked(itemStack)) { displayLockedMessage(); } else { @@ -168,6 +196,26 @@ public class BehaviourSprayColorInfinite extends BehaviourSprayColor { return true; } + + private boolean isCtrlDown() { + // Yes, there's a duplicate method in GT++, but I didn't feel right including GT++ code here. We can extract + // this later if it is useful elsewhere. + try { + // noinspection DuplicatedCode + if (!Keyboard.isCreated()) { + return false; + } + + boolean isCtrlKeyDown = Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) + || Keyboard.isKeyDown(Keyboard.KEY_RCONTROL); + if (!isCtrlKeyDown && Minecraft.isRunningOnMac) + isCtrlKeyDown = Keyboard.isKeyDown(Keyboard.KEY_LMETA) || Keyboard.isKeyDown(Keyboard.KEY_RMETA); + + return isCtrlKeyDown; + } catch (IllegalStateException ignored) { + return false; + } + } // endregion // region GUI @@ -255,14 +303,11 @@ public class BehaviourSprayColorInfinite extends BehaviourSprayColor { } public boolean toggleLock(final ItemStack itemStack) { - final NBTTagCompound tag = itemStack.hasTagCompound() ? itemStack.getTagCompound() : new NBTTagCompound(); - final boolean newLockStatus = !tag.getBoolean(LOCK_NBT_TAG); - - tag.setBoolean(LOCK_NBT_TAG, newLockStatus); - itemStack.setTagCompound(tag); - setItemStackName(itemStack); + return toggleBooleanTag(itemStack, LOCK_NBT_TAG); + } - return newLockStatus; + public boolean togglePreventShake(final ItemStack itemStack) { + return toggleBooleanTag(itemStack, PREVENT_SHAKE_TAG); } private void setItemStackName(final ItemStack itemStack) { @@ -277,6 +322,17 @@ public class BehaviourSprayColorInfinite extends BehaviourSprayColor { String.format("Infinite Spray Can %c" + Dyes.get(mCurrentColor).mName + "%c", lBracket, rBracket)); } } + + private boolean toggleBooleanTag(final ItemStack itemStack, final String tagName) { + final NBTTagCompound tag = itemStack.hasTagCompound() ? itemStack.getTagCompound() : new NBTTagCompound(); + final boolean newValue = !tag.getBoolean(tagName); + + tag.setBoolean(tagName, newValue); + itemStack.setTagCompound(tag); + setItemStackName(itemStack); + + return newValue; + } // endregion public static Dyes getDye(ItemStack itemStack) { @@ -296,6 +352,11 @@ public class BehaviourSprayColorInfinite extends BehaviourSprayColor { .getBoolean(LOCK_NBT_TAG); } + private boolean isPreventingShake(final ItemStack itemStack) { + return itemStack.hasTagCompound() && itemStack.getTagCompound() + .getBoolean(PREVENT_SHAKE_TAG); + } + private static class DyeSelectGUI extends SelectItemUIFactory { public DyeSelectGUI(final String header, final ItemStack headerItem, final Consumer<ItemStack> selectedCallback, |