diff --git a/build.gradle.kts b/build.gradle.kts index 86ca0b11..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.02.19-1a311a592" +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 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..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,13 +5,13 @@ 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; 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; @@ -87,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. * @@ -116,7 +120,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 +150,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/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/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/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/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/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/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/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..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 @@ -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(); @@ -46,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 8ba687e0..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 @@ -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", @@ -48,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()); } @@ -79,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 fbe6d48c..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 @@ -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") @@ -41,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 3eb7082e..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 @@ -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..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 @@ -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(); } @@ -45,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/functions/DefaultFunctions.java b/src/main/java/com/github/skriptdev/skript/plugin/elements/functions/DefaultFunctions.java index 1464aa48..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,11 +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.LivingEntity; -import com.hypixel.hytale.server.core.inventory.Inventory; +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; @@ -28,6 +29,7 @@ public static void register(SkriptRegistration reg) { dateTimeFunctions(reg); itemFunctions(reg); mathFunctions(reg); + playerFunctions(reg); positionFunctions(reg); serverFunctions(reg); } @@ -118,49 +120,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) @@ -212,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) 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); } 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 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<>() {