diff --git a/build.gradle.kts b/build.gradle.kts index 6897250f..b6c30124 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.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 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 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) { 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(); 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(); } } 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..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,8 +1,20 @@ 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.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.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,37 +22,48 @@ 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; -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.") + 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 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") + "clear inventory of player", + "add itemstack of ingredient_stick to inventory of player") .since("1.0.0") .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 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.entities.getArray(ctx)) { + Ref ref = livingEntity.getReference(); + if (ref == null) continue; + + Store store = ref.getStore(); + CombinedItemContainer combined = InventoryComponent.getCombined(store, ref, InventoryComponent.HOTBAR_FIRST); + containers.add(combined); + } + return containers.toArray(new ItemContainer[0]); } @Override @@ -53,18 +76,42 @@ 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 container : toChange) { for (Object o : changeWith) { if (o instanceof ItemStack itemStack) { - inventory.getCombinedEverything().addItemStack(itemStack); + container.addItemStack(itemStack); } } } } else if (changeMode == ChangeMode.DELETE) { - for (Inventory 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(); + } } } } @@ -76,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); } } 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<>() {