diff --git a/src/main/java/com/zenith/feature/world/World.java b/src/main/java/com/zenith/feature/world/World.java index 0e0f6292..78142cb0 100644 --- a/src/main/java/com/zenith/feature/world/World.java +++ b/src/main/java/com/zenith/feature/world/World.java @@ -1,6 +1,7 @@ package com.zenith.feature.world; import com.zenith.cache.data.chunk.Chunk; +import com.zenith.cache.data.entity.EntityLiving; import com.zenith.mc.block.*; import com.zenith.mc.dimension.DimensionData; import com.zenith.mc.dimension.DimensionRegistry; @@ -321,5 +322,16 @@ public static FluidState getFluidState(final int x, final int y, final int z) { return getFluidState(getBlockState(x, y, z).id()); } + public static boolean onClimbable(EntityLiving entity) { + Block inBlock = getBlock(MathHelper.floorI(entity.getX()), MathHelper.floorI(entity.getY()), MathHelper.floorI(entity.getZ())); + if (inBlock.blockTags().contains(BlockTags.CLIMBABLE)) { + return true; + } + // todo: trapdoors +// else if (inBlock.name().endsWith("_trapdoor") && trapdoorUsableAsLadder(inBlock, blockPos)) { +// +// } + return false; + } } diff --git a/src/main/java/com/zenith/mc/block/LocalizedCollisionBox.java b/src/main/java/com/zenith/mc/block/LocalizedCollisionBox.java index 0a2ecb85..743bc3d4 100644 --- a/src/main/java/com/zenith/mc/block/LocalizedCollisionBox.java +++ b/src/main/java/com/zenith/mc/block/LocalizedCollisionBox.java @@ -32,6 +32,17 @@ public LocalizedCollisionBox stretch(double x, double y, double z) { ); } + public LocalizedCollisionBox inflate(double x, double y, double z) { + return new LocalizedCollisionBox( + minX() - x, maxX() + x, + minY() - y, maxY() + y, + minZ() - z, maxZ() + z, + this.x, + this.y, + this.z + ); + } + public LocalizedCollisionBox move(final double x, final double y, final double z) { return new LocalizedCollisionBox( this.minX() + x, this.maxX() + x, diff --git a/src/main/java/com/zenith/mc/entity/EntityData.java b/src/main/java/com/zenith/mc/entity/EntityData.java index 9ba7ea4d..d05603d6 100644 --- a/src/main/java/com/zenith/mc/entity/EntityData.java +++ b/src/main/java/com/zenith/mc/entity/EntityData.java @@ -10,5 +10,6 @@ public record EntityData( float height, boolean attackable, boolean pickable, + boolean livingEntity, EntityType mcplType ) implements RegistryData { } diff --git a/src/main/java/com/zenith/mc/entity/EntityDataManager.java b/src/main/java/com/zenith/mc/entity/EntityDataManager.java index d00b05c8..0c431644 100644 --- a/src/main/java/com/zenith/mc/entity/EntityDataManager.java +++ b/src/main/java/com/zenith/mc/entity/EntityDataManager.java @@ -1,5 +1,7 @@ package com.zenith.mc.entity; +import com.zenith.cache.data.entity.EntityLiving; +import com.zenith.mc.block.LocalizedCollisionBox; import com.zenith.util.Maps; import it.unimi.dsi.fastutil.objects.Reference2ObjectMap; import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap; @@ -28,4 +30,16 @@ public EntityData getEntityData(final EntityType type) { if (data == entityTypeToData.defaultReturnValue()) return null; return data; } + + public LocalizedCollisionBox getCollisionBox(final EntityLiving entity) { + var data = getEntityData(entity.getEntityType()); + if (data == null) return null; + double w = data.width() / 2; + return new LocalizedCollisionBox( + entity.getX() - w, entity.getX() + w, + entity.getY(), entity.getY() + data.height(), + entity.getZ() - w, entity.getZ() + w, + entity.getX(), entity.getY(), entity.getZ() + ); + } } diff --git a/src/main/java/com/zenith/mc/entity/EntityRegistry.java b/src/main/java/com/zenith/mc/entity/EntityRegistry.java index fcdde3bb..437eaa51 100644 --- a/src/main/java/com/zenith/mc/entity/EntityRegistry.java +++ b/src/main/java/com/zenith/mc/entity/EntityRegistry.java @@ -7,263 +7,263 @@ public final class EntityRegistry { public static final Registry REGISTRY = new Registry(130); - public static final EntityData ALLAY = REGISTRY.register(new EntityData(0, "allay", 0.35f, 0.6f, true, true, EntityType.ALLAY)); + public static final EntityData ALLAY = REGISTRY.register(new EntityData(0, "allay", 0.35f, 0.6f, true, true, true, EntityType.ALLAY)); - public static final EntityData AREA_EFFECT_CLOUD = REGISTRY.register(new EntityData(1, "area_effect_cloud", 6.0f, 0.5f, true, false, EntityType.AREA_EFFECT_CLOUD)); + public static final EntityData AREA_EFFECT_CLOUD = REGISTRY.register(new EntityData(1, "area_effect_cloud", 6.0f, 0.5f, true, false, false, EntityType.AREA_EFFECT_CLOUD)); - public static final EntityData ARMADILLO = REGISTRY.register(new EntityData(2, "armadillo", 0.7f, 0.65f, true, true, EntityType.ARMADILLO)); + public static final EntityData ARMADILLO = REGISTRY.register(new EntityData(2, "armadillo", 0.7f, 0.65f, true, true, true, EntityType.ARMADILLO)); - public static final EntityData ARMOR_STAND = REGISTRY.register(new EntityData(3, "armor_stand", 0.5f, 1.975f, true, true, EntityType.ARMOR_STAND)); + public static final EntityData ARMOR_STAND = REGISTRY.register(new EntityData(3, "armor_stand", 0.5f, 1.975f, true, true, true, EntityType.ARMOR_STAND)); - public static final EntityData ARROW = REGISTRY.register(new EntityData(4, "arrow", 0.5f, 0.5f, false, false, EntityType.ARROW)); + public static final EntityData ARROW = REGISTRY.register(new EntityData(4, "arrow", 0.5f, 0.5f, false, false, false, EntityType.ARROW)); - public static final EntityData AXOLOTL = REGISTRY.register(new EntityData(5, "axolotl", 0.75f, 0.42f, true, true, EntityType.AXOLOTL)); + public static final EntityData AXOLOTL = REGISTRY.register(new EntityData(5, "axolotl", 0.75f, 0.42f, true, true, true, EntityType.AXOLOTL)); - public static final EntityData BAT = REGISTRY.register(new EntityData(6, "bat", 0.5f, 0.9f, true, true, EntityType.BAT)); + public static final EntityData BAT = REGISTRY.register(new EntityData(6, "bat", 0.5f, 0.9f, true, true, true, EntityType.BAT)); - public static final EntityData BEE = REGISTRY.register(new EntityData(7, "bee", 0.7f, 0.6f, true, true, EntityType.BEE)); + public static final EntityData BEE = REGISTRY.register(new EntityData(7, "bee", 0.7f, 0.6f, true, true, true, EntityType.BEE)); - public static final EntityData BLAZE = REGISTRY.register(new EntityData(8, "blaze", 0.6f, 1.8f, true, true, EntityType.BLAZE)); + public static final EntityData BLAZE = REGISTRY.register(new EntityData(8, "blaze", 0.6f, 1.8f, true, true, true, EntityType.BLAZE)); - public static final EntityData BLOCK_DISPLAY = REGISTRY.register(new EntityData(9, "block_display", 0.0f, 0.0f, true, false, EntityType.BLOCK_DISPLAY)); + public static final EntityData BLOCK_DISPLAY = REGISTRY.register(new EntityData(9, "block_display", 0.0f, 0.0f, true, false, false, EntityType.BLOCK_DISPLAY)); - public static final EntityData BOAT = REGISTRY.register(new EntityData(10, "boat", 1.375f, 0.5625f, true, true, EntityType.BOAT)); + public static final EntityData BOAT = REGISTRY.register(new EntityData(10, "boat", 1.375f, 0.5625f, true, true, false, EntityType.BOAT)); - public static final EntityData BOGGED = REGISTRY.register(new EntityData(11, "bogged", 0.6f, 1.99f, true, true, EntityType.BOGGED)); + public static final EntityData BOGGED = REGISTRY.register(new EntityData(11, "bogged", 0.6f, 1.99f, true, true, true, EntityType.BOGGED)); - public static final EntityData BREEZE = REGISTRY.register(new EntityData(12, "breeze", 0.6f, 1.77f, true, true, EntityType.BREEZE)); + public static final EntityData BREEZE = REGISTRY.register(new EntityData(12, "breeze", 0.6f, 1.77f, true, true, true, EntityType.BREEZE)); - public static final EntityData BREEZE_WIND_CHARGE = REGISTRY.register(new EntityData(13, "breeze_wind_charge", 0.3125f, 0.3125f, true, true, EntityType.BREEZE_WIND_CHARGE)); + public static final EntityData BREEZE_WIND_CHARGE = REGISTRY.register(new EntityData(13, "breeze_wind_charge", 0.3125f, 0.3125f, true, true, false, EntityType.BREEZE_WIND_CHARGE)); - public static final EntityData CAMEL = REGISTRY.register(new EntityData(14, "camel", 1.7f, 2.375f, true, true, EntityType.CAMEL)); + public static final EntityData CAMEL = REGISTRY.register(new EntityData(14, "camel", 1.7f, 2.375f, true, true, true, EntityType.CAMEL)); - public static final EntityData CAT = REGISTRY.register(new EntityData(15, "cat", 0.6f, 0.7f, true, true, EntityType.CAT)); + public static final EntityData CAT = REGISTRY.register(new EntityData(15, "cat", 0.6f, 0.7f, true, true, true, EntityType.CAT)); - public static final EntityData CAVE_SPIDER = REGISTRY.register(new EntityData(16, "cave_spider", 0.7f, 0.5f, true, true, EntityType.CAVE_SPIDER)); + public static final EntityData CAVE_SPIDER = REGISTRY.register(new EntityData(16, "cave_spider", 0.7f, 0.5f, true, true, true, EntityType.CAVE_SPIDER)); - public static final EntityData CHEST_BOAT = REGISTRY.register(new EntityData(17, "chest_boat", 1.375f, 0.5625f, true, true, EntityType.CHEST_BOAT)); + public static final EntityData CHEST_BOAT = REGISTRY.register(new EntityData(17, "chest_boat", 1.375f, 0.5625f, true, true, false, EntityType.CHEST_BOAT)); - public static final EntityData CHEST_MINECART = REGISTRY.register(new EntityData(18, "chest_minecart", 0.98f, 0.7f, true, true, EntityType.CHEST_MINECART)); + public static final EntityData CHEST_MINECART = REGISTRY.register(new EntityData(18, "chest_minecart", 0.98f, 0.7f, true, true, false, EntityType.CHEST_MINECART)); - public static final EntityData CHICKEN = REGISTRY.register(new EntityData(19, "chicken", 0.4f, 0.7f, true, true, EntityType.CHICKEN)); + public static final EntityData CHICKEN = REGISTRY.register(new EntityData(19, "chicken", 0.4f, 0.7f, true, true, true, EntityType.CHICKEN)); - public static final EntityData COD = REGISTRY.register(new EntityData(20, "cod", 0.5f, 0.3f, true, true, EntityType.COD)); + public static final EntityData COD = REGISTRY.register(new EntityData(20, "cod", 0.5f, 0.3f, true, true, true, EntityType.COD)); - public static final EntityData COMMAND_BLOCK_MINECART = REGISTRY.register(new EntityData(21, "command_block_minecart", 0.98f, 0.7f, true, true, EntityType.COMMAND_BLOCK_MINECART)); + public static final EntityData COMMAND_BLOCK_MINECART = REGISTRY.register(new EntityData(21, "command_block_minecart", 0.98f, 0.7f, true, true, false, EntityType.COMMAND_BLOCK_MINECART)); - public static final EntityData COW = REGISTRY.register(new EntityData(22, "cow", 0.9f, 1.4f, true, true, EntityType.COW)); + public static final EntityData COW = REGISTRY.register(new EntityData(22, "cow", 0.9f, 1.4f, true, true, true, EntityType.COW)); - public static final EntityData CREEPER = REGISTRY.register(new EntityData(23, "creeper", 0.6f, 1.7f, true, true, EntityType.CREEPER)); + public static final EntityData CREEPER = REGISTRY.register(new EntityData(23, "creeper", 0.6f, 1.7f, true, true, true, EntityType.CREEPER)); - public static final EntityData DOLPHIN = REGISTRY.register(new EntityData(24, "dolphin", 0.9f, 0.6f, true, true, EntityType.DOLPHIN)); + public static final EntityData DOLPHIN = REGISTRY.register(new EntityData(24, "dolphin", 0.9f, 0.6f, true, true, true, EntityType.DOLPHIN)); - public static final EntityData DONKEY = REGISTRY.register(new EntityData(25, "donkey", 1.3964844f, 1.5f, true, true, EntityType.DONKEY)); + public static final EntityData DONKEY = REGISTRY.register(new EntityData(25, "donkey", 1.3964844f, 1.5f, true, true, true, EntityType.DONKEY)); - public static final EntityData DRAGON_FIREBALL = REGISTRY.register(new EntityData(26, "dragon_fireball", 1.0f, 1.0f, true, false, EntityType.DRAGON_FIREBALL)); + public static final EntityData DRAGON_FIREBALL = REGISTRY.register(new EntityData(26, "dragon_fireball", 1.0f, 1.0f, true, false, false, EntityType.DRAGON_FIREBALL)); - public static final EntityData DROWNED = REGISTRY.register(new EntityData(27, "drowned", 0.6f, 1.95f, true, true, EntityType.DROWNED)); + public static final EntityData DROWNED = REGISTRY.register(new EntityData(27, "drowned", 0.6f, 1.95f, true, true, true, EntityType.DROWNED)); - public static final EntityData EGG = REGISTRY.register(new EntityData(28, "egg", 0.25f, 0.25f, true, false, EntityType.EGG)); + public static final EntityData EGG = REGISTRY.register(new EntityData(28, "egg", 0.25f, 0.25f, true, false, false, EntityType.EGG)); - public static final EntityData ELDER_GUARDIAN = REGISTRY.register(new EntityData(29, "elder_guardian", 1.9975f, 1.9975f, true, true, EntityType.ELDER_GUARDIAN)); + public static final EntityData ELDER_GUARDIAN = REGISTRY.register(new EntityData(29, "elder_guardian", 1.9975f, 1.9975f, true, true, true, EntityType.ELDER_GUARDIAN)); - public static final EntityData END_CRYSTAL = REGISTRY.register(new EntityData(30, "end_crystal", 2.0f, 2.0f, true, true, EntityType.END_CRYSTAL)); + public static final EntityData END_CRYSTAL = REGISTRY.register(new EntityData(30, "end_crystal", 2.0f, 2.0f, true, true, false, EntityType.END_CRYSTAL)); - public static final EntityData ENDER_DRAGON = REGISTRY.register(new EntityData(31, "ender_dragon", 16.0f, 8.0f, true, false, EntityType.ENDER_DRAGON)); + public static final EntityData ENDER_DRAGON = REGISTRY.register(new EntityData(31, "ender_dragon", 16.0f, 8.0f, true, false, true, EntityType.ENDER_DRAGON)); - public static final EntityData ENDER_PEARL = REGISTRY.register(new EntityData(32, "ender_pearl", 0.25f, 0.25f, true, false, EntityType.ENDER_PEARL)); + public static final EntityData ENDER_PEARL = REGISTRY.register(new EntityData(32, "ender_pearl", 0.25f, 0.25f, true, false, false, EntityType.ENDER_PEARL)); - public static final EntityData ENDERMAN = REGISTRY.register(new EntityData(33, "enderman", 0.6f, 2.9f, true, true, EntityType.ENDERMAN)); + public static final EntityData ENDERMAN = REGISTRY.register(new EntityData(33, "enderman", 0.6f, 2.9f, true, true, true, EntityType.ENDERMAN)); - public static final EntityData ENDERMITE = REGISTRY.register(new EntityData(34, "endermite", 0.4f, 0.3f, true, true, EntityType.ENDERMITE)); + public static final EntityData ENDERMITE = REGISTRY.register(new EntityData(34, "endermite", 0.4f, 0.3f, true, true, true, EntityType.ENDERMITE)); - public static final EntityData EVOKER = REGISTRY.register(new EntityData(35, "evoker", 0.6f, 1.95f, true, true, EntityType.EVOKER)); + public static final EntityData EVOKER = REGISTRY.register(new EntityData(35, "evoker", 0.6f, 1.95f, true, true, true, EntityType.EVOKER)); - public static final EntityData EVOKER_FANGS = REGISTRY.register(new EntityData(36, "evoker_fangs", 0.5f, 0.8f, true, false, EntityType.EVOKER_FANGS)); + public static final EntityData EVOKER_FANGS = REGISTRY.register(new EntityData(36, "evoker_fangs", 0.5f, 0.8f, true, false, false, EntityType.EVOKER_FANGS)); - public static final EntityData EXPERIENCE_BOTTLE = REGISTRY.register(new EntityData(37, "experience_bottle", 0.25f, 0.25f, true, false, EntityType.EXPERIENCE_BOTTLE)); + public static final EntityData EXPERIENCE_BOTTLE = REGISTRY.register(new EntityData(37, "experience_bottle", 0.25f, 0.25f, true, false, false, EntityType.EXPERIENCE_BOTTLE)); - public static final EntityData EXPERIENCE_ORB = REGISTRY.register(new EntityData(38, "experience_orb", 0.5f, 0.5f, false, false, EntityType.EXPERIENCE_ORB)); + public static final EntityData EXPERIENCE_ORB = REGISTRY.register(new EntityData(38, "experience_orb", 0.5f, 0.5f, false, false, false, EntityType.EXPERIENCE_ORB)); - public static final EntityData EYE_OF_ENDER = REGISTRY.register(new EntityData(39, "eye_of_ender", 0.25f, 0.25f, false, false, EntityType.EYE_OF_ENDER)); + public static final EntityData EYE_OF_ENDER = REGISTRY.register(new EntityData(39, "eye_of_ender", 0.25f, 0.25f, false, false, false, EntityType.EYE_OF_ENDER)); - public static final EntityData FALLING_BLOCK = REGISTRY.register(new EntityData(40, "falling_block", 0.98f, 0.98f, false, true, EntityType.FALLING_BLOCK)); + public static final EntityData FALLING_BLOCK = REGISTRY.register(new EntityData(40, "falling_block", 0.98f, 0.98f, false, true, false, EntityType.FALLING_BLOCK)); - public static final EntityData FIREWORK_ROCKET = REGISTRY.register(new EntityData(41, "firework_rocket", 0.25f, 0.25f, false, false, EntityType.FIREWORK_ROCKET)); + public static final EntityData FIREWORK_ROCKET = REGISTRY.register(new EntityData(41, "firework_rocket", 0.25f, 0.25f, false, false, false, EntityType.FIREWORK_ROCKET)); - public static final EntityData FOX = REGISTRY.register(new EntityData(42, "fox", 0.6f, 0.7f, true, true, EntityType.FOX)); + public static final EntityData FOX = REGISTRY.register(new EntityData(42, "fox", 0.6f, 0.7f, true, true, true, EntityType.FOX)); - public static final EntityData FROG = REGISTRY.register(new EntityData(43, "frog", 0.5f, 0.5f, true, true, EntityType.FROG)); + public static final EntityData FROG = REGISTRY.register(new EntityData(43, "frog", 0.5f, 0.5f, true, true, true, EntityType.FROG)); - public static final EntityData FURNACE_MINECART = REGISTRY.register(new EntityData(44, "furnace_minecart", 0.98f, 0.7f, true, true, EntityType.FURNACE_MINECART)); + public static final EntityData FURNACE_MINECART = REGISTRY.register(new EntityData(44, "furnace_minecart", 0.98f, 0.7f, true, true, false, EntityType.FURNACE_MINECART)); - public static final EntityData GHAST = REGISTRY.register(new EntityData(45, "ghast", 4.0f, 4.0f, true, true, EntityType.GHAST)); + public static final EntityData GHAST = REGISTRY.register(new EntityData(45, "ghast", 4.0f, 4.0f, true, true, true, EntityType.GHAST)); - public static final EntityData GIANT = REGISTRY.register(new EntityData(46, "giant", 3.6f, 12.0f, true, true, EntityType.GIANT)); + public static final EntityData GIANT = REGISTRY.register(new EntityData(46, "giant", 3.6f, 12.0f, true, true, true, EntityType.GIANT)); - public static final EntityData GLOW_ITEM_FRAME = REGISTRY.register(new EntityData(47, "glow_item_frame", 0.5f, 0.5f, true, true, EntityType.GLOW_ITEM_FRAME)); + public static final EntityData GLOW_ITEM_FRAME = REGISTRY.register(new EntityData(47, "glow_item_frame", 0.5f, 0.5f, true, true, false, EntityType.GLOW_ITEM_FRAME)); - public static final EntityData GLOW_SQUID = REGISTRY.register(new EntityData(48, "glow_squid", 0.8f, 0.8f, true, true, EntityType.GLOW_SQUID)); + public static final EntityData GLOW_SQUID = REGISTRY.register(new EntityData(48, "glow_squid", 0.8f, 0.8f, true, true, true, EntityType.GLOW_SQUID)); - public static final EntityData GOAT = REGISTRY.register(new EntityData(49, "goat", 0.9f, 1.3f, true, true, EntityType.GOAT)); + public static final EntityData GOAT = REGISTRY.register(new EntityData(49, "goat", 0.9f, 1.3f, true, true, true, EntityType.GOAT)); - public static final EntityData GUARDIAN = REGISTRY.register(new EntityData(50, "guardian", 0.85f, 0.85f, true, true, EntityType.GUARDIAN)); + public static final EntityData GUARDIAN = REGISTRY.register(new EntityData(50, "guardian", 0.85f, 0.85f, true, true, true, EntityType.GUARDIAN)); - public static final EntityData HOGLIN = REGISTRY.register(new EntityData(51, "hoglin", 1.3964844f, 1.4f, true, true, EntityType.HOGLIN)); + public static final EntityData HOGLIN = REGISTRY.register(new EntityData(51, "hoglin", 1.3964844f, 1.4f, true, true, true, EntityType.HOGLIN)); - public static final EntityData HOPPER_MINECART = REGISTRY.register(new EntityData(52, "hopper_minecart", 0.98f, 0.7f, true, true, EntityType.HOPPER_MINECART)); + public static final EntityData HOPPER_MINECART = REGISTRY.register(new EntityData(52, "hopper_minecart", 0.98f, 0.7f, true, true, false, EntityType.HOPPER_MINECART)); - public static final EntityData HORSE = REGISTRY.register(new EntityData(53, "horse", 1.3964844f, 1.6f, true, true, EntityType.HORSE)); + public static final EntityData HORSE = REGISTRY.register(new EntityData(53, "horse", 1.3964844f, 1.6f, true, true, true, EntityType.HORSE)); - public static final EntityData HUSK = REGISTRY.register(new EntityData(54, "husk", 0.6f, 1.95f, true, true, EntityType.HUSK)); + public static final EntityData HUSK = REGISTRY.register(new EntityData(54, "husk", 0.6f, 1.95f, true, true, true, EntityType.HUSK)); - public static final EntityData ILLUSIONER = REGISTRY.register(new EntityData(55, "illusioner", 0.6f, 1.95f, true, true, EntityType.ILLUSIONER)); + public static final EntityData ILLUSIONER = REGISTRY.register(new EntityData(55, "illusioner", 0.6f, 1.95f, true, true, true, EntityType.ILLUSIONER)); - public static final EntityData INTERACTION = REGISTRY.register(new EntityData(56, "interaction", 0.0f, 0.0f, true, true, EntityType.INTERACTION)); + public static final EntityData INTERACTION = REGISTRY.register(new EntityData(56, "interaction", 0.0f, 0.0f, true, true, false, EntityType.INTERACTION)); - public static final EntityData IRON_GOLEM = REGISTRY.register(new EntityData(57, "iron_golem", 1.4f, 2.7f, true, true, EntityType.IRON_GOLEM)); + public static final EntityData IRON_GOLEM = REGISTRY.register(new EntityData(57, "iron_golem", 1.4f, 2.7f, true, true, true, EntityType.IRON_GOLEM)); - public static final EntityData ITEM = REGISTRY.register(new EntityData(58, "item", 0.25f, 0.25f, false, false, EntityType.ITEM)); + public static final EntityData ITEM = REGISTRY.register(new EntityData(58, "item", 0.25f, 0.25f, false, false, false, EntityType.ITEM)); - public static final EntityData ITEM_DISPLAY = REGISTRY.register(new EntityData(59, "item_display", 0.0f, 0.0f, true, false, EntityType.ITEM_DISPLAY)); + public static final EntityData ITEM_DISPLAY = REGISTRY.register(new EntityData(59, "item_display", 0.0f, 0.0f, true, false, false, EntityType.ITEM_DISPLAY)); - public static final EntityData ITEM_FRAME = REGISTRY.register(new EntityData(60, "item_frame", 0.5f, 0.5f, true, true, EntityType.ITEM_FRAME)); + public static final EntityData ITEM_FRAME = REGISTRY.register(new EntityData(60, "item_frame", 0.5f, 0.5f, true, true, false, EntityType.ITEM_FRAME)); - public static final EntityData OMINOUS_ITEM_SPAWNER = REGISTRY.register(new EntityData(61, "ominous_item_spawner", 0.25f, 0.25f, true, false, EntityType.OMINOUS_ITEM_SPAWNER)); + public static final EntityData OMINOUS_ITEM_SPAWNER = REGISTRY.register(new EntityData(61, "ominous_item_spawner", 0.25f, 0.25f, true, false, false, EntityType.OMINOUS_ITEM_SPAWNER)); - public static final EntityData FIREBALL = REGISTRY.register(new EntityData(62, "fireball", 1.0f, 1.0f, true, true, EntityType.FIREBALL)); + public static final EntityData FIREBALL = REGISTRY.register(new EntityData(62, "fireball", 1.0f, 1.0f, true, true, false, EntityType.FIREBALL)); - public static final EntityData LEASH_KNOT = REGISTRY.register(new EntityData(63, "leash_knot", 0.375f, 0.5f, true, true, EntityType.LEASH_KNOT)); + public static final EntityData LEASH_KNOT = REGISTRY.register(new EntityData(63, "leash_knot", 0.375f, 0.5f, true, true, false, EntityType.LEASH_KNOT)); - public static final EntityData LIGHTNING_BOLT = REGISTRY.register(new EntityData(64, "lightning_bolt", 0.0f, 0.0f, true, false, EntityType.LIGHTNING_BOLT)); + public static final EntityData LIGHTNING_BOLT = REGISTRY.register(new EntityData(64, "lightning_bolt", 0.0f, 0.0f, true, false, false, EntityType.LIGHTNING_BOLT)); - public static final EntityData LLAMA = REGISTRY.register(new EntityData(65, "llama", 0.9f, 1.87f, true, true, EntityType.LLAMA)); + public static final EntityData LLAMA = REGISTRY.register(new EntityData(65, "llama", 0.9f, 1.87f, true, true, true, EntityType.LLAMA)); - public static final EntityData LLAMA_SPIT = REGISTRY.register(new EntityData(66, "llama_spit", 0.25f, 0.25f, true, false, EntityType.LLAMA_SPIT)); + public static final EntityData LLAMA_SPIT = REGISTRY.register(new EntityData(66, "llama_spit", 0.25f, 0.25f, true, false, false, EntityType.LLAMA_SPIT)); - public static final EntityData MAGMA_CUBE = REGISTRY.register(new EntityData(67, "magma_cube", 0.52f, 0.52f, true, true, EntityType.MAGMA_CUBE)); + public static final EntityData MAGMA_CUBE = REGISTRY.register(new EntityData(67, "magma_cube", 0.52f, 0.52f, true, true, true, EntityType.MAGMA_CUBE)); - public static final EntityData MARKER = REGISTRY.register(new EntityData(68, "marker", 0.0f, 0.0f, true, false, EntityType.MARKER)); + public static final EntityData MARKER = REGISTRY.register(new EntityData(68, "marker", 0.0f, 0.0f, true, false, false, EntityType.MARKER)); - public static final EntityData MINECART = REGISTRY.register(new EntityData(69, "minecart", 0.98f, 0.7f, true, true, EntityType.MINECART)); + public static final EntityData MINECART = REGISTRY.register(new EntityData(69, "minecart", 0.98f, 0.7f, true, true, false, EntityType.MINECART)); - public static final EntityData MOOSHROOM = REGISTRY.register(new EntityData(70, "mooshroom", 0.9f, 1.4f, true, true, EntityType.MOOSHROOM)); + public static final EntityData MOOSHROOM = REGISTRY.register(new EntityData(70, "mooshroom", 0.9f, 1.4f, true, true, true, EntityType.MOOSHROOM)); - public static final EntityData MULE = REGISTRY.register(new EntityData(71, "mule", 1.3964844f, 1.6f, true, true, EntityType.MULE)); + public static final EntityData MULE = REGISTRY.register(new EntityData(71, "mule", 1.3964844f, 1.6f, true, true, true, EntityType.MULE)); - public static final EntityData OCELOT = REGISTRY.register(new EntityData(72, "ocelot", 0.6f, 0.7f, true, true, EntityType.OCELOT)); + public static final EntityData OCELOT = REGISTRY.register(new EntityData(72, "ocelot", 0.6f, 0.7f, true, true, true, EntityType.OCELOT)); - public static final EntityData PAINTING = REGISTRY.register(new EntityData(73, "painting", 0.5f, 0.5f, true, true, EntityType.PAINTING)); + public static final EntityData PAINTING = REGISTRY.register(new EntityData(73, "painting", 0.5f, 0.5f, true, true, false, EntityType.PAINTING)); - public static final EntityData PANDA = REGISTRY.register(new EntityData(74, "panda", 1.3f, 1.25f, true, true, EntityType.PANDA)); + public static final EntityData PANDA = REGISTRY.register(new EntityData(74, "panda", 1.3f, 1.25f, true, true, true, EntityType.PANDA)); - public static final EntityData PARROT = REGISTRY.register(new EntityData(75, "parrot", 0.5f, 0.9f, true, true, EntityType.PARROT)); + public static final EntityData PARROT = REGISTRY.register(new EntityData(75, "parrot", 0.5f, 0.9f, true, true, true, EntityType.PARROT)); - public static final EntityData PHANTOM = REGISTRY.register(new EntityData(76, "phantom", 0.9f, 0.5f, true, true, EntityType.PHANTOM)); + public static final EntityData PHANTOM = REGISTRY.register(new EntityData(76, "phantom", 0.9f, 0.5f, true, true, true, EntityType.PHANTOM)); - public static final EntityData PIG = REGISTRY.register(new EntityData(77, "pig", 0.9f, 0.9f, true, true, EntityType.PIG)); + public static final EntityData PIG = REGISTRY.register(new EntityData(77, "pig", 0.9f, 0.9f, true, true, true, EntityType.PIG)); - public static final EntityData PIGLIN = REGISTRY.register(new EntityData(78, "piglin", 0.6f, 1.95f, true, true, EntityType.PIGLIN)); + public static final EntityData PIGLIN = REGISTRY.register(new EntityData(78, "piglin", 0.6f, 1.95f, true, true, true, EntityType.PIGLIN)); - public static final EntityData PIGLIN_BRUTE = REGISTRY.register(new EntityData(79, "piglin_brute", 0.6f, 1.95f, true, true, EntityType.PIGLIN_BRUTE)); + public static final EntityData PIGLIN_BRUTE = REGISTRY.register(new EntityData(79, "piglin_brute", 0.6f, 1.95f, true, true, true, EntityType.PIGLIN_BRUTE)); - public static final EntityData PILLAGER = REGISTRY.register(new EntityData(80, "pillager", 0.6f, 1.95f, true, true, EntityType.PILLAGER)); + public static final EntityData PILLAGER = REGISTRY.register(new EntityData(80, "pillager", 0.6f, 1.95f, true, true, true, EntityType.PILLAGER)); - public static final EntityData POLAR_BEAR = REGISTRY.register(new EntityData(81, "polar_bear", 1.4f, 1.4f, true, true, EntityType.POLAR_BEAR)); + public static final EntityData POLAR_BEAR = REGISTRY.register(new EntityData(81, "polar_bear", 1.4f, 1.4f, true, true, true, EntityType.POLAR_BEAR)); - public static final EntityData POTION = REGISTRY.register(new EntityData(82, "potion", 0.25f, 0.25f, true, false, EntityType.POTION)); + public static final EntityData POTION = REGISTRY.register(new EntityData(82, "potion", 0.25f, 0.25f, true, false, false, EntityType.POTION)); - public static final EntityData PUFFERFISH = REGISTRY.register(new EntityData(83, "pufferfish", 0.7f, 0.7f, true, true, EntityType.PUFFERFISH)); + public static final EntityData PUFFERFISH = REGISTRY.register(new EntityData(83, "pufferfish", 0.7f, 0.7f, true, true, true, EntityType.PUFFERFISH)); - public static final EntityData RABBIT = REGISTRY.register(new EntityData(84, "rabbit", 0.4f, 0.5f, true, true, EntityType.RABBIT)); + public static final EntityData RABBIT = REGISTRY.register(new EntityData(84, "rabbit", 0.4f, 0.5f, true, true, true, EntityType.RABBIT)); - public static final EntityData RAVAGER = REGISTRY.register(new EntityData(85, "ravager", 1.95f, 2.2f, true, true, EntityType.RAVAGER)); + public static final EntityData RAVAGER = REGISTRY.register(new EntityData(85, "ravager", 1.95f, 2.2f, true, true, true, EntityType.RAVAGER)); - public static final EntityData SALMON = REGISTRY.register(new EntityData(86, "salmon", 0.7f, 0.4f, true, true, EntityType.SALMON)); + public static final EntityData SALMON = REGISTRY.register(new EntityData(86, "salmon", 0.7f, 0.4f, true, true, true, EntityType.SALMON)); - public static final EntityData SHEEP = REGISTRY.register(new EntityData(87, "sheep", 0.9f, 1.3f, true, true, EntityType.SHEEP)); + public static final EntityData SHEEP = REGISTRY.register(new EntityData(87, "sheep", 0.9f, 1.3f, true, true, true, EntityType.SHEEP)); - public static final EntityData SHULKER = REGISTRY.register(new EntityData(88, "shulker", 1.0f, 1.0f, true, true, EntityType.SHULKER)); + public static final EntityData SHULKER = REGISTRY.register(new EntityData(88, "shulker", 1.0f, 1.0f, true, true, true, EntityType.SHULKER)); - public static final EntityData SHULKER_BULLET = REGISTRY.register(new EntityData(89, "shulker_bullet", 0.3125f, 0.3125f, true, true, EntityType.SHULKER_BULLET)); + public static final EntityData SHULKER_BULLET = REGISTRY.register(new EntityData(89, "shulker_bullet", 0.3125f, 0.3125f, true, true, false, EntityType.SHULKER_BULLET)); - public static final EntityData SILVERFISH = REGISTRY.register(new EntityData(90, "silverfish", 0.4f, 0.3f, true, true, EntityType.SILVERFISH)); + public static final EntityData SILVERFISH = REGISTRY.register(new EntityData(90, "silverfish", 0.4f, 0.3f, true, true, true, EntityType.SILVERFISH)); - public static final EntityData SKELETON = REGISTRY.register(new EntityData(91, "skeleton", 0.6f, 1.99f, true, true, EntityType.SKELETON)); + public static final EntityData SKELETON = REGISTRY.register(new EntityData(91, "skeleton", 0.6f, 1.99f, true, true, true, EntityType.SKELETON)); - public static final EntityData SKELETON_HORSE = REGISTRY.register(new EntityData(92, "skeleton_horse", 1.3964844f, 1.6f, true, true, EntityType.SKELETON_HORSE)); + public static final EntityData SKELETON_HORSE = REGISTRY.register(new EntityData(92, "skeleton_horse", 1.3964844f, 1.6f, true, true, true, EntityType.SKELETON_HORSE)); - public static final EntityData SLIME = REGISTRY.register(new EntityData(93, "slime", 0.52f, 0.52f, true, true, EntityType.SLIME)); + public static final EntityData SLIME = REGISTRY.register(new EntityData(93, "slime", 0.52f, 0.52f, true, true, true, EntityType.SLIME)); - public static final EntityData SMALL_FIREBALL = REGISTRY.register(new EntityData(94, "small_fireball", 0.3125f, 0.3125f, true, false, EntityType.SMALL_FIREBALL)); + public static final EntityData SMALL_FIREBALL = REGISTRY.register(new EntityData(94, "small_fireball", 0.3125f, 0.3125f, true, false, false, EntityType.SMALL_FIREBALL)); - public static final EntityData SNIFFER = REGISTRY.register(new EntityData(95, "sniffer", 1.9f, 1.75f, true, true, EntityType.SNIFFER)); + public static final EntityData SNIFFER = REGISTRY.register(new EntityData(95, "sniffer", 1.9f, 1.75f, true, true, true, EntityType.SNIFFER)); - public static final EntityData SNOW_GOLEM = REGISTRY.register(new EntityData(96, "snow_golem", 0.7f, 1.9f, true, true, EntityType.SNOW_GOLEM)); + public static final EntityData SNOW_GOLEM = REGISTRY.register(new EntityData(96, "snow_golem", 0.7f, 1.9f, true, true, true, EntityType.SNOW_GOLEM)); - public static final EntityData SNOWBALL = REGISTRY.register(new EntityData(97, "snowball", 0.25f, 0.25f, true, false, EntityType.SNOWBALL)); + public static final EntityData SNOWBALL = REGISTRY.register(new EntityData(97, "snowball", 0.25f, 0.25f, true, false, false, EntityType.SNOWBALL)); - public static final EntityData SPAWNER_MINECART = REGISTRY.register(new EntityData(98, "spawner_minecart", 0.98f, 0.7f, true, true, EntityType.SPAWNER_MINECART)); + public static final EntityData SPAWNER_MINECART = REGISTRY.register(new EntityData(98, "spawner_minecart", 0.98f, 0.7f, true, true, false, EntityType.SPAWNER_MINECART)); - public static final EntityData SPECTRAL_ARROW = REGISTRY.register(new EntityData(99, "spectral_arrow", 0.5f, 0.5f, false, false, EntityType.SPECTRAL_ARROW)); + public static final EntityData SPECTRAL_ARROW = REGISTRY.register(new EntityData(99, "spectral_arrow", 0.5f, 0.5f, false, false, false, EntityType.SPECTRAL_ARROW)); - public static final EntityData SPIDER = REGISTRY.register(new EntityData(100, "spider", 1.4f, 0.9f, true, true, EntityType.SPIDER)); + public static final EntityData SPIDER = REGISTRY.register(new EntityData(100, "spider", 1.4f, 0.9f, true, true, true, EntityType.SPIDER)); - public static final EntityData SQUID = REGISTRY.register(new EntityData(101, "squid", 0.8f, 0.8f, true, true, EntityType.SQUID)); + public static final EntityData SQUID = REGISTRY.register(new EntityData(101, "squid", 0.8f, 0.8f, true, true, true, EntityType.SQUID)); - public static final EntityData STRAY = REGISTRY.register(new EntityData(102, "stray", 0.6f, 1.99f, true, true, EntityType.STRAY)); + public static final EntityData STRAY = REGISTRY.register(new EntityData(102, "stray", 0.6f, 1.99f, true, true, true, EntityType.STRAY)); - public static final EntityData STRIDER = REGISTRY.register(new EntityData(103, "strider", 0.9f, 1.7f, true, true, EntityType.STRIDER)); + public static final EntityData STRIDER = REGISTRY.register(new EntityData(103, "strider", 0.9f, 1.7f, true, true, true, EntityType.STRIDER)); - public static final EntityData TADPOLE = REGISTRY.register(new EntityData(104, "tadpole", 0.4f, 0.3f, true, true, EntityType.TADPOLE)); + public static final EntityData TADPOLE = REGISTRY.register(new EntityData(104, "tadpole", 0.4f, 0.3f, true, true, true, EntityType.TADPOLE)); - public static final EntityData TEXT_DISPLAY = REGISTRY.register(new EntityData(105, "text_display", 0.0f, 0.0f, true, false, EntityType.TEXT_DISPLAY)); + public static final EntityData TEXT_DISPLAY = REGISTRY.register(new EntityData(105, "text_display", 0.0f, 0.0f, true, false, false, EntityType.TEXT_DISPLAY)); - public static final EntityData TNT = REGISTRY.register(new EntityData(106, "tnt", 0.98f, 0.98f, true, true, EntityType.TNT)); + public static final EntityData TNT = REGISTRY.register(new EntityData(106, "tnt", 0.98f, 0.98f, true, true, false, EntityType.TNT)); - public static final EntityData TNT_MINECART = REGISTRY.register(new EntityData(107, "tnt_minecart", 0.98f, 0.7f, true, true, EntityType.TNT_MINECART)); + public static final EntityData TNT_MINECART = REGISTRY.register(new EntityData(107, "tnt_minecart", 0.98f, 0.7f, true, true, false, EntityType.TNT_MINECART)); - public static final EntityData TRADER_LLAMA = REGISTRY.register(new EntityData(108, "trader_llama", 0.9f, 1.87f, true, true, EntityType.TRADER_LLAMA)); + public static final EntityData TRADER_LLAMA = REGISTRY.register(new EntityData(108, "trader_llama", 0.9f, 1.87f, true, true, true, EntityType.TRADER_LLAMA)); - public static final EntityData TRIDENT = REGISTRY.register(new EntityData(109, "trident", 0.5f, 0.5f, false, false, EntityType.TRIDENT)); + public static final EntityData TRIDENT = REGISTRY.register(new EntityData(109, "trident", 0.5f, 0.5f, false, false, false, EntityType.TRIDENT)); - public static final EntityData TROPICAL_FISH = REGISTRY.register(new EntityData(110, "tropical_fish", 0.5f, 0.4f, true, true, EntityType.TROPICAL_FISH)); + public static final EntityData TROPICAL_FISH = REGISTRY.register(new EntityData(110, "tropical_fish", 0.5f, 0.4f, true, true, true, EntityType.TROPICAL_FISH)); - public static final EntityData TURTLE = REGISTRY.register(new EntityData(111, "turtle", 1.2f, 0.4f, true, true, EntityType.TURTLE)); + public static final EntityData TURTLE = REGISTRY.register(new EntityData(111, "turtle", 1.2f, 0.4f, true, true, true, EntityType.TURTLE)); - public static final EntityData VEX = REGISTRY.register(new EntityData(112, "vex", 0.4f, 0.8f, true, true, EntityType.VEX)); + public static final EntityData VEX = REGISTRY.register(new EntityData(112, "vex", 0.4f, 0.8f, true, true, true, EntityType.VEX)); - public static final EntityData VILLAGER = REGISTRY.register(new EntityData(113, "villager", 0.6f, 1.95f, true, true, EntityType.VILLAGER)); + public static final EntityData VILLAGER = REGISTRY.register(new EntityData(113, "villager", 0.6f, 1.95f, true, true, true, EntityType.VILLAGER)); - public static final EntityData VINDICATOR = REGISTRY.register(new EntityData(114, "vindicator", 0.6f, 1.95f, true, true, EntityType.VINDICATOR)); + public static final EntityData VINDICATOR = REGISTRY.register(new EntityData(114, "vindicator", 0.6f, 1.95f, true, true, true, EntityType.VINDICATOR)); - public static final EntityData WANDERING_TRADER = REGISTRY.register(new EntityData(115, "wandering_trader", 0.6f, 1.95f, true, true, EntityType.WANDERING_TRADER)); + public static final EntityData WANDERING_TRADER = REGISTRY.register(new EntityData(115, "wandering_trader", 0.6f, 1.95f, true, true, true, EntityType.WANDERING_TRADER)); - public static final EntityData WARDEN = REGISTRY.register(new EntityData(116, "warden", 0.9f, 2.9f, true, true, EntityType.WARDEN)); + public static final EntityData WARDEN = REGISTRY.register(new EntityData(116, "warden", 0.9f, 2.9f, true, true, true, EntityType.WARDEN)); - public static final EntityData WIND_CHARGE = REGISTRY.register(new EntityData(117, "wind_charge", 0.3125f, 0.3125f, true, true, EntityType.WIND_CHARGE)); + public static final EntityData WIND_CHARGE = REGISTRY.register(new EntityData(117, "wind_charge", 0.3125f, 0.3125f, true, true, false, EntityType.WIND_CHARGE)); - public static final EntityData WITCH = REGISTRY.register(new EntityData(118, "witch", 0.6f, 1.95f, true, true, EntityType.WITCH)); + public static final EntityData WITCH = REGISTRY.register(new EntityData(118, "witch", 0.6f, 1.95f, true, true, true, EntityType.WITCH)); - public static final EntityData WITHER = REGISTRY.register(new EntityData(119, "wither", 0.9f, 3.5f, true, true, EntityType.WITHER)); + public static final EntityData WITHER = REGISTRY.register(new EntityData(119, "wither", 0.9f, 3.5f, true, true, true, EntityType.WITHER)); - public static final EntityData WITHER_SKELETON = REGISTRY.register(new EntityData(120, "wither_skeleton", 0.7f, 2.4f, true, true, EntityType.WITHER_SKELETON)); + public static final EntityData WITHER_SKELETON = REGISTRY.register(new EntityData(120, "wither_skeleton", 0.7f, 2.4f, true, true, true, EntityType.WITHER_SKELETON)); - public static final EntityData WITHER_SKULL = REGISTRY.register(new EntityData(121, "wither_skull", 0.3125f, 0.3125f, true, false, EntityType.WITHER_SKULL)); + public static final EntityData WITHER_SKULL = REGISTRY.register(new EntityData(121, "wither_skull", 0.3125f, 0.3125f, true, false, false, EntityType.WITHER_SKULL)); - public static final EntityData WOLF = REGISTRY.register(new EntityData(122, "wolf", 0.6f, 0.85f, true, true, EntityType.WOLF)); + public static final EntityData WOLF = REGISTRY.register(new EntityData(122, "wolf", 0.6f, 0.85f, true, true, true, EntityType.WOLF)); - public static final EntityData ZOGLIN = REGISTRY.register(new EntityData(123, "zoglin", 1.3964844f, 1.4f, true, true, EntityType.ZOGLIN)); + public static final EntityData ZOGLIN = REGISTRY.register(new EntityData(123, "zoglin", 1.3964844f, 1.4f, true, true, true, EntityType.ZOGLIN)); - public static final EntityData ZOMBIE = REGISTRY.register(new EntityData(124, "zombie", 0.6f, 1.95f, true, true, EntityType.ZOMBIE)); + public static final EntityData ZOMBIE = REGISTRY.register(new EntityData(124, "zombie", 0.6f, 1.95f, true, true, true, EntityType.ZOMBIE)); - public static final EntityData ZOMBIE_HORSE = REGISTRY.register(new EntityData(125, "zombie_horse", 1.3964844f, 1.6f, true, true, EntityType.ZOMBIE_HORSE)); + public static final EntityData ZOMBIE_HORSE = REGISTRY.register(new EntityData(125, "zombie_horse", 1.3964844f, 1.6f, true, true, true, EntityType.ZOMBIE_HORSE)); - public static final EntityData ZOMBIE_VILLAGER = REGISTRY.register(new EntityData(126, "zombie_villager", 0.6f, 1.95f, true, true, EntityType.ZOMBIE_VILLAGER)); + public static final EntityData ZOMBIE_VILLAGER = REGISTRY.register(new EntityData(126, "zombie_villager", 0.6f, 1.95f, true, true, true, EntityType.ZOMBIE_VILLAGER)); - public static final EntityData ZOMBIFIED_PIGLIN = REGISTRY.register(new EntityData(127, "zombified_piglin", 0.6f, 1.95f, true, true, EntityType.ZOMBIFIED_PIGLIN)); + public static final EntityData ZOMBIFIED_PIGLIN = REGISTRY.register(new EntityData(127, "zombified_piglin", 0.6f, 1.95f, true, true, true, EntityType.ZOMBIFIED_PIGLIN)); - public static final EntityData PLAYER = REGISTRY.register(new EntityData(128, "player", 0.6f, 1.8f, true, true, EntityType.PLAYER)); + public static final EntityData PLAYER = REGISTRY.register(new EntityData(128, "player", 0.6f, 1.8f, true, true, true, EntityType.PLAYER)); - public static final EntityData FISHING_BOBBER = REGISTRY.register(new EntityData(129, "fishing_bobber", 0.25f, 0.25f, true, false, EntityType.FISHING_BOBBER)); + public static final EntityData FISHING_BOBBER = REGISTRY.register(new EntityData(129, "fishing_bobber", 0.25f, 0.25f, true, false, false, EntityType.FISHING_BOBBER)); } diff --git a/src/main/java/com/zenith/module/impl/PlayerSimulation.java b/src/main/java/com/zenith/module/impl/PlayerSimulation.java index a1c0d6d6..638f7a70 100644 --- a/src/main/java/com/zenith/module/impl/PlayerSimulation.java +++ b/src/main/java/com/zenith/module/impl/PlayerSimulation.java @@ -1,15 +1,19 @@ package com.zenith.module.impl; +import com.zenith.cache.data.entity.EntityLiving; +import com.zenith.cache.data.entity.EntityPlayer; import com.zenith.event.module.ClientBotTick; import com.zenith.feature.world.*; import com.zenith.feature.world.raycast.RaycastHelper; import com.zenith.mc.block.*; import com.zenith.mc.dimension.DimensionRegistry; +import com.zenith.mc.entity.EntityData; import com.zenith.module.Module; import com.zenith.util.Timer; import com.zenith.util.math.MathHelper; import com.zenith.util.math.MutableVec3d; import lombok.Getter; +import org.geysermc.mcprotocollib.protocol.data.game.PlayerListEntry; import org.geysermc.mcprotocollib.protocol.data.game.entity.Effect; import org.geysermc.mcprotocollib.protocol.data.game.entity.attribute.Attribute; import org.geysermc.mcprotocollib.protocol.data.game.entity.attribute.AttributeModifier; @@ -25,6 +29,7 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.level.ServerboundPlayerInputPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.*; +import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -309,6 +314,7 @@ && isOnGround() this.lastSprinting = this.isSprinting; } this.movementInput.reset(); + tickEntityPushing(); } private static final String SPRINT_ATTRIBUTE_ID = "minecraft:sprinting"; @@ -798,6 +804,94 @@ private void applyMovementInput(MutableVec3d movementInputVec, float slipperines } } + private void tickEntityPushing() { + List pushableEntities = new ArrayList<>(0); + for (var it = CACHE.getEntityCache().getEntities().values().iterator(); it.hasNext(); ) { + var entity = it.next(); + if (entity == CACHE.getPlayerCache().getThePlayer()) continue; + if (!(entity instanceof EntityLiving entityLiving)) continue; + if (CACHE.getPlayerCache().distanceSqToSelf(entity) > 16.0) continue; + EntityType entityType = entityLiving.getEntityType(); + if (entityType == EntityType.HORSE + || entityType == EntityType.CAMEL + || entityType == EntityType.DONKEY + || entityType == EntityType.LLAMA + || entityType == EntityType.MULE + || entityType == EntityType.SKELETON_HORSE + || entityType == EntityType.TRADER_LLAMA + || entityType == EntityType.ZOMBIE_HORSE + ) { + boolean hasPassenger = CACHE.getEntityCache().getEntities().values().stream() + .anyMatch(e -> e.isInVehicle() && e.getVehicleId() == entityLiving.getEntityId()); + if (hasPassenger) continue; + else pushableEntities.add(entityLiving); + } + if (entityType == EntityType.MINECART + || entityType == EntityType.CHEST_MINECART + || entityType == EntityType.COMMAND_BLOCK_MINECART + || entityType == EntityType.FURNACE_MINECART + || entityType == EntityType.HOPPER_MINECART + || entityType == EntityType.TNT_MINECART + || entityType == EntityType.SPAWNER_MINECART + ) { + boolean hasPassenger = entityType == EntityType.MINECART + && CACHE.getEntityCache().getEntities().values().stream() + .anyMatch(e -> e.isInVehicle() && e.getVehicleId() == entityLiving.getEntityId()); + if (hasPassenger) continue; + pushableEntities.add(entityLiving); + } + if (entityType == EntityType.ARMOR_STAND) continue; + if (entityType == EntityType.BAT) continue; + if (entityType == EntityType.BOAT || entityType == EntityType.CHEST_BOAT) { + boolean hasPassenger = CACHE.getEntityCache().getEntities().values().stream() + .anyMatch(e -> e.isInVehicle() && e.getVehicleId() == entityLiving.getEntityId()); + if (hasPassenger) continue; + pushableEntities.add(entityLiving); + } + if (entityType == EntityType.PARROT) { + pushableEntities.add(entityLiving); + } + EntityData entityData = ENTITY_DATA.getEntityData(entityType); + if (entityData == null) continue; + if (entityData.livingEntity()) { + boolean isSpectator = false; + if (entityLiving instanceof EntityPlayer player) { + isSpectator = CACHE.getTabListCache().get(player.getUuid()) + .map(PlayerListEntry::getGameMode) + .filter(gm -> gm == GameMode.SPECTATOR) + .isPresent(); + } + if (entityLiving.isAlive() && !isSpectator && !World.onClimbable(entityLiving)) { + pushableEntities.add(entityLiving); + } + } + } + if (pushableEntities.isEmpty()) return; + var playerCB = getPlayerCollisionBox().inflate(0.2, -0.1, 0.2); + for (int i = 0; i < pushableEntities.size(); i++) { + var entity = pushableEntities.get(i); + var entityCB = ENTITY_DATA.getCollisionBox(entity); + if (!playerCB.intersects(entityCB)) continue; + double d = entity.getX() - getX(); + double e = entity.getZ() - getZ(); + double f = MathHelper.absMax(d, e); + if (f >= 0.01) { + f = Math.sqrt(f); + d /= f; + e /= f; + double g = 1.0 / f; + if (g > 1.0) { + g = 1.0; + } + d *= g; + e *= g; + d *= 0.05; + e *= 0.05; + velocity.add(-d, 0, -e); + } + } + } + private void updateVelocity(float speed, MutableVec3d movementInput) { MutableVec3d vec3d = movementInputToVelocity(movementInput, speed, this.yaw); this.velocity.add(vec3d); diff --git a/src/main/java/com/zenith/util/math/MathHelper.java b/src/main/java/com/zenith/util/math/MathHelper.java index 5472ba84..d098a5fb 100644 --- a/src/main/java/com/zenith/util/math/MathHelper.java +++ b/src/main/java/com/zenith/util/math/MathHelper.java @@ -202,4 +202,14 @@ public static long getSeed(int x, int y, int z) { l = l * l * 42317861L + l * 11L; return l >> 16; } + + public static double absMax(double x, double y) { + if (x < 0) { + x = -x; + } + if (y < 0) { + y = -y; + } + return Math.max(x, y); + } }