feat: make creeper fuse time a gamerule

This commit is contained in:
2025-12-03 03:44:51 +01:00
parent 90a5d8ea95
commit f00fcea551
4 changed files with 49 additions and 1 deletions

View File

@@ -18,6 +18,9 @@ public class Tweaks implements ModInitializer {
public static final GameRules.Key<GameRules.IntRule> CRITICAL_MULTIPLIER = public static final GameRules.Key<GameRules.IntRule> CRITICAL_MULTIPLIER =
GameRuleRegistry.register("criticalHitMultiplier", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(150, 0, Integer.MAX_VALUE)); GameRuleRegistry.register("criticalHitMultiplier", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(150, 0, Integer.MAX_VALUE));
public static final GameRules.Key<GameRules.IntRule> CREEPER_FUSE_TIME =
GameRuleRegistry.register("creeperDefaultFuseTime", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(30, 0, Integer.MAX_VALUE));
@Override @Override
public void onInitialize() { public void onInitialize() {
} }

View File

@@ -0,0 +1,29 @@
package systems.brn.tweaks.mixin;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.mob.CreeperEntity;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.world.GameRules;
import net.minecraft.world.World;
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.CallbackInfo;
import systems.brn.tweaks.Tweaks;
import systems.brn.tweaks.mixin.accessors.CreeperEntityAccessor;
@Mixin(CreeperEntity.class)
public abstract class CreeperEntityMixin {
@Inject(
method = "<init>",
at = @At("TAIL")
)
private void onConstructor(EntityType<? extends CreeperEntity> entityType, World world, CallbackInfo ci) {
CreeperEntity creeper = (CreeperEntity)(Object)this;
if (!world.isClient) {
ServerWorld serverWorld = (ServerWorld) world;
GameRules.IntRule rule = serverWorld.getGameRules().get(Tweaks.CREEPER_FUSE_TIME);
((CreeperEntityAccessor) creeper).setFuseTime(rule.get());
}
}
}

View File

@@ -0,0 +1,14 @@
package systems.brn.tweaks.mixin.accessors;
import net.minecraft.entity.mob.CreeperEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(CreeperEntity.class)
public interface CreeperEntityAccessor {
@Accessor("fuseTime")
void setFuseTime(int fuseTime);
@Accessor("fuseTime")
int getFuseTime();
}

View File

@@ -4,9 +4,11 @@
"package": "systems.brn.tweaks.mixin", "package": "systems.brn.tweaks.mixin",
"compatibilityLevel": "JAVA_21", "compatibilityLevel": "JAVA_21",
"mixins": [ "mixins": [
"CreeperEntityMixin",
"DontHurtMePearlMixin", "DontHurtMePearlMixin",
"JustTeleportAlreadyMixin", "JustTeleportAlreadyMixin",
"PlayerEntityMixin" "PlayerEntityMixin",
"accessors.CreeperEntityAccessor"
], ],
"injectors": { "injectors": {
"defaultRequire": 1 "defaultRequire": 1