diff --git a/build.gradle b/build.gradle index 38ca92e..7e417d7 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.9.2' + id 'fabric-loom' version '1.10.5' id 'maven-publish' } diff --git a/gradle.properties b/gradle.properties index 6aec3e0..bc30047 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,17 +2,14 @@ org.gradle.jvmargs=-Xmx3G # Fabric Properties - # check these on https://fabricmc.net/develop - minecraft_version=1.21 - yarn_mappings=1.21+build.9 - loader_version=0.15.11 - - +# check these on https://fabricmc.net/develop +minecraft_version=1.21 +yarn_mappings=1.21+build.9 +loader_version=0.15.11 # Mod Properties - mod_version = 0.22 - maven_group = com.github.zly2006 - archives_base_name = carpet-sls-addition - +mod_version = 0.23 +maven_group = com.github.zly2006 +archives_base_name = carpet-sls-addition # Dependencies - fabric_version=0.102.0+1.21 - carpet_core_version=1.21-1.4.147+v240613 +fabric_version=0.102.0+1.21 +carpet_core_version=1.21-1.4.147+v240613 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e48eca5..2733ed5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/com/github/zly2006/carpetslsaddition/SLSCarpetSettings.java b/src/main/java/com/github/zly2006/carpetslsaddition/SLSCarpetSettings.java index 3274ec5..2f4de64 100644 --- a/src/main/java/com/github/zly2006/carpetslsaddition/SLSCarpetSettings.java +++ b/src/main/java/com/github/zly2006/carpetslsaddition/SLSCarpetSettings.java @@ -65,4 +65,7 @@ public class SLSCarpetSettings { @Rule(categories = {SLSA, RuleCategory.FEATURE}) public static int netherPortalSize = 21; + + @Rule(categories = {SLSA, RuleCategory.FEATURE}) + public static int trialSpawnerCD = -1; } diff --git a/src/main/java/com/github/zly2006/carpetslsaddition/mixin/block/MixinTrialSpawnerData.java b/src/main/java/com/github/zly2006/carpetslsaddition/mixin/block/MixinTrialSpawnerData.java new file mode 100644 index 0000000..239c701 --- /dev/null +++ b/src/main/java/com/github/zly2006/carpetslsaddition/mixin/block/MixinTrialSpawnerData.java @@ -0,0 +1,27 @@ +package com.github.zly2006.carpetslsaddition.mixin.block; + +import com.github.zly2006.carpetslsaddition.SLSCarpetSettings; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraft.block.spawner.TrialSpawnerConfig; +import net.minecraft.block.spawner.TrialSpawnerData; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(TrialSpawnerData.class) +public class MixinTrialSpawnerData { + @WrapOperation( + method = "resetAndClearMobs", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/block/spawner/TrialSpawnerConfig;getCooldownLength()J" + ) + ) + private long hackCooldown(TrialSpawnerConfig instance, Operation original) { + if (SLSCarpetSettings.trialSpawnerCD < 0) { + return original.call(instance); + } else { + return SLSCarpetSettings.trialSpawnerCD; + } + } +} diff --git a/src/main/java/com/github/zly2006/carpetslsaddition/mixin/block/MixinTrialSpawnerState.java b/src/main/java/com/github/zly2006/carpetslsaddition/mixin/block/MixinTrialSpawnerState.java new file mode 100644 index 0000000..b9bff90 --- /dev/null +++ b/src/main/java/com/github/zly2006/carpetslsaddition/mixin/block/MixinTrialSpawnerState.java @@ -0,0 +1,28 @@ +package com.github.zly2006.carpetslsaddition.mixin.block; + +import com.github.zly2006.carpetslsaddition.SLSCarpetSettings; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraft.block.enums.TrialSpawnerState; +import net.minecraft.block.spawner.TrialSpawnerLogic; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(TrialSpawnerState.class) +public class MixinTrialSpawnerState { + @WrapOperation( + method = "tick", + at = @At( + value = "INVOKE", + ordinal = 0, + target = "Lnet/minecraft/block/spawner/TrialSpawnerLogic;getCooldownLength()I" + ) + ) + private int tick(TrialSpawnerLogic instance, Operation original) { + if (SLSCarpetSettings.trialSpawnerCD < 0) { + return original.call(instance); + } else { + return SLSCarpetSettings.trialSpawnerCD; + } + } +} diff --git a/src/main/resources/assets/slsaddition/lang/en_us.json b/src/main/resources/assets/slsaddition/lang/en_us.json index e11368c..c5ed7bd 100644 --- a/src/main/resources/assets/slsaddition/lang/en_us.json +++ b/src/main/resources/assets/slsaddition/lang/en_us.json @@ -50,6 +50,7 @@ "carpet.rule.spectatorCannotUseLeash.desc": "If a player is a spectator, they cannot use the leash.", "carpet.rule.offlineFakePlayers.desc": "假人强制离线uuid", "carpet.rule.armadilloImmediateDespawns.desc": "Armadillos will despawn immediately if they are 128 blocks away from the player.", + "carpet.rule.trialSpawnerCD.desc": "trialSpawnerCD.", "carpet.rule.skipTicksForJoblessVillager.extra.0": "Set to 0 to maintain the vanilla behavior", "carpet.rule.skipTicksForJoblessVillager.extra.1": "Set to a number greater than 0, the value will be +1 based on the setting", diff --git a/src/main/resources/assets/slsaddition/lang/zh_cn.json b/src/main/resources/assets/slsaddition/lang/zh_cn.json index bcfdaa2..e7f6b35 100644 --- a/src/main/resources/assets/slsaddition/lang/zh_cn.json +++ b/src/main/resources/assets/slsaddition/lang/zh_cn.json @@ -50,6 +50,7 @@ "carpet.rule.botMaxOnlineTime.desc": "设置由Carpet SLS Addition生成的Bot的最大存活时间", "carpet.rule.offlineFakePlayers.desc": "假人强制离线uuid", "carpet.rule.spectatorCannotUseLeash.desc": "若启用,则观察者模式的玩家不再能使用拴绳,已经拴住动物的拴绳也会自动失效", + "carpet.rule.trialSpawnerCD.desc": "trialSpawnerCD.", "carpet.rule.skipTicksForJoblessVillager.extra.0": "设置为0则保持原版行为", "carpet.rule.skipTicksForJoblessVillager.extra.1": "设置为大于0的数,将在设置的基础上将该值+1", diff --git a/src/main/resources/slsa.accesswidener b/src/main/resources/slsa.accesswidener index 1c5bd2f..36f153b 100644 --- a/src/main/resources/slsa.accesswidener +++ b/src/main/resources/slsa.accesswidener @@ -2,4 +2,5 @@ accessWidener v1 named accessible class net/minecraft/world/block/ChainRestrictedNeighborUpdater$Entry accessible class net/minecraft/entity/mob/EndermanEntity$PickUpBlockGoal accessible method net/minecraft/entity/Entity unsetRemoved ()V -accessible field net/minecraft/entity/player/PlayerEntity PLAYER_MODEL_PARTS Lnet/minecraft/entity/data/TrackedData; \ No newline at end of file +accessible field net/minecraft/entity/player/PlayerEntity PLAYER_MODEL_PARTS Lnet/minecraft/entity/data/TrackedData; +accessible field net/minecraft/block/spawner/TrialSpawnerData spawnedMobsAlive Ljava/util/Set; diff --git a/src/main/resources/slsaddition.mixins.json b/src/main/resources/slsaddition.mixins.json index 5183c54..545a8e3 100644 --- a/src/main/resources/slsaddition.mixins.json +++ b/src/main/resources/slsaddition.mixins.json @@ -9,6 +9,8 @@ "block.BlockPatternTestTransformInvoker", "block.MixinNetherPortal", "block.MixinRedstoneWireBlock", + "block.MixinTrialSpawnerData", + "block.MixinTrialSpawnerState", "carpet.MixinEntityPlayerMPFake", "carpet.MixinPlayerCommand", "datapack.MixinVanillaResourcePackProvider",