aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/gregtech/api/net/GTPacketInfiniteSpraycan.java13
-rw-r--r--src/main/java/gregtech/common/items/behaviors/BehaviourSprayColorInfinite.java77
-rw-r--r--src/main/resources/assets/gregtech/lang/en_US.lang7
3 files changed, 89 insertions, 8 deletions
diff --git a/src/main/java/gregtech/api/net/GTPacketInfiniteSpraycan.java b/src/main/java/gregtech/api/net/GTPacketInfiniteSpraycan.java
index b0127ba81f..7ff2eb23b1 100644
--- a/src/main/java/gregtech/api/net/GTPacketInfiniteSpraycan.java
+++ b/src/main/java/gregtech/api/net/GTPacketInfiniteSpraycan.java
@@ -119,6 +119,19 @@ public class GTPacketInfiniteSpraycan extends GTPacket {
}
return false;
}
+ },
+ TOGGLE_SHAKE_LOCK {
+
+ @Override
+ boolean execute(final BehaviourSprayColorInfinite behavior, final ItemStack itemStack,
+ final EntityPlayerMP player, final int newColor) {
+ if (behavior.togglePreventShake(itemStack)) {
+ Action.playLockSound(player);
+ } else {
+ Action.playUnlockSound(player);
+ }
+ return true;
+ }
};
private static void playShakeSound(final EntityPlayerMP player) {
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,
diff --git a/src/main/resources/assets/gregtech/lang/en_US.lang b/src/main/resources/assets/gregtech/lang/en_US.lang
index 6235554b13..f1a359b6a0 100644
--- a/src/main/resources/assets/gregtech/lang/en_US.lang
+++ b/src/main/resources/assets/gregtech/lang/en_US.lang
@@ -631,13 +631,20 @@ GT5U.item.tank.locked_to=Content locked to %s
gt.behaviour.paintspray.infinite.gui.header=Select a Color
gt.behaviour.paintspray.infinite.gui.lock_error=§eSpray can is §clocked§e! §bSneak middle-click to unlock.
gt.behaviour.paintspray.infinite.gui.solvent=Solvent
+gt.behaviour.paintspray.infinite.gui.shake_toggle=Allow/disallow color iteration
gt.behaviour.paintspray.infinite.tooltip.infinite=Infinite uses
gt.behaviour.paintspray.infinite.tooltip.more_info=Hold SHIFT for more information
+gt.behaviour.paintspray.infinite.tooltip.locked=Locked
+gt.behaviour.paintspray.infinite.tooltip.preventing_shake=Left click action disabled
+
gt.behaviour.paintspray.infinite.tooltip.switch=Left Click: Change color (sneak to reverse direction)
gt.behaviour.paintspray.infinite.tooltip.pick=Middle Click block: Copy color to spray can
gt.behaviour.paintspray.infinite.tooltip.lock=Sneak Middle Click: Lock or unlock spray can
gt.behaviour.paintspray.infinite.tooltip.gui=Middle Click: Open color choice GUI
+gt.behaviour.paintspray.infinite.tooltip.prevent_shake=%s-Middle Click: Allow/prevent left click action
+gt.behaviour.paintspray.infinite.tooltip.ctrl_pc=Ctrl
+gt.behaviour.paintspray.infinite.tooltip.ctrl_mac=Command
GT5U.hatch.disableFilter.true=Input Filter §cOff§r
GT5U.hatch.disableFilter.false=Input Filter §aOn§r