From 7bc0f9d63daabf677fe97c411594444b0ed225ae Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 28 Nov 2021 22:03:02 +0100 Subject: [PATCH 1/5] Spelling Fix --- .../java/ru/betterend/registry/EndEntities.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndEntities.java b/src/main/java/ru/betterend/registry/EndEntities.java index 22d14cb2..8a0bb785 100644 --- a/src/main/java/ru/betterend/registry/EndEntities.java +++ b/src/main/java/ru/betterend/registry/EndEntities.java @@ -12,7 +12,7 @@ import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.MobCategory; import net.minecraft.world.entity.ai.attributes.AttributeSupplier.Builder; import net.minecraft.world.level.levelgen.Heightmap.Types; -import ru.bclib.api.spawning.SpawnRuleBulder; +import ru.bclib.api.spawning.SpawnRuleBuilder; import ru.bclib.util.ColorUtil; import ru.betterend.BetterEnd; import ru.betterend.config.Configs; @@ -93,23 +93,23 @@ public class EndEntities { public static void register() { // Air // - SpawnRuleBulder.start(DRAGONFLY).aboveGround(2).maxNearby(8).buildNoRestrictions(Types.MOTION_BLOCKING); - SpawnRuleBulder.start(SILK_MOTH).aboveGround(2).maxNearby(4).buildNoRestrictions(Types.MOTION_BLOCKING); + SpawnRuleBuilder.start(DRAGONFLY).aboveGround(2).maxNearby(8).buildNoRestrictions(Types.MOTION_BLOCKING); + SpawnRuleBuilder.start(SILK_MOTH).aboveGround(2).maxNearby(4).buildNoRestrictions(Types.MOTION_BLOCKING); // Land // - SpawnRuleBulder + SpawnRuleBuilder .start(END_SLIME) .notPeaceful() .maxNearby(4, 64) .onlyOnValidBlocks() .customRule(EndSlimeEntity::canSpawn) .buildNoRestrictions(Types.MOTION_BLOCKING); - - SpawnRuleBulder.start(SHADOW_WALKER).vanillaHostile().onlyOnValidBlocks().maxNearby(8, 64).buildNoRestrictions(Types.MOTION_BLOCKING); + + SpawnRuleBuilder.start(SHADOW_WALKER).vanillaHostile().onlyOnValidBlocks().maxNearby(8, 64).buildNoRestrictions(Types.MOTION_BLOCKING); // Water // - SpawnRuleBulder.start(END_FISH).maxNearby(8, 64).buildInWater(Types.MOTION_BLOCKING); - SpawnRuleBulder.start(CUBOZOA).maxNearby(8, 64).buildInWater(Types.MOTION_BLOCKING); + SpawnRuleBuilder.start(END_FISH).maxNearby(8, 64).buildInWater(Types.MOTION_BLOCKING); + SpawnRuleBuilder.start(CUBOZOA).maxNearby(8, 64).buildInWater(Types.MOTION_BLOCKING); } protected static EntityType register(String name, MobCategory group, float width, float height, EntityFactory entity) { From ae615748b32d8e288fb7fe0bb5ff54367225b7e5 Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 28 Nov 2021 22:04:14 +0100 Subject: [PATCH 2/5] Make sure our Ambient Creatures can Despawn (paulevsGitch/BetterNether#438) --- .../java/ru/betterend/entity/DragonflyEntity.java | 8 ++++---- src/main/java/ru/betterend/entity/SilkMothEntity.java | 11 ++++++----- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/main/java/ru/betterend/entity/DragonflyEntity.java b/src/main/java/ru/betterend/entity/DragonflyEntity.java index 87705b1c..76ccc610 100644 --- a/src/main/java/ru/betterend/entity/DragonflyEntity.java +++ b/src/main/java/ru/betterend/entity/DragonflyEntity.java @@ -1,5 +1,7 @@ package ru.betterend.entity; +import java.util.EnumSet; + import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; @@ -21,7 +23,6 @@ import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.ai.util.AirAndWaterRandomPos; import net.minecraft.world.entity.ai.util.HoverRandomPos; -import net.minecraft.world.entity.animal.Animal; import net.minecraft.world.entity.animal.FlyingAnimal; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; @@ -30,14 +31,13 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.pathfinder.BlockPathTypes; import net.minecraft.world.level.pathfinder.Path; import net.minecraft.world.phys.Vec3; +import ru.bclib.entity.DespawnableAnimal; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndSounds; -import java.util.EnumSet; - -public class DragonflyEntity extends Animal implements FlyingAnimal { +public class DragonflyEntity extends DespawnableAnimal implements FlyingAnimal { public DragonflyEntity(EntityType entityType, Level world) { super(entityType, world); this.moveControl = new FlyingMoveControl(this, 20, true); diff --git a/src/main/java/ru/betterend/entity/SilkMothEntity.java b/src/main/java/ru/betterend/entity/SilkMothEntity.java index d5fca8ca..d5544f47 100644 --- a/src/main/java/ru/betterend/entity/SilkMothEntity.java +++ b/src/main/java/ru/betterend/entity/SilkMothEntity.java @@ -1,5 +1,9 @@ package ru.betterend.entity; +import java.util.EnumSet; + +import org.jetbrains.annotations.Nullable; + import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.nbt.CompoundTag; @@ -27,7 +31,6 @@ import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.ai.util.AirAndWaterRandomPos; import net.minecraft.world.entity.ai.util.HoverRandomPos; -import net.minecraft.world.entity.animal.Animal; import net.minecraft.world.entity.animal.FlyingAnimal; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; @@ -38,7 +41,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.pathfinder.BlockPathTypes; import net.minecraft.world.phys.Vec3; -import org.jetbrains.annotations.Nullable; +import ru.bclib.entity.DespawnableAnimal; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; import ru.betterend.BetterEnd; @@ -47,9 +50,7 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndItems; -import java.util.EnumSet; - -public class SilkMothEntity extends Animal implements FlyingAnimal { +public class SilkMothEntity extends DespawnableAnimal implements FlyingAnimal { private BlockPos hivePos; private BlockPos entrance; private Level hiveWorld; From c90540c33eea0402c25569641b172381263299d4 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 29 Nov 2021 14:32:31 +0100 Subject: [PATCH 3/5] Use new lifetime hook for level loading --- .../mixin/common/ServerLevelMixin.java | 36 +++++++------------ .../java/ru/betterend/registry/EndBiomes.java | 8 +++-- 2 files changed, 19 insertions(+), 25 deletions(-) diff --git a/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java b/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java index ecf0c116..1bc61420 100644 --- a/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java @@ -1,21 +1,16 @@ package ru.betterend.mixin.common; +import java.util.function.Supplier; + import net.minecraft.core.BlockPos; -import net.minecraft.core.Registry; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.progress.ChunkProgressListener; import net.minecraft.util.profiling.ProfilerFiller; -import net.minecraft.world.level.CustomSpawner; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.dimension.DimensionType; -import net.minecraft.world.level.storage.LevelStorageSource; -import net.minecraft.world.level.storage.ServerLevelData; import net.minecraft.world.level.storage.WritableLevelData; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -25,32 +20,27 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import ru.bclib.api.BiomeAPI; import ru.betterend.BetterEnd; -import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndBlocks; import ru.betterend.world.generator.GeneratorOptions; -import java.util.List; -import java.util.concurrent.Executor; -import java.util.function.Supplier; - @Mixin(ServerLevel.class) public abstract class ServerLevelMixin extends Level { - private static String be_lastWorld = null; +// private static String be_lastWorld = null; protected ServerLevelMixin(WritableLevelData writableLevelData, ResourceKey resourceKey, DimensionType dimensionType, Supplier supplier, boolean bl, boolean bl2, long l) { super(writableLevelData, resourceKey, dimensionType, supplier, bl, bl2, l); } - @Inject(method = "*", at = @At("TAIL")) - private void be_onServerWorldInit(MinecraftServer server, Executor workerExecutor, LevelStorageSource.LevelStorageAccess session, ServerLevelData properties, ResourceKey registryKey, DimensionType dimensionType, ChunkProgressListener worldGenerationProgressListener, ChunkGenerator chunkGenerator, boolean debugWorld, long l, List list, boolean bl, CallbackInfo info) { - if (be_lastWorld != null && be_lastWorld.equals(session.getLevelId())) { - return; - } - - be_lastWorld = session.getLevelId(); - ServerLevel world = ServerLevel.class.cast(this); - EndBiomes.onWorldLoad(world.getSeed(), world.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY)); - } +// @Inject(method = "*", at = @At("TAIL")) +// private void be_onServerWorldInit(MinecraftServer server, Executor workerExecutor, LevelStorageSource.LevelStorageAccess session, ServerLevelData properties, ResourceKey registryKey, DimensionType dimensionType, ChunkProgressListener worldGenerationProgressListener, ChunkGenerator chunkGenerator, boolean debugWorld, long l, List list, boolean bl, CallbackInfo info) { +//// if (be_lastWorld != null && be_lastWorld.equals(session.getLevelId())) { +//// return; +//// } +//// +//// be_lastWorld = session.getLevelId(); +// ServerLevel level = ServerLevel.class.cast(this); +// EndBiomes.onWorldLoad(level, level.getSeed(), level.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY)); +// } @Inject(method = "getSharedSpawnPos", at = @At("HEAD"), cancellable = true) private void be_getSharedSpawnPos(CallbackInfoReturnable info) { diff --git a/src/main/java/ru/betterend/registry/EndBiomes.java b/src/main/java/ru/betterend/registry/EndBiomes.java index 455098c3..59f1ec39 100644 --- a/src/main/java/ru/betterend/registry/EndBiomes.java +++ b/src/main/java/ru/betterend/registry/EndBiomes.java @@ -2,8 +2,10 @@ package ru.betterend.registry; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.biome.Biome; import ru.bclib.api.BiomeAPI; +import ru.bclib.api.LifeCycleAPI; import ru.bclib.world.biomes.BCLBiome; import ru.bclib.world.generator.BiomeMap; import ru.bclib.world.generator.BiomePicker; @@ -74,9 +76,11 @@ public class EndBiomes { public static final EndCaveBiome LUSH_AURORA_CAVE = registerCaveBiome(new LushAuroraCaveBiome()); public static final EndCaveBiome JADE_CAVE = registerCaveBiome(new JadeCaveBiome()); - public static void register() {} + public static void register() { + LifeCycleAPI.onLevelLoad(EndBiomes::onWorldLoad); + } - public static void onWorldLoad(long seed, Registry registry) { + private static void onWorldLoad(ServerLevel level, long seed, Registry registry) { CAVE_BIOMES.getBiomes().forEach(biome -> biome.updateActualBiomes(registry)); CAVE_BIOMES.rebuild(); if (caveBiomeMap == null || caveBiomeMap.getSeed() != seed) { From 0392fd4059b34b139fd640057aec694ebb739e3e Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 29 Nov 2021 14:40:53 +0100 Subject: [PATCH 4/5] set ore hostBlock to END_STONE --- src/main/java/ru/betterend/registry/EndFeatures.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index ae4905ca..8b2734a3 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -1,6 +1,10 @@ package ru.betterend.registry; +import java.util.List; +import java.util.function.Supplier; + import com.google.common.collect.Lists; + import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Block; @@ -83,9 +87,6 @@ import ru.betterend.world.features.trees.UmbrellaTreeFeature; import ru.betterend.world.generator.GeneratorOptions; import ru.betterend.world.surface.UmbraSurfaceBuilder; -import java.util.List; -import java.util.function.Supplier; - public class EndFeatures { // Trees // public static final BCLFeature MOSSY_GLOWSHROOM = redisterVegetation("mossy_glowshroom", new MossyGlowshroomFeature(), 3); @@ -290,7 +291,7 @@ public class EndFeatures { } private static BCLFeature registerOre(String name, Block blockOre, int veins, int veinSize, int offset, int minY, int maxY) { - return BCLFeature.makeOreFeature(BetterEnd.makeID(name), blockOre, veins, veinSize, offset, minY, maxY); + return BCLFeature.makeOreFeature(BetterEnd.makeID(name), blockOre, Blocks.END_STONE, veins, veinSize, offset, minY, maxY); } private static BCLFeature registerLayer(String name, Block block, float radius, int minY, int maxY, int count) { From 3413fb5c4ed304ccd368eb92bfb48332eb555abc Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 29 Nov 2021 17:45:34 +0100 Subject: [PATCH 5/5] Revert "Use new lifetime hook for level loading" This reverts commit c90540c33eea0402c25569641b172381263299d4. --- .../mixin/common/ServerLevelMixin.java | 36 ++++++++++++------- .../java/ru/betterend/registry/EndBiomes.java | 8 ++--- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java b/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java index 1bc61420..ecf0c116 100644 --- a/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java @@ -1,16 +1,21 @@ package ru.betterend.mixin.common; -import java.util.function.Supplier; - import net.minecraft.core.BlockPos; +import net.minecraft.core.Registry; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.progress.ChunkProgressListener; import net.minecraft.util.profiling.ProfilerFiller; +import net.minecraft.world.level.CustomSpawner; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.dimension.DimensionType; +import net.minecraft.world.level.storage.LevelStorageSource; +import net.minecraft.world.level.storage.ServerLevelData; import net.minecraft.world.level.storage.WritableLevelData; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -20,27 +25,32 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import ru.bclib.api.BiomeAPI; import ru.betterend.BetterEnd; +import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndBlocks; import ru.betterend.world.generator.GeneratorOptions; +import java.util.List; +import java.util.concurrent.Executor; +import java.util.function.Supplier; + @Mixin(ServerLevel.class) public abstract class ServerLevelMixin extends Level { -// private static String be_lastWorld = null; + private static String be_lastWorld = null; protected ServerLevelMixin(WritableLevelData writableLevelData, ResourceKey resourceKey, DimensionType dimensionType, Supplier supplier, boolean bl, boolean bl2, long l) { super(writableLevelData, resourceKey, dimensionType, supplier, bl, bl2, l); } -// @Inject(method = "*", at = @At("TAIL")) -// private void be_onServerWorldInit(MinecraftServer server, Executor workerExecutor, LevelStorageSource.LevelStorageAccess session, ServerLevelData properties, ResourceKey registryKey, DimensionType dimensionType, ChunkProgressListener worldGenerationProgressListener, ChunkGenerator chunkGenerator, boolean debugWorld, long l, List list, boolean bl, CallbackInfo info) { -//// if (be_lastWorld != null && be_lastWorld.equals(session.getLevelId())) { -//// return; -//// } -//// -//// be_lastWorld = session.getLevelId(); -// ServerLevel level = ServerLevel.class.cast(this); -// EndBiomes.onWorldLoad(level, level.getSeed(), level.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY)); -// } + @Inject(method = "*", at = @At("TAIL")) + private void be_onServerWorldInit(MinecraftServer server, Executor workerExecutor, LevelStorageSource.LevelStorageAccess session, ServerLevelData properties, ResourceKey registryKey, DimensionType dimensionType, ChunkProgressListener worldGenerationProgressListener, ChunkGenerator chunkGenerator, boolean debugWorld, long l, List list, boolean bl, CallbackInfo info) { + if (be_lastWorld != null && be_lastWorld.equals(session.getLevelId())) { + return; + } + + be_lastWorld = session.getLevelId(); + ServerLevel world = ServerLevel.class.cast(this); + EndBiomes.onWorldLoad(world.getSeed(), world.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY)); + } @Inject(method = "getSharedSpawnPos", at = @At("HEAD"), cancellable = true) private void be_getSharedSpawnPos(CallbackInfoReturnable info) { diff --git a/src/main/java/ru/betterend/registry/EndBiomes.java b/src/main/java/ru/betterend/registry/EndBiomes.java index 59f1ec39..455098c3 100644 --- a/src/main/java/ru/betterend/registry/EndBiomes.java +++ b/src/main/java/ru/betterend/registry/EndBiomes.java @@ -2,10 +2,8 @@ package ru.betterend.registry; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.biome.Biome; import ru.bclib.api.BiomeAPI; -import ru.bclib.api.LifeCycleAPI; import ru.bclib.world.biomes.BCLBiome; import ru.bclib.world.generator.BiomeMap; import ru.bclib.world.generator.BiomePicker; @@ -76,11 +74,9 @@ public class EndBiomes { public static final EndCaveBiome LUSH_AURORA_CAVE = registerCaveBiome(new LushAuroraCaveBiome()); public static final EndCaveBiome JADE_CAVE = registerCaveBiome(new JadeCaveBiome()); - public static void register() { - LifeCycleAPI.onLevelLoad(EndBiomes::onWorldLoad); - } + public static void register() {} - private static void onWorldLoad(ServerLevel level, long seed, Registry registry) { + public static void onWorldLoad(long seed, Registry registry) { CAVE_BIOMES.getBiomes().forEach(biome -> biome.updateActualBiomes(registry)); CAVE_BIOMES.rebuild(); if (caveBiomeMap == null || caveBiomeMap.getSeed() != seed) {