Skip to content
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ repositories {
dependencies {
compileOnly("com.hypixel.hytale:Server:${hytaleVersion}")
compileOnly("org.jetbrains:annotations:26.0.2")
implementation("com.github.SkriptDev:skript-parser:1.0.7") {
implementation("com.github.SkriptDev:skript-parser:1.0.8") {
isTransitive = false
}
implementation("com.github.Zoltus:TinyMessage:2.0.1") {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.github.skriptdev.skript.api.hytale;

import com.github.skriptdev.skript.api.hytale.utils.LocationUtils;
import com.hypixel.hytale.math.vector.Location;
import com.hypixel.hytale.math.vector.Vector3d;

Expand Down Expand Up @@ -33,11 +34,13 @@ public enum Direction {
}

public Location apply(Location location, Number offset) {
return function.apply(location, offset);
Location clone = LocationUtils.clone(location);
return function.apply(clone, offset);
}

public Location apply(Location location) {
return function.apply(location, 1);
Location clone = LocationUtils.clone(location);
return function.apply(clone, 1);
}

public String getName() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.github.skriptdev.skript.api.hytale;
package com.github.skriptdev.skript.api.hytale.utils;

import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
import com.hypixel.hytale.server.core.asset.type.item.config.Item;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.github.skriptdev.skript.api.hytale;
package com.github.skriptdev.skript.api.hytale.utils;

import com.hypixel.hytale.component.AddReason;
import com.hypixel.hytale.component.Component;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.github.skriptdev.skript.api.hytale.utils;

import com.hypixel.hytale.math.vector.Location;

/**
* Untilities for {@link Location Locations}
*/
public class LocationUtils {

/**
* Clone a location.
* This prevents breaking references
*
* @param location Location to clone
* @return New location instance
*/
public static Location clone(Location location) {
return new Location(location.getWorld(),
location.getPosition().clone(),
location.getRotation().clone());
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.github.skriptdev.skript.api.hytale;
package com.github.skriptdev.skript.api.hytale.utils;

import com.hypixel.hytale.server.core.entity.entities.Player;
import com.hypixel.hytale.server.core.universe.Universe;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.github.skriptdev.skript.api.hytale;
package com.github.skriptdev.skript.api.hytale.utils;

import com.hypixel.hytale.component.CommandBuffer;
import com.hypixel.hytale.component.Store;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,15 @@ private void printDocumentation(String type, BsonDocument syntaxDoc, SyntaxInfo<
for (String s : documentation.getDescription()) {
descriptionArray.add(new BsonString(s));
}
// TEMP EXPERIMENTAL TODO
if (documentation.isExperimental()) {
descriptionArray.add(new BsonString(" "));
descriptionArray.add(new BsonString("**This feature is experimental and may change in future versions.**"));
String experimentalMessage = documentation.getExperimentalMessage();
if (experimentalMessage != null) {
descriptionArray.add(new BsonString(experimentalMessage));
}
}
syntaxDoc.put("description", descriptionArray);

// USAGE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,6 @@ public AssetStoreRegistrar(Class<C> assetClass, DefaultAssetMap<K, C> assetMap,
this.supplier = () -> assetStoreValues.values().stream().iterator();
this.literalParser = s -> this.assetStoreValues.get(s.toLowerCase(Locale.ROOT).replace(" ", "_"));
this.toStringFunction = JsonAsset::getId;
this.toVariableNameFunction = c -> baseName + ":" + c.getId().toLowerCase(Locale.ROOT).replace(" ", "_");
}

/**
Expand Down Expand Up @@ -242,7 +241,6 @@ public EnumRegistrar(Class<E> enumClass, String name, String pattern) {
this.supplier = () -> this.values.values().iterator();
this.literalParser = s -> this.values.get(s.toLowerCase(Locale.ROOT).replace(" ", "_"));
this.toStringFunction = e -> e.name().toLowerCase(Locale.ROOT);
this.toVariableNameFunction = e -> this.baseName + ":" + e.name().toLowerCase(Locale.ROOT).replace(" ", "_");
}


Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.skriptdev.skript.plugin.elements.conditions;

import com.github.skriptdev.skript.api.hytale.EntityUtils;
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.entities.Player;
import com.hypixel.hytale.server.core.entity.movement.MovementStatesComponent;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.skriptdev.skript.plugin.elements.effects.entity;

import com.github.skriptdev.skript.api.hytale.EntityUtils;
import com.github.skriptdev.skript.api.hytale.utils.EntityUtils;
import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration;
import com.hypixel.hytale.component.Store;
import com.hypixel.hytale.math.vector.Location;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.skriptdev.skript.plugin.elements.effects.entity;

import com.github.skriptdev.skript.api.hytale.EntityUtils;
import com.github.skriptdev.skript.api.hytale.utils.EntityUtils;
import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.component.Store;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.skriptdev.skript.plugin.elements.effects.world;

import com.github.skriptdev.skript.api.hytale.StoreUtils;
import com.github.skriptdev.skript.api.hytale.utils.StoreUtils;
import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration;
import com.hypixel.hytale.component.CommandBuffer;
import com.hypixel.hytale.component.Store;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.skriptdev.skript.plugin.elements.events.player;

import com.github.skriptdev.skript.api.hytale.AssetStoreUtils;
import com.github.skriptdev.skript.api.hytale.utils.AssetStoreUtils;
import com.github.skriptdev.skript.api.hytale.Block;
import com.github.skriptdev.skript.api.skript.event.BlockContext;
import com.github.skriptdev.skript.api.skript.event.CancellableContext;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.skriptdev.skript.plugin.elements.expressions.entity;

import com.github.skriptdev.skript.api.hytale.EntityUtils;
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.modules.entitystats.EntityStatMap;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.skriptdev.skript.plugin.elements.expressions.entity;

import com.github.skriptdev.skript.api.hytale.EntityUtils;
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.modules.entitystats.EntityStatMap;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.skriptdev.skript.plugin.elements.expressions.entity;

import com.github.skriptdev.skript.api.hytale.EntityUtils;
import com.github.skriptdev.skript.api.hytale.utils.EntityUtils;
import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration;
import com.hypixel.hytale.math.vector.Vector3d;
import com.hypixel.hytale.protocol.ChangeVelocityType;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.skriptdev.skript.plugin.elements.expressions.entity;

import com.github.skriptdev.skript.api.hytale.EntityUtils;
import com.github.skriptdev.skript.api.hytale.utils.EntityUtils;
import com.hypixel.hytale.server.core.entity.Entity;
import com.hypixel.hytale.server.core.entity.entities.Player;
import com.hypixel.hytale.server.core.universe.PlayerRef;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.skriptdev.skript.plugin.elements.expressions.entityeffect;

import com.github.skriptdev.skript.api.hytale.EntityUtils;
import com.github.skriptdev.skript.api.hytale.utils.EntityUtils;
import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.component.Store;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.skriptdev.skript.plugin.elements.expressions.other;

import com.github.skriptdev.skript.api.hytale.EntityUtils;
import com.github.skriptdev.skript.api.hytale.utils.EntityUtils;
import com.hypixel.hytale.server.core.entity.Entity;
import com.hypixel.hytale.server.core.universe.PlayerRef;
import com.hypixel.hytale.server.core.universe.world.World;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.skriptdev.skript.plugin.elements.expressions.player;

import com.github.skriptdev.skript.api.hytale.PlayerUtils;
import com.github.skriptdev.skript.api.hytale.utils.PlayerUtils;
import com.hypixel.hytale.server.core.entity.entities.Player;
import com.hypixel.hytale.server.core.universe.world.World;
import io.github.syst3ms.skriptparser.lang.Expression;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.skriptdev.skript.plugin.elements.expressions.player;

import com.github.skriptdev.skript.api.hytale.EntityUtils;
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.entities.Player;
import com.hypixel.hytale.server.core.permissions.PermissionsModule;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.skriptdev.skript.plugin.elements.expressions.player;

import com.github.skriptdev.skript.api.hytale.EntityUtils;
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.entities.Player;
import com.hypixel.hytale.server.core.permissions.PermissionsModule;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public static void register(SkriptRegistration registration) {
if (spawnProvider == null) return null;

Transform spawnPoint = spawnProvider.getSpawnPoint(world, RANDOM_UUID);
return new Location(spawnPoint);
return new Location(world.getName(), spawnPoint);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.skriptdev.skript.plugin.elements.sections;

import com.github.skriptdev.skript.api.hytale.EntityUtils;
import com.github.skriptdev.skript.api.hytale.utils.EntityUtils;
import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration;
import com.hypixel.hytale.component.Store;
import com.hypixel.hytale.math.vector.Location;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public Optional<? extends Statement> walk(@NotNull TriggerContext ctx) {
// Place the variables back into the original context
// This is done in case World#execute is delayed
Variables.copyLocalVariables(dummy, ctx);
firstStatement.walk(ctx);
Statement.runAll(firstStatement, ctx);

// Clear out old variables
Variables.clearLocalVariables(dummy);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,33 +17,25 @@
import io.github.syst3ms.skriptparser.parsing.ParserState;
import io.github.syst3ms.skriptparser.registration.SkriptRegistration;
import io.github.syst3ms.skriptparser.registration.context.ContextValue;
import io.github.syst3ms.skriptparser.variables.VariableMap;
import io.github.syst3ms.skriptparser.variables.Variables;
import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;

public class SecSpawnNPC extends CodeSection {

public static class SpawnMobContext implements TriggerContext {

private final Entity entity;

public SpawnMobContext(Entity entity) {
this.entity = entity;
}

public Entity getEntity() {
return this.entity;
}
public record SpawnMobContext(Entity entity) implements TriggerContext {

@Override
public String getName() {
return "spawn_mob";
public String getName() {
return "spawn_mob";
}
}
}

public static void register(SkriptRegistration registration) {
registration.newSection(SecSpawnNPC.class, "spawn [a|an] %npcrole% at %location%")
Expand All @@ -58,11 +50,11 @@ public static void register(SkriptRegistration registration) {
.register();

registration.newSingleContextValue(SpawnMobContext.class, Entity.class,
"spawned-entity", SpawnMobContext::getEntity)
"spawned-entity", SpawnMobContext::entity)
.setUsage(ContextValue.Usage.EXPRESSION_OR_ALONE)
.register();
registration.newSingleContextValue(SpawnMobContext.class, Entity.class,
"spawned-npc", SpawnMobContext::getEntity)
"spawned-npc", SpawnMobContext::entity)
.setUsage(ContextValue.Usage.EXPRESSION_OR_ALONE)
.register();
}
Expand Down Expand Up @@ -105,22 +97,38 @@ public Optional<? extends Statement> walk(@NotNull TriggerContext ctx) {
Vector3f rotation = location.getRotation().clone();
if (Float.isNaN(rotation.getX())) rotation = Vector3f.ZERO;

AtomicReference<VariableMap> vars = new AtomicReference<>();
VariableMap variableMap = Variables.copyLocalVariables(ctx);
vars.set(variableMap);

NPCPlugin.get().spawnEntity(store, roleSingle.get().index(), location.getPosition().clone(), rotation, null, (npcEntity, _, _) -> {
SpawnMobContext spawnMobContext = new SpawnMobContext(npcEntity);

// Copy the variables from the main TriggerContext into the SpawnMobContext
Variables.copyLocalVariables(ctx, spawnMobContext);
// Copy the locals from the previous trigger into this context
Variables.setLocalVariables(spawnMobContext, vars.get());

setNext(null);
firstStatement.ifPresent(statement ->
Statement.runAll(statement, spawnMobContext));

// After that is run, copy them back
Variables.copyLocalVariables(spawnMobContext, ctx);
VariableMap map = Variables.copyLocalVariables(spawnMobContext);
vars.set(map);

// Clear locals from the no longer used SpawnMobContext
Variables.clearLocalVariables(spawnMobContext);
}, null);

return nextStatement;
}, (npcEntity, entityStoreRef, entityStoreStore) -> {
nextStatement.ifPresent(statement -> {
// Take the previous local variables and use them again in this context
Variables.setLocalVariables(ctx, vars.get());
Statement.runAll(statement, ctx);

// Now we're done, we can clear them out
Variables.clearLocalVariables(ctx);
});
});

return Optional.empty();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.skriptdev.skript.plugin.elements.types;

import com.github.skriptdev.skript.api.hytale.EntityUtils;
import com.github.skriptdev.skript.api.hytale.utils.EntityUtils;
import com.hypixel.hytale.math.vector.Location;
import com.hypixel.hytale.math.vector.Vector3d;
import com.hypixel.hytale.math.vector.Vector3f;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.skriptdev.skript.plugin.elements.types;

import com.github.skriptdev.skript.api.hytale.EntityUtils;
import com.github.skriptdev.skript.api.hytale.utils.EntityUtils;
import com.github.skriptdev.skript.api.skript.registration.NPCRegistry;
import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration;
import com.hypixel.hytale.component.Ref;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ static void register(SkriptRegistration reg) {
.name("Item Container")
.description("Represents an item container within an inventory (such as the armor container).")
.since("1.0.0")
.experimental()
.toStringFunction(ItemContainer::toString)
.serializer(new TypeSerializer<>() {
@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.skriptdev.skript.plugin.elements.types;

import com.github.skriptdev.skript.api.hytale.EntityUtils;
import com.github.skriptdev.skript.api.hytale.utils.EntityUtils;
import com.github.skriptdev.skript.api.skript.registration.SkriptRegistration;
import com.hypixel.hytale.protocol.GameMode;
import com.hypixel.hytale.server.core.entity.entities.Player;
Expand Down
Loading