diff options
Diffstat (limited to 'src/main/java/gregtech/api')
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 ; |