diff --git a/gradle.properties b/gradle.properties index cf958a6e..bfec8541 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ org.gradle.jvmargs=-Xmx1G # check these on https://fabricmc.net/use # or better: https://modmuss50.me/fabric.html minecraft_version=20w18a - yarn_mappings=20w18a+build.3 + yarn_mappings=20w18a+build.9 loader_version=0.8.2+build.194 # Mod Properties diff --git a/src/main/java/carpet/fakes/SpawnHelperInnerInterface.java b/src/main/java/carpet/fakes/SpawnHelperInnerInterface.java new file mode 100644 index 00000000..d993f5e4 --- /dev/null +++ b/src/main/java/carpet/fakes/SpawnHelperInnerInterface.java @@ -0,0 +1,8 @@ +package carpet.fakes; + +import net.minecraft.class_5263; + +public interface SpawnHelperInnerInterface +{ + class_5263 getPotentialCalculator(); +} diff --git a/src/main/java/carpet/mixins/SpawnHelperInnerMixin.java b/src/main/java/carpet/mixins/SpawnHelperInnerMixin.java index 2e8af0d4..8007b44a 100644 --- a/src/main/java/carpet/mixins/SpawnHelperInnerMixin.java +++ b/src/main/java/carpet/mixins/SpawnHelperInnerMixin.java @@ -1,7 +1,9 @@ package carpet.mixins; +import carpet.fakes.SpawnHelperInnerInterface; import carpet.utils.SpawnReporter; import it.unimi.dsi.fastutil.objects.Object2IntMap; +import net.minecraft.class_5263; import net.minecraft.entity.EntityCategory; import net.minecraft.world.SpawnHelper; import org.spongepowered.asm.mixin.Final; @@ -14,12 +16,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; // temporary mixin until naming for spawnhelper gets fixed. @Mixin(SpawnHelper.class_5262.class) -public class SpawnHelperInnerMixin +public class SpawnHelperInnerMixin implements SpawnHelperInnerInterface { @Shadow @Final private int field_24394; @Shadow @Final private Object2IntMap field_24395; + @Shadow @Final private class_5263 field_24396; + @Inject(method = "method_27826", at = @At("HEAD"), cancellable = true) private void changeMobCaps(EntityCategory entityCategory, CallbackInfoReturnable cir) { @@ -28,4 +32,12 @@ public class SpawnHelperInnerMixin cir.setReturnValue(field_24395.getInt(entityCategory) < i); } + @Override + public class_5263 getPotentialCalculator() + { + return field_24396; + } + + + } diff --git a/src/main/java/carpet/script/CarpetExpression.java b/src/main/java/carpet/script/CarpetExpression.java index e129026d..1299a7f4 100644 --- a/src/main/java/carpet/script/CarpetExpression.java +++ b/src/main/java/carpet/script/CarpetExpression.java @@ -1,10 +1,11 @@ package carpet.script; import carpet.CarpetServer; +import carpet.fakes.BiomeArrayInterface; import carpet.fakes.ChunkTicketManagerInterface; import carpet.fakes.MinecraftServerInterface; -import carpet.fakes.BiomeArrayInterface; import carpet.fakes.ServerChunkManagerInterface; +import carpet.fakes.SpawnHelperInnerInterface; import carpet.fakes.StatTypeInterface; import carpet.fakes.ThreadedAnvilChunkStorageInterface; import carpet.helpers.FeatureGenerator; @@ -110,6 +111,7 @@ import net.minecraft.util.math.BlockBox; import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3i; import net.minecraft.util.registry.Registry; +import net.minecraft.world.SpawnHelper; import net.minecraft.world.poi.PointOfInterest; import net.minecraft.world.poi.PointOfInterestStorage; import net.minecraft.world.poi.PointOfInterestType; @@ -1294,6 +1296,23 @@ public class CarpetExpression return (_c, _t) -> ret; }); + this.expr.addLazyFunction("spawn_potential", -1, (c, t, lv) -> + { + CarpetContext cc = (CarpetContext)c; + BlockArgument locator = BlockArgument.findIn(cc, lv, 0); + BlockPos pos = locator.block.getPos(); + double required_charge = 1; + if (lv.size() > locator.offset) + required_charge = NumericValue.asNumber(lv.get(locator.offset).evalValue(c)).getDouble(); + SpawnHelper.class_5262 charger = cc.s.getWorld().getChunkManager().method_27908(); + if (charger == null) return LazyValue.NULL; + Value ret = new NumericValue( + ((SpawnHelperInnerInterface)charger).getPotentialCalculator(). + method_27832(pos, required_charge ) + ); + return (_c, _t) -> ret; + }); + } private static String getScoreboardKeyFromValue(Value keyValue)