From b42b9b013b7e9881410e01451d0b1aecb52b3d46 Mon Sep 17 00:00:00 2001 From: tikaiz Date: Mon, 19 Jan 2026 09:32:31 +0100 Subject: [PATCH] Added EndermanTeleportComponent --- .../tikaiz/AddDefaultComponentTickSystem.java | 10 ++-- src/main/java/com/tikaiz/CustomComponent.java | 14 ----- .../com/tikaiz/CustomComponentTickSystem.java | 39 ++++++++----- .../java/com/tikaiz/DamageEventSystem.java | 58 ++++++------------- .../com/tikaiz/EndermanTeleportComponent.java | 48 +++++++++++++++ src/main/java/com/tikaiz/HytaleDemo.java | 30 ++-------- src/main/java/com/tikaiz/TeleportHelper.java | 22 +++++++ 7 files changed, 121 insertions(+), 100 deletions(-) delete mode 100644 src/main/java/com/tikaiz/CustomComponent.java create mode 100644 src/main/java/com/tikaiz/EndermanTeleportComponent.java create mode 100644 src/main/java/com/tikaiz/TeleportHelper.java diff --git a/src/main/java/com/tikaiz/AddDefaultComponentTickSystem.java b/src/main/java/com/tikaiz/AddDefaultComponentTickSystem.java index f4687bb..912656e 100644 --- a/src/main/java/com/tikaiz/AddDefaultComponentTickSystem.java +++ b/src/main/java/com/tikaiz/AddDefaultComponentTickSystem.java @@ -11,9 +11,9 @@ import org.checkerframework.checker.nullness.compatqual.NullableDecl; import java.util.logging.Level; public class AddDefaultComponentTickSystem extends EntityTickingSystem { - private final ComponentType customComponentType; + private final ComponentType customComponentType; - public AddDefaultComponentTickSystem(ComponentType poisonComponentType) { + public AddDefaultComponentTickSystem(ComponentType poisonComponentType) { this.customComponentType = poisonComponentType; } @Override @@ -23,7 +23,7 @@ public class AddDefaultComponentTickSystem extends EntityTickingSystem store, @NonNullDecl CommandBuffer commandBuffer) { Ref ref = archetypeChunk.getReferenceTo(i); - CustomComponent component = store.getComponent(ref, customComponentType); + EndermanTeleportComponent component = store.getComponent(ref, customComponentType); if (component != null) { return; } @@ -36,13 +36,13 @@ public class AddDefaultComponentTickSystem extends EntityTickingSystem getQuery() { - return Query.any(); + return Query.and(DisplayNameComponent.getComponentType()); } } diff --git a/src/main/java/com/tikaiz/CustomComponent.java b/src/main/java/com/tikaiz/CustomComponent.java deleted file mode 100644 index 063602c..0000000 --- a/src/main/java/com/tikaiz/CustomComponent.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.tikaiz; - -import com.hypixel.hytale.component.Component; -import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; -import javax.annotation.Nullable; - -public class CustomComponent implements Component { - - @Nullable - @Override - public Component clone() { - return new CustomComponent(); - } -} \ No newline at end of file diff --git a/src/main/java/com/tikaiz/CustomComponentTickSystem.java b/src/main/java/com/tikaiz/CustomComponentTickSystem.java index db4b827..03e1536 100644 --- a/src/main/java/com/tikaiz/CustomComponentTickSystem.java +++ b/src/main/java/com/tikaiz/CustomComponentTickSystem.java @@ -3,19 +3,26 @@ package com.tikaiz; import com.hypixel.hytale.component.*; import com.hypixel.hytale.component.query.Query; import com.hypixel.hytale.component.system.tick.EntityTickingSystem; +import com.hypixel.hytale.math.vector.Vector3d; +import com.hypixel.hytale.math.vector.Vector3f; import com.hypixel.hytale.server.core.modules.entity.component.DisplayNameComponent; +import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent; +import com.hypixel.hytale.server.core.modules.entity.teleport.Teleport; import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; import org.checkerframework.checker.nullness.compatqual.NonNullDecl; import org.checkerframework.checker.nullness.compatqual.NullableDecl; import java.util.logging.Level; -public class CustomComponentTickSystem extends EntityTickingSystem { - private final ComponentType customComponentType; +import static com.tikaiz.TeleportHelper.randomTeleport; - public CustomComponentTickSystem(ComponentType poisonComponentType) { +public class CustomComponentTickSystem extends EntityTickingSystem { + private final ComponentType customComponentType; + + public CustomComponentTickSystem(ComponentType poisonComponentType) { this.customComponentType = poisonComponentType; } + @Override public void tick(float dt, int i, @@ -23,24 +30,24 @@ public class CustomComponentTickSystem extends EntityTickingSystem @NonNullDecl Store store, @NonNullDecl CommandBuffer commandBuffer) { Ref ref = archetypeChunk.getReferenceTo(i); - CustomComponent component = store.getComponent(ref, customComponentType); - if (component == null) { - LoggerSingleton.getInstance().getHytaleLogger().at(Level.SEVERE).log("This should never happen! "); - return; - } - DisplayNameComponent displayNameComponent = store.getComponent(ref, DisplayNameComponent.getComponentType()); - if (displayNameComponent == null || displayNameComponent.getDisplayName() == null) { - LoggerSingleton.getInstance().getHytaleLogger().at(Level.INFO).log("new Event Ticking system called on : " + ref); - return; - } - var displayName = displayNameComponent.getDisplayName().getAnsiMessage(); - LoggerSingleton.getInstance().getHytaleLogger().at(Level.INFO).log("new Event Ticking system called on : " + displayName); + EndermanTeleportComponent endermanTeleportComponent = store.getComponent(ref, customComponentType); + assert endermanTeleportComponent != null; + var transformComponent = store.getComponent(ref, TransformComponent.getComponentType()); + assert transformComponent != null; + + endermanTeleportComponent.addElapsedTime(dt); + if (endermanTeleportComponent.getElapsedTime() >= endermanTeleportComponent.getTickInterval()) { + endermanTeleportComponent.resetElapsedTime(); + + randomTeleport(commandBuffer, ref, transformComponent.getPosition()); + } } + @NullableDecl @Override public Query getQuery() { - return Query.and(customComponentType); + return Query.and(customComponentType, TransformComponent.getComponentType()); } } diff --git a/src/main/java/com/tikaiz/DamageEventSystem.java b/src/main/java/com/tikaiz/DamageEventSystem.java index f103f1a..bed2d2d 100644 --- a/src/main/java/com/tikaiz/DamageEventSystem.java +++ b/src/main/java/com/tikaiz/DamageEventSystem.java @@ -1,28 +1,25 @@ package com.tikaiz; -import com.hypixel.hytale.component.ArchetypeChunk; -import com.hypixel.hytale.component.CommandBuffer; -import com.hypixel.hytale.component.Ref; -import com.hypixel.hytale.component.Store; +import com.hypixel.hytale.component.*; import com.hypixel.hytale.component.query.Query; import com.hypixel.hytale.component.system.EntityEventSystem; -import com.hypixel.hytale.math.vector.Vector3d; -import com.hypixel.hytale.math.vector.Vector3f; -import com.hypixel.hytale.server.core.entity.UUIDComponent; +import com.hypixel.hytale.server.core.modules.entity.EntityModule; import com.hypixel.hytale.server.core.modules.entity.component.DisplayNameComponent; import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent; import com.hypixel.hytale.server.core.modules.entity.damage.Damage; -import com.hypixel.hytale.server.core.modules.entity.teleport.Teleport; import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; import com.hypixel.hytale.server.core.util.NotificationUtil; import org.checkerframework.checker.nullness.compatqual.NonNullDecl; import org.checkerframework.checker.nullness.compatqual.NullableDecl; -import java.util.logging.Level; +import static com.tikaiz.TeleportHelper.randomTeleport; public class DamageEventSystem extends EntityEventSystem { - protected DamageEventSystem() { + private final ComponentType endermanTeleportComponentType; + + protected DamageEventSystem(ComponentType type) { super(Damage.class); + this.endermanTeleportComponentType = type; } @Override @@ -32,42 +29,23 @@ public class DamageEventSystem extends EntityEventSystem { @NonNullDecl CommandBuffer commandBuffer, @NonNullDecl Damage damage) { Ref ref = archetypeChunk.getReferenceTo(i); - TransformComponent component = store.getComponent(ref, TransformComponent.getComponentType()); - if (component == null) { - LoggerSingleton.getInstance().getHytaleLogger().at(Level.SEVERE).log("Transform was Null"); - return; - } + TransformComponent transformComponent = store.getComponent(ref, TransformComponent.getComponentType()); + assert transformComponent != null; var displayNameComponent = store.getComponent(ref, DisplayNameComponent.getComponentType()); - if (displayNameComponent == null) { - LoggerSingleton.getInstance().getHytaleLogger().at(Level.SEVERE).log("Display name was Null"); - return; + assert displayNameComponent != null; + assert displayNameComponent.getDisplayName() != null; + var name = displayNameComponent.getDisplayName().getAnsiMessage(); + + NotificationUtil.sendNotificationToUniverse(name); + if (Math.random() < 0.3) { + var transform = transformComponent.getTransform(); + randomTeleport(commandBuffer, ref, transform.getPosition()); } - - NotificationUtil.sendNotificationToUniverse(displayNameComponent.getDisplayName()); - LoggerSingleton.getInstance().getHytaleLogger().at(Level.INFO).log("Display name: " + displayNameComponent.getDisplayName()); - - var uuidComponent = store.getComponent(ref, UUIDComponent.getComponentType()); - if (uuidComponent == null) { - LoggerSingleton.getInstance().getHytaleLogger().at(Level.SEVERE).log("UUID was Null"); - return; - } - LoggerSingleton.getInstance().getHytaleLogger().at(Level.INFO).log("UUID: " + uuidComponent.getUuid()); - var transform = component.getTransform(); - LoggerSingleton.getInstance().getHytaleLogger().at(Level.INFO).log("Transform: "+transform); - - Vector3d addPos = new Vector3d((Math.random()*20)-10, 3, (Math.random()*20)-10); - - var newPos = transform.getPosition().add(addPos); - - Teleport teleportForPlayer = Teleport.createForPlayer(newPos, new Vector3f()); - new Thread(()->{ - store.addComponent(ref,Teleport.getComponentType(),teleportForPlayer); - }).start(); } @NullableDecl @Override public Query getQuery() { - return Query.any(); + return Query.and(TransformComponent.getComponentType(), DisplayNameComponent.getComponentType(), endermanTeleportComponentType); } } diff --git a/src/main/java/com/tikaiz/EndermanTeleportComponent.java b/src/main/java/com/tikaiz/EndermanTeleportComponent.java new file mode 100644 index 0000000..c454ecc --- /dev/null +++ b/src/main/java/com/tikaiz/EndermanTeleportComponent.java @@ -0,0 +1,48 @@ +package com.tikaiz; + +import com.hypixel.hytale.component.Component; +import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; + +import javax.annotation.Nullable; + +public class EndermanTeleportComponent implements Component { + + private float tickInterval = 5f; + private float elapsedTime = 0f; + + public EndermanTeleportComponent(float tickInterval, float elapsedTime) { + this.tickInterval = tickInterval; + this.elapsedTime = elapsedTime; + } + + public EndermanTeleportComponent() { + this(10f, 0f); + } + + public EndermanTeleportComponent(EndermanTeleportComponent other) { + this.tickInterval = other.tickInterval; + this.elapsedTime = other.elapsedTime; + } + + public float getTickInterval() { + return tickInterval; + } + + public float getElapsedTime() { + return elapsedTime; + } + + public void addElapsedTime(float dt) { + this.elapsedTime += dt; + } + + public void resetElapsedTime() { + this.elapsedTime = 0f; + } + + @Nullable + @Override + public Component clone() { + return new EndermanTeleportComponent(this); + } +} \ No newline at end of file diff --git a/src/main/java/com/tikaiz/HytaleDemo.java b/src/main/java/com/tikaiz/HytaleDemo.java index dbd9a7c..9da6ec3 100644 --- a/src/main/java/com/tikaiz/HytaleDemo.java +++ b/src/main/java/com/tikaiz/HytaleDemo.java @@ -1,31 +1,11 @@ package com.tikaiz; -import com.hypixel.hytale.component.Ref; -import com.hypixel.hytale.component.SystemType; -import com.hypixel.hytale.component.query.Query; -import com.hypixel.hytale.component.system.CancellableEcsEvent; -import com.hypixel.hytale.component.system.EcsEvent; -import com.hypixel.hytale.server.core.event.events.BootEvent; -import com.hypixel.hytale.server.core.modules.entity.component.DisplayNameComponent; -import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent; -import com.hypixel.hytale.server.core.modules.entity.damage.Damage; import com.hypixel.hytale.server.core.plugin.JavaPlugin; import com.hypixel.hytale.server.core.plugin.JavaPluginInit; -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.events.AllWorldsLoadedEvent; -import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; -import com.hypixel.hytale.server.core.util.NotificationUtil; -import com.hypixel.hytale.server.npc.AllNPCsLoadedEvent; -import com.hypixel.hytale.server.spawning.LoadedNPCEvent; -import com.hypixel.hytale.server.spawning.assets.spawns.config.NPCSpawn; import com.tikaiz.commands.ExampleCommand; -import jdk.jfr.EventType; import javax.annotation.Nonnull; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Queue; import java.util.logging.Level; public class HytaleDemo extends JavaPlugin { @@ -38,15 +18,15 @@ public class HytaleDemo extends JavaPlugin { @Override protected void setup() { this.getCommandRegistry().registerCommand(new ExampleCommand()); - this.getEntityStoreRegistry().registerSystem(new DamageEventSystem()); var type = this.getEntityStoreRegistry() - .registerComponent(CustomComponent.class, CustomComponent::new); + .registerComponent(EndermanTeleportComponent.class, EndermanTeleportComponent::new); this.getEntityStoreRegistry().registerSystem(new AddDefaultComponentTickSystem(type)); this.getEntityStoreRegistry().registerSystem(new CustomComponentTickSystem(type)); + this.getEntityStoreRegistry().registerSystem(new DamageEventSystem(type)); // var list = new ArrayList(); - this.getEventRegistry().registerGlobal(AllWorldsLoadedEvent.class, (x)->{ - LoggerSingleton.getInstance().getHytaleLogger().at(Level.INFO).log("World has loaded!"); - }); +// this.getEventRegistry().registerGlobal(AllWorldsLoadedEvent.class, (x)->{ +// LoggerSingleton.getInstance().getHytaleLogger().at(Level.INFO).log("World has loaded!"); +// }); // Universe.get().getDefaultWorld().getEntityStore().getStore().fetch(new SystemType<>(), Query.any(),list); // EntityStore.REGISTRY.assertInStoreThread(); // this.getEventRegistry().registerGlobal(LoadedNPCEvent.class, (x)->{ diff --git a/src/main/java/com/tikaiz/TeleportHelper.java b/src/main/java/com/tikaiz/TeleportHelper.java new file mode 100644 index 0000000..e1847c3 --- /dev/null +++ b/src/main/java/com/tikaiz/TeleportHelper.java @@ -0,0 +1,22 @@ +package com.tikaiz; + +import com.hypixel.hytale.component.CommandBuffer; +import com.hypixel.hytale.component.Ref; +import com.hypixel.hytale.math.vector.Vector3d; +import com.hypixel.hytale.math.vector.Vector3f; +import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent; +import com.hypixel.hytale.server.core.modules.entity.teleport.Teleport; +import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; +import org.checkerframework.checker.nullness.compatqual.NonNullDecl; + +abstract class TeleportHelper { + + static void randomTeleport(@NonNullDecl CommandBuffer commandBuffer, Ref ref, Vector3d position) { + Vector3d addPos = new Vector3d((Math.random() * 20) - 10, 3, (Math.random() * 20) - 10); + + var newPos = position.add(addPos); + + Teleport teleportForPlayer = Teleport.createForPlayer(newPos, new Vector3f()); + commandBuffer.addComponent(ref, Teleport.getComponentType(), teleportForPlayer); + } +}