From f13aab01c8719144ea5723b4604367b0e728b0b3 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 6 Mar 2026 07:09:42 -0800 Subject: [PATCH 01/17] build.gradle.kts - update Hytale to pre-release --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index f1bb0789..0636e486 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,7 +9,7 @@ java.sourceCompatibility = JavaVersion.VERSION_25 group = "com.github.SkriptDev" val projectVersion = "1.3.0" -val hytaleVersion = "2026.02.19-1a311a592" +val hytaleVersion = "2026.03.05-9fdc5985d" // You can find Hytale versions on their maven repo: // https://maven.hytale.com/release/com/hypixel/hytale/Server/maven-metadata.xml // https://maven.hytale.com/pre-release/com/hypixel/hytale/Server/maven-metadata.xml From 6d60e6a27ee7b5ab6fb40d192e7693d000c9692c Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 6 Mar 2026 08:34:08 -0800 Subject: [PATCH 02/17] EvtPlayerSetupConnect - switch to message --- .../events/player/EvtPlayerSetupConnect.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/events/player/EvtPlayerSetupConnect.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/events/player/EvtPlayerSetupConnect.java index f75152e5..b46f95c2 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/events/player/EvtPlayerSetupConnect.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/events/player/EvtPlayerSetupConnect.java @@ -4,7 +4,9 @@ import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration; import com.github.skriptdev.skript.plugin.HySk; import com.hypixel.hytale.event.EventRegistration; +import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.event.events.player.PlayerSetupConnectEvent; +import com.hypixel.hytale.server.core.util.MessageUtil; import io.github.syst3ms.skriptparser.lang.Expression; import io.github.syst3ms.skriptparser.lang.TriggerContext; import io.github.syst3ms.skriptparser.lang.TriggerMap; @@ -28,8 +30,10 @@ public static void register(SkriptRegistration reg) { "name", PlayerSetupConnectContext::getUsername); reg.addSingleContextValue(PlayerSetupConnectContext.class, UUID.class, "uuid", PlayerSetupConnectContext::getUuid); - reg.addSingleContextValue(PlayerSetupConnectContext.class, String.class, + reg.addSingleContextValue(PlayerSetupConnectContext.class, Message.class, "reason", PlayerSetupConnectContext::getReason); + reg.addSingleContextValue(PlayerSetupConnectContext.class, String.class, + "reason-string", PlayerSetupConnectContext::getReasonString); } private static EventRegistration LISTENER; @@ -66,10 +70,14 @@ public UUID getUuid() { return this.event.getUuid(); } - public String getReason() { + public Message getReason() { return this.event.getReason(); } + public String getReasonString() { + return MessageUtil.toAnsiString(this.event.getReason()).toAnsi(); + } + @Override public boolean isCancelled() { return this.event.isCancelled(); From f22b9a35a2d3e77250694a8cfa33074a8c332d5e Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 6 Mar 2026 08:36:00 -0800 Subject: [PATCH 03/17] EffKick - switch to message --- .../elements/effects/player/EffKick.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/effects/player/EffKick.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/effects/player/EffKick.java index e32723b7..61e20e57 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/effects/player/EffKick.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/effects/player/EffKick.java @@ -1,5 +1,6 @@ package com.github.skriptdev.skript.plugin.elements.effects.player; +import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.entity.entities.Player; import com.hypixel.hytale.server.core.universe.PlayerRef; import io.github.syst3ms.skriptparser.lang.Effect; @@ -15,7 +16,7 @@ public class EffKick extends Effect { public static void register(SkriptRegistration registration) { registration.newEffect(EffKick.class, "kick %players/playerrefs%", - "kick %players/playerrefs% (for reason|due to|because) %string%") + "kick %players/playerrefs% (for reason|due to|because) %string/message%") .name("Kick Player") .description("Kicks the specified players with an optional reason.") .examples("kick all players due to \"Cheating!\"", @@ -26,24 +27,30 @@ public static void register(SkriptRegistration registration) { } private Expression players; - private Expression reason; + private Expression reason; - @SuppressWarnings("unchecked") @Override public boolean init(Expression[] expressions, int matchedPattern, @NotNull ParseContext parseContext) { this.players = expressions[0]; if (matchedPattern == 1) { - this.reason = (Expression) expressions[1]; + this.reason = expressions[1]; } return true; } @Override protected void execute(@NotNull TriggerContext ctx) { - String reason = "You were kicked."; + Message reason = Message.raw("You were kicked."); if (this.reason != null) { - Optional single = this.reason.getSingle(ctx); - if (single.isPresent()) reason = single.get(); + Optional single = this.reason.getSingle(ctx); + if (single.isPresent()) { + Object o = single.get(); + if (o instanceof Message message) { + reason = message; + } else if (o instanceof String s) { + reason = Message.raw(s); + } + } } for (Object o : this.players.getArray(ctx)) { @@ -58,7 +65,7 @@ public String toString(@NotNull TriggerContext ctx, boolean debug) { } @SuppressWarnings("removal") - public static void kick(Object player, String reason) { + public static void kick(Object player, Message reason) { if (player instanceof PlayerRef ref) { ref.getPacketHandler().disconnect(reason); } else if (player instanceof Player p) { From 7404367608e81f1fb5f61be1c2664bc186e611e7 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 6 Mar 2026 08:37:09 -0800 Subject: [PATCH 04/17] EffBan - switch to message for kick --- .../skript/plugin/elements/effects/player/EffBan.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/effects/player/EffBan.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/effects/player/EffBan.java index d164f8d0..672710fa 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/effects/player/EffBan.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/effects/player/EffBan.java @@ -2,6 +2,7 @@ import com.github.skriptdev.skript.api.utils.ReflectionUtils; import com.github.skriptdev.skript.api.utils.Utils; +import com.hypixel.hytale.server.core.Message; import com.hypixel.hytale.server.core.command.system.CommandSender; import com.hypixel.hytale.server.core.console.ConsoleSender; import com.hypixel.hytale.server.core.entity.entities.Player; @@ -147,7 +148,7 @@ protected void execute(@NotNull TriggerContext ctx) { } bans.put(target, ban); - EffKick.kick(o, reason); + EffKick.kick(o, Message.raw(reason)); } // Put them all in at once From fadc52afc021e77af73b73f820d30f04c86ae986 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 6 Mar 2026 08:55:08 -0800 Subject: [PATCH 05/17] Deprecate Inventory stuff --- .../expressions/item/ExprInventory.java | 6 +- .../item/ExprInventoryAmountOfItems.java | 3 +- .../expressions/item/ExprInventorySlot.java | 3 +- .../expressions/item/ExprInventorySlots.java | 3 +- .../expressions/item/ExprItemContainer.java | 102 ++++++++++++------ .../item/ExprItemsInInventory.java | 7 +- .../elements/functions/DefaultFunctions.java | 89 ++++++++------- .../plugin/elements/types/TypesItem.java | 4 +- 8 files changed, 133 insertions(+), 84 deletions(-) diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventory.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventory.java index c7ccd1da..1ec05050 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventory.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventory.java @@ -12,6 +12,7 @@ import java.util.Optional; +@Deprecated(forRemoval = true, since = "INSERT VERSION") public class ExprInventory implements Expression { public static void register(SkriptRegistration registration) { @@ -19,7 +20,8 @@ public static void register(SkriptRegistration registration) { "inventory of %livingentity%") .name("Inventory") .description("Returns the inventory of a living entity.", - "An inventory can also be cleared.") + "An inventory can also be cleared.", + "**Deprecated as of `INSERT VERSION` and will be removed in the future.**") .examples("set {_inv} to inventory of player", "clear inventory of player") .since("1.0.0") @@ -31,6 +33,8 @@ public static void register(SkriptRegistration registration) { @SuppressWarnings("unchecked") @Override public boolean init(Expression[] expressions, int matchedPattern, @NotNull ParseContext parseContext) { + parseContext.getLogger().warn("'inventory of %livingentity%' has been deprecated. " + + "This may still work but will be removed in the future."); this.entity = (Expression) expressions[0]; return true; } diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventoryAmountOfItems.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventoryAmountOfItems.java index 7ed52243..a089adbf 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventoryAmountOfItems.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventoryAmountOfItems.java @@ -22,7 +22,8 @@ public static void register(SkriptRegistration reg) { .description("Get the amount of a certain Item/ItemStack in an Inventory/ItemContainer.", "If you pass in an Item, it will compare the Item types of ItemStacks in the inventory.", "If you pass in an ItemStack, it will direct compare that the ItemStacks are the same " + - "(ie: same durability, max durability, metadata, etc), excluding stack size.") + "(ie: same durability, max durability, metadata, etc), excluding stack size.", + "**The inventory option has been deprecated and will be removed in a future version.**") .examples("set {_amount} to amount of ingredient_stick in inventory of player") .since("1.1.0") .register(); diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventorySlot.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventorySlot.java index 8ba687e0..69bfb98e 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventorySlot.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventorySlot.java @@ -19,7 +19,8 @@ public static void register(SkriptRegistration reg) { "itemstack in slot %number% of %inventory/itemcontainer%") .name("Itemstack in Inventory Slot") .description("Get/set/delete the itemstack in a slot of an Inventory or ItemContainer.", - "When using Inventory, this will combine all ItemContainers in the inventory and grab from there.") + "When using Inventory, this will combine all ItemContainers in the inventory and grab from there.", + "**The inventory option has been deprecated and will be removed in a future version.**") .examples("set {_item} to itemstack in slot 3 of inventory of player", "delete itemstack in slot 3 of inventory of player", "delete itemstack in slot 2 of hotbar item container of inventory of player", diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventorySlots.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventorySlots.java index fbe6d48c..e08705fa 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventorySlots.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventorySlots.java @@ -18,7 +18,8 @@ public static void register(SkriptRegistration reg) { reg.newExpression(ExprInventorySlots.class, Number.class, false, "slots (of|in) %inventory/itemcontainer%") .name("Inventory Slots") - .description("Returns all slots in an Inventory or ItemContainer as numbers.") + .description("Returns all slots in an Inventory or ItemContainer as numbers.", + "**The inventory option has been deprecated and will be removed in a future version.**") .examples("loop slots of inventory of player:", "loop slots of hotbar item container of inventory of player:") .since("1.0.0") diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprItemContainer.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprItemContainer.java index 3eb7082e..1490f726 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprItemContainer.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprItemContainer.java @@ -1,8 +1,19 @@ package com.github.skriptdev.skript.plugin.elements.expressions.item; import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration; +import com.hypixel.hytale.component.Ref; +import com.hypixel.hytale.component.Store; +import com.hypixel.hytale.server.core.entity.LivingEntity; import com.hypixel.hytale.server.core.inventory.Inventory; +import com.hypixel.hytale.server.core.inventory.InventoryComponent; +import com.hypixel.hytale.server.core.inventory.InventoryComponent.Armor; +import com.hypixel.hytale.server.core.inventory.InventoryComponent.Backpack; +import com.hypixel.hytale.server.core.inventory.InventoryComponent.Hotbar; +import com.hypixel.hytale.server.core.inventory.InventoryComponent.Storage; +import com.hypixel.hytale.server.core.inventory.InventoryComponent.Tool; +import com.hypixel.hytale.server.core.inventory.InventoryComponent.Utility; import com.hypixel.hytale.server.core.inventory.container.ItemContainer; +import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; import io.github.syst3ms.skriptparser.lang.Expression; import io.github.syst3ms.skriptparser.lang.TriggerContext; import io.github.syst3ms.skriptparser.parsing.ParseContext; @@ -14,53 +25,82 @@ public class ExprItemContainer implements Expression { public static void register(SkriptRegistration reg) { reg.newExpression(ExprItemContainer.class, ItemContainer.class, true, - "storage item container of %inventory%", - "armor item container of %inventory%", - "hot[ ]bar item container of %inventory%", - "utility item container of %inventory%", - "tools item container of %inventory%", - "backpack item container of %inventory%", - "combined everything item container of %inventory%", - "combined hotbar first item container of %inventory%", - "combined storage first item container of %inventory%", - "combined backpack storage hotbar item container of %inventory%") - .name("Item Container of Inventory") - .description("Returns different item containers of an inventory.", - "Theres also a few combined options (These are from Hytale).") + "storage [item] container of %inventory/livingentity%", + "armor [item] container of %inventory/livingentity%", + "hot[ ]bar [item] container of %inventory/livingentity%", + "utility [item] container of %inventory/livingentity%", + "tools [item] container of %inventory/livingentity%", + "backpack [item] container of %inventory/livingentity%", + "combined everything [item] container of %inventory/livingentity%", + "combined hotbar first [item] container of %inventory/livingentity%", + "combined storage first [item] container of %inventory/livingentity%", + "combined backpack storage hotbar [item] container of %inventory/livingentity%") + .name("Item Container of LivingEntity") + .description("Returns different item containers of an Inventory/LivingEntity.", + "Theres also a few combined options (These are from Hytale).", + "**The inventory option has been deprecated and will be removed in a future version.**") .since("1.0.0") .register(); } private int pattern; - private Expression inventory; + private Expression inventory; - @SuppressWarnings("unchecked") @Override public boolean init(Expression[] expressions, int matchedPattern, @NotNull ParseContext parseContext) { this.pattern = matchedPattern; - this.inventory = (Expression) expressions[0]; + this.inventory = expressions[0]; return true; } @Override public ItemContainer[] getValues(@NotNull TriggerContext ctx) { - Optional single = this.inventory.getSingle(ctx); + Optional single = this.inventory.getSingle(ctx); if (single.isEmpty()) return null; - Inventory inventory = single.get(); - ItemContainer container = switch (this.pattern) { - case 0 -> inventory.getStorage(); - case 1 -> inventory.getArmor(); - case 2 -> inventory.getHotbar(); - case 3 -> inventory.getUtility(); - case 4 -> inventory.getTools(); - case 5 -> inventory.getBackpack(); - case 6 -> inventory.getCombinedEverything(); - case 7 -> inventory.getCombinedHotbarFirst(); - case 8 -> inventory.getCombinedStorageFirst(); - case 9 -> inventory.getCombinedBackpackStorageHotbar(); - default -> null; - }; + Object object = single.get(); + + ItemContainer container = null; + if (object instanceof Inventory inventory) { + container = switch (this.pattern) { + case 0 -> inventory.getStorage(); + case 1 -> inventory.getArmor(); + case 2 -> inventory.getHotbar(); + case 3 -> inventory.getUtility(); + case 4 -> inventory.getTools(); + case 5 -> inventory.getBackpack(); + case 6 -> inventory.getCombinedEverything(); + case 7 -> inventory.getCombinedHotbarFirst(); + case 8 -> inventory.getCombinedStorageFirst(); + case 9 -> inventory.getCombinedBackpackStorageHotbar(); + default -> null; + }; + } else if (object instanceof LivingEntity livingEntity) { + Ref reference = livingEntity.getReference(); + if (reference == null) return null; + + Store store = reference.getStore(); + Object o = switch (this.pattern) { + case 0 -> store.getComponent(reference, Storage.getComponentType()); + case 1 -> store.getComponent(reference, Armor.getComponentType()); + case 2 -> store.getComponent(reference, Hotbar.getComponentType()); + case 3 -> store.getComponent(reference, Utility.getComponentType()); + case 4 -> store.getComponent(reference, Tool.getComponentType()); + case 5 -> store.getComponent(reference, Backpack.getComponentType()); + case 6 -> InventoryComponent.getCombined(store, reference, InventoryComponent.EVERYTHING); + case 7 -> InventoryComponent.getCombined(store, reference, InventoryComponent.HOTBAR_FIRST); + case 8 -> InventoryComponent.getCombined(store, reference, InventoryComponent.STORAGE_FIRST); + case 9 -> InventoryComponent.getCombined(store, reference, InventoryComponent.BACKPACK_STORAGE_HOTBAR); + default -> null; + }; + if (o instanceof InventoryComponent inventoryComponent) { + container = inventoryComponent.getInventory(); + } else if (o instanceof ItemContainer itemContainer) { + container = itemContainer; + } else { + return null; + } + } return new ItemContainer[]{container}; } diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprItemsInInventory.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprItemsInInventory.java index 5e7d6b66..d514bc83 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprItemsInInventory.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprItemsInInventory.java @@ -20,9 +20,10 @@ public static void register(SkriptRegistration reg) { reg.newExpression(ExprItemsInInventory.class, ItemStack.class, false, "itemstacks in %inventory/itemcontainer%") .name("Itemstacks in Inventory/ItemContainer") - .description("Returns all itemstacks in an Inventory or ItemContainer.") - .examples("set {_items::*} to itemstacks in inventory of player", - "loop itemstacks in inventory of player:") + .description("Returns all itemstacks in an Inventory or ItemContainer.", + "**The inventory option has been deprecated and will be removed in a future version.**") + .examples("set {_items::*} to itemstacks in combined everything container of player", + "loop itemstacks in storage item container of player:") .since("1.0.0") .register(); } diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/functions/DefaultFunctions.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/functions/DefaultFunctions.java index 136859e4..728faa34 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/functions/DefaultFunctions.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/functions/DefaultFunctions.java @@ -7,8 +7,6 @@ import com.hypixel.hytale.math.vector.Vector3i; import com.hypixel.hytale.protocol.packets.worldmap.ContextMenuItem; import com.hypixel.hytale.server.core.asset.type.item.config.Item; -import com.hypixel.hytale.server.core.entity.LivingEntity; -import com.hypixel.hytale.server.core.inventory.Inventory; import com.hypixel.hytale.server.core.inventory.ItemStack; import com.hypixel.hytale.server.core.inventory.container.ItemContainer; import com.hypixel.hytale.server.core.inventory.container.SimpleItemContainer; @@ -117,49 +115,50 @@ private static void itemFunctions(SkriptRegistration reg) { .since("1.0.0") .register(); - reg.newJavaFunction("inventory", Inventory.class, true) - .parameter("storageCapacity", Number.class) - .parameter("armorCapacity", Number.class) - .parameter("hotbarCapacity", Number.class) - .parameter("utilityCapacity", Number.class) - .executeSingle(params -> { - short storage = (short) Math.max(((Number) params[0][0]).shortValue(), 0); - short armor = (short) Math.max(((Number) params[1][0]).shortValue(), 0); - short hotbar = (short) Math.max(((Number) params[2][0]).shortValue(), 0); - short utility = (short) Math.max(((Number) params[3][0]).shortValue(), 0); - Inventory inv = new Inventory(storage, armor, hotbar, utility, (short) 0); - // Unregister click listeners since there's no owner - inv.unregister(); - return inv; - }) - .name("Inventory") - .description("Create a new inventory with the given ItemContainer sizes.", - "This inventory will not have click events due to no owner.", - "See the `inventoryWithOwner` function for that.") - .since("1.1.0") - .register(); - - reg.newJavaFunction("inventoryWithOwner", Inventory.class, true) - .parameter("owner", LivingEntity.class) - .parameter("storageCapacity", Number.class) - .parameter("armorCapacity", Number.class) - .parameter("hotbarCapacity", Number.class) - .parameter("utilityCapacity", Number.class) - .executeSingle(params -> { - LivingEntity livingEntity = (LivingEntity) params[0][0]; - short storage = (short) Math.max(((Number) params[1][0]).shortValue(), 0); - short armor = (short) Math.max(((Number) params[2][0]).shortValue(), 0); - short hotbar = (short) Math.max(((Number) params[3][0]).shortValue(), 0); - short utility = (short) Math.max(((Number) params[4][0]).shortValue(), 0); - Inventory inv = new Inventory(storage, armor, hotbar, utility, (short) 0); - inv.setEntity(livingEntity); - return inv; - }) - .name("Inventory with Owner") - .description("Create a new inventory with the given ItemContainer capacities and an owner.", - "The owner is used for registered click events.") - .since("1.1.0") - .register(); + // Remove for now, may re-introduce something in the future +// reg.newJavaFunction("inventory", InventoryComponent.class, true) +// .parameter("storageCapacity", Number.class) +// .parameter("armorCapacity", Number.class) +// .parameter("hotbarCapacity", Number.class) +// .parameter("utilityCapacity", Number.class) +// .executeSingle(params -> { +// short storage = (short) Math.max(((Number) params[0][0]).shortValue(), 0); +// short armor = (short) Math.max(((Number) params[1][0]).shortValue(), 0); +// short hotbar = (short) Math.max(((Number) params[2][0]).shortValue(), 0); +// short utility = (short) Math.max(((Number) params[3][0]).shortValue(), 0); +// Inventory inv = new Inventory(storage, armor, hotbar, utility, (short) 0); +// // Unregister click listeners since there's no owner +// inv.unregister(); +// return inv; +// }) +// .name("Inventory") +// .description("Create a new inventory with the given ItemContainer sizes.", +// "This inventory will not have click events due to no owner.", +// "See the `inventoryWithOwner` function for that.") +// .since("1.1.0") +// .register(); +// +// reg.newJavaFunction("inventoryWithOwner", Inventory.class, true) +// .parameter("owner", LivingEntity.class) +// .parameter("storageCapacity", Number.class) +// .parameter("armorCapacity", Number.class) +// .parameter("hotbarCapacity", Number.class) +// .parameter("utilityCapacity", Number.class) +// .executeSingle(params -> { +// LivingEntity livingEntity = (LivingEntity) params[0][0]; +// short storage = (short) Math.max(((Number) params[1][0]).shortValue(), 0); +// short armor = (short) Math.max(((Number) params[2][0]).shortValue(), 0); +// short hotbar = (short) Math.max(((Number) params[3][0]).shortValue(), 0); +// short utility = (short) Math.max(((Number) params[4][0]).shortValue(), 0); +// Inventory inv = new Inventory(storage, armor, hotbar, utility, (short) 0); +// inv.setEntity(livingEntity); +// return inv; +// }) +// .name("Inventory with Owner") +// .description("Create a new inventory with the given ItemContainer capacities and an owner.", +// "The owner is used for registered click events.") +// .since("1.1.0") +// .register(); reg.newJavaFunction("itemContainer", ItemContainer.class, true) .parameter("capacity", Number.class) diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/types/TypesItem.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/types/TypesItem.java index fa9e7860..e9f6943e 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/types/TypesItem.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/types/TypesItem.java @@ -27,7 +27,9 @@ static void register(SkriptRegistration reg) { // Please keep in alphabetical order reg.newType(Inventory.class, "inventory", "inventor@y@ies") .name("Inventory") - .description("Represents an inventory of an entity or block.") + .description("Represents an inventory of an entity or block.", + "**DEPRRECATED as of `INSERT VERSION` and will be removed in the future.**", + "Hytale no longer will be using Inventory.") .since("1.0.0") .toStringFunction(Inventory::toString) .serializer(new TypeSerializer<>() { From 76b77599c2c1c345f81cac9d22a6974f2331f36c Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 6 Mar 2026 09:03:08 -0800 Subject: [PATCH 06/17] ExprInventory - decided to keep this, and just have it return an item container --- .../expressions/item/ExprInventory.java | 51 ++++++++++++------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventory.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventory.java index 1ec05050..f74aa449 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventory.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventory.java @@ -1,8 +1,13 @@ package com.github.skriptdev.skript.plugin.elements.expressions.item; +import com.hypixel.hytale.component.Ref; +import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.entity.LivingEntity; -import com.hypixel.hytale.server.core.inventory.Inventory; +import com.hypixel.hytale.server.core.inventory.InventoryComponent; import com.hypixel.hytale.server.core.inventory.ItemStack; +import com.hypixel.hytale.server.core.inventory.container.CombinedItemContainer; +import com.hypixel.hytale.server.core.inventory.container.ItemContainer; +import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; import io.github.syst3ms.skriptparser.lang.Expression; import io.github.syst3ms.skriptparser.lang.TriggerContext; import io.github.syst3ms.skriptparser.parsing.ParseContext; @@ -10,20 +15,22 @@ import io.github.syst3ms.skriptparser.types.changers.ChangeMode; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; +import java.util.List; import java.util.Optional; -@Deprecated(forRemoval = true, since = "INSERT VERSION") -public class ExprInventory implements Expression { +public class ExprInventory implements Expression { public static void register(SkriptRegistration registration) { - registration.newExpression(ExprInventory.class, Inventory.class, false, - "inventory of %livingentity%") - .name("Inventory") - .description("Returns the inventory of a living entity.", - "An inventory can also be cleared.", - "**Deprecated as of `INSERT VERSION` and will be removed in the future.**") + registration.newExpression(ExprInventory.class, ItemContainer.class, false, + "inventory of %livingentities%") + .name("Inventory of LivingEntity") + .description("While it is called \"inventory\" it will " + + "actually return the combined everything ItemContainer of a LivingEntity.", + "This is essentially a shortcut for the `combined everything item contatiner of` expression.") .examples("set {_inv} to inventory of player", - "clear inventory of player") + "clear inventory of player", + "add itemstack of ingredient_stick to inventory of player") .since("1.0.0") .register(); } @@ -40,11 +47,17 @@ public boolean init(Expression[] expressions, int matchedPattern, @NotNull Pa } @Override - public Inventory[] getValues(@NotNull TriggerContext ctx) { - Optional single = this.entity.getSingle(ctx); - if (single.isEmpty()) return null; - LivingEntity livingEntity = single.get(); - return new Inventory[]{livingEntity.getInventory()}; + public ItemContainer[] getValues(@NotNull TriggerContext ctx) { + List containers = new ArrayList<>(); + for (LivingEntity livingEntity : this.entity.getArray(ctx)) { + Ref reference = livingEntity.getReference(); + if (reference == null) continue; + + Store store = reference.getStore(); + CombinedItemContainer combined = InventoryComponent.getCombined(store, reference, InventoryComponent.EVERYTHING); + containers.add(combined); + } + return containers.toArray(new ItemContainer[0]); } @Override @@ -57,17 +70,17 @@ public Optional[]> acceptsChange(@NotNull ChangeMode mode) { @Override public void change(@NotNull TriggerContext ctx, @NotNull ChangeMode changeMode, Object @NotNull [] changeWith) { - Inventory[] toChange = getValues(ctx); + ItemContainer[] toChange = getValues(ctx); if (changeMode == ChangeMode.ADD) { - for (Inventory inventory : toChange) { + for (ItemContainer inventory : toChange) { for (Object o : changeWith) { if (o instanceof ItemStack itemStack) { - inventory.getCombinedEverything().addItemStack(itemStack); + inventory.addItemStack(itemStack); } } } } else if (changeMode == ChangeMode.DELETE) { - for (Inventory inventory : toChange) { + for (ItemContainer inventory : toChange) { inventory.clear(); } } From 97b3fff72955ea92e69c7ed354a6cc9406f9178d Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 6 Mar 2026 09:27:40 -0800 Subject: [PATCH 07/17] ExprInventory - forgot to remove warning --- .../skript/plugin/elements/expressions/item/ExprInventory.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventory.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventory.java index f74aa449..d38d8447 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventory.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventory.java @@ -40,8 +40,6 @@ public static void register(SkriptRegistration registration) { @SuppressWarnings("unchecked") @Override public boolean init(Expression[] expressions, int matchedPattern, @NotNull ParseContext parseContext) { - parseContext.getLogger().warn("'inventory of %livingentity%' has been deprecated. " + - "This may still work but will be removed in the future."); this.entity = (Expression) expressions[0]; return true; } From d405ae1be781221544a4e5995b71fa931026e5c5 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 6 Mar 2026 10:10:24 -0800 Subject: [PATCH 08/17] ExprActiveSlot - more deprecation stuff --- .../expressions/entity/ExprActiveSlot.java | 56 +++++++++++++++---- 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/entity/ExprActiveSlot.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/entity/ExprActiveSlot.java index 66cfed68..2af45d24 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/entity/ExprActiveSlot.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/entity/ExprActiveSlot.java @@ -1,8 +1,12 @@ package com.github.skriptdev.skript.plugin.elements.expressions.entity; +import com.github.skriptdev.skript.api.hytale.utils.EntityUtils; import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration; import com.hypixel.hytale.server.core.entity.LivingEntity; -import com.hypixel.hytale.server.core.inventory.Inventory; +import com.hypixel.hytale.server.core.inventory.InventoryComponent; +import com.hypixel.hytale.server.core.inventory.InventoryComponent.Hotbar; +import com.hypixel.hytale.server.core.inventory.InventoryComponent.Tool; +import com.hypixel.hytale.server.core.inventory.InventoryComponent.Utility; import io.github.syst3ms.skriptparser.lang.Expression; import io.github.syst3ms.skriptparser.lang.TriggerContext; import io.github.syst3ms.skriptparser.parsing.ParseContext; @@ -41,13 +45,28 @@ public Number[] getValues(@NotNull TriggerContext ctx) { LivingEntity[] entityArray = this.entity.getArray(ctx); Byte[] s = new Byte[entityArray.length]; for (int i = 0; i < entityArray.length; i++) { - Inventory inventory = entityArray[i].getInventory(); + LivingEntity livingEntity = entityArray[i]; if (this.slot == 0) { - s[i] = inventory.getActiveHotbarSlot(); + Hotbar component = EntityUtils.getComponent(livingEntity, Hotbar.getComponentType()); + if (component != null) { + s[i] = component.getActiveSlot(); + } else { + s[i] = -1; + } } else if (this.slot == 1) { - s[i] = inventory.getActiveUtilitySlot(); + Utility component = EntityUtils.getComponent(livingEntity, Utility.getComponentType()); + if (component != null) { + s[i] = component.getActiveSlot(); + } else { + s[i] = -1; + } } else if (this.slot == 2) { - s[i] = inventory.getActiveToolsSlot(); + Tool component = EntityUtils.getComponent(livingEntity, Tool.getComponentType()); + if (component != null) { + s[i] = component.getActiveSlot(); + } else { + s[i] = -1; + } } } return s; @@ -68,17 +87,30 @@ public void change(@NotNull TriggerContext ctx, @NotNull ChangeMode changeMode, for (LivingEntity entity : this.entity.getArray(ctx)) { - Inventory inventory = entity.getInventory(); if (this.slot == 0) { - byte clamp = (byte) Math.clamp(slot, 0, Inventory.DEFAULT_HOTBAR_CAPACITY - 1); - inventory.setActiveHotbarSlot(clamp); + byte clamp = (byte) Math.clamp(slot, 0, InventoryComponent.DEFAULT_HOTBAR_CAPACITY - 1); + Hotbar component = EntityUtils.getComponent(entity, Hotbar.getComponentType()); + if (component != null) { + component.setActiveSlot(clamp); + component.markDirty(); + + } } else if (this.slot == 1) { - byte clamp = (byte) Math.clamp(slot, -1, Inventory.DEFAULT_UTILITY_CAPACITY - 1); - inventory.setActiveUtilitySlot(clamp); + byte clamp = (byte) Math.clamp(slot, -1, InventoryComponent.DEFAULT_UTILITY_CAPACITY - 1); + Utility component = EntityUtils.getComponent(entity, Utility.getComponentType()); + if (component != null) { + component.setActiveSlot(clamp); + component.markDirty(); + } } else if (this.slot == 2) { - byte clamp = (byte) Math.clamp(slot, -1, Inventory.DEFAULT_TOOLS_CAPACITY - 1); - inventory.setActiveToolsSlot(clamp); + byte clamp = (byte) Math.clamp(slot, -1, InventoryComponent.DEFAULT_TOOLS_CAPACITY - 1); + Tool component = EntityUtils.getComponent(entity, Tool.getComponentType()); + if (component != null) { + component.setActiveSlot(clamp); + component.markDirty(); + } } + entity.invalidateEquipmentNetwork(); } } From a9033655c2631b1fc70a5c1273f9865df893f20c Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 6 Mar 2026 17:31:13 -0800 Subject: [PATCH 09/17] ExprInventory - change again --- .../expressions/item/ExprInventory.java | 60 ++++++++++++++----- 1 file changed, 46 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventory.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventory.java index d38d8447..58223687 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventory.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventory.java @@ -1,9 +1,16 @@ package com.github.skriptdev.skript.plugin.elements.expressions.item; +import com.github.skriptdev.skript.api.hytale.utils.EntityUtils; import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.component.Store; import com.hypixel.hytale.server.core.entity.LivingEntity; import com.hypixel.hytale.server.core.inventory.InventoryComponent; +import com.hypixel.hytale.server.core.inventory.InventoryComponent.Armor; +import com.hypixel.hytale.server.core.inventory.InventoryComponent.Backpack; +import com.hypixel.hytale.server.core.inventory.InventoryComponent.Hotbar; +import com.hypixel.hytale.server.core.inventory.InventoryComponent.Storage; +import com.hypixel.hytale.server.core.inventory.InventoryComponent.Tool; +import com.hypixel.hytale.server.core.inventory.InventoryComponent.Utility; import com.hypixel.hytale.server.core.inventory.ItemStack; import com.hypixel.hytale.server.core.inventory.container.CombinedItemContainer; import com.hypixel.hytale.server.core.inventory.container.ItemContainer; @@ -26,8 +33,9 @@ public static void register(SkriptRegistration registration) { "inventory of %livingentities%") .name("Inventory of LivingEntity") .description("While it is called \"inventory\" it will " + - "actually return the combined everything ItemContainer of a LivingEntity.", - "This is essentially a shortcut for the `combined everything item contatiner of` expression.") + "actually return the combined hotbar/storage ItemContainers of a LivingEntity.", + "This is essentially a shortcut for the `combined hotbar first item contatiner of` expression.", + "Clearing will clear all ItemContainers, not just the hotbar/storage.") .examples("set {_inv} to inventory of player", "clear inventory of player", "add itemstack of ingredient_stick to inventory of player") @@ -35,24 +43,24 @@ public static void register(SkriptRegistration registration) { .register(); } - private Expression entity; + private Expression entities; @SuppressWarnings("unchecked") @Override public boolean init(Expression[] expressions, int matchedPattern, @NotNull ParseContext parseContext) { - this.entity = (Expression) expressions[0]; + this.entities = (Expression) expressions[0]; return true; } @Override public ItemContainer[] getValues(@NotNull TriggerContext ctx) { List containers = new ArrayList<>(); - for (LivingEntity livingEntity : this.entity.getArray(ctx)) { - Ref reference = livingEntity.getReference(); - if (reference == null) continue; + for (LivingEntity livingEntity : this.entities.getArray(ctx)) { + Ref ref = livingEntity.getReference(); + if (ref == null) continue; - Store store = reference.getStore(); - CombinedItemContainer combined = InventoryComponent.getCombined(store, reference, InventoryComponent.EVERYTHING); + Store store = ref.getStore(); + CombinedItemContainer combined = InventoryComponent.getCombined(store, ref, InventoryComponent.HOTBAR_FIRST); containers.add(combined); } return containers.toArray(new ItemContainer[0]); @@ -70,16 +78,40 @@ public Optional[]> acceptsChange(@NotNull ChangeMode mode) { public void change(@NotNull TriggerContext ctx, @NotNull ChangeMode changeMode, Object @NotNull [] changeWith) { ItemContainer[] toChange = getValues(ctx); if (changeMode == ChangeMode.ADD) { - for (ItemContainer inventory : toChange) { + for (ItemContainer container : toChange) { for (Object o : changeWith) { if (o instanceof ItemStack itemStack) { - inventory.addItemStack(itemStack); + container.addItemStack(itemStack); } } } } else if (changeMode == ChangeMode.DELETE) { - for (ItemContainer inventory : toChange) { - inventory.clear(); + for (LivingEntity livingEntity : this.entities.getArray(ctx)) { + // Combined storage clearing is currently broken + Storage storage = EntityUtils.getComponent(livingEntity, Storage.getComponentType()); + if (storage != null) { + storage.getInventory().clear(); + } + Hotbar hotbar = EntityUtils.getComponent(livingEntity, Hotbar.getComponentType()); + if (hotbar != null) { + hotbar.getInventory().clear(); + } + Armor armor = EntityUtils.getComponent(livingEntity, Armor.getComponentType()); + if (armor != null) { + armor.getInventory().clear(); + } + Backpack backpack = EntityUtils.getComponent(livingEntity, Backpack.getComponentType()); + if (backpack != null) { + backpack.getInventory().clear(); + } + Utility utility = EntityUtils.getComponent(livingEntity, Utility.getComponentType()); + if (utility != null) { + utility.getInventory().clear(); + } + Tool tool = EntityUtils.getComponent(livingEntity, Tool.getComponentType()); + if (tool != null) { + tool.getInventory().clear(); + } } } } @@ -91,7 +123,7 @@ public boolean isSingle() { @Override public String toString(@NotNull TriggerContext ctx, boolean debug) { - return "inventory of " + this.entity.toString(ctx, debug); + return "inventory of " + this.entities.toString(ctx, debug); } } From 206301f70a0c09df2403ecd579857692598026bf Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 12 Mar 2026 14:25:35 -0700 Subject: [PATCH 10/17] Update to next pre-release and fix some changes --- build.gradle.kts | 4 ++-- .../skript/api/hytale/utils/EntityReferenceUtils.java | 5 ++--- .../skriptdev/skript/api/hytale/utils/PlayerUtils.java | 5 ++--- .../skript/plugin/elements/effects/world/EffParticle.java | 3 +-- .../skript/plugin/elements/sections/world/SecParticle.java | 3 +-- 5 files changed, 8 insertions(+), 12 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index b6c30124..0636e486 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ plugins { java.sourceCompatibility = JavaVersion.VERSION_25 group = "com.github.SkriptDev" -val projectVersion = "1.4.0" +val projectVersion = "1.3.0" val hytaleVersion = "2026.03.05-9fdc5985d" // You can find Hytale versions on their maven repo: // https://maven.hytale.com/release/com/hypixel/hytale/Server/maven-metadata.xml @@ -37,7 +37,7 @@ dependencies { implementation("org.bstats:bstats-hytale:3.2.1") // Skript-Parser - implementation("com.github.SkriptDev:skript-parser:1.0.13") { + implementation("com.github.SkriptDev:skript-parser:1.0.12") { isTransitive = false } implementation("com.github.Zoltus:TinyMessage:2.0.1") { diff --git a/src/main/java/com/github/skriptdev/skript/api/hytale/utils/EntityReferenceUtils.java b/src/main/java/com/github/skriptdev/skript/api/hytale/utils/EntityReferenceUtils.java index ec790cdf..db584e13 100644 --- a/src/main/java/com/github/skriptdev/skript/api/hytale/utils/EntityReferenceUtils.java +++ b/src/main/java/com/github/skriptdev/skript/api/hytale/utils/EntityReferenceUtils.java @@ -11,7 +11,6 @@ import com.hypixel.hytale.server.core.modules.entity.item.ItemComponent; import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; import com.hypixel.hytale.server.npc.entities.NPCEntity; -import it.unimi.dsi.fastutil.objects.ObjectList; import org.jetbrains.annotations.Nullable; import javax.annotation.Nonnull; @@ -45,7 +44,7 @@ public static ReferenceType getType(Class> componentCl } public static List> getRefsInSphere(@Nonnull Vector3d pos, double radius, @Nonnull Store store) { - ObjectList> results = SpatialResource.getThreadLocalReferenceList(); + List> results = SpatialResource.getThreadLocalReferenceList(); EntityModule entityModule = EntityModule.get(); SpatialResource, EntityStore> entities = store.getResource(entityModule.getEntitySpatialResourceType()); entities.getSpatialStructure().collect(pos, (float) radius, results); @@ -58,7 +57,7 @@ public static List> getRefsInSphere(@Nonnull Vector3d pos, doub @Nonnull public static List> getRefsInBox(@Nonnull Vector3d min, @Nonnull Vector3d max, @Nonnull Store store) { - ObjectList> results = SpatialResource.getThreadLocalReferenceList(); + List> results = SpatialResource.getThreadLocalReferenceList(); EntityModule entityModule = EntityModule.get(); SpatialResource, EntityStore> entities = store.getResource(entityModule.getEntitySpatialResourceType()); entities.getSpatialStructure().collectBox(min, max, results); diff --git a/src/main/java/com/github/skriptdev/skript/api/hytale/utils/PlayerUtils.java b/src/main/java/com/github/skriptdev/skript/api/hytale/utils/PlayerUtils.java index 7d176479..078eb96b 100644 --- a/src/main/java/com/github/skriptdev/skript/api/hytale/utils/PlayerUtils.java +++ b/src/main/java/com/github/skriptdev/skript/api/hytale/utils/PlayerUtils.java @@ -11,7 +11,6 @@ import com.hypixel.hytale.server.core.universe.Universe; import com.hypixel.hytale.server.core.universe.world.World; import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; -import it.unimi.dsi.fastutil.objects.ObjectList; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -116,7 +115,7 @@ public static List getPlayerRefs(@Nullable World world) { Store store = world.getEntityStore().getStore(); if (store == null) return List.of(); - ObjectList> results = SpatialResource.getThreadLocalReferenceList(); + List> results = SpatialResource.getThreadLocalReferenceList(); SpatialResource, EntityStore> playerSpatialResource = store.getResource(EntityModule.get() .getPlayerSpatialResourceType()); playerSpatialResource.getSpatialStructure().collect(location.getPosition(), (float) radius, results); @@ -146,7 +145,7 @@ public static List getPlayerRefs(@Nullable World world) { Vector3d min = Vector3d.min(loc1.getPosition(), loc2.getPosition()); Vector3d max = Vector3d.max(loc1.getPosition(), loc2.getPosition()); - ObjectList> results = SpatialResource.getThreadLocalReferenceList(); + List> results = SpatialResource.getThreadLocalReferenceList(); SpatialResource, EntityStore> playerSpatialResource = store.getResource(EntityModule.get() .getPlayerSpatialResourceType()); playerSpatialResource.getSpatialStructure().collectBox(min, max, results); diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/effects/world/EffParticle.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/effects/world/EffParticle.java index fcbf9ac6..4b945be9 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/effects/world/EffParticle.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/effects/world/EffParticle.java @@ -19,7 +19,6 @@ import io.github.syst3ms.skriptparser.lang.Expression; import io.github.syst3ms.skriptparser.lang.TriggerContext; import io.github.syst3ms.skriptparser.parsing.ParseContext; -import it.unimi.dsi.fastutil.objects.ObjectList; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -96,7 +95,7 @@ protected void execute(@NotNull TriggerContext ctx) { if (receivers.isEmpty()) { SpatialResource, EntityStore> playerSpatialResource = store.getResource(EntityModule.get() .getPlayerSpatialResourceType()); - ObjectList> playerRefs = SpatialResource.getThreadLocalReferenceList(); + List> playerRefs = SpatialResource.getThreadLocalReferenceList(); playerSpatialResource.getSpatialStructure().collect(pos, 75.0F, playerRefs); receivers.addAll(playerRefs); } diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/sections/world/SecParticle.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/sections/world/SecParticle.java index 115982e9..10bdb22b 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/sections/world/SecParticle.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/sections/world/SecParticle.java @@ -26,7 +26,6 @@ import io.github.syst3ms.skriptparser.parsing.ParseContext; import io.github.syst3ms.skriptparser.parsing.ParserState; import io.github.syst3ms.skriptparser.util.color.Color; -import it.unimi.dsi.fastutil.objects.ObjectList; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -150,7 +149,7 @@ public Optional walk(@NotNull TriggerContext ctx) { if (receivers.isEmpty()) { SpatialResource, EntityStore> playerSpatialResource = store.getResource(EntityModule.get() .getPlayerSpatialResourceType()); - ObjectList> playerRefs = SpatialResource.getThreadLocalReferenceList(); + List> playerRefs = SpatialResource.getThreadLocalReferenceList(); playerSpatialResource.getSpatialStructure().collect(pos, 75.0F, playerRefs); receivers.addAll(playerRefs); } From 724f8a7cbaaa0b55a5091d39c5185c9024abcb0e Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 12 Mar 2026 14:26:31 -0700 Subject: [PATCH 11/17] build.gradle.kts - update pre-release --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 0636e486..64c51d1f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,7 +9,7 @@ java.sourceCompatibility = JavaVersion.VERSION_25 group = "com.github.SkriptDev" val projectVersion = "1.3.0" -val hytaleVersion = "2026.03.05-9fdc5985d" +val hytaleVersion = "2026.03.12-b1f856309" // You can find Hytale versions on their maven repo: // https://maven.hytale.com/release/com/hypixel/hytale/Server/maven-metadata.xml // https://maven.hytale.com/pre-release/com/hypixel/hytale/Server/maven-metadata.xml From a77c4d66d202c08ff08e5b8b0153fbd832ad745e Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 12 Mar 2026 14:27:59 -0700 Subject: [PATCH 12/17] build.gradle.kts - fix version - good gravy github --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 64c51d1f..8c4687f4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ plugins { java.sourceCompatibility = JavaVersion.VERSION_25 group = "com.github.SkriptDev" -val projectVersion = "1.3.0" +val projectVersion = "1.4.0" val hytaleVersion = "2026.03.12-b1f856309" // You can find Hytale versions on their maven repo: // https://maven.hytale.com/release/com/hypixel/hytale/Server/maven-metadata.xml From 05086f17502741b18524ff91be50308b0bb95887 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 12 Mar 2026 14:28:39 -0700 Subject: [PATCH 13/17] build.gradle.kts - fix parser - jesus christ github --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 8c4687f4..2dabd97a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -37,7 +37,7 @@ dependencies { implementation("org.bstats:bstats-hytale:3.2.1") // Skript-Parser - implementation("com.github.SkriptDev:skript-parser:1.0.12") { + implementation("com.github.SkriptDev:skript-parser:1.0.13") { isTransitive = false } implementation("com.github.Zoltus:TinyMessage:2.0.1") { From 412f67d2ba0edcef4e1262e618b4d4353fc1ff17 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 12 Mar 2026 14:29:41 -0700 Subject: [PATCH 14/17] EntityReferenceUtils - fix missing import --- .../skriptdev/skript/api/hytale/utils/EntityReferenceUtils.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/github/skriptdev/skript/api/hytale/utils/EntityReferenceUtils.java b/src/main/java/com/github/skriptdev/skript/api/hytale/utils/EntityReferenceUtils.java index 20881141..0a0ac9df 100644 --- a/src/main/java/com/github/skriptdev/skript/api/hytale/utils/EntityReferenceUtils.java +++ b/src/main/java/com/github/skriptdev/skript/api/hytale/utils/EntityReferenceUtils.java @@ -12,6 +12,7 @@ import com.hypixel.hytale.server.core.modules.entity.item.ItemComponent; import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; import com.hypixel.hytale.server.npc.entities.NPCEntity; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.annotation.Nonnull; From c48edc289dc2e5c205bef5c53ca54372927fe398 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 19 Mar 2026 10:03:30 -0700 Subject: [PATCH 15/17] Update pre-release and remove a bunch of stuff --- build.gradle.kts | 2 +- .../skript/event/SlotTransactionContext.java | 52 ------- .../conditions/item/CondInventoryCanHold.java | 22 +-- .../plugin/elements/events/EventHandler.java | 34 +---- .../entity/EvtLivingEntityInvChange.java | 40 +----- .../events/inventory/EvtInventoryMove.java | 136 +----------------- .../EvtItemStackSlotTransaction.java | 48 +------ .../inventory/EvtItemStackTransaction.java | 61 +------- .../events/inventory/EvtSlotTransaction.java | 27 +--- .../events/inventory/InventoryListener.java | 48 ------- .../expressions/entity/ExprHeldItem.java | 54 ++++--- .../item/ExprInventoryAmountOfItems.java | 2 +- .../expressions/item/ExprInventorySlot.java | 6 +- .../expressions/item/ExprInventorySlots.java | 2 +- .../expressions/item/ExprItemContainer.java | 2 +- .../item/ExprItemsInInventory.java | 2 +- .../elements/types/DefaultComparators.java | 28 ---- 17 files changed, 83 insertions(+), 483 deletions(-) delete mode 100644 src/main/java/com/github/skriptdev/skript/api/skript/event/SlotTransactionContext.java delete mode 100644 src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/InventoryListener.java diff --git a/build.gradle.kts b/build.gradle.kts index 2dabd97a..55ec075b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,7 +9,7 @@ java.sourceCompatibility = JavaVersion.VERSION_25 group = "com.github.SkriptDev" val projectVersion = "1.4.0" -val hytaleVersion = "2026.03.12-b1f856309" +val hytaleVersion = "2026.03.19-d0cb09bb3" // You can find Hytale versions on their maven repo: // https://maven.hytale.com/release/com/hypixel/hytale/Server/maven-metadata.xml // https://maven.hytale.com/pre-release/com/hypixel/hytale/Server/maven-metadata.xml diff --git a/src/main/java/com/github/skriptdev/skript/api/skript/event/SlotTransactionContext.java b/src/main/java/com/github/skriptdev/skript/api/skript/event/SlotTransactionContext.java deleted file mode 100644 index c35eba60..00000000 --- a/src/main/java/com/github/skriptdev/skript/api/skript/event/SlotTransactionContext.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.github.skriptdev.skript.api.skript.event; - -import com.hypixel.hytale.server.core.entity.entities.Player; -import com.hypixel.hytale.server.core.event.events.entity.LivingEntityInventoryChangeEvent; -import com.hypixel.hytale.server.core.inventory.ItemStack; -import com.hypixel.hytale.server.core.inventory.container.ItemContainer; -import com.hypixel.hytale.server.core.inventory.transaction.ActionType; -import com.hypixel.hytale.server.core.inventory.transaction.SlotTransaction; - -public abstract class SlotTransactionContext implements PlayerContext { - - private final LivingEntityInventoryChangeEvent event; - private final SlotTransaction slotTransaction; - private final Player player; - - public SlotTransactionContext(LivingEntityInventoryChangeEvent event, - SlotTransaction slotTransaction, Player player) { - this.event = event; - this.slotTransaction = slotTransaction; - this.player = player; - } - - public ItemContainer getContainer() { - return this.event.getItemContainer(); - } - - public ActionType getActionType() { - return this.slotTransaction.getAction(); - } - - public int getSlot() { - return this.slotTransaction.getSlot(); - } - - public ItemStack getSlotBefore() { - return this.slotTransaction.getSlotBefore(); - } - - public ItemStack getSlotAfter() { - return this.slotTransaction.getSlotAfter(); - } - - public ItemStack getOutput() { - return this.slotTransaction.getOutput(); - } - - @Override - public Player getPlayer() { - return this.player; - } - -} diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/conditions/item/CondInventoryCanHold.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/conditions/item/CondInventoryCanHold.java index cc2be19f..d59ba773 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/conditions/item/CondInventoryCanHold.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/conditions/item/CondInventoryCanHold.java @@ -1,7 +1,6 @@ package com.github.skriptdev.skript.plugin.elements.conditions.item; import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration; -import com.hypixel.hytale.server.core.inventory.Inventory; import com.hypixel.hytale.server.core.inventory.ItemStack; import com.hypixel.hytale.server.core.inventory.container.ItemContainer; import io.github.syst3ms.skriptparser.lang.Expression; @@ -14,23 +13,23 @@ public class CondInventoryCanHold extends ConditionalExpression { public static void register(SkriptRegistration reg) { reg.newExpression(CondInventoryCanHold.class, Boolean.class, true, - "%inventory/itemcontainer% can hold %itemstacks%", - "%inventory/itemcontainer% (can't|cannot) hold %itemstacks%") - .name("Inventory Can Hold") - .description("Checks if the inventory can hold the given items.") + "%itemcontainer% can hold %itemstacks%", + "%itemcontainer% (can't|cannot) hold %itemstacks%") + .name("ItemContainer Can Hold") + .description("Checks if the ItemContainer can hold the given items.") .examples("if inventory of player can hold itemstack of ingredient_poop:", "if inventory of player can hold {_itemstack}:") .since("1.0.0") .register(); } - private Expression holders; + private Expression holders; private Expression items; @SuppressWarnings("unchecked") @Override public boolean init(Expression[] expressions, int matchedPattern, @NotNull ParseContext parseContext) { - this.holders = expressions[0]; + this.holders = (Expression) expressions[0]; this.items = (Expression) expressions[1]; setNegated(matchedPattern == 1); return true; @@ -39,14 +38,7 @@ public boolean init(Expression[] expressions, int matchedPattern, @NotNull Pa @Override public boolean check(@NotNull TriggerContext ctx) { return this.holders.check(ctx, holder -> - this.items.check(ctx, item -> { - if (holder instanceof Inventory inventory) { - return inventory.getCombinedEverything().canAddItemStack(item); - } else if (holder instanceof ItemContainer container) { - return container.canAddItemStack(item); - } - return false; - }), isNegated()); + this.items.check(ctx, holder::canAddItemStack), isNegated()); } @Override diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/events/EventHandler.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/events/EventHandler.java index b1d98c82..e1c1cbf2 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/events/EventHandler.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/events/EventHandler.java @@ -7,7 +7,6 @@ import com.github.skriptdev.skript.api.skript.event.PlayerContext; import com.github.skriptdev.skript.api.skript.event.PlayerRefContext; import com.github.skriptdev.skript.api.skript.event.RefContext; -import com.github.skriptdev.skript.api.skript.event.SlotTransactionContext; import com.github.skriptdev.skript.api.skript.event.WorldContext; import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration; import com.github.skriptdev.skript.plugin.elements.events.entity.EvtEntityDamage; @@ -18,8 +17,8 @@ import com.github.skriptdev.skript.plugin.elements.events.entity.EvtTeleport; import com.github.skriptdev.skript.plugin.elements.events.inventory.EvtInventoryMove; import com.github.skriptdev.skript.plugin.elements.events.inventory.EvtItemStackSlotTransaction; +import com.github.skriptdev.skript.plugin.elements.events.inventory.EvtItemStackTransaction; import com.github.skriptdev.skript.plugin.elements.events.inventory.EvtSlotTransaction; -import com.github.skriptdev.skript.plugin.elements.events.inventory.InventoryListener; import com.github.skriptdev.skript.plugin.elements.events.player.EvtPlayerAddToWorld; import com.github.skriptdev.skript.plugin.elements.events.player.EvtPlayerBreakBlock; import com.github.skriptdev.skript.plugin.elements.events.player.EvtPlayerChangeGameMode; @@ -47,12 +46,8 @@ import com.hypixel.hytale.component.Ref; import com.hypixel.hytale.math.vector.Location; import com.hypixel.hytale.server.core.entity.entities.Player; -import com.hypixel.hytale.server.core.inventory.ItemStack; -import com.hypixel.hytale.server.core.inventory.container.ItemContainer; -import com.hypixel.hytale.server.core.inventory.transaction.ActionType; import com.hypixel.hytale.server.core.universe.PlayerRef; import com.hypixel.hytale.server.core.universe.world.World; -import io.github.syst3ms.skriptparser.registration.context.ContextValue; import io.github.syst3ms.skriptparser.registration.context.ContextValue.Usage; public class EventHandler { @@ -67,9 +62,9 @@ public static void register(SkriptRegistration registration) { EvtTeleport.register(registration); // INVENTORY - InventoryListener.registerListener(registration); EvtInventoryMove.register(registration); EvtItemStackSlotTransaction.register(registration); + EvtItemStackTransaction.register(registration); EvtSlotTransaction.register(registration); // PLAYER @@ -106,7 +101,6 @@ public static void register(SkriptRegistration registration) { // CONTEXT registerGlobalContexts(registration); - registerInventoryContexts(registration); } public static void shutdown() { @@ -131,33 +125,11 @@ private static void registerGlobalContexts(SkriptRegistration reg) { reg.addSingleContextValue(PlayerRefContext.class, PlayerRef.class, "player-ref", PlayerRefContext::getPlayerRef); reg.addSingleContextValue(RefContext.class, Ref.class, - "ref", RefContext::getRef); + "ref", RefContext::getRef); reg.newSingleContextValue(WorldContext.class, World.class, "world", WorldContext::getWorld) .setUsage(Usage.EXPRESSION_OR_ALONE) .register(); } - private static void registerInventoryContexts(SkriptRegistration reg) { - reg.newSingleContextValue(SlotTransactionContext.class, ItemContainer.class, - "item-container", SlotTransactionContext::getContainer) - .register(); - reg.newSingleContextValue(SlotTransactionContext.class, ActionType.class, - "action-type", SlotTransactionContext::getActionType) - .register(); - reg.newSingleContextValue(SlotTransactionContext.class, Number.class, - "slot", SlotTransactionContext::getSlot) - .register(); - reg.newSingleContextValue(SlotTransactionContext.class, ItemStack.class, - "itemstack", SlotTransactionContext::getSlotBefore) - .setState(ContextValue.State.PAST) - .register(); - reg.newSingleContextValue(SlotTransactionContext.class, ItemStack.class, - "itemstack", SlotTransactionContext::getSlotAfter) - .register(); - reg.newSingleContextValue(SlotTransactionContext.class, ItemStack.class, - "output", SlotTransactionContext::getOutput) - .register(); - } - } diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/events/entity/EvtLivingEntityInvChange.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/events/entity/EvtLivingEntityInvChange.java index daed4d02..02f460a7 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/events/entity/EvtLivingEntityInvChange.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/events/entity/EvtLivingEntityInvChange.java @@ -1,14 +1,10 @@ package com.github.skriptdev.skript.plugin.elements.events.entity; -import com.github.skriptdev.skript.api.skript.event.WorldContext; import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration; -import com.hypixel.hytale.server.core.entity.Entity; -import com.hypixel.hytale.server.core.event.events.entity.LivingEntityInventoryChangeEvent; -import com.hypixel.hytale.server.core.inventory.container.ItemContainer; -import com.hypixel.hytale.server.core.universe.world.World; import io.github.syst3ms.skriptparser.lang.Expression; import io.github.syst3ms.skriptparser.lang.TriggerContext; import io.github.syst3ms.skriptparser.lang.event.SkriptEvent; +import io.github.syst3ms.skriptparser.log.ErrorType; import io.github.syst3ms.skriptparser.parsing.ParseContext; import org.jetbrains.annotations.NotNull; @@ -18,24 +14,21 @@ public static void register(SkriptRegistration reg) { reg.newEvent(EvtLivingEntityInvChange.class, "living entity inventory change", "living entity inventory changed", "living entity inventory change event") .name("Living Entity Inventory Change") - .description("Called when a living entity's inventory changes.") + .description("Called when a living entity's inventory changes.", + "**NOTE**: This event has been removed by Hytale.") .since("1.0.0") - .setHandledContexts(InvChangeContext.class) .register(); - - reg.addSingleContextValue(InvChangeContext.class, Entity.class, "entity", InvChangeContext::getEntity); - reg.addSingleContextValue(InvChangeContext.class, ItemContainer.class, "item-container", InvChangeContext::getContainer); - // TODO add transaction } @Override public boolean init(Expression[] expressions, int matchedPattern, ParseContext parseContext) { - return true; + parseContext.getLogger().error("This event is no longer valid, Hytale removed it", ErrorType.SEMANTIC_ERROR); + return false; } @Override public boolean check(TriggerContext triggerContext) { - return triggerContext instanceof InvChangeContext; + return false; } @Override @@ -43,25 +36,4 @@ public String toString(@NotNull TriggerContext ctx, boolean debug) { return "living entity inventory change"; } - public record InvChangeContext(LivingEntityInventoryChangeEvent event) implements TriggerContext, WorldContext { - - private Entity getEntity() { - return this.event.getEntity(); - } - - private ItemContainer getContainer() { - return this.event.getItemContainer(); - } - - @Override - public World getWorld() { - return this.event.getEntity().getWorld(); - } - - @Override - public String getName() { - return "living entity inventory change context"; - } - } - } diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/EvtInventoryMove.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/EvtInventoryMove.java index cdf6165b..2fc29ee2 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/EvtInventoryMove.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/EvtInventoryMove.java @@ -1,20 +1,11 @@ package com.github.skriptdev.skript.plugin.elements.events.inventory; -import com.github.skriptdev.skript.api.skript.event.PlayerContext; import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration; -import com.hypixel.hytale.server.core.entity.entities.Player; -import com.hypixel.hytale.server.core.event.events.entity.LivingEntityInventoryChangeEvent; -import com.hypixel.hytale.server.core.inventory.ItemStack; -import com.hypixel.hytale.server.core.inventory.container.ItemContainer; -import com.hypixel.hytale.server.core.inventory.transaction.ActionType; -import com.hypixel.hytale.server.core.inventory.transaction.MoveTransaction; -import com.hypixel.hytale.server.core.inventory.transaction.MoveType; -import com.hypixel.hytale.server.core.inventory.transaction.SlotTransaction; import io.github.syst3ms.skriptparser.lang.Expression; import io.github.syst3ms.skriptparser.lang.TriggerContext; import io.github.syst3ms.skriptparser.lang.event.SkriptEvent; +import io.github.syst3ms.skriptparser.log.ErrorType; import io.github.syst3ms.skriptparser.parsing.ParseContext; -import io.github.syst3ms.skriptparser.registration.context.ContextValue; import org.jetbrains.annotations.NotNull; public class EvtInventoryMove extends SkriptEvent { @@ -25,143 +16,26 @@ public static void register(SkriptRegistration reg) { "inventory (put|place) down") .name("Inventory Move") .description("Called when an item is moved in an inventory window.", - "**Types**:", - " - move = Called after an item is moved from one slot to another (fired twice).", - " - pickup = Called when an item is picked up from the inventory (fired once after the item is put down).", - " - place down = Called when an item is placed down in the inventory (fired once).") + "**NOTE**: This event has been removed by Hytale.") .since("1.3.0") - .setHandledContexts(InventoryMoveContext.class) - .register(); - - reg.newSingleContextValue(InventoryMoveContext.class, ItemStack.class, - "itemstack", InventoryMoveContext::getSlotBefore) - .setState(ContextValue.State.PAST) - .description("Represents the ItemStack in the slot before the action.") - .register(); - reg.newSingleContextValue(InventoryMoveContext.class, ItemStack.class, - "itemstack", InventoryMoveContext::getSlotAfter) - .description("Represents the ItemStack in the slot after the action.") - .register(); - reg.newSingleContextValue(InventoryMoveContext.class, ItemStack.class, - "output", InventoryMoveContext::getOutput) - .register(); - reg.newSingleContextValue(InventoryMoveContext.class, ActionType.class, - "action", InventoryMoveContext::getActionType) - .description("Represents the type of action performed in the inventory move.") - .register(); - reg.newSingleContextValue(InventoryMoveContext.class, Integer.class, - "slot", InventoryMoveContext::getSlot) - .description("Represents the slot number involved in the inventory move.") - .register(); - reg.newSingleContextValue(InventoryMoveContext.class, ItemContainer.class, - "item-container", InventoryMoveContext::getPastContainer) - .description("Represents the container before the inventory move.") - .setState(ContextValue.State.PAST) - .register(); - reg.newSingleContextValue(InventoryMoveContext.class, ItemContainer.class, - "item-container", InventoryMoveContext::getContainer) - .description("Represents the container after the inventory move.") .register(); } - private int pattern; - @Override public boolean init(Expression[] expressions, int matchedPattern, ParseContext parseContext) { - this.pattern = matchedPattern; + parseContext.getLogger().error("This event is no longer valid, Hytale removed it", ErrorType.SEMANTIC_ERROR); + return true; } - @SuppressWarnings("RedundantIfStatement") @Override public boolean check(TriggerContext ctx) { - if (!(ctx instanceof InventoryMoveContext context)) return false; - if (this.pattern == 0) { - return true; - } else if (this.pattern == 1 && context.transaction.getMoveType() == MoveType.MOVE_FROM_SELF) { - return true; - } else if (this.pattern == 2 && context.transaction.getMoveType() == MoveType.MOVE_TO_SELF) { - return true; - } - return false; } @Override public String toString(@NotNull TriggerContext ctx, boolean debug) { - return switch (pattern) { - case 0 -> "inventory move"; - case 1 -> "inventory pickup"; - case 2 -> "inventory put down"; - default -> "unknown"; - }; - } - - public record InventoryMoveContext(LivingEntityInventoryChangeEvent event, MoveTransaction transaction, Player player) - implements PlayerContext { - - @Override - public Player getPlayer() { - return this.player; - } - - public ItemStack getSlotBefore() { - if (this.transaction.getMoveType() == MoveType.MOVE_FROM_SELF) { - return this.transaction.getRemoveTransaction().getSlotBefore(); - } else if (this.transaction.getAddTransaction() instanceof SlotTransaction slotTransaction) { - return slotTransaction.getSlotBefore(); - } - return null; - } - - public ItemStack getSlotAfter() { - if (this.transaction.getMoveType() == MoveType.MOVE_FROM_SELF) { - return this.transaction.getRemoveTransaction().getSlotAfter(); - } else if (this.transaction.getAddTransaction() instanceof SlotTransaction slotTransaction) { - return slotTransaction.getSlotAfter(); - } - return null; - } - - public ItemStack getOutput() { - if (this.transaction.getMoveType() == MoveType.MOVE_FROM_SELF) { - return this.transaction.getRemoveTransaction().getOutput(); - } else if (this.transaction.getAddTransaction() instanceof SlotTransaction slotTransaction) { - return slotTransaction.getOutput(); - } - return null; - } - - public ActionType getActionType() { - if (this.transaction.getMoveType() == MoveType.MOVE_FROM_SELF) { - return this.transaction.getRemoveTransaction().getAction(); - } else if (this.transaction.getAddTransaction() instanceof SlotTransaction slotTransaction) { - return slotTransaction.getAction(); - } - return null; - } - - public int getSlot() { - if (this.transaction.getMoveType() == MoveType.MOVE_FROM_SELF) { - return this.transaction.getRemoveTransaction().getSlot(); - } else if (this.transaction.getAddTransaction() instanceof SlotTransaction slotTransaction) { - return slotTransaction.getSlot(); - } - return -1; - } - - public ItemContainer getPastContainer() { - return this.event.getItemContainer(); - } - - public ItemContainer getContainer() { - return this.transaction.getOtherContainer(); - } - - @Override - public String getName() { - return "inventory move context"; - } + return "deprecated"; } } diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/EvtItemStackSlotTransaction.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/EvtItemStackSlotTransaction.java index 0337ee65..5946ff78 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/EvtItemStackSlotTransaction.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/EvtItemStackSlotTransaction.java @@ -1,14 +1,10 @@ package com.github.skriptdev.skript.plugin.elements.events.inventory; -import com.github.skriptdev.skript.api.skript.event.SlotTransactionContext; import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration; -import com.hypixel.hytale.server.core.entity.entities.Player; -import com.hypixel.hytale.server.core.event.events.entity.LivingEntityInventoryChangeEvent; -import com.hypixel.hytale.server.core.inventory.ItemStack; -import com.hypixel.hytale.server.core.inventory.transaction.ItemStackSlotTransaction; import io.github.syst3ms.skriptparser.lang.Expression; import io.github.syst3ms.skriptparser.lang.TriggerContext; import io.github.syst3ms.skriptparser.lang.event.SkriptEvent; +import io.github.syst3ms.skriptparser.log.ErrorType; import io.github.syst3ms.skriptparser.parsing.ParseContext; import org.jetbrains.annotations.NotNull; @@ -18,28 +14,21 @@ public static void register(SkriptRegistration reg) { reg.newEvent(EvtItemStackSlotTransaction.class, "inventory item[stack] slot transaction") .name("Inventory ItemStack Slot Transaction") - .description("Called when there is an inventory transaction involving an ItemStack in a slot.") + .description("Called when there is an inventory transaction involving an ItemStack in a slot.", + "**NOTE**: This event has been removed by Hytale.") .since("1.3.0") - .setHandledContexts(ItemStackSlotContext.class) - .register(); - - reg.newSingleContextValue(ItemStackSlotContext.class, ItemStack.class, - "output", ItemStackSlotContext::getOutput) - .register(); - - reg.newSingleContextValue(ItemStackSlotContext.class, ItemStack.class, - "remainder", ItemStackSlotContext::getRemainder) .register(); } @Override public boolean init(Expression[] expressions, int matchedPattern, ParseContext parseContext) { - return true; + parseContext.getLogger().error("This event is no longer valid, Hytale removed it", ErrorType.SEMANTIC_ERROR); + return false; } @Override public boolean check(TriggerContext ctx) { - return ctx instanceof ItemStackSlotContext; + return false; } @Override @@ -47,29 +36,4 @@ public String toString(@NotNull TriggerContext ctx, boolean debug) { return "inventory item slot transaction"; } - public static class ItemStackSlotContext extends SlotTransactionContext { - - private final ItemStackSlotTransaction transaction; - - ItemStackSlotContext(LivingEntityInventoryChangeEvent event, - ItemStackSlotTransaction transaction, - Player player) { - super(event, transaction, player); - this.transaction = transaction; - } - - public ItemStack getQuery() { - return this.transaction.getQuery(); - } - - public ItemStack getRemainder() { - return this.transaction.getRemainder(); - } - - @Override - public String getName() { - return "itemstack slot context"; - } - } - } diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/EvtItemStackTransaction.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/EvtItemStackTransaction.java index d83fee8e..107c5a61 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/EvtItemStackTransaction.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/EvtItemStackTransaction.java @@ -1,16 +1,10 @@ package com.github.skriptdev.skript.plugin.elements.events.inventory; -import com.github.skriptdev.skript.api.skript.event.PlayerContext; import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration; -import com.hypixel.hytale.server.core.entity.entities.Player; -import com.hypixel.hytale.server.core.event.events.entity.LivingEntityInventoryChangeEvent; -import com.hypixel.hytale.server.core.inventory.ItemStack; -import com.hypixel.hytale.server.core.inventory.container.ItemContainer; -import com.hypixel.hytale.server.core.inventory.transaction.ActionType; -import com.hypixel.hytale.server.core.inventory.transaction.ItemStackTransaction; import io.github.syst3ms.skriptparser.lang.Expression; import io.github.syst3ms.skriptparser.lang.TriggerContext; import io.github.syst3ms.skriptparser.lang.event.SkriptEvent; +import io.github.syst3ms.skriptparser.log.ErrorType; import io.github.syst3ms.skriptparser.parsing.ParseContext; import org.jetbrains.annotations.NotNull; @@ -19,33 +13,21 @@ public class EvtItemStackTransaction extends SkriptEvent { public static void register(SkriptRegistration reg) { reg.newEvent(EvtItemStackTransaction.class, "inventory item[stack] transaction") .name("Inventory ItemStack Transaction") - .description("Called when there is an inventory transaction involving an ItemStack.") + .description("Called when there is an inventory transaction involving an ItemStack.", + "**NOTE**: This event has been removed by Hytale.") .since("1.3.0") - .setHandledContexts(ItemStackTransactionContext.class) - .register(); - - reg.newSingleContextValue(ItemStackTransactionContext.class, ItemContainer.class, - "item-container", ItemStackTransactionContext::getContainer) - .register(); - reg.newSingleContextValue(ItemStackTransactionContext.class, ActionType.class, - "action-type", ItemStackTransactionContext::getActionType) - .register(); - reg.newSingleContextValue(ItemStackTransactionContext.class, ItemStack.class, - "query", ItemStackTransactionContext::getQuery) - .register(); - reg.newSingleContextValue(ItemStackTransactionContext.class, ItemStack.class, - "remainder", ItemStackTransactionContext::getRemainder) .register(); } @Override public boolean init(Expression[] expressions, int matchedPattern, ParseContext parseContext) { - return true; + parseContext.getLogger().error("This event is no longer valid, Hytale removed it", ErrorType.SEMANTIC_ERROR); + return false; } @Override public boolean check(TriggerContext ctx) { - return ctx instanceof ItemStackTransactionContext; + return false; } @Override @@ -53,35 +35,4 @@ public String toString(@NotNull TriggerContext ctx, boolean debug) { return "inventory itemstack transaction"; } - public record ItemStackTransactionContext(LivingEntityInventoryChangeEvent event, - ItemStackTransaction transaction, - Player player) implements PlayerContext { - - public ItemContainer getContainer() { - return this.event.getItemContainer(); - } - - public ActionType getActionType() { - return this.transaction.getAction(); - } - - public ItemStack getQuery() { - return this.transaction.getQuery(); - } - - public ItemStack getRemainder() { - return this.transaction.getRemainder(); - } - - @Override - public Player getPlayer() { - return this.player; - } - - @Override - public String getName() { - return "itemstack transaction context"; - } - } - } diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/EvtSlotTransaction.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/EvtSlotTransaction.java index e637002c..ec61fdb4 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/EvtSlotTransaction.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/EvtSlotTransaction.java @@ -1,12 +1,10 @@ package com.github.skriptdev.skript.plugin.elements.events.inventory; import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration; -import com.hypixel.hytale.server.core.entity.entities.Player; -import com.hypixel.hytale.server.core.event.events.entity.LivingEntityInventoryChangeEvent; -import com.hypixel.hytale.server.core.inventory.transaction.SlotTransaction; import io.github.syst3ms.skriptparser.lang.Expression; import io.github.syst3ms.skriptparser.lang.TriggerContext; import io.github.syst3ms.skriptparser.lang.event.SkriptEvent; +import io.github.syst3ms.skriptparser.log.ErrorType; import io.github.syst3ms.skriptparser.parsing.ParseContext; import org.jetbrains.annotations.NotNull; @@ -16,20 +14,21 @@ public static void register(SkriptRegistration reg) { reg.newEvent(EvtSlotTransaction.class, "inventory slot transaction") .name("Inventory Slot Transaction") - .description("Called when there is an inventory transaction involving a slot.") + .description("Called when there is an inventory transaction involving a slot.", + "**NOTE**: This event has been removed by Hytale.") .since("1.3.0") - .setHandledContexts(SlotTransactionContext.class) .register(); } @Override public boolean init(Expression[] expressions, int matchedPattern, ParseContext parseContext) { - return true; + parseContext.getLogger().error("This event is no longer valid, Hytale removed it", ErrorType.SEMANTIC_ERROR); + return false; } @Override public boolean check(TriggerContext ctx) { - return ctx instanceof SlotTransactionContext; + return false; } @Override @@ -37,18 +36,4 @@ public String toString(@NotNull TriggerContext ctx, boolean debug) { return "inventory slot transaction"; } - public static class SlotTransactionContext - extends com.github.skriptdev.skript.api.skript.event.SlotTransactionContext { - - public SlotTransactionContext(LivingEntityInventoryChangeEvent event, - SlotTransaction slotTransaction, Player player) { - super(event, slotTransaction, player); - } - - @Override - public String getName() { - return "slot transaction context"; - } - } - } diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/InventoryListener.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/InventoryListener.java deleted file mode 100644 index 7eece13f..00000000 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/events/inventory/InventoryListener.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.github.skriptdev.skript.plugin.elements.events.inventory; - -import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration; -import com.github.skriptdev.skript.plugin.elements.events.entity.EvtLivingEntityInvChange.InvChangeContext; -import com.github.skriptdev.skript.plugin.elements.events.inventory.EvtInventoryMove.InventoryMoveContext; -import com.github.skriptdev.skript.plugin.elements.events.inventory.EvtItemStackSlotTransaction.ItemStackSlotContext; -import com.github.skriptdev.skript.plugin.elements.events.inventory.EvtItemStackTransaction.ItemStackTransactionContext; -import com.github.skriptdev.skript.plugin.elements.events.inventory.EvtSlotTransaction.SlotTransactionContext; -import com.hypixel.hytale.event.EventRegistry; -import com.hypixel.hytale.server.core.entity.entities.Player; -import com.hypixel.hytale.server.core.event.events.entity.LivingEntityInventoryChangeEvent; -import com.hypixel.hytale.server.core.inventory.transaction.ItemStackSlotTransaction; -import com.hypixel.hytale.server.core.inventory.transaction.ItemStackTransaction; -import com.hypixel.hytale.server.core.inventory.transaction.MoveTransaction; -import com.hypixel.hytale.server.core.inventory.transaction.SlotTransaction; -import com.hypixel.hytale.server.core.inventory.transaction.Transaction; -import io.github.syst3ms.skriptparser.lang.TriggerMap; - -public class InventoryListener { - - public static void registerListener(SkriptRegistration reg) { - EventRegistry eventRegistry = reg.getSkript().getPlugin().getEventRegistry(); - - eventRegistry.registerGlobal(LivingEntityInventoryChangeEvent.class, event -> { - InvChangeContext ctx = new InvChangeContext(event); - TriggerMap.callTriggersByContext(ctx); - - if (event.getEntity() instanceof Player player) { - Transaction transaction = event.getTransaction(); - - if (transaction instanceof MoveTransaction move) { - InventoryMoveContext context = new InventoryMoveContext(event, move, player); - TriggerMap.callTriggersByContext(context); - } else if (transaction instanceof ItemStackSlotTransaction slot) { - ItemStackSlotContext context = new ItemStackSlotContext(event, slot, player); - TriggerMap.callTriggersByContext(context); - } else if (transaction instanceof ItemStackTransaction stack) { - ItemStackTransactionContext context = new ItemStackTransactionContext(event, stack, player); - TriggerMap.callTriggersByContext(context); - } else if (transaction instanceof SlotTransaction slotTransaction) { - SlotTransactionContext context = new SlotTransactionContext(event, slotTransaction, player); - TriggerMap.callTriggersByContext(context); - } - } - }); - } - -} diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/entity/ExprHeldItem.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/entity/ExprHeldItem.java index 93d4a6d2..51b59153 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/entity/ExprHeldItem.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/entity/ExprHeldItem.java @@ -1,8 +1,11 @@ package com.github.skriptdev.skript.plugin.elements.expressions.entity; +import com.github.skriptdev.skript.api.hytale.utils.EntityUtils; import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration; import com.hypixel.hytale.server.core.entity.LivingEntity; -import com.hypixel.hytale.server.core.inventory.Inventory; +import com.hypixel.hytale.server.core.inventory.InventoryComponent.Hotbar; +import com.hypixel.hytale.server.core.inventory.InventoryComponent.Tool; +import com.hypixel.hytale.server.core.inventory.InventoryComponent.Utility; import com.hypixel.hytale.server.core.inventory.ItemStack; import com.hypixel.hytale.server.core.inventory.container.ItemContainer; import io.github.syst3ms.skriptparser.lang.Expression; @@ -50,13 +53,19 @@ public ItemStack[] getValues(@NotNull TriggerContext ctx) { ItemStack[] items = new ItemStack[entities.length]; for (int i = 0; i < entities.length; i++) { - Inventory inventory = entities[i].getInventory(); + LivingEntity entity = entities[i]; if (this.pattern == 0) { - items[i] = inventory.getActiveHotbarItem(); + Hotbar component = EntityUtils.getComponent(entity, Hotbar.getComponentType()); + if (component == null) continue; + items[i] = component.getActiveItem(); } else if (this.pattern == 1) { - items[i] = inventory.getUtilityItem(); + Utility component = EntityUtils.getComponent(entity, Utility.getComponentType()); + if (component == null) continue; + items[i] = component.getActiveItem(); } else if (this.pattern == 2) { - items[i] = inventory.getActiveToolItem(); + Tool component = EntityUtils.getComponent(entity, Tool.getComponentType()); + if (component == null) continue; + items[i] = component.getActiveItem(); } } return items; @@ -77,28 +86,37 @@ public void change(@NotNull TriggerContext ctx, @NotNull ChangeMode changeMode, } for (LivingEntity livingEntity : this.entities.getArray(ctx)) { - Inventory inventory = livingEntity.getInventory(); + if (this.pattern == 0) { - ItemContainer hotbar = inventory.getHotbar(); - byte activeHotbarSlot = inventory.getActiveHotbarSlot(); - hotbar.setItemStackForSlot(activeHotbarSlot, itemStack); + Hotbar hotbar = EntityUtils.getComponent(livingEntity, Hotbar.getComponentType()); + if (hotbar == null) continue; + + ItemContainer container = hotbar.getInventory(); + byte activeHotbarSlot = hotbar.getActiveSlot(); + container.setItemStackForSlot(activeHotbarSlot, itemStack); } else if (this.pattern == 1) { - ItemContainer utility = inventory.getUtility(); - byte activeUtilitySlot = inventory.getActiveUtilitySlot(); + Utility utility = EntityUtils.getComponent(livingEntity, Utility.getComponentType()); + if (utility == null) continue; + + ItemContainer container = utility.getInventory(); + byte activeUtilitySlot = utility.getActiveSlot(); if (activeUtilitySlot < 0) { activeUtilitySlot = 0; - inventory.setActiveToolsSlot((byte) 0); + utility.setActiveSlot((byte) 0); } - utility.setItemStackForSlot(activeUtilitySlot, itemStack); + container.setItemStackForSlot(activeUtilitySlot, itemStack); } else if (this.pattern == 2) { - ItemContainer tools = inventory.getTools(); - byte activeToolSlot = inventory.getActiveToolsSlot(); + Tool tool = EntityUtils.getComponent(livingEntity, Tool.getComponentType()); + if (tool == null) continue; + + ItemContainer container = tool.getInventory(); + byte activeToolSlot = tool.getActiveSlot(); if (activeToolSlot < 0) { - inventory.setUsingToolsItem(true); - inventory.setActiveToolsSlot((byte) 1); + tool.setUsingToolsItem(true); + tool.setActiveSlot((byte) 1); activeToolSlot = 1; } - tools.setItemStackForSlot(activeToolSlot, itemStack); + container.setItemStackForSlot(activeToolSlot, itemStack); } } } diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventoryAmountOfItems.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventoryAmountOfItems.java index a089adbf..7d6cb0f1 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventoryAmountOfItems.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventoryAmountOfItems.java @@ -47,7 +47,7 @@ public Number[] getValues(@NotNull TriggerContext ctx) { if (o instanceof ItemContainer c) { container = c; } else if (o instanceof Inventory inv) { - container = inv.getCombinedEverything(); + container = inv.getCombinedHotbarFirst(); } else { return null; } diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventorySlot.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventorySlot.java index 69bfb98e..73ba66d2 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventorySlot.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventorySlot.java @@ -49,7 +49,7 @@ public ItemStack[] getValues(@NotNull TriggerContext ctx) { ItemStack itemStack = null; if (o instanceof Inventory inventory) { - itemStack = inventory.getCombinedEverything().getItemStack(number.shortValue()); + itemStack = inventory.getCombinedHotbarFirst().getItemStack(number.shortValue()); } else if (o instanceof ItemContainer itemContainer) { itemStack = itemContainer.getItemStack(number.shortValue()); } @@ -80,13 +80,13 @@ public void change(@NotNull TriggerContext ctx, @NotNull ChangeMode changeMode, if (changeMode == ChangeMode.SET) { ItemStack itemStack = (ItemStack) changeWith[0]; if (o instanceof Inventory inventory) { - inventory.getCombinedEverything().setItemStackForSlot(numSlot.shortValue(), itemStack); + inventory.getCombinedHotbarFirst().setItemStackForSlot(numSlot.shortValue(), itemStack); } else if (o instanceof ItemContainer itemContainer) { itemContainer.setItemStackForSlot(numSlot.shortValue(), itemStack); } } else if (changeMode == ChangeMode.DELETE) { if (o instanceof Inventory inventory) { - inventory.getCombinedEverything().setItemStackForSlot(numSlot.shortValue(), null); + inventory.getCombinedHotbarFirst().setItemStackForSlot(numSlot.shortValue(), null); } else if (o instanceof ItemContainer itemContainer) { itemContainer.setItemStackForSlot(numSlot.shortValue(), null); } diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventorySlots.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventorySlots.java index e08705fa..39457202 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventorySlots.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprInventorySlots.java @@ -42,7 +42,7 @@ public Number[] getValues(@NotNull TriggerContext ctx) { List slots = new ArrayList<>(); if (object instanceof Inventory inventory) { - int containersSize = inventory.getCombinedEverything().getContainersSize(); + int containersSize = inventory.getCombinedHotbarFirst().getContainersSize(); for (int i = 0; i < containersSize; i++) { slots.add(i); } diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprItemContainer.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprItemContainer.java index 1490f726..710b8be9 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprItemContainer.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprItemContainer.java @@ -69,7 +69,7 @@ public ItemContainer[] getValues(@NotNull TriggerContext ctx) { case 3 -> inventory.getUtility(); case 4 -> inventory.getTools(); case 5 -> inventory.getBackpack(); - case 6 -> inventory.getCombinedEverything(); + //case 6 -> inventory.getCombinedEverything(); case 7 -> inventory.getCombinedHotbarFirst(); case 8 -> inventory.getCombinedStorageFirst(); case 9 -> inventory.getCombinedBackpackStorageHotbar(); diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprItemsInInventory.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprItemsInInventory.java index d514bc83..41181dc0 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprItemsInInventory.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/expressions/item/ExprItemsInInventory.java @@ -46,7 +46,7 @@ public ItemStack[] getValues(@NotNull TriggerContext ctx) { Object o = single.get(); if (o instanceof Inventory inventory) { - CombinedItemContainer combinedEverything = inventory.getCombinedEverything(); + CombinedItemContainer combinedEverything = inventory.getCombinedHotbarFirst(); combinedEverything.forEach((_, itemStack) -> itemStacks.add(itemStack)); } else if (o instanceof ItemContainer itemContainer) { itemContainer.forEach((_, itemStack) -> itemStacks.add(itemStack)); diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/types/DefaultComparators.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/types/DefaultComparators.java index 9771f994..bc485048 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/types/DefaultComparators.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/types/DefaultComparators.java @@ -4,7 +4,6 @@ import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType; import com.hypixel.hytale.server.core.asset.type.item.config.Item; import com.hypixel.hytale.server.core.asset.type.model.config.ModelAsset; -import com.hypixel.hytale.server.core.inventory.Inventory; import com.hypixel.hytale.server.core.inventory.ItemStack; import com.hypixel.hytale.server.core.inventory.container.ItemContainer; import io.github.syst3ms.skriptparser.types.comparisons.Comparator; @@ -41,33 +40,6 @@ public Relation apply(@NotNull BlockType blockType1, @NotNull BlockType blockTyp } private static void inventory() { - // Inventory contains ItemStack - Comparators.registerComparator(Inventory.class, ItemStack.class, new Comparator<>(false) { - @Override - public Relation apply(@NotNull Inventory inventory, @NotNull ItemStack itemStack) { - AtomicReference relation = new AtomicReference<>(Relation.NOT_EQUAL); - inventory.getCombinedEverything().forEach((s, is) -> { - if (is.isEquivalentType(itemStack)) { - relation.set(Relation.EQUAL); - } - }); - return relation.get(); - } - }); - // Inventory contains Item - Comparators.registerComparator(Inventory.class, Item.class, new Comparator<>(false) { - @Override - public Relation apply(@NotNull Inventory inventory, @NotNull Item item) { - AtomicReference relation = new AtomicReference<>(Relation.NOT_EQUAL); - inventory.getCombinedEverything().forEach((s, is) -> { - if (is.getItem().equals(item)) { - relation.set(Relation.EQUAL); - } - }); - return relation.get(); - } - }); - // ItemContainer contains ItemStack Comparators.registerComparator(ItemContainer.class, ItemStack.class, new Comparator<>(false) { @Override From 16be680cf88959daeaf19437cdbc21257e7a462e Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 26 Mar 2026 10:39:24 -0700 Subject: [PATCH 16/17] build.gradle.kts - update to Hytale release --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 14aa1f5a..ee882059 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,7 +9,7 @@ java.sourceCompatibility = JavaVersion.VERSION_25 group = "com.github.SkriptDev" val projectVersion = "1.5.0" -val hytaleVersion = "2026.03.19-d0cb09bb3" +val hytaleVersion = "2026.03.26-89796e57b" // You can find Hytale versions on their maven repo: // https://maven.hytale.com/release/com/hypixel/hytale/Server/maven-metadata.xml // https://maven.hytale.com/pre-release/com/hypixel/hytale/Server/maven-metadata.xml From 5dea8957954b5e81cd77718773c1a62cdbe6ef5b Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 26 Mar 2026 10:49:15 -0700 Subject: [PATCH 17/17] Add player functions --- .../skript/api/hytale/utils/PlayerUtils.java | 5 +++ .../elements/functions/DefaultFunctions.java | 38 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/main/java/com/github/skriptdev/skript/api/hytale/utils/PlayerUtils.java b/src/main/java/com/github/skriptdev/skript/api/hytale/utils/PlayerUtils.java index 078eb96b..5453f582 100644 --- a/src/main/java/com/github/skriptdev/skript/api/hytale/utils/PlayerUtils.java +++ b/src/main/java/com/github/skriptdev/skript/api/hytale/utils/PlayerUtils.java @@ -5,6 +5,7 @@ import com.hypixel.hytale.component.spatial.SpatialResource; import com.hypixel.hytale.math.vector.Location; import com.hypixel.hytale.math.vector.Vector3d; +import com.hypixel.hytale.server.core.NameMatching; import com.hypixel.hytale.server.core.entity.entities.Player; import com.hypixel.hytale.server.core.modules.entity.EntityModule; import com.hypixel.hytale.server.core.universe.PlayerRef; @@ -86,6 +87,10 @@ public static List getPlayerRefs(@Nullable World world) { return store.getComponent(reference, PlayerRef.getComponentType()); } + public static @Nullable PlayerRef getPlayerRef(String name) { + return Universe.get().getPlayerByUsername(name, NameMatching.EXACT_IGNORE_CASE); + } + /** * Get a Player from a PlayerRef. * diff --git a/src/main/java/com/github/skriptdev/skript/plugin/elements/functions/DefaultFunctions.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/functions/DefaultFunctions.java index d45438de..f1e0b73b 100644 --- a/src/main/java/com/github/skriptdev/skript/plugin/elements/functions/DefaultFunctions.java +++ b/src/main/java/com/github/skriptdev/skript/plugin/elements/functions/DefaultFunctions.java @@ -1,5 +1,6 @@ package com.github.skriptdev.skript.plugin.elements.functions; +import com.github.skriptdev.skript.api.hytale.utils.PlayerUtils; import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration; import com.hypixel.hytale.math.shape.Box; import com.hypixel.hytale.math.vector.Location; @@ -8,9 +9,11 @@ import com.hypixel.hytale.math.vector.Vector3i; import com.hypixel.hytale.protocol.packets.worldmap.ContextMenuItem; import com.hypixel.hytale.server.core.asset.type.item.config.Item; +import com.hypixel.hytale.server.core.entity.entities.Player; import com.hypixel.hytale.server.core.inventory.ItemStack; import com.hypixel.hytale.server.core.inventory.container.ItemContainer; import com.hypixel.hytale.server.core.inventory.container.SimpleItemContainer; +import com.hypixel.hytale.server.core.universe.PlayerRef; import com.hypixel.hytale.server.core.universe.Universe; import com.hypixel.hytale.server.core.universe.world.World; import io.github.syst3ms.skriptparser.util.SkriptDate; @@ -26,6 +29,7 @@ public static void register(SkriptRegistration reg) { dateTimeFunctions(reg); itemFunctions(reg); mathFunctions(reg); + playerFunctions(reg); positionFunctions(reg); serverFunctions(reg); } @@ -211,6 +215,40 @@ private static void mathFunctions(SkriptRegistration reg) { .register(); } + private static void playerFunctions(SkriptRegistration reg) { + reg.newJavaFunction("player", Player.class, true) + .parameter("name", String.class) + .parameter("world", World.class) + .executeSingle(params -> { + String name = (String) params[0][0]; + World world = (World) params[1][0]; + + for (PlayerRef playerRef : world.getPlayerRefs()) { + if (playerRef.getUsername().equals(name)) { + return PlayerUtils.getPlayer(playerRef, world); + } + } + return null; + }) + .name("Player") + .description("Returns the player with the given name in the given world.") + .examples("set {_player} to player(\"ShaneBee\", world(\"default\"))") + .since("INSERT VERSION") + .register(); + + reg.newJavaFunction("playerRef", PlayerRef.class, true) + .parameter("name", String.class) + .executeSingle(params -> { + String name = (String) params[0][0]; + return PlayerUtils.getPlayerRef(name); + }) + .name("PlayerRef") + .description("Returns the PlayerRef with the given name.") + .examples("set {_ref} to playerRef(\"ShaneBee\")") + .since("INSERT VERSION") + .register(); + } + private static void positionFunctions(SkriptRegistration reg) { reg.newJavaFunction("box", Box.class, true) .parameter("x1", Number.class)