From 0df5f73a0922f13dbe4b5b16ea76b48777907400 Mon Sep 17 00:00:00 2001 From: 0rc1nus Date: Sun, 24 Jul 2022 16:53:00 +0800 Subject: [PATCH] Surface slime tag --- .../wildbackport/common/tag/WBBiomeTags.java | 1 + .../core/mixin/common/SlimeMixin.java | 27 +++++++++++++++++++ .../biome/allows_surface_slime_spawns.json | 6 +++++ .../resources/wildbackport-common.mixins.json | 1 + 4 files changed, 35 insertions(+) create mode 100644 common/src/main/java/com/cursedcauldron/wildbackport/core/mixin/common/SlimeMixin.java create mode 100644 common/src/main/resources/data/wildbackport/tags/worldgen/biome/allows_surface_slime_spawns.json diff --git a/common/src/main/java/com/cursedcauldron/wildbackport/common/tag/WBBiomeTags.java b/common/src/main/java/com/cursedcauldron/wildbackport/common/tag/WBBiomeTags.java index db9cddb..1202232 100644 --- a/common/src/main/java/com/cursedcauldron/wildbackport/common/tag/WBBiomeTags.java +++ b/common/src/main/java/com/cursedcauldron/wildbackport/common/tag/WBBiomeTags.java @@ -11,4 +11,5 @@ public class WBBiomeTags { public static final TagKey SPAWNS_WARM_VARIANT_FROGS = TAGS.create("spawns_warm_variant_frogs"); public static final TagKey SPAWNS_COLD_VARIANT_FROGS = TAGS.create("spawns_cold_variant_frogs"); + public static final TagKey ALLOWS_SURFACE_SLIME_SPAWNS = TAGS.create("allows_surface_slime_spawns"); } \ No newline at end of file diff --git a/common/src/main/java/com/cursedcauldron/wildbackport/core/mixin/common/SlimeMixin.java b/common/src/main/java/com/cursedcauldron/wildbackport/core/mixin/common/SlimeMixin.java new file mode 100644 index 0000000..3a57492 --- /dev/null +++ b/common/src/main/java/com/cursedcauldron/wildbackport/core/mixin/common/SlimeMixin.java @@ -0,0 +1,27 @@ +package com.cursedcauldron.wildbackport.core.mixin.common; + +import com.cursedcauldron.wildbackport.common.tag.WBBiomeTags; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.monster.Slime; +import net.minecraft.world.level.LevelAccessor; +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 java.util.Random; + +@Mixin(Slime.class) +public class SlimeMixin { + + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/LevelAccessor;getDifficulty()Lnet/minecraft/world/Difficulty;", shift = At.Shift.AFTER), method = "checkSlimeSpawnRules", cancellable = true) + private static void WB$checkSlimeSpawnRules(EntityType entityType, LevelAccessor levelAccessor, MobSpawnType mobSpawnType, BlockPos blockPos, Random randomSource, CallbackInfoReturnable cir) { + if (levelAccessor.getBiome(blockPos).is(WBBiomeTags.ALLOWS_SURFACE_SLIME_SPAWNS) && blockPos.getY() > 50 && blockPos.getY() < 70 && randomSource.nextFloat() < 0.5F && randomSource.nextFloat() < levelAccessor.getMoonBrightness() && levelAccessor.getMaxLocalRawBrightness(blockPos) <= randomSource.nextInt(8)) { + cir.setReturnValue(Mob.checkMobSpawnRules(entityType, levelAccessor, mobSpawnType, blockPos, randomSource)); + } + } + +} diff --git a/common/src/main/resources/data/wildbackport/tags/worldgen/biome/allows_surface_slime_spawns.json b/common/src/main/resources/data/wildbackport/tags/worldgen/biome/allows_surface_slime_spawns.json new file mode 100644 index 0000000..1ac599a --- /dev/null +++ b/common/src/main/resources/data/wildbackport/tags/worldgen/biome/allows_surface_slime_spawns.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecraft:swamp", + "wildbackport:mangrove_swamp" + ] +} \ No newline at end of file diff --git a/common/src/main/resources/wildbackport-common.mixins.json b/common/src/main/resources/wildbackport-common.mixins.json index c935261..884545f 100644 --- a/common/src/main/resources/wildbackport-common.mixins.json +++ b/common/src/main/resources/wildbackport-common.mixins.json @@ -41,6 +41,7 @@ "common.PointedDripstoneBlockMixin", "common.SculkSensorBlockEntityMixin", "common.SculkSensorBlockMixin", + "common.SlimeMixin", "common.VibrationListenerMixin", "extension.BoatTypeMixin", "extension.PoseMixin",