From 316dc720982201a3d1ac74c4e5729dba4c6153d0 Mon Sep 17 00:00:00 2001 From: OwlBe Date: Wed, 8 Jul 2026 20:21:56 -0400 Subject: [PATCH 01/13] initial commit (testing completed) --- gradlew.bat | 164 ++++++------ .../classes/data/BukkitEventValues.java | 85 +------ .../skript/classes/data/DefaultChangers.java | 4 +- .../java/ch/njol/skript/events/EvtItem.java | 20 -- .../ch/njol/skript/events/SimpleEvents.java | 25 -- .../skript/bukkit/BukkitModule.java | 4 +- .../InventoryClassInfo.java | 2 +- .../bukkit/inventory/InventoryModule.java | 39 +++ .../inventory/elements/InventoryEvents.java | 234 ++++++++++++++++++ .../elements/events/EvtInventoryClick.java | 123 +++++++++ .../skript/lang/properties/Property.java | 2 +- 11 files changed, 485 insertions(+), 217 deletions(-) rename src/main/java/org/skriptlang/skript/bukkit/{types => inventory}/InventoryClassInfo.java (99%) create mode 100644 src/main/java/org/skriptlang/skript/bukkit/inventory/InventoryModule.java create mode 100644 src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java create mode 100644 src/main/java/org/skriptlang/skript/bukkit/inventory/elements/events/EvtInventoryClick.java diff --git a/gradlew.bat b/gradlew.bat index 8508ef684d4..a51ec4f5886 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,82 +1,82 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem -@rem SPDX-License-Identifier: Apache-2.0 -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem gradlew startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables, and ensure extensions are enabled -setlocal EnableExtensions - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -"%COMSPEC%" /c exit 1 - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -"%COMSPEC%" /c exit 1 - -:execute -@rem Setup the command line - - - -@rem Execute gradlew -@rem endlocal doesn't take effect until after the line is parsed and variables are expanded -@rem which allows us to clear the local environment before executing the java command -endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel - -:exitWithErrorLevel -@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts -"%COMSPEC%" /c exit %ERRORLEVEL% +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem gradlew startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables, and ensure extensions are enabled +setlocal EnableExtensions + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +"%COMSPEC%" /c exit 1 + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +"%COMSPEC%" /c exit 1 + +:execute +@rem Setup the command line + + + +@rem Execute gradlew +@rem endlocal doesn't take effect until after the line is parsed and variables are expanded +@rem which allows us to clear the local environment before executing the java command +endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel + +:exitWithErrorLevel +@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts +"%COMSPEC%" /c exit %ERRORLEVEL% diff --git a/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java b/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java index fed77fc9bb2..6fa72f47a31 100644 --- a/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java +++ b/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java @@ -440,64 +440,6 @@ else if (hand == EquipmentSlot.OFF_HAND) // Server stop event registry.register(EventValue.simple(SkriptStopEvent.class, CommandSender.class, event -> Bukkit.getConsoleSender())); - // === InventoryEvents === - // InventoryClickEvent - registry.register(EventValue.simple(InventoryClickEvent.class, Player.class, event -> event.getWhoClicked() instanceof Player player ? player : null)); - registry.register(EventValue.simple(InventoryClickEvent.class, World.class, event -> event.getWhoClicked().getWorld())); - registry.register(EventValue.simple(InventoryClickEvent.class, ItemStack.class, InventoryClickEvent::getCurrentItem)); - registry.register(EventValue.simple(InventoryClickEvent.class, Slot.class, event -> { - Inventory invi = event.getClickedInventory(); // getInventory is WRONG and dangerous - if (invi == null) - return null; - int slotIndex = event.getSlot(); - - // Not all indices point to inventory slots. Equipment, for example - if (invi instanceof PlayerInventory itemStacks && slotIndex >= 36) { - return new ch.njol.skript.util.slot.EquipmentSlot(itemStacks.getHolder(), slotIndex); - } else { - return new InventorySlot(invi, slotIndex, event.getRawSlot()); - } - })); - registry.register(EventValue.simple(InventoryClickEvent.class, InventoryAction.class, InventoryClickEvent::getAction)); - registry.register(EventValue.simple(InventoryClickEvent.class, ClickType.class, InventoryClickEvent::getClick)); - registry.register(EventValue.simple(InventoryClickEvent.class, Inventory.class, InventoryClickEvent::getClickedInventory)); - // InventoryDragEvent - registry.register(EventValue.simple(InventoryDragEvent.class, Player.class, event -> event.getWhoClicked() instanceof Player player ? player : null)); - registry.register(EventValue.simple(InventoryDragEvent.class, World.class, event -> event.getWhoClicked().getWorld())); - registry.register(EventValue.builder(InventoryDragEvent.class, ItemStack.class) - .getter(InventoryDragEvent::getOldCursor) - .time(Time.PAST) - .build()); - registry.register(EventValue.simple(InventoryDragEvent.class, ItemStack.class, InventoryDragEvent::getCursor)); - registry.register(EventValue.simple(InventoryDragEvent.class, ItemStack[].class, event -> event.getNewItems().values().toArray(new ItemStack[0]))); - registry.register(EventValue.simple(InventoryDragEvent.class, Slot[].class, event -> { - List slots = new ArrayList<>(event.getRawSlots().size()); - InventoryView view = event.getView(); - for (Integer rawSlot : event.getRawSlots()) { - Inventory inventory = InventoryUtils.getInventory(view, rawSlot); - Integer slot = InventoryUtils.convertSlot(view, rawSlot); - if (inventory == null || slot == null) - continue; - // Not all indices point to inventory slots. Equipment, for example - if (inventory instanceof PlayerInventory && slot >= 36) { - slots.add(new ch.njol.skript.util.slot.EquipmentSlot(((PlayerInventory) view.getBottomInventory()).getHolder(), slot)); - } else { - slots.add(new InventorySlot(inventory, slot)); - } - } - return slots.toArray(new Slot[0]); - })); - registry.register(EventValue.simple(InventoryDragEvent.class, ClickType.class, event -> event.getType() == DragType.EVEN ? ClickType.LEFT : ClickType.RIGHT)); - registry.register(EventValue.simple(InventoryDragEvent.class, Inventory[].class, event -> { - Set inventories = new HashSet<>(); - InventoryView view = event.getView(); - for (Integer rawSlot : event.getRawSlots()) { - Inventory inventory = InventoryUtils.getInventory(view, rawSlot); - if (inventory != null) - inventories.add(inventory); - } - return inventories.toArray(new Inventory[0]); - })); // PrepareAnvilEvent if (Skript.classExists("com.destroystokyo.paper.event.inventory.PrepareResultEvent")) registry.register(EventValue.simple(PrepareAnvilEvent.class, ItemStack.class, PrepareResultEvent::getResult)); @@ -541,18 +483,7 @@ else if (hand == EquipmentSlot.OFF_HAND) return event.getCurrentItem(); return recipe.getResult(); })); - //InventoryEvent - registry.register(EventValue.simple(InventoryEvent.class, Inventory.class, InventoryEvent::getInventory)); - //InventoryOpenEvent - registry.register(EventValue.simple(InventoryOpenEvent.class, Player.class, event -> (Player) event.getPlayer())); - //InventoryCloseEvent - registry.register(EventValue.simple(InventoryCloseEvent.class, Player.class, event -> (Player) event.getPlayer())); - if (Skript.classExists("org.bukkit.event.inventory.InventoryCloseEvent$Reason")) - registry.register(EventValue.simple(InventoryCloseEvent.class, InventoryCloseEvent.Reason.class, InventoryCloseEvent::getReason)); - //InventoryPickupItemEvent - registry.register(EventValue.simple(InventoryPickupItemEvent.class, Inventory.class, InventoryPickupItemEvent::getInventory)); - registry.register(EventValue.simple(InventoryPickupItemEvent.class, Item.class, InventoryPickupItemEvent::getItem)); - registry.register(EventValue.simple(InventoryPickupItemEvent.class, ItemStack.class, event -> event.getItem().getItemStack())); + //PortalCreateEvent registry.register(EventValue.simple(PortalCreateEvent.class, World.class, WorldEvent::getWorld)); registry.register(EventValue.simple(PortalCreateEvent.class, Block[].class, event -> event.getBlocks().stream() @@ -742,20 +673,6 @@ else if (hand == EquipmentSlot.OFF_HAND) if (Skript.classExists("org.bukkit.event.block.BellResonateEvent")) { registry.register(EventValue.simple(BellResonateEvent.class, Entity[].class, event -> event.getResonatedEntities().toArray(new LivingEntity[0]))); } - - // InventoryMoveItemEvent - registry.register(EventValue.simple(InventoryMoveItemEvent.class, Inventory.class, InventoryMoveItemEvent::getSource)); - registry.register(EventValue.builder(InventoryMoveItemEvent.class, Inventory.class) - .getter(InventoryMoveItemEvent::getDestination) - .time(Time.FUTURE) - .build()); - registry.register(EventValue.simple(InventoryMoveItemEvent.class, Block.class, event -> event.getSource().getLocation().getBlock())); - registry.register(EventValue.builder(InventoryMoveItemEvent.class, Block.class) - .getter(event -> event.getDestination().getLocation().getBlock()) - .time(Time.FUTURE) - .build()); - registry.register(EventValue.simple(InventoryMoveItemEvent.class, ItemStack.class, InventoryMoveItemEvent::getItem)); - // EntityRegainHealthEvent registry.register(EventValue.simple(EntityRegainHealthEvent.class, RegainReason.class, EntityRegainHealthEvent::getRegainReason)); diff --git a/src/main/java/ch/njol/skript/classes/data/DefaultChangers.java b/src/main/java/ch/njol/skript/classes/data/DefaultChangers.java index e0c3d63f421..a6daf9b526a 100644 --- a/src/main/java/ch/njol/skript/classes/data/DefaultChangers.java +++ b/src/main/java/ch/njol/skript/classes/data/DefaultChangers.java @@ -11,7 +11,7 @@ import org.jetbrains.annotations.Nullable; import org.skriptlang.skript.bukkit.types.BlockClassInfo; import org.skriptlang.skript.bukkit.types.EntityClassInfo; -import org.skriptlang.skript.bukkit.types.InventoryClassInfo; +import org.skriptlang.skript.bukkit.inventory.InventoryClassInfo; import org.skriptlang.skript.bukkit.types.PlayerClassInfo; /** @@ -66,8 +66,6 @@ public void change(final Item[] what, final @Nullable Object[] delta, final Chan } }; - public final static Changer inventoryChanger = new InventoryClassInfo.InventoryChanger(); - public final static Changer blockChanger = new BlockClassInfo.BlockChanger(); } diff --git a/src/main/java/ch/njol/skript/events/EvtItem.java b/src/main/java/ch/njol/skript/events/EvtItem.java index 6bb505a76bd..e31c23cf111 100644 --- a/src/main/java/ch/njol/skript/events/EvtItem.java +++ b/src/main/java/ch/njol/skript/events/EvtItem.java @@ -77,13 +77,6 @@ public class EvtItem extends SkriptEvent { .description("Called when a player is done eating/drinking something, e.g. an apple, bread, meat, milk or a potion.") .examples("on consume:") .since("2.0"); - Skript.registerEvent("Inventory Click", EvtItem.class, InventoryClickEvent.class, "[player] inventory(-| )click[ing] [[at] %-itemtypes%]") - .description("Called when clicking on inventory slot.") - .examples("on inventory click:", - "\tif event-item is stone:", - "\t\tgive player 1 stone", - "\t\tremove 20$ from player's balance") - .since("2.2-Fixes-V10"); Skript.registerEvent("Item Despawn", EvtItem.class, ItemDespawnEvent.class, "(item[ ][stack]|[item] %-itemtypes%) despawn[ing]", "[item[ ][stack]] despawn[ing] [[of] %-itemtypes%]") .description("Called when an item is about to be despawned from the world, usually 5 minutes after it was dropped.") .examples("on item despawn of diamond:", @@ -96,19 +89,6 @@ public class EvtItem extends SkriptEvent { .examples("on item merge of gold blocks:", " cancel event") .since("2.2-dev35"); - Skript.registerEvent("Inventory Item Move", SimpleEvent.class, InventoryMoveItemEvent.class, - "inventory item (move|transport)", - "inventory (mov(e|ing)|transport[ing]) [an] item") - .description( - "Called when an entity or block (e.g. hopper) tries to move items directly from one inventory to another.", - "When this event is called, the initiator may have already removed the item from the source inventory and is ready to move it into the destination inventory.", - "If this event is cancelled, the items will be returned to the source inventory." - ) - .examples( - "on inventory item move:", - "\tbroadcast \"%holder of past event-inventory% is transporting %event-item% to %holder of event-inventory%!\"" - ) - .since("2.8.0"); if (HAS_PLAYER_STONECUTTER_RECIPE_SELECT_EVENT) { Skript.registerEvent("Stonecutter Recipe Select", EvtItem.class, PlayerStonecutterRecipeSelectEvent.class, "stonecutting [[of] %-itemtypes%]") .description("Called when a player selects a recipe in a stonecutter.") diff --git a/src/main/java/ch/njol/skript/events/SimpleEvents.java b/src/main/java/ch/njol/skript/events/SimpleEvents.java index c06ba440459..5834701c275 100644 --- a/src/main/java/ch/njol/skript/events/SimpleEvents.java +++ b/src/main/java/ch/njol/skript/events/SimpleEvents.java @@ -325,17 +325,6 @@ public class SimpleEvents { .examples("on sheep grow wool:", "\tcancel event") .since("2.2-dev21"); - Skript.registerEvent("Inventory Open", SimpleEvent.class, InventoryOpenEvent.class, "inventory open[ed]") - .description("Called when an inventory is opened for player.") - .examples("on inventory open:", - "\tclose player's inventory") - .since("2.2-dev21"); - Skript.registerEvent("Inventory Close", SimpleEvent.class, InventoryCloseEvent.class, "inventory clos(ing|e[d])") - .description("Called when player's currently viewed inventory is closed.") - .examples("on inventory close:", - "\tif player's location is {location}:", - "\t\tsend \"You exited the shop!\"") - .since("2.2-dev21"); Skript.registerEvent("Slime Split", SimpleEvent.class, SlimeSplitEvent.class, "slime split[ting]") .description("Called when a slime splits. Usually this happens when a big slime dies.") .examples("on slime split:") @@ -441,10 +430,6 @@ public class SimpleEvents { "\tif the clicked button is 1: # offer 1", "\t\tset the applied enchantments to sharpness 10 and unbreaking 10") .since("2.5"); - Skript.registerEvent("Inventory Pickup", SimpleEvent.class, InventoryPickupItemEvent.class, "inventory pick[ ]up") - .description("Called when an inventory (a hopper, a hopper minecart, etc.) picks up an item") - .examples("on inventory pickup:") - .since("2.5.1"); Skript.registerEvent("Horse Jump", SimpleEvent.class, HorseJumpEvent.class, "horse jump") .description("Called when a horse jumps.") .examples("on horse jump:", "\tpush event-entity upwards at speed 2") @@ -561,16 +546,6 @@ public class SimpleEvents { "\tteleport event-projectile to block 5 above event-projectile" ) .since("2.8.0"); - - Skript.registerEvent("Inventory Drag", SimpleEvent.class, InventoryDragEvent.class, "inventory drag[ging]") - .description("Called when a player drags an item in their cursor across the inventory.") - .examples( - "on inventory drag:", - "\tif player's current inventory is {_gui}:", - "\t\tsend \"You can't drag your items here!\" to player", - "\t\tcancel event" - ) - .since("2.7"); Skript.registerEvent("Piglin Barter", SimpleEvent.class, PiglinBarterEvent.class, "piglin (barter[ing]|trad(e|ing))") .description( "Called when a piglin finishes bartering. A piglin may start bartering after picking up an item on its bartering list.", diff --git a/src/main/java/org/skriptlang/skript/bukkit/BukkitModule.java b/src/main/java/org/skriptlang/skript/bukkit/BukkitModule.java index ffa8d4bab03..29b8fa37d56 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/BukkitModule.java +++ b/src/main/java/org/skriptlang/skript/bukkit/BukkitModule.java @@ -14,6 +14,8 @@ import org.skriptlang.skript.bukkit.entity.EntityModule; import org.skriptlang.skript.bukkit.fishing.FishingModule; import org.skriptlang.skript.bukkit.input.InputModule; +import org.skriptlang.skript.bukkit.inventory.InventoryClassInfo; +import org.skriptlang.skript.bukkit.inventory.InventoryModule; import org.skriptlang.skript.bukkit.item.ItemModule; import org.skriptlang.skript.bukkit.itemcomponents.ItemComponentModule; import org.skriptlang.skript.bukkit.loottables.LootTableModule; @@ -47,6 +49,7 @@ public Iterable children() { new EntityModule(this), new FishingModule(this), new InputModule(this), + new InventoryModule(this), new ItemModule(this), new ItemComponentModule(this), new LootTableModule(this), @@ -64,7 +67,6 @@ public Iterable children() { protected void initSelf(SkriptAddon addon) { Classes.registerClass(new BlockClassInfo()); Classes.registerClass(new EntityClassInfo()); - Classes.registerClass(new InventoryClassInfo()); Classes.registerClass(new ItemStackClassInfo()); Classes.registerClass(new ItemTypeClassInfo()); Classes.registerClass(new LocationClassInfo()); diff --git a/src/main/java/org/skriptlang/skript/bukkit/types/InventoryClassInfo.java b/src/main/java/org/skriptlang/skript/bukkit/inventory/InventoryClassInfo.java similarity index 99% rename from src/main/java/org/skriptlang/skript/bukkit/types/InventoryClassInfo.java rename to src/main/java/org/skriptlang/skript/bukkit/inventory/InventoryClassInfo.java index 82d4003f39f..f43ae4eb605 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/types/InventoryClassInfo.java +++ b/src/main/java/org/skriptlang/skript/bukkit/inventory/InventoryClassInfo.java @@ -1,4 +1,4 @@ -package org.skriptlang.skript.bukkit.types; +package org.skriptlang.skript.bukkit.inventory; import ch.njol.skript.Skript; import ch.njol.skript.aliases.ItemType; diff --git a/src/main/java/org/skriptlang/skript/bukkit/inventory/InventoryModule.java b/src/main/java/org/skriptlang/skript/bukkit/inventory/InventoryModule.java new file mode 100644 index 00000000000..6a56f30c7c5 --- /dev/null +++ b/src/main/java/org/skriptlang/skript/bukkit/inventory/InventoryModule.java @@ -0,0 +1,39 @@ +package org.skriptlang.skript.bukkit.inventory; + +import ch.njol.skript.registrations.Classes; +import org.skriptlang.skript.addon.AddonModule; +import org.skriptlang.skript.addon.HierarchicalAddonModule; +import org.skriptlang.skript.addon.SkriptAddon; +import org.skriptlang.skript.bukkit.inventory.elements.InventoryEvents; +import org.skriptlang.skript.bukkit.inventory.elements.events.EvtInventoryClick; +import org.skriptlang.skript.bukkit.lang.eventvalue.EventValueRegistry; +import org.skriptlang.skript.registration.SyntaxRegistry; + +public class InventoryModule extends HierarchicalAddonModule { + + public InventoryModule(AddonModule parentModule) { + super(parentModule); + } + + @Override + protected void initSelf(SkriptAddon addon) { + Classes.registerClass(new InventoryClassInfo()); + } + + @Override + protected void loadSelf(SkriptAddon addon) { + SyntaxRegistry syntaxRegistry = moduleRegistry(addon); + EventValueRegistry eventValueRegistry = addon.registry(EventValueRegistry.class); + + InventoryEvents.register(syntaxRegistry, eventValueRegistry); + EvtInventoryClick.register(syntaxRegistry, eventValueRegistry); + + + } + + @Override + public String name() { + return "inventory"; + } + +} diff --git a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java new file mode 100644 index 00000000000..6d730155dfb --- /dev/null +++ b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java @@ -0,0 +1,234 @@ +package org.skriptlang.skript.bukkit.inventory.elements; + +import ch.njol.skript.bukkitutil.InventoryUtils; +import ch.njol.skript.lang.util.SimpleEvent; +import ch.njol.skript.util.slot.InventorySlot; +import ch.njol.skript.util.slot.Slot; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.*; +import org.bukkit.event.inventory.InventoryCloseEvent.Reason; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryView; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.skriptlang.skript.bukkit.lang.eventvalue.EventValue; +import org.skriptlang.skript.bukkit.lang.eventvalue.EventValue.Time; +import org.skriptlang.skript.bukkit.lang.eventvalue.EventValueRegistry; +import org.skriptlang.skript.bukkit.registration.BukkitSyntaxInfos; +import org.skriptlang.skript.registration.SyntaxRegistry; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class InventoryEvents { + + public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry eventValueRegistry) { + + // Inventory Event Values + + eventValueRegistry.register(EventValue.builder(InventoryEvent.class, Inventory.class) + .getter(InventoryEvent::getInventory) + .build()); + + // Inventory Events + + syntaxRegistry.register(BukkitSyntaxInfos.Event.KEY, BukkitSyntaxInfos.Event.builder(SimpleEvent.class, "Player Inventory Open") + .addEvent(InventoryOpenEvent.class) + .addPatterns("[player] inventory open[ed]", "[player] open[ing] [an] inventory") + .addDescription(""" + Called when an inventory is opened for a player. + Note that this event is not called when a player opens their own inventory. + """) + .addExample(""" + on inventory open: + send "its an inventory!" to player + """) + .addSince("2.2-dev21, INSERT VERSION (added new pattern and updated existing one)") + .supplier(() -> new SimpleEvent("player inventory open")) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryOpenEvent.class, Player.class) + .getter(event -> (Player) event.getPlayer()) + .build()); + + syntaxRegistry.register(BukkitSyntaxInfos.Event.KEY, BukkitSyntaxInfos.Event.builder(SimpleEvent.class, "Player Inventory Close") + .addEvent(InventoryCloseEvent.class) + .addPatterns("[player] inventory clos(ing|e[d])", "[player] clos[e|ing] inventory") + .addDescription(""" + Called when a player closes the inventory they are currently viewing. + Note that this event is not called when a player closes their own inventory. + """) + .addExample(""" + on player close inventory: + send "closed!" to player + """) + .addSince("2.2-dev21, INSERT VERSION (updated pattern)") + .supplier(() -> new SimpleEvent("player inventory close")) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryCloseEvent.class, Player.class) + .getter(event -> (Player) event.getPlayer()) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryCloseEvent.class, Reason.class) + .getter(InventoryCloseEvent::getReason) + .build()); + + syntaxRegistry.register(BukkitSyntaxInfos.Event.KEY, BukkitSyntaxInfos.Event.builder(SimpleEvent.class, "Inventory Pickup Item") + .addEvent(InventoryPickupItemEvent.class) + .addPatterns("inventory pick[ ]up [item]") + .addDescription("Called when an inventory (a hopper, a hopper minecart, etc.) picks up an item.") + .addExample(""" + on inventory pickup: + broadcast "An inventory just picked up an item!" + """) + .addSince("2.5.1, INSERT VERSION (updated pattern)") + .supplier(() -> new SimpleEvent("inventory pick up")) + .build()); + + // not an inventory event for some reason?? + eventValueRegistry.register(EventValue.builder(InventoryPickupItemEvent.class, Inventory.class) + .getter(InventoryPickupItemEvent::getInventory) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryPickupItemEvent.class, Item.class) + .getter(InventoryPickupItemEvent::getItem) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryPickupItemEvent.class, ItemStack.class) + .getter(event -> event.getItem().getItemStack()) + .build()); + + syntaxRegistry.register(BukkitSyntaxInfos.Event.KEY, BukkitSyntaxInfos.Event.builder(SimpleEvent.class, "Inventory Drag Item") + .addEvent(InventoryDragEvent.class) + .addPatterns("inventory drag[ging] [item]") + .addDescription("Called when a player drags an item in their cursor across the inventory.") + .addExample(""" + on inventory drag item: + if player's top inventory is {example}: + sends "You cannot drag items here!" to player + cancel event + """) + .addSince("2.7, INSERT VERSION (updated pattern)") + .supplier(() -> new SimpleEvent("inventory drag item")) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryDragEvent.class, Player.class) + .getter(event -> event.getWhoClicked() instanceof Player player ? player : null) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryDragEvent.class, World.class) + .getter(event -> event.getWhoClicked().getWorld()) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryDragEvent.class, ItemStack.class) + .getter(InventoryDragEvent::getOldCursor) + .time(Time.PAST) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryDragEvent.class, ItemStack.class) + .getter(InventoryDragEvent::getCursor) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryDragEvent.class, ItemStack[].class) + .getter(event -> event.getNewItems().values().toArray(new ItemStack[0])) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryDragEvent.class, Slot[].class) + .getter(event -> { + List slots = new ArrayList<>(event.getRawSlots().size()); + InventoryView view = event.getView(); + for (Integer rawSlot : event.getRawSlots()) { + Inventory inventory = InventoryUtils.getInventory(view, rawSlot); + Integer slot = InventoryUtils.convertSlot(view, rawSlot); + if (inventory == null || slot == null) + continue; + // Not all indices point to inventory slots. Equipment, for example + if (inventory instanceof PlayerInventory && slot >= 36) { + slots.add(new ch.njol.skript.util.slot.EquipmentSlot(((PlayerInventory) view.getBottomInventory()).getHolder(), slot)); + } else { + slots.add(new InventorySlot(inventory, slot)); + } + } + return slots.toArray(new Slot[0]); + }) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryDragEvent.class, ClickType.class) + .getter(event -> event.getType() == DragType.EVEN ? ClickType.LEFT : ClickType.RIGHT) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryDragEvent.class, Inventory[].class) + .getter(event -> { + Set inventories = new HashSet<>(); + InventoryView view = event.getView(); + for (Integer rawSlot : event.getRawSlots()) { + Inventory inventory = InventoryUtils.getInventory(view, rawSlot); + if (inventory != null) + inventories.add(inventory); + } + return inventories.toArray(new Inventory[0]); + }) + .build()); + + syntaxRegistry.register(BukkitSyntaxInfos.Event.KEY, BukkitSyntaxInfos.Event.builder(SimpleEvent.class, "Inventory Item Move") + .addEvent(InventoryMoveItemEvent.class) + .addPatterns( + "inventory item (move|transport)", + "inventory (mov(e|ing)|transport[ing]) [an] item" + ) + .addDescription(""" + Called when an entity or block (e.g. hopper) tries to move items directly from one inventory to another. + Note that when this event is called, the initiator may have already removed the item from the source inventory and is ready to move it into the destination inventory. + If this event is cancelled, the items will be returned to the source inventory. + """) + .addExample(""" + on inventory item move: + broadcast "%holder of past event-inventory% is transporting %event-item% to %holder of event-inventory%!" + """) + .addSince("2.8.0") + .supplier(() -> new SimpleEvent("inventory item move")) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryMoveItemEvent.class, Inventory.class) + .getter(InventoryMoveItemEvent::getSource) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryMoveItemEvent.class, Inventory.class) + .getter(InventoryMoveItemEvent::getDestination) + .time(Time.FUTURE) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryMoveItemEvent.class, Block.class) + .getter(event -> { + Location location = event.getDestination().getLocation(); + if (location == null) + return null; + + return location.getBlock(); + }) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryMoveItemEvent.class, Block.class) + .getter(event -> { + Location location = event.getSource().getLocation(); + if (location == null) + return null; + + return location.getBlock(); + }) + .time(Time.FUTURE) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryMoveItemEvent.class, ItemStack.class) + .getter(InventoryMoveItemEvent::getItem) + .build()); + } + +} diff --git a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/events/EvtInventoryClick.java b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/events/EvtInventoryClick.java new file mode 100644 index 00000000000..bc494d6dced --- /dev/null +++ b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/events/EvtInventoryClick.java @@ -0,0 +1,123 @@ +package org.skriptlang.skript.bukkit.inventory.elements.events; + +import ch.njol.skript.aliases.ItemType; +import ch.njol.skript.lang.LiteralList; +import ch.njol.skript.lang.SkriptEvent; +import ch.njol.skript.util.slot.EquipmentSlot; +import ch.njol.skript.util.slot.InventorySlot; +import ch.njol.skript.util.slot.Slot; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryAction; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.jetbrains.annotations.Nullable; +import ch.njol.skript.lang.Literal; +import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.skript.lang.SyntaxStringBuilder; +import org.bukkit.event.Event; +import org.skriptlang.skript.bukkit.lang.eventvalue.EventValue; +import org.skriptlang.skript.bukkit.lang.eventvalue.EventValueRegistry; +import org.skriptlang.skript.bukkit.registration.BukkitSyntaxInfos; +import org.skriptlang.skript.registration.SyntaxRegistry; + +public class EvtInventoryClick extends SkriptEvent { + + public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry eventValueRegistry) { + syntaxRegistry.register(BukkitSyntaxInfos.Event.KEY, BukkitSyntaxInfos.Event.builder(EvtInventoryClick.class, "Inventory Click") + .supplier(EvtInventoryClick::new) + .addEvent(InventoryClickEvent.class) + .addPattern("[player] inventory(-| )click[ing] [[at|on] %-itemtypes%]") + .addDescription("Called when a player clicks on an inventory slot.") + .addExample(""" + on inventory click: + if event-item is tnt: + broadcast "Explosives found!" + kill player + """) + .addExample(""" + on inventory click at bedrock: + cancel event + send "You cannot click on an illegal item!" + """) + .addSince("2.2-Fixes-V10, INSERT VERSION (on)") + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryClickEvent.class, Player.class) + .getter(event -> event.getWhoClicked() instanceof Player player ? player : null) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryClickEvent.class, World.class) + .getter(event -> event.getWhoClicked().getWorld()) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryClickEvent.class, ItemStack.class) + .getter(InventoryClickEvent::getCurrentItem) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryClickEvent.class, Slot.class) + .getter(event -> { + Inventory inventory = event.getClickedInventory(); + + if (inventory == null) + return null; + int slotIndex = event.getSlot(); + + // Not all indices point to inventory slots. Equipment, for example + if (inventory instanceof PlayerInventory playerInventory && slotIndex >= 36) { + return new EquipmentSlot(playerInventory.getHolder(), slotIndex); + } else { + return new InventorySlot(inventory, slotIndex, event.getRawSlot()); + } + }) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryClickEvent.class, InventoryAction.class) + .getter(InventoryClickEvent::getAction) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryClickEvent.class, ClickType.class) + .getter(InventoryClickEvent::getClick) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryClickEvent.class, Inventory.class) + .getter(InventoryClickEvent::getClickedInventory) + .build()); + + } + + private @Nullable Literal itemType; + + @Override + @SuppressWarnings("unchecked") + public boolean init(Literal[] args, int matchedPattern, ParseResult parseResult) { + if (args[0] != null) { + itemType = (Literal) args[0]; + if (itemType.getAnd() && itemType instanceof LiteralList list) + list.invertAnd(); + } + return true; + } + + @Override + public boolean check(Event event) { + if (itemType == null) + return true; + + InventoryClickEvent inventoryEvent = (InventoryClickEvent) event; + + return itemType.check(event, itemType -> itemType.isOfType(inventoryEvent.getCurrentItem())); + } + + @Override + public String toString(@Nullable Event event, boolean debug) { + return new SyntaxStringBuilder(event, debug) + .append("player inventory click") + .appendIf(itemType != null, "on", itemType) + .toString(); + } + +} diff --git a/src/main/java/org/skriptlang/skript/lang/properties/Property.java b/src/main/java/org/skriptlang/skript/lang/properties/Property.java index 80ed49c26ef..e6434814557 100644 --- a/src/main/java/org/skriptlang/skript/lang/properties/Property.java +++ b/src/main/java/org/skriptlang/skript/lang/properties/Property.java @@ -9,7 +9,7 @@ import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.skriptlang.skript.addon.SkriptAddon; -import org.skriptlang.skript.bukkit.types.InventoryClassInfo; +import org.skriptlang.skript.bukkit.inventory.InventoryClassInfo; import org.skriptlang.skript.bukkit.types.ItemStackClassInfo; import org.skriptlang.skript.bukkit.types.PlayerClassInfo; import org.skriptlang.skript.common.properties.elements.conditions.PropCondContains; From eedf1fd1b7fd5c29ad16339aeeaa5dcb51cad7a5 Mon Sep 17 00:00:00 2001 From: OwlBe Date: Thu, 16 Jul 2026 17:48:51 -0400 Subject: [PATCH 02/13] requested changes --- .../inventory/elements/InventoryEvents.java | 22 +++++++++++++------ .../elements/events/EvtInventoryClick.java | 18 +++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java index 6d730155dfb..3fa1a40e1ab 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java +++ b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java @@ -36,6 +36,14 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev .getter(InventoryEvent::getInventory) .build()); + eventValueRegistry.register(EventValue.builder(InventoryInteractEvent.class, Player.class) + .getter(event -> event.getWhoClicked() instanceof Player player ? player : null) + .build()); + + eventValueRegistry.register(EventValue.builder(InventoryInteractEvent.class, World.class) + .getter(event -> event.getWhoClicked().getWorld()) + .build()); + // Inventory Events syntaxRegistry.register(BukkitSyntaxInfos.Event.KEY, BukkitSyntaxInfos.Event.builder(SimpleEvent.class, "Player Inventory Open") @@ -47,7 +55,7 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev """) .addExample(""" on inventory open: - send "its an inventory!" to player + send "its an inventory!" to player """) .addSince("2.2-dev21, INSERT VERSION (added new pattern and updated existing one)") .supplier(() -> new SimpleEvent("player inventory open")) @@ -66,7 +74,7 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev """) .addExample(""" on player close inventory: - send "closed!" to player + send "closed!" to player """) .addSince("2.2-dev21, INSERT VERSION (updated pattern)") .supplier(() -> new SimpleEvent("player inventory close")) @@ -86,7 +94,7 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev .addDescription("Called when an inventory (a hopper, a hopper minecart, etc.) picks up an item.") .addExample(""" on inventory pickup: - broadcast "An inventory just picked up an item!" + broadcast "An inventory just picked up an item!" """) .addSince("2.5.1, INSERT VERSION (updated pattern)") .supplier(() -> new SimpleEvent("inventory pick up")) @@ -111,9 +119,9 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev .addDescription("Called when a player drags an item in their cursor across the inventory.") .addExample(""" on inventory drag item: - if player's top inventory is {example}: - sends "You cannot drag items here!" to player - cancel event + if player's top inventory is {example}: + sends "You cannot drag items here!" to player + cancel event """) .addSince("2.7, INSERT VERSION (updated pattern)") .supplier(() -> new SimpleEvent("inventory drag item")) @@ -190,7 +198,7 @@ Called when an entity or block (e.g. hopper) tries to move items directly from o """) .addExample(""" on inventory item move: - broadcast "%holder of past event-inventory% is transporting %event-item% to %holder of event-inventory%!" + broadcast "%holder of past event-inventory% is transporting %event-item% to %holder of event-inventory%!" """) .addSince("2.8.0") .supplier(() -> new SimpleEvent("inventory item move")) diff --git a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/events/EvtInventoryClick.java b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/events/EvtInventoryClick.java index bc494d6dced..b246109f2ba 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/events/EvtInventoryClick.java +++ b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/events/EvtInventoryClick.java @@ -34,26 +34,18 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev .addDescription("Called when a player clicks on an inventory slot.") .addExample(""" on inventory click: - if event-item is tnt: - broadcast "Explosives found!" - kill player + if event-item is tnt: + broadcast "Explosives found!" + kill player """) .addExample(""" on inventory click at bedrock: - cancel event - send "You cannot click on an illegal item!" + cancel event + send "You cannot click on an illegal item!" """) .addSince("2.2-Fixes-V10, INSERT VERSION (on)") .build()); - eventValueRegistry.register(EventValue.builder(InventoryClickEvent.class, Player.class) - .getter(event -> event.getWhoClicked() instanceof Player player ? player : null) - .build()); - - eventValueRegistry.register(EventValue.builder(InventoryClickEvent.class, World.class) - .getter(event -> event.getWhoClicked().getWorld()) - .build()); - eventValueRegistry.register(EventValue.builder(InventoryClickEvent.class, ItemStack.class) .getter(InventoryClickEvent::getCurrentItem) .build()); From 120b3e7e673920dda8cd6a9df9e9506b4e56263d Mon Sep 17 00:00:00 2001 From: OwlBe <258166039+AnOwlBe@users.noreply.github.com> Date: Thu, 16 Jul 2026 17:49:20 -0400 Subject: [PATCH 03/13] Update src/main/java/org/skriptlang/skript/bukkit/inventory/InventoryModule.java Co-authored-by: SirSmurfy2 <82696841+Absolutionism@users.noreply.github.com> --- .../org/skriptlang/skript/bukkit/inventory/InventoryModule.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/inventory/InventoryModule.java b/src/main/java/org/skriptlang/skript/bukkit/inventory/InventoryModule.java index 6a56f30c7c5..79b8c0b0bc6 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/inventory/InventoryModule.java +++ b/src/main/java/org/skriptlang/skript/bukkit/inventory/InventoryModule.java @@ -27,8 +27,6 @@ protected void loadSelf(SkriptAddon addon) { InventoryEvents.register(syntaxRegistry, eventValueRegistry); EvtInventoryClick.register(syntaxRegistry, eventValueRegistry); - - } @Override From 1b5fbfa9bb2f90a6c5ed597c1bb282099d8955be Mon Sep 17 00:00:00 2001 From: OwlBe Date: Thu, 16 Jul 2026 17:50:09 -0400 Subject: [PATCH 04/13] unused imports --- .../bukkit/inventory/elements/events/EvtInventoryClick.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/events/EvtInventoryClick.java b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/events/EvtInventoryClick.java index b246109f2ba..a58f0e689dc 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/events/EvtInventoryClick.java +++ b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/events/EvtInventoryClick.java @@ -6,8 +6,6 @@ import ch.njol.skript.util.slot.EquipmentSlot; import ch.njol.skript.util.slot.InventorySlot; import ch.njol.skript.util.slot.Slot; -import org.bukkit.World; -import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; From 935b15ff1cd45a3d62df99397fc4ce6062100525 Mon Sep 17 00:00:00 2001 From: OwlBe <258166039+AnOwlBe@users.noreply.github.com> Date: Sun, 19 Jul 2026 00:41:44 -0400 Subject: [PATCH 05/13] Update src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java Co-authored-by: SirSmurfy2 <82696841+Absolutionism@users.noreply.github.com> --- .../skript/bukkit/inventory/elements/InventoryEvents.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java index 3fa1a40e1ab..2b0a6c8f6b1 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java +++ b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java @@ -127,13 +127,6 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev .supplier(() -> new SimpleEvent("inventory drag item")) .build()); - eventValueRegistry.register(EventValue.builder(InventoryDragEvent.class, Player.class) - .getter(event -> event.getWhoClicked() instanceof Player player ? player : null) - .build()); - - eventValueRegistry.register(EventValue.builder(InventoryDragEvent.class, World.class) - .getter(event -> event.getWhoClicked().getWorld()) - .build()); eventValueRegistry.register(EventValue.builder(InventoryDragEvent.class, ItemStack.class) .getter(InventoryDragEvent::getOldCursor) From 00ee893da93e3832cc895d3c99ae3ed871366dda Mon Sep 17 00:00:00 2001 From: OwlBe Date: Mon, 27 Jul 2026 00:10:41 -0400 Subject: [PATCH 06/13] Attempt at fixing gradlew.bat --- gradlew.bat | 164 ++++++++++++++++++++++++++-------------------------- 1 file changed, 82 insertions(+), 82 deletions(-) diff --git a/gradlew.bat b/gradlew.bat index a51ec4f5886..8508ef684d4 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,82 +1,82 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem -@rem SPDX-License-Identifier: Apache-2.0 -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem gradlew startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables, and ensure extensions are enabled -setlocal EnableExtensions - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -"%COMSPEC%" /c exit 1 - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -"%COMSPEC%" /c exit 1 - -:execute -@rem Setup the command line - - - -@rem Execute gradlew -@rem endlocal doesn't take effect until after the line is parsed and variables are expanded -@rem which allows us to clear the local environment before executing the java command -endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel - -:exitWithErrorLevel -@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts -"%COMSPEC%" /c exit %ERRORLEVEL% +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem gradlew startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables, and ensure extensions are enabled +setlocal EnableExtensions + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +"%COMSPEC%" /c exit 1 + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +"%COMSPEC%" /c exit 1 + +:execute +@rem Setup the command line + + + +@rem Execute gradlew +@rem endlocal doesn't take effect until after the line is parsed and variables are expanded +@rem which allows us to clear the local environment before executing the java command +endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel + +:exitWithErrorLevel +@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts +"%COMSPEC%" /c exit %ERRORLEVEL% From f38b9c0fbc86bee2341587d947198174f2cc5a09 Mon Sep 17 00:00:00 2001 From: OwlBe Date: Mon, 27 Jul 2026 21:58:27 -0400 Subject: [PATCH 07/13] AnvilDamagedEvent + split `addSince`'s --- .../ch/njol/skript/events/SimpleEvents.java | 9 ----- .../inventory/elements/InventoryEvents.java | 35 +++++++++++++++---- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/main/java/ch/njol/skript/events/SimpleEvents.java b/src/main/java/ch/njol/skript/events/SimpleEvents.java index 5834701c275..46999706a29 100644 --- a/src/main/java/ch/njol/skript/events/SimpleEvents.java +++ b/src/main/java/ch/njol/skript/events/SimpleEvents.java @@ -3,7 +3,6 @@ import ch.njol.skript.Skript; import ch.njol.skript.lang.SkriptEvent.ListeningBehavior; import ch.njol.skript.lang.util.SimpleEvent; -import com.destroystokyo.paper.event.block.AnvilDamagedEvent; import com.destroystokyo.paper.event.entity.EntityJumpEvent; import com.destroystokyo.paper.event.entity.ProjectileCollideEvent; import com.destroystokyo.paper.event.player.PlayerElytraBoostEvent; @@ -479,14 +478,6 @@ public class SimpleEvents { "\t\tcancel event") .since("2.7"); } - if (Skript.classExists("com.destroystokyo.paper.event.block.AnvilDamagedEvent")) { - Skript.registerEvent("Anvil Damage", SimpleEvent.class, AnvilDamagedEvent.class, "anvil damag(e|ing)") - .description("Called when an anvil is damaged/broken from being used to repair/rename items.", - "Note: this does not include anvil damage from falling.") - .examples("on anvil damage:", - "\tcancel the event") - .since("2.7"); - } if (Skript.classExists("io.papermc.paper.event.player.PlayerStopUsingItemEvent")) { Skript.registerEvent("Stop Using Item", SimpleEvent.class, PlayerStopUsingItemEvent.class, diff --git a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java index 2b0a6c8f6b1..cdfa60a5550 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java +++ b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java @@ -4,6 +4,7 @@ import ch.njol.skript.lang.util.SimpleEvent; import ch.njol.skript.util.slot.InventorySlot; import ch.njol.skript.util.slot.Slot; +import com.destroystokyo.paper.event.block.AnvilDamagedEvent; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.block.Block; @@ -57,7 +58,8 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev on inventory open: send "its an inventory!" to player """) - .addSince("2.2-dev21, INSERT VERSION (added new pattern and updated existing one)") + .addSince("2.2-dev21") + .addSince("INSERT VERSION (pattern updates)") .supplier(() -> new SimpleEvent("player inventory open")) .build()); @@ -69,14 +71,15 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev .addEvent(InventoryCloseEvent.class) .addPatterns("[player] inventory clos(ing|e[d])", "[player] clos[e|ing] inventory") .addDescription(""" - Called when a player closes the inventory they are currently viewing. - Note that this event is not called when a player closes their own inventory. - """) + Called when a player closes the inventory they are currently viewing. + This event is also called when a player closes their own inventory. + """) .addExample(""" on player close inventory: send "closed!" to player """) - .addSince("2.2-dev21, INSERT VERSION (updated pattern)") + .addSince("2.2-dev21") + .addSince("INSERT VERSION (updated pattern)") .supplier(() -> new SimpleEvent("player inventory close")) .build()); @@ -96,7 +99,8 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev on inventory pickup: broadcast "An inventory just picked up an item!" """) - .addSince("2.5.1, INSERT VERSION (updated pattern)") + .addSince("2.5.1") + .addSince("INSERT VERSION (updated pattern)") .supplier(() -> new SimpleEvent("inventory pick up")) .build()); @@ -123,7 +127,8 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev sends "You cannot drag items here!" to player cancel event """) - .addSince("2.7, INSERT VERSION (updated pattern)") + .addSince("2.7") + .addSince("INSERT VERSION (updated pattern)") .supplier(() -> new SimpleEvent("inventory drag item")) .build()); @@ -230,6 +235,22 @@ Called when an entity or block (e.g. hopper) tries to move items directly from o eventValueRegistry.register(EventValue.builder(InventoryMoveItemEvent.class, ItemStack.class) .getter(InventoryMoveItemEvent::getItem) .build()); + + syntaxRegistry.register(BukkitSyntaxInfos.Event.KEY, BukkitSyntaxInfos.Event.builder(SimpleEvent.class, "Anvil Damage") + .addEvent(AnvilDamagedEvent.class) + .addPatterns("anvil damag(e|ing)") + .addDescription(""" + Called when an anvil is damaged/broken from being used to repair/rename items. + Note that this event is not called if the anvil is damaged from falling. + """) + .addExample(""" + on anvil damage: + cancel event + broadcast "No anvil being damaged here!" + """) + .addSince("2.7") + .supplier(() -> new SimpleEvent("anvil damage")) + .build()); } } From 7722624fef84d8220205e3a667e708aa72689b08 Mon Sep 17 00:00:00 2001 From: OwlBe Date: Wed, 29 Jul 2026 18:54:08 -0400 Subject: [PATCH 08/13] requested changes --- src/main/java/ch/njol/skript/events/EvtItem.java | 4 ---- .../bukkit/inventory/elements/events/EvtInventoryClick.java | 3 ++- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/ch/njol/skript/events/EvtItem.java b/src/main/java/ch/njol/skript/events/EvtItem.java index e31c23cf111..bef6e88b1b5 100644 --- a/src/main/java/ch/njol/skript/events/EvtItem.java +++ b/src/main/java/ch/njol/skript/events/EvtItem.java @@ -158,14 +158,10 @@ public boolean check(final Event event) { itemStack = playerPickupItemEvent.getItem().getItemStack(); } else if (event instanceof PlayerItemConsumeEvent playerItemConsumeEvent) { itemStack = playerItemConsumeEvent.getItem(); - } else if (event instanceof InventoryClickEvent inventoryClickEvent) { - itemStack = inventoryClickEvent.getCurrentItem(); } else if (event instanceof ItemDespawnEvent itemDespawnEvent) { itemStack = itemDespawnEvent.getEntity().getItemStack(); } else if (event instanceof ItemMergeEvent itemMergeEvent) { itemStack = itemMergeEvent.getTarget().getItemStack(); - } else if (event instanceof InventoryMoveItemEvent inventoryMoveItemEvent) { - itemStack = inventoryMoveItemEvent.getItem(); } else { assert false; return false; diff --git a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/events/EvtInventoryClick.java b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/events/EvtInventoryClick.java index a58f0e689dc..b482a0eed46 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/events/EvtInventoryClick.java +++ b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/events/EvtInventoryClick.java @@ -41,7 +41,8 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev cancel event send "You cannot click on an illegal item!" """) - .addSince("2.2-Fixes-V10, INSERT VERSION (on)") + .addSince("2.2-Fixes-V10") + .addSince("INSERT VERSION ('on' in pattern)") .build()); eventValueRegistry.register(EventValue.builder(InventoryClickEvent.class, ItemStack.class) From e9890c72912f9f5f0fee5935012a509ed15d0fb0 Mon Sep 17 00:00:00 2001 From: OwlBe <258166039+AnOwlBe@users.noreply.github.com> Date: Wed, 29 Jul 2026 18:55:12 -0400 Subject: [PATCH 09/13] Update src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java Co-authored-by: sovdee <10354869+sovdeeth@users.noreply.github.com> --- .../skript/bukkit/inventory/elements/InventoryEvents.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java index cdfa60a5550..a7fd6bb1f08 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java +++ b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java @@ -56,7 +56,7 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev """) .addExample(""" on inventory open: - send "its an inventory!" to player + send "it's an inventory!" to player """) .addSince("2.2-dev21") .addSince("INSERT VERSION (pattern updates)") From f791f0c7f6ff1ddce933cd8d38ff19593523e006 Mon Sep 17 00:00:00 2001 From: OwlBe Date: Wed, 29 Jul 2026 19:00:36 -0400 Subject: [PATCH 10/13] updates 'since' to be more detailed + adds --- .../inventory/elements/InventoryEvents.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java index a7fd6bb1f08..9eb50528f32 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java +++ b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java @@ -57,9 +57,13 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev .addExample(""" on inventory open: send "it's an inventory!" to player + {-event} is true + if type of event-inventory is anvil inventory: + cancel event + send "You cannot open an anvil inventory during this event!" """) .addSince("2.2-dev21") - .addSince("INSERT VERSION (pattern updates)") + .addSince("INSERT VERSION (new pattern and 'player' in existing one)") .supplier(() -> new SimpleEvent("player inventory open")) .build()); @@ -76,10 +80,12 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev """) .addExample(""" on player close inventory: - send "closed!" to player + if {captcha::%player's uuid%} is not true: + cancel event + send "You need to complete the captcha to prove you're not a bot first!" to player """) .addSince("2.2-dev21") - .addSince("INSERT VERSION (updated pattern)") + .addSince("INSERT VERSION (new pattern and 'player' in existing one)") .supplier(() -> new SimpleEvent("player inventory close")) .build()); @@ -98,6 +104,9 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev .addExample(""" on inventory pickup: broadcast "An inventory just picked up an item!" + if type of event-item stack is tnt: + cancel event + broadcast "No explosives allowed here!" """) .addSince("2.5.1") .addSince("INSERT VERSION (updated pattern)") @@ -128,7 +137,7 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev cancel event """) .addSince("2.7") - .addSince("INSERT VERSION (updated pattern)") + .addSince("INSERT VERSION ('dragging item' in pattern)") .supplier(() -> new SimpleEvent("inventory drag item")) .build()); From e28c3b4ca8efa8625245b9a8a6317eebfa787b52 Mon Sep 17 00:00:00 2001 From: OwlBe Date: Wed, 29 Jul 2026 19:52:54 -0400 Subject: [PATCH 11/13] removes [player] in on inventory open/close --- .../skript/bukkit/inventory/elements/InventoryEvents.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java index 9eb50528f32..2714702ff89 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java +++ b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java @@ -49,7 +49,7 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev syntaxRegistry.register(BukkitSyntaxInfos.Event.KEY, BukkitSyntaxInfos.Event.builder(SimpleEvent.class, "Player Inventory Open") .addEvent(InventoryOpenEvent.class) - .addPatterns("[player] inventory open[ed]", "[player] open[ing] [an] inventory") + .addPatterns("inventory open[ed]", "open[ing] [an] inventory") .addDescription(""" Called when an inventory is opened for a player. Note that this event is not called when a player opens their own inventory. @@ -63,7 +63,7 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev send "You cannot open an anvil inventory during this event!" """) .addSince("2.2-dev21") - .addSince("INSERT VERSION (new pattern and 'player' in existing one)") + .addSince("INSERT VERSION (new pattern)") .supplier(() -> new SimpleEvent("player inventory open")) .build()); @@ -73,7 +73,7 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev syntaxRegistry.register(BukkitSyntaxInfos.Event.KEY, BukkitSyntaxInfos.Event.builder(SimpleEvent.class, "Player Inventory Close") .addEvent(InventoryCloseEvent.class) - .addPatterns("[player] inventory clos(ing|e[d])", "[player] clos[e|ing] inventory") + .addPatterns("inventory clos(ing|e[d])", "clos[e|ing] inventory") .addDescription(""" Called when a player closes the inventory they are currently viewing. This event is also called when a player closes their own inventory. @@ -85,7 +85,7 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev send "You need to complete the captcha to prove you're not a bot first!" to player """) .addSince("2.2-dev21") - .addSince("INSERT VERSION (new pattern and 'player' in existing one)") + .addSince("INSERT VERSION (new pattern)") .supplier(() -> new SimpleEvent("player inventory close")) .build()); From afde079339b65b63ba15a471009ae4e29bcab4d2 Mon Sep 17 00:00:00 2001 From: OwlBe Date: Wed, 29 Jul 2026 20:41:49 -0400 Subject: [PATCH 12/13] - --- .../skript/bukkit/inventory/elements/InventoryEvents.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java index 2714702ff89..34b0898e224 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java +++ b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java @@ -49,7 +49,7 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev syntaxRegistry.register(BukkitSyntaxInfos.Event.KEY, BukkitSyntaxInfos.Event.builder(SimpleEvent.class, "Player Inventory Open") .addEvent(InventoryOpenEvent.class) - .addPatterns("inventory open[ed]", "open[ing] [an] inventory") + .addPattern("inventory open[ed]") .addDescription(""" Called when an inventory is opened for a player. Note that this event is not called when a player opens their own inventory. @@ -73,7 +73,7 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev syntaxRegistry.register(BukkitSyntaxInfos.Event.KEY, BukkitSyntaxInfos.Event.builder(SimpleEvent.class, "Player Inventory Close") .addEvent(InventoryCloseEvent.class) - .addPatterns("inventory clos(ing|e[d])", "clos[e|ing] inventory") + .addPattern("inventory clos(ing|e[d])") .addDescription(""" Called when a player closes the inventory they are currently viewing. This event is also called when a player closes their own inventory. From da0e32356c0adf492fcc62d1995b3539fcb0d05b Mon Sep 17 00:00:00 2001 From: OwlBe Date: Wed, 29 Jul 2026 20:42:10 -0400 Subject: [PATCH 13/13] whoops forgot these --- .../skript/bukkit/inventory/elements/InventoryEvents.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java index 34b0898e224..44656d6c72c 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java +++ b/src/main/java/org/skriptlang/skript/bukkit/inventory/elements/InventoryEvents.java @@ -63,7 +63,6 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev send "You cannot open an anvil inventory during this event!" """) .addSince("2.2-dev21") - .addSince("INSERT VERSION (new pattern)") .supplier(() -> new SimpleEvent("player inventory open")) .build()); @@ -85,7 +84,6 @@ public static void register(SyntaxRegistry syntaxRegistry, EventValueRegistry ev send "You need to complete the captcha to prove you're not a bot first!" to player """) .addSince("2.2-dev21") - .addSince("INSERT VERSION (new pattern)") .supplier(() -> new SimpleEvent("player inventory close")) .build());