From 0301be97af49ee65b98b8100987041e012e2d4ea Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 3 Nov 2020 23:40:33 +0300 Subject: [PATCH] Mobs pathfinding issues fix --- .../mixin/common/LandPathNodeMakerMixin.java | 29 +++++++++++++++++++ .../ru/betterend/registry/EndFeatures.java | 4 +-- .../world/biome/BiomeShadowForest.java | 1 + .../world/features/SinglePlantFeature.java | 6 ++++ .../resources/betterend.mixins.common.json | 1 + 5 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 src/main/java/ru/betterend/mixin/common/LandPathNodeMakerMixin.java diff --git a/src/main/java/ru/betterend/mixin/common/LandPathNodeMakerMixin.java b/src/main/java/ru/betterend/mixin/common/LandPathNodeMakerMixin.java new file mode 100644 index 00000000..50d5451b --- /dev/null +++ b/src/main/java/ru/betterend/mixin/common/LandPathNodeMakerMixin.java @@ -0,0 +1,29 @@ +package ru.betterend.mixin.common; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import net.minecraft.block.BlockState; +import net.minecraft.entity.ai.pathing.LandPathNodeMaker; +import net.minecraft.entity.ai.pathing.PathNodeType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockView; +import ru.betterend.registry.EndBlocks; + +@Mixin(LandPathNodeMaker.class) +public class LandPathNodeMakerMixin { + @Inject(method = "getCommonNodeType", at = @At(value = "HEAD"), cancellable = true) + private static void beModifyPathNodes(BlockView blockView, BlockPos blockPos, CallbackInfoReturnable info) { + BlockState blockState = blockView.getBlockState(blockPos); + if (blockState.isOf(EndBlocks.NEEDLEGRASS) || blockState.isOf(EndBlocks.MURKWEED)) { + beCactusDamage(info); + } + } + + private static void beCactusDamage(CallbackInfoReturnable info) { + info.setReturnValue(PathNodeType.DAMAGE_CACTUS); + info.cancel(); + } +} diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index 4718a078..3abd910b 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -49,6 +49,7 @@ public class EndFeatures { public static final EndFeature SHADOW_PLANT = new EndFeature("shadow_plant", new SinglePlantFeature(EndBlocks.SHADOW_PLANT, 6), 9); public static final EndFeature MURKWEED = new EndFeature("murkweed", new SinglePlantFeature(EndBlocks.MURKWEED, 3), 2); public static final EndFeature NEEDLEGRASS = new EndFeature("needlegrass", new SinglePlantFeature(EndBlocks.NEEDLEGRASS, 3), 2); + public static final EndFeature SHADOW_BERRY = new EndFeature("shadow_berry", new SinglePlantFeature(EndBlocks.SHADOW_BERRY, 2), 1); // Vines // public static final EndFeature DENSE_VINE = new EndFeature("dense_vine", new VineFeature(EndBlocks.DENSE_VINE, 24), 3); @@ -73,9 +74,6 @@ public class EndFeatures { public static final EndFeature VIOLECITE_LAYER = EndFeature.makeLayerFeature("violecite_layer", EndBlocks.VIOLECITE, 15, 4, 96, 8); public static final EndFeature FLAVOLITE_LAYER = EndFeature.makeLayerFeature("flavolite_layer", EndBlocks.FLAVOLITE, 12, 4, 96, 6); - // Other // - //public static final EndFeature ETERNAL_PORTAL = EndFeature.makeChansedFeature("eternal_portal", new EternalPortalFeature(), 500); - public static void registerBiomeFeatures(Identifier id, Biome biome, List>>> features) { if (id.getNamespace().equals("minecraft")) { String path = id.getPath(); diff --git a/src/main/java/ru/betterend/world/biome/BiomeShadowForest.java b/src/main/java/ru/betterend/world/biome/BiomeShadowForest.java index 0f91ba1b..d1b51a8f 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeShadowForest.java +++ b/src/main/java/ru/betterend/world/biome/BiomeShadowForest.java @@ -23,6 +23,7 @@ public class BiomeShadowForest extends EndBiome { .addFeature(EndFeatures.SHADOW_PLANT) .addFeature(EndFeatures.MURKWEED) .addFeature(EndFeatures.NEEDLEGRASS) + .addFeature(EndFeatures.SHADOW_BERRY) .addFeature(EndFeatures.TWISTED_VINE) .addStructureFeature(ConfiguredStructureFeatures.END_CITY) .addMobSpawn(EntityType.ENDERMAN, 80, 1, 4) diff --git a/src/main/java/ru/betterend/world/features/SinglePlantFeature.java b/src/main/java/ru/betterend/world/features/SinglePlantFeature.java index 35171b8d..2d234913 100644 --- a/src/main/java/ru/betterend/world/features/SinglePlantFeature.java +++ b/src/main/java/ru/betterend/world/features/SinglePlantFeature.java @@ -7,6 +7,7 @@ import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; import net.minecraft.world.StructureWorldAccess; import ru.betterend.blocks.basis.BlockDoublePlant; +import ru.betterend.blocks.basis.BlockPlantWithAge; import ru.betterend.util.BlocksHelper; public class SinglePlantFeature extends ScatterFeature { @@ -41,6 +42,11 @@ public class SinglePlantFeature extends ScatterFeature { BlocksHelper.setWithoutUpdate(world, blockPos, state); BlocksHelper.setWithoutUpdate(world, blockPos.up(), state.with(BlockDoublePlant.TOP, true)); } + else if (plant instanceof BlockPlantWithAge) { + int age = random.nextInt(4); + BlockState state = plant.getDefaultState().with(BlockPlantWithAge.AGE, age); + BlocksHelper.setWithoutUpdate(world, blockPos, state); + } else { BlocksHelper.setWithoutUpdate(world, blockPos, plant); } diff --git a/src/main/resources/betterend.mixins.common.json b/src/main/resources/betterend.mixins.common.json index 3ade9c13..9308e018 100644 --- a/src/main/resources/betterend.mixins.common.json +++ b/src/main/resources/betterend.mixins.common.json @@ -12,6 +12,7 @@ "ServerPlayerEntityMixin", "ChorusPlantFeatureMixin", "ChorusFlowerBlockMixin", + "LandPathNodeMakerMixin", "ChorusPlantBlockMixin", "RecipeManagerAccessor", "MinecraftServerMixin",