Added EndermanTeleportComponent
This commit is contained in:
@@ -11,9 +11,9 @@ import org.checkerframework.checker.nullness.compatqual.NullableDecl;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class AddDefaultComponentTickSystem extends EntityTickingSystem<EntityStore> {
|
||||
private final ComponentType<EntityStore, CustomComponent> customComponentType;
|
||||
private final ComponentType<EntityStore, EndermanTeleportComponent> customComponentType;
|
||||
|
||||
public AddDefaultComponentTickSystem(ComponentType<EntityStore, CustomComponent> poisonComponentType) {
|
||||
public AddDefaultComponentTickSystem(ComponentType<EntityStore, EndermanTeleportComponent> poisonComponentType) {
|
||||
this.customComponentType = poisonComponentType;
|
||||
}
|
||||
@Override
|
||||
@@ -23,7 +23,7 @@ public class AddDefaultComponentTickSystem extends EntityTickingSystem<EntitySto
|
||||
@NonNullDecl Store<EntityStore> store,
|
||||
@NonNullDecl CommandBuffer<EntityStore> commandBuffer) {
|
||||
Ref<EntityStore> 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<EntitySto
|
||||
if (!"Bunny".equals(displayName)){
|
||||
return;
|
||||
}
|
||||
commandBuffer.addComponent(ref, customComponentType, new CustomComponent());
|
||||
commandBuffer.addComponent(ref, customComponentType, new EndermanTeleportComponent());
|
||||
LoggerSingleton.getInstance().getHytaleLogger().at(Level.INFO).log("Added Component to ref: " + displayName);
|
||||
}
|
||||
|
||||
@NullableDecl
|
||||
@Override
|
||||
public Query<EntityStore> getQuery() {
|
||||
return Query.any();
|
||||
return Query.and(DisplayNameComponent.getComponentType());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<EntityStore> {
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Component<EntityStore> clone() {
|
||||
return new CustomComponent();
|
||||
}
|
||||
}
|
||||
@@ -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<EntityStore> {
|
||||
private final ComponentType<EntityStore, CustomComponent> customComponentType;
|
||||
import static com.tikaiz.TeleportHelper.randomTeleport;
|
||||
|
||||
public CustomComponentTickSystem(ComponentType<EntityStore, CustomComponent> poisonComponentType) {
|
||||
public class CustomComponentTickSystem extends EntityTickingSystem<EntityStore> {
|
||||
private final ComponentType<EntityStore, EndermanTeleportComponent> customComponentType;
|
||||
|
||||
public CustomComponentTickSystem(ComponentType<EntityStore, EndermanTeleportComponent> poisonComponentType) {
|
||||
this.customComponentType = poisonComponentType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick(float dt,
|
||||
int i,
|
||||
@@ -23,24 +30,24 @@ public class CustomComponentTickSystem extends EntityTickingSystem<EntityStore>
|
||||
@NonNullDecl Store<EntityStore> store,
|
||||
@NonNullDecl CommandBuffer<EntityStore> commandBuffer) {
|
||||
Ref<EntityStore> 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<EntityStore> getQuery() {
|
||||
return Query.and(customComponentType);
|
||||
return Query.and(customComponentType, TransformComponent.getComponentType());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<EntityStore, Damage> {
|
||||
protected DamageEventSystem() {
|
||||
private final ComponentType<EntityStore, EndermanTeleportComponent> endermanTeleportComponentType;
|
||||
|
||||
protected DamageEventSystem(ComponentType<EntityStore, EndermanTeleportComponent> type) {
|
||||
super(Damage.class);
|
||||
this.endermanTeleportComponentType = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -32,42 +29,23 @@ public class DamageEventSystem extends EntityEventSystem<EntityStore, Damage> {
|
||||
@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;
|
||||
}
|
||||
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<EntityStore> getQuery() {
|
||||
return Query.any();
|
||||
return Query.and(TransformComponent.getComponentType(), DisplayNameComponent.getComponentType(), endermanTeleportComponentType);
|
||||
}
|
||||
}
|
||||
|
||||
48
src/main/java/com/tikaiz/EndermanTeleportComponent.java
Normal file
48
src/main/java/com/tikaiz/EndermanTeleportComponent.java
Normal file
@@ -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<EntityStore> {
|
||||
|
||||
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<EntityStore> clone() {
|
||||
return new EndermanTeleportComponent(this);
|
||||
}
|
||||
}
|
||||
@@ -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<EntityStore>();
|
||||
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)->{
|
||||
|
||||
22
src/main/java/com/tikaiz/TeleportHelper.java
Normal file
22
src/main/java/com/tikaiz/TeleportHelper.java
Normal file
@@ -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<EntityStore> commandBuffer, Ref<EntityStore> 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user