From 184d5cf83e66a26fd55e180fbed8e5c5216e0005 Mon Sep 17 00:00:00 2001 From: mworzala Date: Mon, 5 Sep 2022 09:09:40 -0400 Subject: [PATCH] remove debugging stuff --- .../java/unnamed/mmo/server/dev/Main.java | 312 +++++------------- modules/entity/build.gradle.kts | 1 - modules/entity/libs/enodia-pf-1.0.1.jar | Bin 74586 -> 0 bytes .../brain/navigator/EnodiaNavigator.java | 68 ---- .../mmo/entity/brain/navigator/Navigator.java | 4 - .../mmo/entity/brain/TestEnodiaPF.java | 72 ---- .../mmo/entity/brain/navigator/TestUtil.java | 1 - 7 files changed, 91 insertions(+), 367 deletions(-) delete mode 100644 modules/entity/libs/enodia-pf-1.0.1.jar delete mode 100644 modules/entity/src/main/java/unnamed/mmo/entity/brain/navigator/EnodiaNavigator.java delete mode 100644 modules/entity/src/test/java/unnamed/mmo/entity/brain/TestEnodiaPF.java diff --git a/modules/development/src/main/java/unnamed/mmo/server/dev/Main.java b/modules/development/src/main/java/unnamed/mmo/server/dev/Main.java index 575f7bf2..f248bb10 100644 --- a/modules/development/src/main/java/unnamed/mmo/server/dev/Main.java +++ b/modules/development/src/main/java/unnamed/mmo/server/dev/Main.java @@ -1,147 +1,84 @@ package unnamed.mmo.server.dev; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import com.mattworzala.debug.DebugMessage; +import com.mojang.serialization.JsonOps; import net.minestom.server.MinecraftServer; +import net.minestom.server.command.builder.Command; import net.minestom.server.coordinate.Pos; +import net.minestom.server.entity.GameMode; import net.minestom.server.entity.Player; import net.minestom.server.event.GlobalEventHandler; import net.minestom.server.event.player.PlayerLoginEvent; -import net.minestom.server.event.player.PlayerPacketOutEvent; +import net.minestom.server.event.player.PlayerSpawnEvent; +import net.minestom.server.extras.MojangAuth; import net.minestom.server.instance.Instance; import net.minestom.server.instance.InstanceManager; import net.minestom.server.instance.block.Block; -import net.minestom.server.network.packet.server.CachedPacket; -import net.minestom.server.network.packet.server.FramedPacket; -import net.minestom.server.network.packet.server.LazyPacket; -import net.minestom.server.network.packet.server.SendablePacket; -import net.minestom.server.network.packet.server.play.EntityHeadLookPacket; -import net.minestom.server.network.packet.server.play.EntityPositionAndRotationPacket; -import net.minestom.server.network.packet.server.play.EntityRotationPacket; -import unnamed.mmo.entity.HeadRotationZombie; -import unnamed.mmo.logging.LoggerFactory; +import net.minestom.server.potion.Potion; +import net.minestom.server.potion.PotionEffect; +import net.minestom.server.world.DimensionType; +import unnamed.mmo.blocks.BlockInteracter; +import unnamed.mmo.blocks.ore.Ore; +import unnamed.mmo.chat.ChatManager; +import unnamed.mmo.chat.storage.ChatStorage; +import unnamed.mmo.command.BaseCommandRegister; +import unnamed.mmo.damage.DamageProcessor; +import unnamed.mmo.entity.UnnamedEntity; +import unnamed.mmo.entity.brain.task.Task; +import unnamed.mmo.item.Item; +import unnamed.mmo.item.ItemManager; +import unnamed.mmo.item.entity.OwnedItemEntity; +import unnamed.mmo.player.PlayerImpl; +import unnamed.mmo.quest.QuestFacet; +import unnamed.mmo.server.dev.tool.DebugToolManager; +import unnamed.mmo.server.instance.TickTrackingInstance; + +import java.util.UUID; +import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) { - System.setProperty("minestom.viewable-packet", "false"); + System.setProperty("minestom.terminal.disabled", "true"); +// System.setProperty("minestom.viewable-packet", "false"); - // MinecraftServer server = MinecraftServer.init(); InstanceManager instanceManager = MinecraftServer.getInstanceManager(); - // - Instance instance = instanceManager.createInstanceContainer(); - // + Instance instance = new TickTrackingInstance(UUID.randomUUID(), DimensionType.OVERWORLD); + instanceManager.registerInstance(instance); instance.setGenerator(unit -> unit.modifier().fillHeight(0, 40, Block.STONE)); // GlobalEventHandler eventHandler = MinecraftServer.getGlobalEventHandler(); eventHandler.addListener(PlayerLoginEvent.class, event -> { final Player player = event.getPlayer(); - player.setPermissionLevel(2); event.setSpawningInstance(instance); player.setRespawnPoint(new Pos(0, 40, 0)); - - new HeadRotationZombie(){ - @Override - public void tick(long time) { -// System.out.println(position.sameView(lastSyncedPosition)); - super.tick(time); - var rot = new EntityPositionAndRotationPacket(getEntityId(), (short) 0, (short) 0, (short) 0, position.yaw(), position.pitch(), isOnGround()); - sendPacketToViewersAndSelf(rot); -// var headLook = new EntityHeadLookPacket(getEntityId(), position.yaw()); -// sendPacketToViewersAndSelf(headLook); -// System.out.println(onGround); - } - }.setInstance(instance, new Pos(5, 40, 0)); - }); - - eventHandler.addListener(PlayerPacketOutEvent.class, event -> { - SendablePacket packet = event.getPacket(); - if (packet instanceof CachedPacket cached) - packet = cached.packet(); - if (packet instanceof FramedPacket framed) - packet = framed.packet(); - if (packet instanceof LazyPacket lazy) - packet = lazy.packet(); - String name = packet.getClass().getSimpleName(); - if (packet.getClass().getSimpleName().contains("Entity")) { - if (name.equals("EntityVelocityPacket")) return; - if (name.equals("EntityPositionPacket")) return; - System.out.println(packet.getClass().getSimpleName()); - - if (packet instanceof EntityHeadLookPacket headLook) { -// System.out.println("POS/ROT : " + headLook); -// Vec dir = new Pos(0, 0, 0, headLook.yaw(), 0).direction(); -// Pos entityPos = Entity.getEntity(headLook.entityId()).getPosition(); -// DebugMessage.builder() -// .set(NamespaceID.from(ThreadLocalRandom.current().nextInt() + ""), new Line.Builder() -// .point(entityPos.asVec()) -// .point(dir.mul(2).add(entityPos.asVec())) -// .layer(Layer.TOP) -// .color(0xFFFFFF00) -// .build()) -//// .set(NamespaceID.from(ThreadLocalRandom.current().nextInt() + ""), new Text.Builder() -//// .content(System.currentTimeMillis() + "") -//// .position(dir.mul(2).add(entityPos.asVec())) -//// .layer(Layer.TOP) -//// .color(0xFFFFFF00) -//// .build()) -// .build() -// .sendTo(Audience.audience(MinecraftServer.getConnectionManager().getOnlinePlayers())); - } - if (packet instanceof EntityPositionAndRotationPacket posAndRot) { - System.out.println("POS/ROT : " + posAndRot.onGround()); -// Vec dir = new Pos(0, 0, 0, posAndRot.yaw(), posAndRot.pitch()).direction(); -// Pos entityPos = Entity.getEntity(posAndRot.entityId()).getPosition(); -// DebugMessage.builder() -// .set(NamespaceID.from(ThreadLocalRandom.current().nextInt() + ""), new Line.Builder() -// .point(entityPos.asVec()) -// .point(dir.mul(2).add(entityPos.asVec())) -// .layer(Layer.TOP) -// .color(0xFFFF00FF) -// .build()) -//// .set(NamespaceID.from(ThreadLocalRandom.current().nextInt() + ""), new Text.Builder() -//// .content(System.currentTimeMillis() + "") -//// .position(dir.mul(2).add(entityPos.asVec().withY(y -> y + 0.5))) -//// .layer(Layer.TOP) -//// .color(0xFFFF00FF) -//// .build()) -// .build() -// .sendTo(Audience.audience(MinecraftServer.getConnectionManager().getOnlinePlayers())); - } - } }); - // - server.start("0.0.0.0", 25565); - -// System.setProperty("minestom.terminal.disabled", "true"); -// System.setProperty("minestom.viewable-packet", "false"); + MojangAuth.init(); + MinecraftServer.getConnectionManager().setPlayerProvider(PlayerImpl::new); + eventHandler.addListener(PlayerSpawnEvent.class, event -> { + final Player player = event.getPlayer(); + player.setGameMode(GameMode.SURVIVAL); + player.setPermissionLevel(4); + player.setAllowFlying(true); -// MojangAuth.init(); -// MinecraftServer.getConnectionManager().setPlayerProvider(PlayerImpl::new); + // Testing + event.getSpawnInstance().setBlock(5, 43, 5, Ore.fromNamespaceId("unnamed:gold_ore").asBlock()); + event.getSpawnInstance().setBlock(4, 43, 5, Ore.fromNamespaceId("unnamed:diamond_ore").asBlock()); + player.getInventory().addItemStack(Item.fromNamespaceId("unnamed:diamond_pickaxe").asItemStack()); + //todo this needs to be done elsewhere + player.addEffect(new Potion(PotionEffect.MINING_FATIGUE, (byte) -1, Short.MAX_VALUE, (byte) 0x0)); -// Instance instance = new TickTrackingInstance(UUID.randomUUID(), DimensionType.OVERWORLD); -// instanceManager.registerInstance(instance); - -// eventHandler.addListener(PlayerSpawnEvent.class, event -> { -// final Player player = event.getPlayer(); -// player.setGameMode(GameMode.SURVIVAL); -// player.setPermissionLevel(4); -// player.setAllowFlying(true); - - // Testing -// event.getSpawnInstance().setBlock(5, 43, 5, Ore.fromNamespaceId("unnamed:gold_ore").asBlock()); -// event.getSpawnInstance().setBlock(4, 43, 5, Ore.fromNamespaceId("unnamed:diamond_ore").asBlock()); -// player.getInventory().addItemStack(Item.fromNamespaceId("unnamed:diamond_pickaxe").asItemStack()); -// -// //todo this needs to be done elsewhere -// player.addEffect(new Potion(PotionEffect.MINING_FATIGUE, (byte) -1, Short.MAX_VALUE, (byte) 0x0)); -// -// //todo a command for this -// player.getInventory().addItemStack(DebugToolManager.createTool("unnamed:hello")); + //todo a command for this + player.getInventory().addItemStack(DebugToolManager.createTool("unnamed:hello")); //todo test entity @@ -168,125 +105,58 @@ public void tick(long time) { // } // } // }"""); -// JsonElement json = JsonParser.parseString(""" -// { -// "type": "unnamed:sequence", -// "children": [ -// { -// "type": "unnamed:wander_in_region" -// }, -// { -// "type": "unnamed:idle", -// "time": 20 -// } -// ] -// }"""); -// Task task = JsonOps.INSTANCE.withDecoder(Task.Spec.CODEC) -// .apply(json).getOrThrow(false, System.err::println).getFirst().create(); -// UnnamedEntity entity = new UnnamedEntity(task); -// entity.setInstance(instance, new Pos(0, 40, 0)) -// .thenAccept(unused -> System.out.println("Spawned")); - -// Entity entity = new Entity(EntityType.ZOMBIE) { -// @Override -// public void tick(long time) { -// super.tick(time); -// -// lookAt(player); -// } -// }; -// }); -// eventHandler.addListener(PlayerPacketOutEvent.class, event -> { -// SendablePacket packet = event.getPacket(); -// if (packet instanceof CachedPacket cached) -// packet = cached.packet(); -// if (packet instanceof FramedPacket framed) -// packet = framed.packet(); -// if (packet instanceof LazyPacket lazy) -// packet = lazy.packet(); -// String name = packet.getClass().getSimpleName(); -// if (packet.getClass().getSimpleName().contains("Entity")) { -// if (name.equals("EntityVelocityPacket")) return; -// if (name.equals("EntityPositionPacket")) return; -// System.out.println(packet.getClass().getSimpleName()); -// -// if (packet instanceof EntityHeadLookPacket headLook) { -//// Vec dir = new Pos(0, 0, 0, headLook.yaw(), 0).direction(); -//// Pos entityPos = Entity.getEntity(headLook.entityId()).getPosition(); -//// DebugMessage.builder() -//// .set(NamespaceID.from(ThreadLocalRandom.current().nextInt() + ""), new Line.Builder() -//// .point(entityPos.asVec()) -//// .point(dir.mul(2).add(entityPos.asVec())) -//// .layer(Layer.TOP) -//// .color(0xFFFFFF00) -//// .build()) -////// .set(NamespaceID.from(ThreadLocalRandom.current().nextInt() + ""), new Text.Builder() -////// .content(System.currentTimeMillis() + "") -////// .position(dir.mul(2).add(entityPos.asVec())) -////// .layer(Layer.TOP) -////// .color(0xFFFFFF00) -////// .build()) -//// .build() -//// .sendTo(Audience.audience(MinecraftServer.getConnectionManager().getOnlinePlayers())); -// } -// if (packet instanceof EntityPositionAndRotationPacket posAndRot) { -// Vec dir = new Pos(0, 0, 0, posAndRot.yaw(), posAndRot.pitch()).direction(); -// Pos entityPos = Entity.getEntity(posAndRot.entityId()).getPosition(); -// DebugMessage.builder() -// .set(NamespaceID.from(ThreadLocalRandom.current().nextInt() + ""), new Line.Builder() -// .point(entityPos.asVec()) -// .point(dir.mul(2).add(entityPos.asVec())) -// .layer(Layer.TOP) -// .color(0xFFFF00FF) -// .build()) -//// .set(NamespaceID.from(ThreadLocalRandom.current().nextInt() + ""), new Text.Builder() -//// .content(System.currentTimeMillis() + "") -//// .position(dir.mul(2).add(entityPos.asVec().withY(y -> y + 0.5))) -//// .layer(Layer.TOP) -//// .color(0xFFFF00FF) -//// .build()) -// .build() -// .sendTo(Audience.audience(MinecraftServer.getConnectionManager().getOnlinePlayers())); -// } -// } -// }); + JsonElement json = JsonParser.parseString(""" + { + "type": "unnamed:sequence", + "children": [ + { + "type": "unnamed:wander_in_region" + }, + { + "type": "unnamed:idle", + "time": 20 + } + ] + }"""); + Task task = JsonOps.INSTANCE.withDecoder(Task.Spec.CODEC) + .apply(json).getOrThrow(false, System.err::println).getFirst().create(); + UnnamedEntity entity = new UnnamedEntity(task); + entity.setInstance(instance, new Pos(0, 40, 0)) + .thenAccept(unused -> System.out.println("Spawned")); + }); -// BaseCommandRegister.registerCommands(); + BaseCommandRegister.registerCommands(); -// Command c = new Command("clear"); -// c.setDefaultExecutor((sender, context) -> { -// DebugMessage.builder().clear().build().sendTo(sender); -// }); -// MinecraftServer.getCommandManager().register(c); + Command c = new Command("clear"); + c.setDefaultExecutor((sender, context) -> { + DebugMessage.builder().clear().build().sendTo(sender); + }); + MinecraftServer.getCommandManager().register(c); - // For now, manually register chat (with conn to mongo :/ need a config system) -// MongoClient mongoClient = MongoClients.create(MongoClientSettings.builder() -// .applyConnectionString(new ConnectionString("mongodb://localhost:27017")) -// .uuidRepresentation(UuidRepresentation.STANDARD) -// .build()); -// ChatStorage chatStorage = ChatStorage.mongo(mongoClient); -// ChatStorage chatStorage = ChatStorage.noop(); -// ChatManager chatManager = new ChatManager(chatStorage); -// chatManager.hook(MinecraftServer.process()); + ChatStorage chatStorage = ChatStorage.noop(); + ChatManager chatManager = new ChatManager(chatStorage); + chatManager.hook(MinecraftServer.process()); //todo properly implement a config system & use facets better -// ItemManager itemManager = new ItemManager(); -// itemManager.hook(MinecraftServer.process()); -// OwnedItemEntity.Handler itemEntityHandler = new OwnedItemEntity.Handler(); -// itemEntityHandler.hook(MinecraftServer.process()); + ItemManager itemManager = new ItemManager(); + itemManager.hook(MinecraftServer.process()); + OwnedItemEntity.Handler itemEntityHandler = new OwnedItemEntity.Handler(); + itemEntityHandler.hook(MinecraftServer.process()); //todo stupid facet implementation -// DebugToolManager debugToolManager = new DebugToolManager(); -// debugToolManager.hook(MinecraftServer.process()); + DebugToolManager debugToolManager = new DebugToolManager(); + debugToolManager.hook(MinecraftServer.process()); + + QuestFacet questFacet = new QuestFacet(); + questFacet.hook(MinecraftServer.process()); -// QuestFacet questFacet = new QuestFacet(); -// questFacet.hook(MinecraftServer.process()); + MinecraftServer.getSchedulerManager().buildShutdownTask(() -> + ForkJoinPool.commonPool().awaitQuiescence(10, TimeUnit.SECONDS)); -// MinecraftServer.getSchedulerManager().buildShutdownTask(() -> -// ForkJoinPool.commonPool().awaitQuiescence(10, TimeUnit.SECONDS)); + BlockInteracter.registerEvents(); + DamageProcessor.init(); -// BlockInteracter.registerEvents(); -// DamageProcessor.init(); + server.start("0.0.0.0", 25565); } diff --git a/modules/entity/build.gradle.kts b/modules/entity/build.gradle.kts index df480752..5612c744 100644 --- a/modules/entity/build.gradle.kts +++ b/modules/entity/build.gradle.kts @@ -4,5 +4,4 @@ plugins { dependencies { implementation(project(":modules:common")) - implementation(files("libs/enodia-pf-1.0.1.jar")) } diff --git a/modules/entity/libs/enodia-pf-1.0.1.jar b/modules/entity/libs/enodia-pf-1.0.1.jar deleted file mode 100644 index b1b2d5b114b6c786db7b5e1bf537a11114ab986f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74586 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

  • --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 ent instanceof LivingEntity ? - ((LivingEntity) ent).getAttributeValue(Attribute.MOVEMENT_SPEED) : - Attribute.MOVEMENT_SPEED.defaultValue(), - (unused1, unused2, unused3) -> true - ); - - private static final PathfindingCapabilities DEFAULT_CAPABILITIES = PathfindingCapabilities.Companion.getDefault(); - private static final MovementImportance DEFAULT_IMPORTANCE = MovementImportance.Companion.getUNIMPORTANT(); - - private final Entity entity; - private MovementProcessor enodia; - - EnodiaNavigator(@NotNull Entity entity) { - this.entity = entity; - this.enodia = null; - } - - @Override - public void setInstance(@NotNull Instance instance) { - enodia = MOVEMENT_HUB.createMovementProcessor(entity, DEFAULT_CAPABILITIES); - } - - @Override - public boolean setPathTo(@Nullable Point point) { - if (point == null) { - this.enodia.stop(true); - return true; - } - - // Last parameter here is the max distance from the value. - return enodia.goTo(point, DEFAULT_IMPORTANCE, 0.5f); - } - - @Override - public boolean isActive() { - if (enodia == null) { - return false; - } - return enodia.isActive(); - } - - @Override - public void tick(long time) { - if (enodia != null) { - enodia.tick(time); - } - } -} diff --git a/modules/entity/src/main/java/unnamed/mmo/entity/brain/navigator/Navigator.java b/modules/entity/src/main/java/unnamed/mmo/entity/brain/navigator/Navigator.java index 05dfa7ba..4fe35168 100644 --- a/modules/entity/src/main/java/unnamed/mmo/entity/brain/navigator/Navigator.java +++ b/modules/entity/src/main/java/unnamed/mmo/entity/brain/navigator/Navigator.java @@ -11,10 +11,6 @@ public interface Navigator { - static @NotNull Navigator enodia(@NotNull Entity entity) { - return new EnodiaNavigator(entity); - } - static @NotNull Navigator hydrazine(@NotNull Entity entity) { return new HydrazineNavigator(entity); } diff --git a/modules/entity/src/test/java/unnamed/mmo/entity/brain/TestEnodiaPF.java b/modules/entity/src/test/java/unnamed/mmo/entity/brain/TestEnodiaPF.java deleted file mode 100644 index 5f1d4fbe..00000000 --- a/modules/entity/src/test/java/unnamed/mmo/entity/brain/TestEnodiaPF.java +++ /dev/null @@ -1,72 +0,0 @@ -package unnamed.mmo.entity.brain; - -import net.minestom.server.attribute.Attribute; -import net.minestom.server.coordinate.Pos; -import net.minestom.server.coordinate.Vec; -import net.minestom.server.entity.Entity; -import net.minestom.server.entity.EntityType; -import net.minestom.server.test.Env; -import net.minestom.server.test.EnvTest; -import org.junit.jupiter.api.Test; -import sexy.kostya.enodia.EnodiaPF; -import sexy.kostya.enodia.movement.MovementProcessor; -import sexy.kostya.enodia.movement.importance.MovementImportance; -import sexy.kostya.enodia.pathfinding.PathfindingCapabilities; - -import java.time.Duration; - -import static com.google.common.truth.Truth.assertThat; - -@EnvTest -public class TestEnodiaPF { - - @Test - public void test(Env env) { - var enodia = EnodiaPF.Companion.forImmutableWorlds(); - var hub = enodia.initializeMovementProcessingHub( - 2, - 5, - ent -> Attribute.MOVEMENT_SPEED.defaultValue(), - (a, b, c) -> true - ); - - var instance = env.createFlatInstance(); - var player = env.createPlayer(instance, new Pos(0, 42, 0)); - - var capabilities = PathfindingCapabilities.Companion.getDefault(); - var entity = new EnodiaEntity(); - entity.setInstance(instance, new Pos(5, 42, 5)) - .thenAccept(unused -> { - entity.movementProcessor = hub.createMovementProcessor(entity, capabilities); - - entity.movementProcessor.goTo(player, MovementImportance.Companion.getUNIMPORTANT(), 2); - }) - .join(); - - boolean result = env.tickWhile(() -> { - System.out.println(entity.getPosition()); -// return !entity.getPosition().sameBlock(new Vec(0, 40, 0)); - return entity.movementProcessor.isActive(); - }, Duration.ofMillis(100)); - - assertThat(result).isTrue(); - assertThat(entity.movementProcessor.isActive()).isFalse(); - } - - static class EnodiaEntity extends Entity { - - public EnodiaEntity() { - super(EntityType.ZOMBIE); - } - - MovementProcessor movementProcessor = null; - - @Override - public void update(long time) { - super.update(time); - if (movementProcessor != null) { - movementProcessor.tick(time); - } - } - } -} diff --git a/modules/entity/src/test/java/unnamed/mmo/entity/brain/navigator/TestUtil.java b/modules/entity/src/test/java/unnamed/mmo/entity/brain/navigator/TestUtil.java index 6c59a9ad..4256618c 100644 --- a/modules/entity/src/test/java/unnamed/mmo/entity/brain/navigator/TestUtil.java +++ b/modules/entity/src/test/java/unnamed/mmo/entity/brain/navigator/TestUtil.java @@ -11,7 +11,6 @@ public class TestUtil { public static Stream navigators() { return Stream.of( -// Arguments.of("enodia", (Function) EnodiaNavigator::new), // Arguments.of("hydrazine", (Function) HydrazineNavigator::new), // Arguments.of("custom", (Function) CustomNavigator::new), Arguments.of("motion", (Function) MotionNavigator::new)