diff --git a/pom.xml b/pom.xml index 591a3a1..ec91a78 100644 --- a/pom.xml +++ b/pom.xml @@ -4,8 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.tikaiz - HytaleDemo + com.greiflo + EndermanPlugin 0.1.0 diff --git a/src/main/java/com/tikaiz/systems/AddEndermanTeleportComponentTickSystem.java b/src/main/java/com/greiflo/AddComponentsEnderman.java similarity index 56% rename from src/main/java/com/tikaiz/systems/AddEndermanTeleportComponentTickSystem.java rename to src/main/java/com/greiflo/AddComponentsEnderman.java index 5cbdc28..adbe1a0 100644 --- a/src/main/java/com/tikaiz/systems/AddEndermanTeleportComponentTickSystem.java +++ b/src/main/java/com/greiflo/AddComponentsEnderman.java @@ -1,29 +1,24 @@ -package com.tikaiz.systems; +package com.greiflo; import com.hypixel.hytale.component.*; import com.hypixel.hytale.component.query.Query; import com.hypixel.hytale.component.system.tick.EntityTickingSystem; -import com.hypixel.hytale.logger.HytaleLogger; import com.hypixel.hytale.server.core.modules.entity.component.DisplayNameComponent; import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; -import com.tikaiz.components.EndermanTeleportComponent; import org.checkerframework.checker.nullness.compatqual.NonNullDecl; import org.checkerframework.checker.nullness.compatqual.NullableDecl; -import java.util.logging.Level; +public class AddComponentsEnderman extends EntityTickingSystem { -public class AddEndermanTeleportComponentTickSystem extends EntityTickingSystem { - private final ComponentType endermanComponentType; - public AddEndermanTeleportComponentTickSystem(ComponentType endermanComponentType) { + private final ComponentType endermanComponentType; + + public AddComponentsEnderman(ComponentType endermanComponentType) { this.endermanComponentType = endermanComponentType; } + @Override - public void tick(float dt, - int i, - @NonNullDecl ArchetypeChunk archetypeChunk, - @NonNullDecl Store store, - @NonNullDecl CommandBuffer commandBuffer) { + public void tick(float v, int i, @NonNullDecl ArchetypeChunk archetypeChunk, @NonNullDecl Store store, @NonNullDecl CommandBuffer commandBuffer) { Ref ref = archetypeChunk.getReferenceTo(i); DisplayNameComponent displayNameComponent = store.getComponent(ref, DisplayNameComponent.getComponentType()); assert displayNameComponent != null; @@ -32,13 +27,12 @@ public class AddEndermanTeleportComponentTickSystem extends EntityTickingSystem< if (!"Enderman".equals(displayName)){ return; } - commandBuffer.addComponent(ref, endermanComponentType, new EndermanTeleportComponent()); -// HytaleLogger.getLogger().atInfo().log("Added Component to ref: " + displayName); + commandBuffer.addComponent(ref, endermanComponentType, new EndermanComponent()); } @NullableDecl @Override public Query getQuery() { - return Query.and(DisplayNameComponent.getComponentType(),Query.not(endermanComponentType)); + return Query.and(DisplayNameComponent.getComponentType(), Query.not(endermanComponentType)); } } diff --git a/src/main/java/com/tikaiz/components/EndermanTeleportComponent.java b/src/main/java/com/greiflo/EndermanComponent.java similarity index 70% rename from src/main/java/com/tikaiz/components/EndermanTeleportComponent.java rename to src/main/java/com/greiflo/EndermanComponent.java index 1eb0dd8..64da26c 100644 --- a/src/main/java/com/tikaiz/components/EndermanTeleportComponent.java +++ b/src/main/java/com/greiflo/EndermanComponent.java @@ -1,26 +1,26 @@ -package com.tikaiz.components; +package com.greiflo; 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 { +public class EndermanComponent implements Component { private float tickInterval; private float elapsedTime; - public EndermanTeleportComponent(float tickInterval, float elapsedTime) { + public EndermanComponent(float tickInterval, float elapsedTime) { this.tickInterval = tickInterval; this.elapsedTime = elapsedTime; } - public EndermanTeleportComponent() { + public EndermanComponent() { this(10f, 0f); randomizeTickInterval(); } - public EndermanTeleportComponent(EndermanTeleportComponent other) { + public EndermanComponent(EndermanComponent other) { this.tickInterval = other.tickInterval; this.elapsedTime = other.elapsedTime; } @@ -45,10 +45,10 @@ public class EndermanTeleportComponent implements Component { @Nullable @Override public Component clone() { - return new EndermanTeleportComponent(this); + return new EndermanComponent(this); } public void randomizeTickInterval() { - tickInterval = (float) ((Math.random()*20)+10); + tickInterval = (float) ((Math.random()*25)+5); } } \ No newline at end of file diff --git a/src/main/java/com/greiflo/EndermanDamageHandler.java b/src/main/java/com/greiflo/EndermanDamageHandler.java new file mode 100644 index 0000000..66abb97 --- /dev/null +++ b/src/main/java/com/greiflo/EndermanDamageHandler.java @@ -0,0 +1,61 @@ +package com.greiflo; + +import com.hypixel.hytale.component.ArchetypeChunk; +import com.hypixel.hytale.component.CommandBuffer; +import com.hypixel.hytale.component.ComponentType; +import com.hypixel.hytale.component.Store; +import com.hypixel.hytale.component.query.Query; +import com.hypixel.hytale.component.system.EntityEventSystem; +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.universe.world.storage.EntityStore; +import org.checkerframework.checker.nullness.compatqual.NonNullDecl; +import org.checkerframework.checker.nullness.compatqual.NullableDecl; + +import static com.greiflo.EndermanTeleportTickingSystem.EndermanTeleport; + +public class EndermanDamageHandler extends EntityEventSystem { + + + protected EndermanDamageHandler(ComponentType endermanComponentType) { + super(Damage.class); + this.endermanComponentType = endermanComponentType; + } + + private final ComponentType endermanComponentType; + + @Override + public void handle(int i, @NonNullDecl ArchetypeChunk archetypeChunk, @NonNullDecl Store store, @NonNullDecl CommandBuffer commandBuffer, @NonNullDecl Damage damage) { + var ref = archetypeChunk.getReferenceTo(i); + TransformComponent transformComponent = store.getComponent(ref, TransformComponent.getComponentType()); + EndermanComponent endermanTeleportComponent = store.getComponent(ref, endermanComponentType); + + var entityName = store.getComponent(ref, DisplayNameComponent.getComponentType()); + + var teleportChance = Math.random()*100; + + if (endermanTeleportComponent != null) { + endermanTeleportComponent.resetElapsedTime(); + } + var chance = (int)teleportChance; + if(chance > 15) return; + + //if(entityName != null && entityName.getDisplayName() != null) NotificationUtil.sendNotificationToUniverse(entityName.getDisplayName()); + + if(entityName == null || entityName.getDisplayName() == null) return; + var raw = entityName.getDisplayName().getAnsiMessage(); + //NotificationUtil.sendNotificationToUniverse(raw); + + if(!"Enderman".equals(raw)) return; + + EndermanTeleport(ref, transformComponent.getPosition(), commandBuffer); + + } + + @NullableDecl + @Override + public Query getQuery() { + return Query.any(); + } +} diff --git a/src/main/java/com/greiflo/EndermanPlugin.java b/src/main/java/com/greiflo/EndermanPlugin.java new file mode 100644 index 0000000..91e9b7b --- /dev/null +++ b/src/main/java/com/greiflo/EndermanPlugin.java @@ -0,0 +1,24 @@ +package com.greiflo; + +import com.hypixel.hytale.server.core.event.events.player.PlayerReadyEvent; +import com.hypixel.hytale.server.core.plugin.JavaPlugin; +import com.hypixel.hytale.server.core.plugin.JavaPluginInit; + +import javax.annotation.Nonnull; + +public class EndermanPlugin extends JavaPlugin { + + public EndermanPlugin(@Nonnull JavaPluginInit init) { + super(init); + } + + @Override + protected void setup() { + var type = this.getEntityStoreRegistry() + .registerComponent(EndermanComponent.class, EndermanComponent::new); + this.getEntityStoreRegistry().registerSystem(new AddComponentsEnderman(type)); + this.getEntityStoreRegistry().registerSystem(new EndermanTeleportTickingSystem(type)); + this.getEntityStoreRegistry().registerSystem(new EndermanDamageHandler(type)); + + } +} \ No newline at end of file diff --git a/src/main/java/com/greiflo/EndermanTeleportTickingSystem.java b/src/main/java/com/greiflo/EndermanTeleportTickingSystem.java new file mode 100644 index 0000000..0d971ff --- /dev/null +++ b/src/main/java/com/greiflo/EndermanTeleportTickingSystem.java @@ -0,0 +1,58 @@ +package com.greiflo; + +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.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 org.checkerframework.checker.nullness.compatqual.NonNullDecl; +import org.checkerframework.checker.nullness.compatqual.NullableDecl; + +public class EndermanTeleportTickingSystem extends EntityTickingSystem { + private final ComponentType endermanComponentType; + + public EndermanTeleportTickingSystem(ComponentType endermanComponentType) { + this.endermanComponentType = endermanComponentType; + } + + @Override + public void tick(float dt, int i, @NonNullDecl ArchetypeChunk archetypeChunk, @NonNullDecl Store store, @NonNullDecl CommandBuffer commandBuffer) { + Ref ref = archetypeChunk.getReferenceTo(i); + EndermanComponent endermanTeleportComponent = store.getComponent(ref, endermanComponentType); + assert endermanTeleportComponent != null; + var transformComponent = store.getComponent(ref, TransformComponent.getComponentType()); + assert transformComponent != null; + + + endermanTeleportComponent.addElapsedTime(dt); + if (endermanTeleportComponent.getElapsedTime() >= endermanTeleportComponent.getTickInterval()) { + endermanTeleportComponent.resetElapsedTime(); + endermanTeleportComponent.randomizeTickInterval(); + EndermanTeleport(ref, transformComponent.getPosition(), commandBuffer); + } + } + + public static Vector3d randomTeleport(Vector3d position) { + Vector3d addPos = new Vector3d((Math.random() * 20) - 10, 3, (Math.random() * 20) - 10); + + return position.add(addPos); + } + public static void EndermanTeleport(Ref ref, Vector3d position, CommandBuffer commandBuffer) { + ParticleUtil.spawnParticleEffect("Effect_Death",position,commandBuffer); + Vector3d newPos = randomTeleport(position); + ParticleUtil.spawnParticleEffect("Effect_Death",position,commandBuffer); + + Teleport teleportForPlayer = Teleport.createForPlayer(newPos, new Vector3f()); + commandBuffer.addComponent(ref, Teleport.getComponentType(), teleportForPlayer); + } + + @NullableDecl + @Override + public Query getQuery() { + return Query.and(endermanComponentType, TransformComponent.getComponentType()); + } +} diff --git a/src/main/java/com/tikaiz/HytaleDemo.java b/src/main/java/com/tikaiz/HytaleDemo.java deleted file mode 100644 index eab9a63..0000000 --- a/src/main/java/com/tikaiz/HytaleDemo.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.tikaiz; - -import com.hypixel.hytale.server.core.plugin.JavaPlugin; -import com.hypixel.hytale.server.core.plugin.JavaPluginInit; -import com.tikaiz.commands.ExampleCommand; -import com.tikaiz.components.EndermanTeleportComponent; -import com.tikaiz.systems.AddEndermanTeleportComponentTickSystem; -import com.tikaiz.systems.EndermanComponentTickSystem; -import com.tikaiz.systems.DamageEventSystem; - -import javax.annotation.Nonnull; - -public class HytaleDemo extends JavaPlugin { - - public HytaleDemo(@Nonnull JavaPluginInit init) { - super(init); - } - - @Override - protected void setup() { - this.getCommandRegistry().registerCommand(new ExampleCommand()); - var type = this.getEntityStoreRegistry() - .registerComponent(EndermanTeleportComponent.class, EndermanTeleportComponent::new); - this.getEntityStoreRegistry().registerSystem(new AddEndermanTeleportComponentTickSystem(type)); - this.getEntityStoreRegistry().registerSystem(new EndermanComponentTickSystem(type)); - this.getEntityStoreRegistry().registerSystem(new DamageEventSystem(type)); - } -} \ No newline at end of file diff --git a/src/main/java/com/tikaiz/commands/ExampleCommand.java b/src/main/java/com/tikaiz/commands/ExampleCommand.java deleted file mode 100644 index 450a8d6..0000000 --- a/src/main/java/com/tikaiz/commands/ExampleCommand.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.tikaiz.commands; - -import com.hypixel.hytale.component.Ref; -import com.hypixel.hytale.component.Store; -import com.hypixel.hytale.math.vector.Vector3d; -import com.hypixel.hytale.math.vector.Vector3f; -import com.hypixel.hytale.server.core.Message; -import com.hypixel.hytale.server.core.command.system.CommandContext; -import com.hypixel.hytale.server.core.command.system.arguments.system.DefaultArg; -import com.hypixel.hytale.server.core.command.system.arguments.types.ArgTypes; -import com.hypixel.hytale.server.core.command.system.basecommands.AbstractPlayerCommand; -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.PlayerRef; -import com.hypixel.hytale.server.core.universe.world.World; -import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; - -import javax.annotation.Nonnull; -import java.util.ArrayList; -import java.util.List; - -public class ExampleCommand extends AbstractPlayerCommand { - - public ExampleCommand() { - super("tel", "Super test command!"); - } - - DefaultArg> arg = this.withListDefaultArg("Pos", "Position", ArgTypes.DOUBLE, new ArrayList<>(),"Tell the Player the Position"); - - @Override - protected void execute(@Nonnull CommandContext commandContext, - @Nonnull Store store, - @Nonnull Ref ref, - @Nonnull PlayerRef playerRef, - @Nonnull World world) { - int size = arg.get(commandContext).size(); - playerRef.sendMessage(Message.raw("Arg size: " + size)); - if (!(size == 3 || size == 0)){ - - playerRef.sendMessage(Message.raw("Either specify 0 or 3 Arguments")); - return; - } - - - var transform = store.getComponent(ref, TransformComponent.getComponentType()); - if (transform == null) return; - if (size == 0){ - var pos = transform.getPosition(); - playerRef.sendMessage(Message.raw("Player Position: " + pos)); - return; - } - var x = arg.get(commandContext).get(0); - var y = arg.get(commandContext).get(1); - var z = arg.get(commandContext).get(2); - - var newPos = new Vector3d(x,y,z); - - Teleport teleportForPlayer = Teleport.createForPlayer(newPos, new Vector3f()); - store.addComponent(ref,Teleport.getComponentType(),teleportForPlayer); - - playerRef.sendMessage(Message.raw("Set Player Position to: " + newPos)); - } - -} \ No newline at end of file diff --git a/src/main/java/com/tikaiz/helpers/TeleportHelper.java b/src/main/java/com/tikaiz/helpers/TeleportHelper.java deleted file mode 100644 index d38a130..0000000 --- a/src/main/java/com/tikaiz/helpers/TeleportHelper.java +++ /dev/null @@ -1,27 +0,0 @@ -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.Vector3f; -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; - -public abstract class TeleportHelper { - - public static Vector3d randomTeleport(Vector3d position) { - Vector3d addPos = new Vector3d((Math.random() * 20) - 10, 3, (Math.random() * 20) - 10); - - return position.add(addPos); - } - public static void EndermanTeleport(Ref ref, Vector3d position, CommandBuffer commandBuffer) { - ParticleUtil.spawnParticleEffect("Effect_Death",position,commandBuffer); - Vector3d newPos = randomTeleport(position); - ParticleUtil.spawnParticleEffect("Effect_Death",position,commandBuffer); - - Teleport teleportForPlayer = Teleport.createForPlayer(newPos, new Vector3f()); - commandBuffer.addComponent(ref, Teleport.getComponentType(), teleportForPlayer); - - } -} diff --git a/src/main/java/com/tikaiz/systems/DamageEventSystem.java b/src/main/java/com/tikaiz/systems/DamageEventSystem.java deleted file mode 100644 index 9f47d15..0000000 --- a/src/main/java/com/tikaiz/systems/DamageEventSystem.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.tikaiz.systems; - -import com.hypixel.hytale.component.*; -import com.hypixel.hytale.component.query.Query; -import com.hypixel.hytale.component.system.EntityEventSystem; -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.universe.world.storage.EntityStore; -import com.tikaiz.components.EndermanTeleportComponent; -import org.checkerframework.checker.nullness.compatqual.NonNullDecl; -import org.checkerframework.checker.nullness.compatqual.NullableDecl; - -import static com.tikaiz.helpers.TeleportHelper.EndermanTeleport; - -public class DamageEventSystem extends EntityEventSystem { - private final ComponentType endermanTeleportComponentType; - - public DamageEventSystem(ComponentType type) { - super(Damage.class); - this.endermanTeleportComponentType = type; - } - - @Override - public void handle(int i, - @NonNullDecl ArchetypeChunk archetypeChunk, - @NonNullDecl Store store, - @NonNullDecl CommandBuffer commandBuffer, - @NonNullDecl Damage damage) { - Ref ref = archetypeChunk.getReferenceTo(i); - var transformComponent = store.getComponent(ref, TransformComponent.getComponentType()); - assert transformComponent != null; - var endermanComponent = store.getComponent(ref, endermanTeleportComponentType); - assert endermanComponent != null; - - endermanComponent.resetElapsedTime(); - if (Math.random() < 0.15) { - EndermanTeleport(ref,transformComponent.getPosition(),commandBuffer); - } - } - - @NullableDecl - @Override - public Query getQuery() { - return Query.and(TransformComponent.getComponentType(), endermanTeleportComponentType); - } -} diff --git a/src/main/java/com/tikaiz/systems/EndermanComponentTickSystem.java b/src/main/java/com/tikaiz/systems/EndermanComponentTickSystem.java deleted file mode 100644 index 4f0a225..0000000 --- a/src/main/java/com/tikaiz/systems/EndermanComponentTickSystem.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.tikaiz.systems; - -import com.hypixel.hytale.component.*; -import com.hypixel.hytale.component.query.Query; -import com.hypixel.hytale.component.system.tick.EntityTickingSystem; -import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent; -import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; -import com.tikaiz.components.EndermanTeleportComponent; -import org.checkerframework.checker.nullness.compatqual.NonNullDecl; -import org.checkerframework.checker.nullness.compatqual.NullableDecl; - -import static com.tikaiz.helpers.TeleportHelper.EndermanTeleport; - -public class EndermanComponentTickSystem extends EntityTickingSystem { - private final ComponentType endermanComponentType; - - public EndermanComponentTickSystem(ComponentType poisonComponentType) { - this.endermanComponentType = poisonComponentType; - } - - @Override - public void tick(float dt, - int i, - @NonNullDecl ArchetypeChunk archetypeChunk, - @NonNullDecl Store store, - @NonNullDecl CommandBuffer commandBuffer) { - Ref ref = archetypeChunk.getReferenceTo(i); - EndermanTeleportComponent endermanTeleportComponent = store.getComponent(ref, endermanComponentType); - assert endermanTeleportComponent != null; - var transformComponent = store.getComponent(ref, TransformComponent.getComponentType()); - assert transformComponent != null; - - - endermanTeleportComponent.addElapsedTime(dt); - if (endermanTeleportComponent.getElapsedTime() >= endermanTeleportComponent.getTickInterval()) { - endermanTeleportComponent.resetElapsedTime(); - endermanTeleportComponent.randomizeTickInterval(); - EndermanTeleport(ref,transformComponent.getPosition(),commandBuffer); - } - } - - - @NullableDecl - @Override - public Query getQuery() { - return Query.and(endermanComponentType, TransformComponent.getComponentType()); - } -} diff --git a/src/main/resources/manifest.json b/src/main/resources/manifest.json index 3dc9ac9..6d125fb 100644 --- a/src/main/resources/manifest.json +++ b/src/main/resources/manifest.json @@ -1,18 +1,23 @@ { - "Group": "com.tikaiz", - "Name": "Hytale Plugin Demo", + "Group": "com.greiflo", + "Name": "EndermanPlugin", "Version": "${version}", - "Description": "Description of your plugin", + "Description": "Enderman Plugin", "Authors": [ { - "Name": "Tikaiz", + "Name": "greiflo", + "Email": "grflo7228@gmail.com" + }, + { + "Name": "tikaiz", "Email": "tikaiz@gmx.at" } ], + "Website": "", "ServerVersion": "*", "Dependencies": {}, "OptionalDependencies": {}, "DisabledByDefault": false, "IncludesAssetPack": false, - "Main": "com.tikaiz.HytaleDemo" + "Main": "com.greiflo.EndermanPlugin" }