-
Notifications
You must be signed in to change notification settings - Fork 356
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Pathfinding #1990
Pathfinding #1990
Conversation
Resolves #1987 |
I'm still not a big fan of having specific handling for certain types of pathfinding abilities. I'd rather be supporting a generic api that could support any of these configurations. interface PathfinderEntity {
/**
* Returns a set of next positions this entity can travel to from the given position.
*/
Set<Pos> nextStep(Pos pos);
} or interface PathfinderEntity {
/**
* Returns a range of next positions this entity can travel to from the given position.
*/
PosRange nextStep(Pos pos);
} or interface PathfinderEntity {
/**
* Returns a range of next velocities this entity can be applied from this given position.
*/
VelRange nextStep(Pos pos);
} e.t.c There are many api ideas that could support this without need to hardcode specific arbitrary pathfinding types. |
Any updates here? |
Try the pr and see if there's issues. This hasn't been merged yet because we haven't had enough people test it
|
# Conflicts: # demo/src/main/java/net/minestom/demo/PlayerInit.java # src/main/java/net/minestom/server/entity/fakeplayer/FakePlayer.java
ffd9127
to
282a0fc
Compare
I did some very limited testing, and found that this pathfinding is way better than the one from main. I made a Zombie with me as a target and a follow-goal.
What I would consider to do test with:
Performance comparison would be really nice too. I did not monitor it |
Thanks for taking a look. Currently doors, trapdoors, etc. are not handle, and are treated as full blocks. This algorithm allows for extending which blocks are walkable and how path are followed, so in the future there could be a node generator which implements features like climbing, doors, multi-block jumps, blocking entities, etc. The idea is this is the base which future pathfinding rules will be built on. Performance has been worked on a decent amount and while the current pathfinder probably performs better this one will work properly and is multithreaded, meaning that even slow path generation wouldn't block the main thread. From testing i've seen most people can get 10k+ pathfinding entities without much lag. if you're in the minestom discord this person tested it and found it performed well https://discord.com/channels/706185253441634317/706186227493109860/1214046960189837383 |
What is needed to complete this pr then? My guess would be that we need to pass all tests, right?. (Or removing ones that became invalid now, if any) |
After a code review this will be merged with other large 1.20.5 |
…t to correct drink/eat time from component, send damage event on living entity damage
… are still in ItemComponent)
# Conflicts: # build.gradle.kts # demo/src/main/java/net/minestom/demo/Main.java # demo/src/main/java/net/minestom/demo/PlayerInit.java # src/main/java/net/minestom/server/MinecraftServer.java # src/main/java/net/minestom/server/component/DataComponent.java # src/main/java/net/minestom/server/component/DataComponentImpl.java # src/main/java/net/minestom/server/entity/Metadata.java # src/main/java/net/minestom/server/entity/pathfinding/PFPathingEntity.java # src/main/java/net/minestom/server/instance/DynamicChunk.java # src/main/java/net/minestom/server/instance/block/predicate/BlockPredicate.java # src/main/java/net/minestom/server/inventory/ContainerInventory.java # src/main/java/net/minestom/server/inventory/Inventory.java # src/main/java/net/minestom/server/inventory/PlayerInventory.java # src/main/java/net/minestom/server/item/ItemComponent.java # src/main/java/net/minestom/server/item/attribute/AttributeSlot.java # src/main/java/net/minestom/server/item/component/Bee.java # src/main/java/net/minestom/server/item/component/BlockPredicates.java # src/main/java/net/minestom/server/item/component/DebugStickState.java # src/main/java/net/minestom/server/item/component/DyedItemColor.java # src/main/java/net/minestom/server/item/component/EnchantmentList.java # src/main/java/net/minestom/server/item/component/FireworkExplosion.java # src/main/java/net/minestom/server/item/component/PotionContents.java # src/main/java/net/minestom/server/listener/CreativeInventoryActionListener.java # src/main/java/net/minestom/server/listener/PlayerDiggingListener.java # src/main/java/net/minestom/server/listener/WindowListener.java # src/main/java/net/minestom/server/listener/manager/PacketListenerManager.java # src/main/java/net/minestom/server/network/ConnectionManager.java # src/main/java/net/minestom/server/network/NetworkBuffer.java # src/main/java/net/minestom/server/network/NetworkBufferTypeImpl.java # src/main/java/net/minestom/server/network/packet/client/handshake/ClientHandshakePacket.java # src/main/java/net/minestom/server/utils/nbt/BinaryTagSerializer.java # src/test/java/net/minestom/server/inventory/click/ClickUtils.java
95f7327
to
05a4bb7
Compare
# Conflicts: # build.gradle.kts # code-generators/src/main/java/net/minestom/codegen/Generators.java # demo/src/main/java/net/minestom/demo/PlayerInit.java # gradle/libs.versions.toml # src/autogenerated/java/net/minestom/server/color/DyeColor.java # src/autogenerated/java/net/minestom/server/entity/damage/DamageTypes.java # src/autogenerated/java/net/minestom/server/recipe/RecipeType.java # src/main/java/net/minestom/server/adventure/serializer/nbt/NbtComponentSerializer.java # src/main/java/net/minestom/server/adventure/serializer/nbt/NbtComponentSerializerImpl.java # src/main/java/net/minestom/server/color/Color.java # src/main/java/net/minestom/server/command/builder/arguments/minecraft/ArgumentItemStack.java # src/main/java/net/minestom/server/component/DataComponent.java # src/main/java/net/minestom/server/component/DataComponentImpl.java # src/main/java/net/minestom/server/component/DataComponentMap.java # src/main/java/net/minestom/server/component/DataComponentMapImpl.java # src/main/java/net/minestom/server/entity/LivingEntity.java # src/main/java/net/minestom/server/entity/Metadata.java # src/main/java/net/minestom/server/entity/MetadataImpl.java # src/main/java/net/minestom/server/entity/Player.java # src/main/java/net/minestom/server/entity/attribute/Attribute.java # src/main/java/net/minestom/server/entity/attribute/AttributeImpl.java # src/main/java/net/minestom/server/entity/damage/DamageType.java # src/main/java/net/minestom/server/entity/damage/DamageTypeImpl.java # src/main/java/net/minestom/server/entity/metadata/animal/ArmadilloMeta.java # src/main/java/net/minestom/server/entity/metadata/monster/skeleton/BoggedMeta.java # src/main/java/net/minestom/server/entity/metadata/projectile/BreezeWindChargeMeta.java # src/main/java/net/minestom/server/entity/pathfinding/PFPathingEntity.java # src/main/java/net/minestom/server/event/inventory/InventoryPostClickEvent.java # src/main/java/net/minestom/server/gamedata/tags/Tag.java # src/main/java/net/minestom/server/instance/anvil/AnvilLoader.java # src/main/java/net/minestom/server/instance/heightmap/Heightmap.java # src/main/java/net/minestom/server/inventory/ContainerInventory.java # src/main/java/net/minestom/server/inventory/PlayerInventory.java # src/main/java/net/minestom/server/item/ItemComponent.java # src/main/java/net/minestom/server/item/ItemStack.java # src/main/java/net/minestom/server/item/ItemStackImpl.java # src/main/java/net/minestom/server/item/Material.java # src/main/java/net/minestom/server/item/armor/TrimManager.java # src/main/java/net/minestom/server/item/armor/TrimMaterial.java # src/main/java/net/minestom/server/item/armor/TrimMaterialImpl.java # src/main/java/net/minestom/server/item/armor/TrimPattern.java # src/main/java/net/minestom/server/item/armor/TrimPatternImpl.java # src/main/java/net/minestom/server/item/attribute/AttributeSlot.java # src/main/java/net/minestom/server/item/component/ArmorTrim.java # src/main/java/net/minestom/server/item/component/AttributeList.java # src/main/java/net/minestom/server/item/component/BannerPatterns.java # src/main/java/net/minestom/server/item/component/BlockPredicates.java # src/main/java/net/minestom/server/item/component/DyedItemColor.java # src/main/java/net/minestom/server/item/component/EnchantmentList.java # src/main/java/net/minestom/server/item/component/ItemRarity.java # src/main/java/net/minestom/server/item/component/LodestoneTracker.java # src/main/java/net/minestom/server/item/component/MapDecorations.java # src/main/java/net/minestom/server/item/component/MapPostProcessing.java # src/main/java/net/minestom/server/item/component/PotDecorations.java # src/main/java/net/minestom/server/item/component/PotionContents.java # src/main/java/net/minestom/server/item/component/SuspiciousStewEffects.java # src/main/java/net/minestom/server/item/component/Unbreakable.java # src/main/java/net/minestom/server/listener/BlockPlacementListener.java # src/main/java/net/minestom/server/listener/CreativeInventoryActionListener.java # src/main/java/net/minestom/server/listener/PlayerDiggingListener.java # src/main/java/net/minestom/server/listener/WindowListener.java # src/main/java/net/minestom/server/message/Messenger.java # src/main/java/net/minestom/server/network/ConnectionManager.java # src/main/java/net/minestom/server/network/NetworkBuffer.java # src/main/java/net/minestom/server/network/NetworkBufferTypeImpl.java # src/main/java/net/minestom/server/network/packet/client/configuration/ClientSelectKnownPacksPacket.java # src/main/java/net/minestom/server/network/packet/server/configuration/SelectKnownPacksPacket.java # src/main/java/net/minestom/server/network/player/PlayerConnection.java # src/main/java/net/minestom/server/potion/PotionEffect.java # src/main/java/net/minestom/server/registry/Registry.java # src/main/java/net/minestom/server/sound/BuiltinSoundEvent.java # src/main/java/net/minestom/server/sound/SoundEvent.java # src/main/java/net/minestom/server/utils/nbt/BinaryTagSerializer.java # src/main/java/net/minestom/server/world/DimensionType.java # src/main/java/net/minestom/server/world/DimensionTypeManager.java # src/main/java/net/minestom/server/world/biome/Biome.java # src/main/java/net/minestom/server/world/biomes/BiomeManager.java # src/main/java/net/minestom/server/world/biomes/BiomeParticle.java # src/test/java/net/minestom/server/inventory/click/ClickUtils.java # src/test/java/net/minestom/server/item/component/AbstractItemComponentTest.java # src/test/java/net/minestom/server/item/component/CustomDataTest.java # src/test/java/net/minestom/server/item/component/DyedItemColorTest.java # src/test/java/net/minestom/server/item/component/UnitTest.java
This will be merged in to 1_20_5 here #2153 |
No description provided.