Add ParticleSystem

This commit is contained in:
2026-01-19 10:11:20 +01:00
parent bffb728973
commit f410efe96e
7 changed files with 29 additions and 131 deletions

View File

@@ -5,8 +5,8 @@ import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
import com.tikaiz.commands.ExampleCommand; import com.tikaiz.commands.ExampleCommand;
import com.tikaiz.components.EndermanTeleportComponent; import com.tikaiz.components.EndermanTeleportComponent;
import com.tikaiz.singletons.LoggerSingleton; import com.tikaiz.singletons.LoggerSingleton;
import com.tikaiz.systems.AddDefaultComponentTickSystem; import com.tikaiz.systems.AddEndermanTeleportComponentTickSystem;
import com.tikaiz.systems.CustomComponentTickSystem; import com.tikaiz.systems.EndermanComponentTickSystem;
import com.tikaiz.systems.DamageEventSystem; import com.tikaiz.systems.DamageEventSystem;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
@@ -23,25 +23,8 @@ public class HytaleDemo extends JavaPlugin {
this.getCommandRegistry().registerCommand(new ExampleCommand()); this.getCommandRegistry().registerCommand(new ExampleCommand());
var type = this.getEntityStoreRegistry() var type = this.getEntityStoreRegistry()
.registerComponent(EndermanTeleportComponent.class, EndermanTeleportComponent::new); .registerComponent(EndermanTeleportComponent.class, EndermanTeleportComponent::new);
this.getEntityStoreRegistry().registerSystem(new AddDefaultComponentTickSystem(type)); this.getEntityStoreRegistry().registerSystem(new AddEndermanTeleportComponentTickSystem(type));
this.getEntityStoreRegistry().registerSystem(new CustomComponentTickSystem(type)); this.getEntityStoreRegistry().registerSystem(new EndermanComponentTickSystem(type));
this.getEntityStoreRegistry().registerSystem(new DamageEventSystem(type)); this.getEntityStoreRegistry().registerSystem(new DamageEventSystem(type));
// var list = new ArrayList<EntityStore>();
// 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)->{
// String id = x.getBuilderInfo().;
// Arrays.stream(x.getNPCs()).forEach(x->x.getFlockDefinition().);
// x.getAllNPCs().forEach((integer, builderInfo) -> {
// builderInfo.
// });
// NotificationUtil.sendNotificationToUniverse(x.getBuilderInfo().getKeyName());
// });
// this.getEventRegistry().register(Damage.class,(x)->{
// Damage.Source source = x.getSource();
// });
} }
} }

View File

@@ -57,28 +57,8 @@ public class ExampleCommand extends AbstractPlayerCommand {
Teleport teleportForPlayer = Teleport.createForPlayer(newPos, new Vector3f()); Teleport teleportForPlayer = Teleport.createForPlayer(newPos, new Vector3f());
store.addComponent(ref,Teleport.getComponentType(),teleportForPlayer); store.addComponent(ref,Teleport.getComponentType(),teleportForPlayer);
// var results = new ArrayList<Object>();
// store.fetch();
// transform.setPosition(newPos);
playerRef.sendMessage(Message.raw("Set Player Position to: " + newPos)); playerRef.sendMessage(Message.raw("Set Player Position to: " + newPos));
// String message = messageArg.get(commandContext); // get the argument text by the player
// playerRef.sendMessage(Message.raw("Player Name: " + playerRef.getUsername()));
// var mass = store.getComponent(ref, PhysicsValues.getComponentType()).getMass();
// playerRef.sendMessage(Message.raw("Player Mass: " + mass));
// var archetype = store.getArchetype(ref);
// playerRef.sendMessage(Message.raw("Archetype count: "+archetype.length()));
// for (int i = 0; i < archetype.length(); i++) {
// var type = archetype.get(i);
// if (type!=null){
// var typeClass = type.getTypeClass();
// playerRef.sendMessage(Message.raw("Type class: "+typeClass));
// LoggerSingleton.getInstance().getHytaleLogger().at(Level.INFO).log("Type class: "+typeClass);
// }
// }
} }
} }

View File

@@ -1,21 +1,12 @@
package com.tikaiz.helpers; package com.tikaiz.helpers;
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.Vector3d;
import com.hypixel.hytale.math.vector.Vector3f;
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;
public abstract class TeleportHelper { public abstract class TeleportHelper {
public static void randomTeleport(@NonNullDecl CommandBuffer<EntityStore> commandBuffer, Ref<EntityStore> ref, Vector3d position) { public static Vector3d randomTeleport(Vector3d position) {
Vector3d addPos = new Vector3d((Math.random() * 20) - 10, 3, (Math.random() * 20) - 10); Vector3d addPos = new Vector3d((Math.random() * 20) - 10, 3, (Math.random() * 20) - 10);
var newPos = position.add(addPos); return position.add(addPos);
Teleport teleportForPlayer = Teleport.createForPlayer(newPos, new Vector3f());
commandBuffer.addComponent(ref, Teleport.getComponentType(), teleportForPlayer);
} }
} }

View File

@@ -12,10 +12,10 @@ import org.checkerframework.checker.nullness.compatqual.NullableDecl;
import java.util.logging.Level; import java.util.logging.Level;
public class AddDefaultComponentTickSystem extends EntityTickingSystem<EntityStore> { public class AddEndermanTeleportComponentTickSystem extends EntityTickingSystem<EntityStore> {
private final ComponentType<EntityStore, EndermanTeleportComponent> customComponentType; private final ComponentType<EntityStore, EndermanTeleportComponent> customComponentType;
public AddDefaultComponentTickSystem(ComponentType<EntityStore, EndermanTeleportComponent> poisonComponentType) { public AddEndermanTeleportComponentTickSystem(ComponentType<EntityStore, EndermanTeleportComponent> poisonComponentType) {
this.customComponentType = poisonComponentType; this.customComponentType = poisonComponentType;
} }
@Override @Override
@@ -31,7 +31,6 @@ public class AddDefaultComponentTickSystem extends EntityTickingSystem<EntitySto
} }
DisplayNameComponent displayNameComponent = store.getComponent(ref, DisplayNameComponent.getComponentType()); DisplayNameComponent displayNameComponent = store.getComponent(ref, DisplayNameComponent.getComponentType());
if (displayNameComponent == null || displayNameComponent.getDisplayName() == null) { if (displayNameComponent == null || displayNameComponent.getDisplayName() == null) {
// LoggerSingleton.getInstance().getHytaleLogger().at(Level.INFO).log("Added Component to ref!");
return; return;
} }
var displayName = displayNameComponent.getDisplayName().getAnsiMessage(); var displayName = displayNameComponent.getDisplayName().getAnsiMessage();

View File

@@ -3,9 +3,13 @@ package com.tikaiz.systems;
import com.hypixel.hytale.component.*; import com.hypixel.hytale.component.*;
import com.hypixel.hytale.component.query.Query; import com.hypixel.hytale.component.query.Query;
import com.hypixel.hytale.component.system.EntityEventSystem; 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.modules.entity.component.DisplayNameComponent; 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.component.TransformComponent;
import com.hypixel.hytale.server.core.modules.entity.damage.Damage; 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.ParticleUtil;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.server.core.util.NotificationUtil; import com.hypixel.hytale.server.core.util.NotificationUtil;
import com.tikaiz.components.EndermanTeleportComponent; import com.tikaiz.components.EndermanTeleportComponent;
@@ -36,10 +40,15 @@ public class DamageEventSystem extends EntityEventSystem<EntityStore, Damage> {
assert displayNameComponent.getDisplayName() != null; assert displayNameComponent.getDisplayName() != null;
var name = displayNameComponent.getDisplayName().getAnsiMessage(); var name = displayNameComponent.getDisplayName().getAnsiMessage();
NotificationUtil.sendNotificationToUniverse(name); NotificationUtil.sendNotificationToUniverse(name);
if (Math.random() < 0.3) { if (Math.random() < 0.3) {
var transform = transformComponent.getTransform(); var transform = transformComponent.getTransform();
randomTeleport(commandBuffer, ref, transform.getPosition()); ParticleUtil.spawnParticleEffect("Effect_Death",transform.getPosition(),commandBuffer);
Vector3d newPos = randomTeleport(transform.getPosition());
ParticleUtil.spawnParticleEffect("Effect_Death",transform.getPosition(),commandBuffer);
Teleport teleportForPlayer = Teleport.createForPlayer(newPos, new Vector3f());
commandBuffer.addComponent(ref, Teleport.getComponentType(), teleportForPlayer);
} }
} }

View File

@@ -3,7 +3,11 @@ package com.tikaiz.systems;
import com.hypixel.hytale.component.*; import com.hypixel.hytale.component.*;
import com.hypixel.hytale.component.query.Query; import com.hypixel.hytale.component.query.Query;
import com.hypixel.hytale.component.system.tick.EntityTickingSystem; 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.TransformComponent; 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.ParticleUtil;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.tikaiz.components.EndermanTeleportComponent; import com.tikaiz.components.EndermanTeleportComponent;
import org.checkerframework.checker.nullness.compatqual.NonNullDecl; import org.checkerframework.checker.nullness.compatqual.NonNullDecl;
@@ -11,10 +15,10 @@ import org.checkerframework.checker.nullness.compatqual.NullableDecl;
import static com.tikaiz.helpers.TeleportHelper.randomTeleport; import static com.tikaiz.helpers.TeleportHelper.randomTeleport;
public class CustomComponentTickSystem extends EntityTickingSystem<EntityStore> { public class EndermanComponentTickSystem extends EntityTickingSystem<EntityStore> {
private final ComponentType<EntityStore, EndermanTeleportComponent> customComponentType; private final ComponentType<EntityStore, EndermanTeleportComponent> customComponentType;
public CustomComponentTickSystem(ComponentType<EntityStore, EndermanTeleportComponent> poisonComponentType) { public EndermanComponentTickSystem(ComponentType<EntityStore, EndermanTeleportComponent> poisonComponentType) {
this.customComponentType = poisonComponentType; this.customComponentType = poisonComponentType;
} }
@@ -34,8 +38,12 @@ public class CustomComponentTickSystem extends EntityTickingSystem<EntityStore>
endermanTeleportComponent.addElapsedTime(dt); endermanTeleportComponent.addElapsedTime(dt);
if (endermanTeleportComponent.getElapsedTime() >= endermanTeleportComponent.getTickInterval()) { if (endermanTeleportComponent.getElapsedTime() >= endermanTeleportComponent.getTickInterval()) {
endermanTeleportComponent.resetElapsedTime(); endermanTeleportComponent.resetElapsedTime();
ParticleUtil.spawnParticleEffect("Effect_Death",transformComponent.getPosition(),commandBuffer);
Vector3d newPos = randomTeleport(transformComponent.getPosition());
ParticleUtil.spawnParticleEffect("Effect_Death",transformComponent.getPosition(),commandBuffer);
randomTeleport(commandBuffer, ref, transformComponent.getPosition()); Teleport teleportForPlayer = Teleport.createForPlayer(newPos, new Vector3f());
commandBuffer.addComponent(ref, Teleport.getComponentType(), teleportForPlayer);
} }
} }

View File

@@ -1,72 +0,0 @@
package com.tikaiz.systems;
//public class EntitySpawnEventSystem extends EntityEventSystem<EntityStore, LoadedNPCEvent> {
// protected EntitySpawnEventSystem() {
// super(LoadedNPCEvent.class);
// }
//
//// @Override
//// public void handle(int i,
//// @NonNullDecl ArchetypeChunk<EntityStore> archetypeChunk,
//// @NonNullDecl Store<EntityStore> store,
//// @NonNullDecl CommandBuffer<EntityStore> commandBuffer,
//// @NonNullDecl Damage damage) {
//// Ref<EntityStore> 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;
//// }
//// var displayNameComponent = store.getComponent(ref, DisplayNameComponent.getComponentType());
//// if (displayNameComponent == null) {
//// LoggerSingleton.getInstance().getHytaleLogger().at(Level.SEVERE).log("Display name was Null");
//// return;
//// }
////
//// 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<EntityStore> getQuery() {
// return Query.any();
// }
//
//
// @Override
// public void handle(int i,
// @NonNullDecl ArchetypeChunk<EntityStore> archetypeChunk,
// @NonNullDecl Store<EntityStore> store,
// @NonNullDecl CommandBuffer<EntityStore> commandBuffer,
// @NonNullDecl LoadedNPCEvent loadedNPCEvent) {
// Ref<EntityStore> ref = archetypeChunk.getReferenceTo(i);
// var transformComponent = store.getComponent(ref, TransformComponent.getComponentType());
// NotificationUtil.sendNotificationToUniverse(transformComponent != null ? transformComponent.getTransform().toString() : "null");
// LoggerSingleton.getInstance().getHytaleLogger().at(Level.INFO).log(transformComponent != null ? transformComponent.getTransform().toString() : "null");
// var displayNameComponent = store.getComponent(ref, DisplayNameComponent.getComponentType());
// NotificationUtil.sendNotificationToUniverse(displayNameComponent != null ? displayNameComponent.getDisplayName() != null ? displayNameComponent.getDisplayName().getAnsiMessage() : "null" : "null");
// LoggerSingleton.getInstance().getHytaleLogger().at(Level.INFO).log(displayNameComponent != null ? displayNameComponent.getDisplayName() != null ? displayNameComponent.getDisplayName().getAnsiMessage() : "null" : "null");
//
//// loadedNPCEvent.getBuilderInfo().getKeyName()
//
// }
//}