aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api')
-rw-r--r--src/main/java/gregtech/api/enums/ItemList.java1
-rw-r--r--src/main/java/gregtech/api/enums/SoundResource.java2
-rw-r--r--src/main/java/gregtech/api/interfaces/IItemBehaviour.java4
-rw-r--r--src/main/java/gregtech/api/items/MetaBaseItem.java26
-rw-r--r--src/main/java/gregtech/api/net/GTPacketInfiniteSpraycan.java76
-rw-r--r--src/main/java/gregtech/api/net/GTPacketTypes.java1
6 files changed, 110 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java
index f995de5032..0f66bae640 100644
--- a/src/main/java/gregtech/api/enums/ItemList.java
+++ b/src/main/java/gregtech/api/enums/ItemList.java
@@ -2563,6 +2563,7 @@ public enum ItemList implements IItemContainer {
Phononic_Seed_Crystal,
ResearchCompleter, // Populated in EMT
SpaceElevatorController, // Populated in GTNH-Intergalactic
+ Spray_Color_Infinite,
// semicolon after the comment to reduce merge conflicts
;
diff --git a/src/main/java/gregtech/api/enums/SoundResource.java b/src/main/java/gregtech/api/enums/SoundResource.java
index edd8e5c6a3..f6ca0485dc 100644
--- a/src/main/java/gregtech/api/enums/SoundResource.java
+++ b/src/main/java/gregtech/api/enums/SoundResource.java
@@ -74,6 +74,8 @@ public enum SoundResource {
GT_MACHINES_MULTI_LATHE_LOOP(241, GregTech.ID, "machines.MultiLatheLoop"),
GT_MACHINES_MULTI_AUTOCLAVE_LOOP(242, GregTech.ID, "machines.MultiAutoclaveLoop"),
+ GT_SPRAYCAN_SHAKE(243, GregTech.ID, "items.spraycan"),
+
GUI_BUTTON_DOWN(-1, GregTech.ID, "gui.buttonDown"),
GUI_BUTTON_UP(-1, GregTech.ID, "gui.buttonUp"),
diff --git a/src/main/java/gregtech/api/interfaces/IItemBehaviour.java b/src/main/java/gregtech/api/interfaces/IItemBehaviour.java
index d9f8706824..8c5dad6dc2 100644
--- a/src/main/java/gregtech/api/interfaces/IItemBehaviour.java
+++ b/src/main/java/gregtech/api/interfaces/IItemBehaviour.java
@@ -17,6 +17,10 @@ import gregtech.api.items.MetaBaseItem;
public interface IItemBehaviour<E extends Item> {
+ default boolean onLeftClick(E aItem, ItemStack aStack, EntityPlayer aPlayer) {
+ return false;
+ }
+
boolean onLeftClickEntity(E aItem, ItemStack aStack, EntityPlayer aPlayer, Entity aEntity);
boolean onItemUse(E aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ,
diff --git a/src/main/java/gregtech/api/items/MetaBaseItem.java b/src/main/java/gregtech/api/items/MetaBaseItem.java
index 23726c96e9..32e4bba392 100644
--- a/src/main/java/gregtech/api/items/MetaBaseItem.java
+++ b/src/main/java/gregtech/api/items/MetaBaseItem.java
@@ -7,6 +7,7 @@ import static gregtech.api.util.GTUtility.formatNumbers;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Predicate;
import net.minecraft.dispenser.IBlockSource;
import net.minecraft.entity.Entity;
@@ -118,6 +119,10 @@ public abstract class MetaBaseItem extends GTGenericItem
return super.isItemStackUsable(aStack);
}
+ public boolean onLeftClick(ItemStack aStack, EntityPlayer aPlayer) {
+ return forEachBehavior(aStack, behavior -> behavior.onLeftClick(this, aStack, aPlayer));
+ }
+
@Override
public boolean onLeftClickEntity(ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) {
use(aStack, 0, aPlayer);
@@ -619,4 +624,25 @@ public abstract class MetaBaseItem extends GTGenericItem
public boolean getIsRepairable(ItemStack aStack, ItemStack aMaterial) {
return false;
}
+
+ public boolean forEachBehavior(ItemStack aStack, Predicate<IItemBehaviour<MetaBaseItem>> predicate) {
+ ArrayList<IItemBehaviour<MetaBaseItem>> behaviorList = mItemBehaviors.get((short) getDamage(aStack));
+ if (behaviorList == null) {
+ return false;
+ }
+
+ try {
+ for (IItemBehaviour<MetaBaseItem> behavior : behaviorList) {
+ if (predicate.test(behavior)) {
+ // Returning true short circuits the loop, and false continues it.
+ return true;
+ }
+ }
+ } catch (Exception e) {
+ if (D1) e.printStackTrace(GTLog.err);
+ }
+
+ return false;
+ }
+
}
diff --git a/src/main/java/gregtech/api/net/GTPacketInfiniteSpraycan.java b/src/main/java/gregtech/api/net/GTPacketInfiniteSpraycan.java
new file mode 100644
index 0000000000..66ad89590f
--- /dev/null
+++ b/src/main/java/gregtech/api/net/GTPacketInfiniteSpraycan.java
@@ -0,0 +1,76 @@
+package gregtech.api.net;
+
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.item.ItemStack;
+import net.minecraft.network.INetHandler;
+import net.minecraft.network.NetHandlerPlayServer;
+import net.minecraft.world.IBlockAccess;
+
+import com.google.common.io.ByteArrayDataInput;
+
+import gregtech.api.enums.SoundResource;
+import gregtech.api.items.MetaBaseItem;
+import gregtech.api.util.GTUtility;
+import gregtech.common.items.behaviors.BehaviourSprayColorInfinite;
+import io.netty.buffer.ByteBuf;
+
+public class GTPacketInfiniteSpraycan extends GTPacketNew {
+
+ private boolean wasSneaking;
+ private EntityPlayerMP player;
+
+ public GTPacketInfiniteSpraycan() {
+ super(true);
+ }
+
+ public GTPacketInfiniteSpraycan(boolean wasSneaking) {
+ super(false);
+ this.wasSneaking = wasSneaking;
+ }
+
+ @Override
+ public byte getPacketID() {
+ return GTPacketTypes.INFINITE_SPRAYCAN.id;
+ }
+
+ @Override
+ public void encode(final ByteBuf aOut) {
+ aOut.writeBoolean(wasSneaking);
+ }
+
+ @Override
+ public GTPacketNew decode(final ByteArrayDataInput aData) {
+ return new GTPacketInfiniteSpraycan(aData.readBoolean());
+ }
+
+ @Override
+ public void setINetHandler(final INetHandler aHandler) {
+ player = ((NetHandlerPlayServer) aHandler).playerEntity;
+ }
+
+ @Override
+ public void process(final IBlockAccess aWorld) {
+ ItemStack currentItemStack = player.inventory.getCurrentItem();
+ if (currentItemStack != null && currentItemStack.getItem() instanceof MetaBaseItem item) {
+ item.forEachBehavior(currentItemStack, behavior -> {
+ if (behavior instanceof BehaviourSprayColorInfinite spraycanBehavior) {
+ spraycanBehavior.setNewColor(currentItemStack, wasSneaking);
+ player.sendSlotContents(player.inventoryContainer, player.inventory.currentItem, currentItemStack);
+
+ GTUtility.sendSoundToPlayers(
+ player.worldObj,
+ SoundResource.GT_SPRAYCAN_SHAKE,
+ 1.0F,
+ 1,
+ (int) player.posX,
+ (int) player.posY,
+ (int) player.posZ);
+
+ return true;
+ }
+
+ return false;
+ });
+ }
+ }
+}
diff --git a/src/main/java/gregtech/api/net/GTPacketTypes.java b/src/main/java/gregtech/api/net/GTPacketTypes.java
index d635706e68..17081ba92e 100644
--- a/src/main/java/gregtech/api/net/GTPacketTypes.java
+++ b/src/main/java/gregtech/api/net/GTPacketTypes.java
@@ -24,6 +24,7 @@ public enum GTPacketTypes {
SEND_OREGEN_PATTERN(19, new GTPacketSendOregenPattern()),
TOOL_SWITCH_MODE(20, new GTPacketToolSwitchMode()),
MUSIC_SYSTEM_DATA(21, new GTPacketMusicSystemData()),
+ INFINITE_SPRAYCAN(22, new GTPacketInfiniteSpraycan()),
// merge conflict prevention comment, keep a trailing comma above
;