Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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.19-d0cb09bb3"
// You can find Hytale versions on their maven repo:
// https://maven.hytale.com/release/com/hypixel/hytale/Server/maven-metadata.xml
// https://maven.hytale.com/pre-release/com/hypixel/hytale/Server/maven-metadata.xml
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import com.hypixel.hytale.server.core.universe.Universe;
import com.hypixel.hytale.server.core.universe.world.World;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import it.unimi.dsi.fastutil.objects.ObjectList;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

Expand Down Expand Up @@ -116,7 +115,7 @@ public static List<PlayerRef> getPlayerRefs(@Nullable World world) {
Store<EntityStore> store = world.getEntityStore().getStore();
if (store == null) return List.of();

ObjectList<Ref<EntityStore>> results = SpatialResource.getThreadLocalReferenceList();
List<Ref<EntityStore>> results = SpatialResource.getThreadLocalReferenceList();
SpatialResource<Ref<EntityStore>, EntityStore> playerSpatialResource = store.getResource(EntityModule.get()
.getPlayerSpatialResourceType());
playerSpatialResource.getSpatialStructure().collect(location.getPosition(), (float) radius, results);
Expand Down Expand Up @@ -146,7 +145,7 @@ public static List<PlayerRef> getPlayerRefs(@Nullable World world) {
Vector3d min = Vector3d.min(loc1.getPosition(), loc2.getPosition());
Vector3d max = Vector3d.max(loc1.getPosition(), loc2.getPosition());

ObjectList<Ref<EntityStore>> results = SpatialResource.getThreadLocalReferenceList();
List<Ref<EntityStore>> results = SpatialResource.getThreadLocalReferenceList();
SpatialResource<Ref<EntityStore>, EntityStore> playerSpatialResource = store.getResource(EntityModule.get()
.getPlayerSpatialResourceType());
playerSpatialResource.getSpatialStructure().collectBox(min, max, results);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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<ItemContainer> holders;
private Expression<ItemStack> items;

@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expressions, int matchedPattern, @NotNull ParseContext parseContext) {
this.holders = expressions[0];
this.holders = (Expression<ItemContainer>) expressions[0];
this.items = (Expression<ItemStack>) expressions[1];
setNegated(matchedPattern == 1);
return true;
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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!\"",
Expand All @@ -26,24 +27,30 @@ public static void register(SkriptRegistration registration) {
}

private Expression<?> players;
private Expression<String> 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<String>) 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<? extends String> 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)) {
Expand All @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -96,7 +95,7 @@ protected void execute(@NotNull TriggerContext ctx) {
if (receivers.isEmpty()) {
SpatialResource<Ref<EntityStore>, EntityStore> playerSpatialResource = store.getResource(EntityModule.get()
.getPlayerSpatialResourceType());
ObjectList<Ref<EntityStore>> playerRefs = SpatialResource.getThreadLocalReferenceList();
List<Ref<EntityStore>> playerRefs = SpatialResource.getThreadLocalReferenceList();
playerSpatialResource.getSpatialStructure().collect(pos, 75.0F, playerRefs);
receivers.addAll(playerRefs);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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 {
Expand All @@ -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
Expand Down Expand Up @@ -106,7 +101,6 @@ public static void register(SkriptRegistration registration) {

// CONTEXT
registerGlobalContexts(registration);
registerInventoryContexts(registration);
}

public static void shutdown() {
Expand All @@ -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();
}

}
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -18,50 +14,26 @@ 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
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";
}
}

}
Loading
Loading