From 3a9833ed6566bfc689a5699311d6601376a4197f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20Miklo=C5=A1?= Date: Wed, 3 Dec 2025 02:27:36 +0100 Subject: [PATCH 01/17] feat: go back to 1.21.3, cause we can --- gradle.properties | 6 +++--- src/main/resources/fabric.mod.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gradle.properties b/gradle.properties index 2ced3cd..ff6867a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,10 +1,10 @@ # Done to increase the memory available to gradle. org.gradle.jvmargs=-Xmx1G -minecraft_version=1.21.8 -yarn_mappings=1.21.8+build.1 +minecraft_version=1.21.3 +yarn_mappings=1.21.3+build.2 loader_version=0.16.14 # Fabric API -fabric_version=0.129.0+1.21.8 +fabric_version=0.107.3+1.21.3 # Mod Properties mod_version=1.2.5 maven_group=systems.brn diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 408c3ed..0a33582 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -22,6 +22,6 @@ "depends": { "fabricloader": ">=${loader_version}", "fabric": "*", - "minecraft": "${minecraft_version}" + "minecraft": ">=${minecraft_version}" } } From c55d51bd05024ee5acf5fd316d4d703daa7b7970 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20Miklo=C5=A1?= Date: Wed, 3 Dec 2025 02:27:57 +0100 Subject: [PATCH 02/17] chore: optimize imports --- .../java/systems/brn/tweaks/mixin/DontHurtMePearlMixin.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/systems/brn/tweaks/mixin/DontHurtMePearlMixin.java b/src/main/java/systems/brn/tweaks/mixin/DontHurtMePearlMixin.java index 310916f..896da14 100644 --- a/src/main/java/systems/brn/tweaks/mixin/DontHurtMePearlMixin.java +++ b/src/main/java/systems/brn/tweaks/mixin/DontHurtMePearlMixin.java @@ -1,10 +1,8 @@ package systems.brn.tweaks.mixin; -import net.minecraft.entity.Entity; import net.minecraft.entity.damage.DamageSource; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; -import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; From 73f605e0e4fa8acc74a16a0a713d607e35e92a37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20Miklo=C5=A1?= Date: Wed, 3 Dec 2025 02:28:33 +0100 Subject: [PATCH 03/17] fix: enderpearl -> enderPearl --- src/main/java/systems/brn/tweaks/Tweaks.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/systems/brn/tweaks/Tweaks.java b/src/main/java/systems/brn/tweaks/Tweaks.java index 1382cad..1cc26c1 100644 --- a/src/main/java/systems/brn/tweaks/Tweaks.java +++ b/src/main/java/systems/brn/tweaks/Tweaks.java @@ -9,7 +9,7 @@ public class Tweaks implements ModInitializer { public static final GameRules.Key Entity_Portal_Cooldown = GameRuleRegistry.register("entityPortalCooldown", GameRules.Category.MOBS, GameRuleFactory.createIntRule(300)); public static final GameRules.Key Enderpearl_Damage = - GameRuleRegistry.register("enderpearlDamage", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(5)); + GameRuleRegistry.register("enderPearlDamage", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(5)); @Override public void onInitialize() { } From 699b006cee4a0fdba41e8a44a6073d30fcf644c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20Miklo=C5=A1?= Date: Wed, 3 Dec 2025 02:29:24 +0100 Subject: [PATCH 04/17] chore: gamerules should use SCREAMING instead of Pascal_Snake_Case --- src/main/java/systems/brn/tweaks/Tweaks.java | 4 ++-- .../java/systems/brn/tweaks/mixin/DontHurtMePearlMixin.java | 4 ++-- .../systems/brn/tweaks/mixin/JustTeleportAlreadyMixin.java | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/systems/brn/tweaks/Tweaks.java b/src/main/java/systems/brn/tweaks/Tweaks.java index 1cc26c1..6400391 100644 --- a/src/main/java/systems/brn/tweaks/Tweaks.java +++ b/src/main/java/systems/brn/tweaks/Tweaks.java @@ -6,9 +6,9 @@ import net.fabricmc.fabric.api.gamerule.v1.GameRuleRegistry; import net.minecraft.world.GameRules; public class Tweaks implements ModInitializer { - public static final GameRules.Key Entity_Portal_Cooldown = + public static final GameRules.Key ENTITY_PORTAL_COOLDOWN = GameRuleRegistry.register("entityPortalCooldown", GameRules.Category.MOBS, GameRuleFactory.createIntRule(300)); - public static final GameRules.Key Enderpearl_Damage = + public static final GameRules.Key ENDER_PEARL_DAMAGE = GameRuleRegistry.register("enderPearlDamage", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(5)); @Override public void onInitialize() { diff --git a/src/main/java/systems/brn/tweaks/mixin/DontHurtMePearlMixin.java b/src/main/java/systems/brn/tweaks/mixin/DontHurtMePearlMixin.java index 896da14..48a8b92 100644 --- a/src/main/java/systems/brn/tweaks/mixin/DontHurtMePearlMixin.java +++ b/src/main/java/systems/brn/tweaks/mixin/DontHurtMePearlMixin.java @@ -7,7 +7,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -import static systems.brn.tweaks.Tweaks.Enderpearl_Damage; +import static systems.brn.tweaks.Tweaks.ENDER_PEARL_DAMAGE; @Mixin(net.minecraft.entity.projectile.thrown.EnderPearlEntity.class) public class DontHurtMePearlMixin { @@ -15,7 +15,7 @@ public class DontHurtMePearlMixin { @Redirect(method = "onCollision(Lnet/minecraft/util/hit/HitResult;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/network/ServerPlayerEntity;damage(Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/entity/damage/DamageSource;F)Z")) private boolean redirectDamage(ServerPlayerEntity entity, ServerWorld world, DamageSource source, float amount) { - entity.damage(world, source, world.getGameRules().getInt(Enderpearl_Damage)); + entity.damage(world, source, world.getGameRules().getInt(ENDER_PEARL_DAMAGE)); return false; } } diff --git a/src/main/java/systems/brn/tweaks/mixin/JustTeleportAlreadyMixin.java b/src/main/java/systems/brn/tweaks/mixin/JustTeleportAlreadyMixin.java index 91ab814..8472553 100644 --- a/src/main/java/systems/brn/tweaks/mixin/JustTeleportAlreadyMixin.java +++ b/src/main/java/systems/brn/tweaks/mixin/JustTeleportAlreadyMixin.java @@ -9,7 +9,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import static systems.brn.tweaks.Tweaks.Entity_Portal_Cooldown; +import static systems.brn.tweaks.Tweaks.ENTITY_PORTAL_COOLDOWN; @Mixin(net.minecraft.entity.Entity.class) public class JustTeleportAlreadyMixin { @@ -21,7 +21,7 @@ public class JustTeleportAlreadyMixin { cancellable = true) private void getDefaultPortalCooldown(CallbackInfoReturnable cir) { if (world instanceof ServerWorld sWorld) { - cir.setReturnValue(sWorld.getGameRules().getInt(Entity_Portal_Cooldown)); + cir.setReturnValue(sWorld.getGameRules().getInt(ENTITY_PORTAL_COOLDOWN)); } } @@ -31,7 +31,7 @@ public class JustTeleportAlreadyMixin { @Inject(method = "tickPortalCooldown", at = @At(value = "RETURN")) private void tickPortalCooldown(CallbackInfo ci) { if (world instanceof ServerWorld sWorld) { - int maxCooldown = sWorld.getGameRules().getInt(Entity_Portal_Cooldown); + int maxCooldown = sWorld.getGameRules().getInt(ENTITY_PORTAL_COOLDOWN); if (portalCooldown > maxCooldown) { portalCooldown = maxCooldown; } From 11649caaeeedb05490bb2dff932e4e77134f3ced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20Miklo=C5=A1?= Date: Wed, 3 Dec 2025 03:16:21 +0100 Subject: [PATCH 05/17] fix: spacing --- src/main/java/systems/brn/tweaks/Tweaks.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/systems/brn/tweaks/Tweaks.java b/src/main/java/systems/brn/tweaks/Tweaks.java index 6400391..2034fa5 100644 --- a/src/main/java/systems/brn/tweaks/Tweaks.java +++ b/src/main/java/systems/brn/tweaks/Tweaks.java @@ -7,7 +7,7 @@ import net.minecraft.world.GameRules; public class Tweaks implements ModInitializer { public static final GameRules.Key ENTITY_PORTAL_COOLDOWN = - GameRuleRegistry.register("entityPortalCooldown", GameRules.Category.MOBS, GameRuleFactory.createIntRule(300)); + GameRuleRegistry.register("entityPortalCooldown", GameRules.Category.MOBS, GameRuleFactory.createIntRule(300)); public static final GameRules.Key ENDER_PEARL_DAMAGE = GameRuleRegistry.register("enderPearlDamage", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(5)); @Override From 88620d9d245d8515b400caf045b81346a547e095 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20Miklo=C5=A1?= Date: Wed, 3 Dec 2025 03:18:12 +0100 Subject: [PATCH 06/17] fix: negative ticks might not be a good idea --- src/main/java/systems/brn/tweaks/Tweaks.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/systems/brn/tweaks/Tweaks.java b/src/main/java/systems/brn/tweaks/Tweaks.java index 2034fa5..414fd53 100644 --- a/src/main/java/systems/brn/tweaks/Tweaks.java +++ b/src/main/java/systems/brn/tweaks/Tweaks.java @@ -7,9 +7,9 @@ import net.minecraft.world.GameRules; public class Tweaks implements ModInitializer { public static final GameRules.Key ENTITY_PORTAL_COOLDOWN = - GameRuleRegistry.register("entityPortalCooldown", GameRules.Category.MOBS, GameRuleFactory.createIntRule(300)); + GameRuleRegistry.register("entityPortalCooldown", GameRules.Category.MOBS, GameRuleFactory.createIntRule(300, 0, Integer.MAX_VALUE)); public static final GameRules.Key ENDER_PEARL_DAMAGE = - GameRuleRegistry.register("enderPearlDamage", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(5)); + GameRuleRegistry.register("enderPearlDamage", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(5, 0, Integer.MAX_VALUE)); @Override public void onInitialize() { } From fe7a1992b6c84ccce7d8225ec0bf2aa624dcff2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20Miklo=C5=A1?= Date: Wed, 3 Dec 2025 03:24:26 +0100 Subject: [PATCH 07/17] feat: make shield disable cooldown also a gamerule --- src/main/java/systems/brn/tweaks/Tweaks.java | 5 ++++ .../brn/tweaks/mixin/PlayerEntityMixin.java | 29 +++++++++++++++++++ src/main/resources/tweaks.mixins.json | 3 +- 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 src/main/java/systems/brn/tweaks/mixin/PlayerEntityMixin.java diff --git a/src/main/java/systems/brn/tweaks/Tweaks.java b/src/main/java/systems/brn/tweaks/Tweaks.java index 414fd53..1d742fc 100644 --- a/src/main/java/systems/brn/tweaks/Tweaks.java +++ b/src/main/java/systems/brn/tweaks/Tweaks.java @@ -8,8 +8,13 @@ import net.minecraft.world.GameRules; public class Tweaks implements ModInitializer { public static final GameRules.Key ENTITY_PORTAL_COOLDOWN = GameRuleRegistry.register("entityPortalCooldown", GameRules.Category.MOBS, GameRuleFactory.createIntRule(300, 0, Integer.MAX_VALUE)); + public static final GameRules.Key ENDER_PEARL_DAMAGE = GameRuleRegistry.register("enderPearlDamage", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(5, 0, Integer.MAX_VALUE)); + + public static final GameRules.Key SHIELD_AXE_COOLDOWN = + GameRuleRegistry.register("shieldAxeCooldown", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(100, 0, Integer.MAX_VALUE)); + @Override public void onInitialize() { } diff --git a/src/main/java/systems/brn/tweaks/mixin/PlayerEntityMixin.java b/src/main/java/systems/brn/tweaks/mixin/PlayerEntityMixin.java new file mode 100644 index 0000000..d71d384 --- /dev/null +++ b/src/main/java/systems/brn/tweaks/mixin/PlayerEntityMixin.java @@ -0,0 +1,29 @@ +package systems.brn.tweaks.mixin; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.world.GameRules; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.Constant; +import org.spongepowered.asm.mixin.injection.ModifyConstant; +import systems.brn.tweaks.Tweaks; + +@Mixin(PlayerEntity.class) +public abstract class PlayerEntityMixin { + + @ModifyConstant( + method = "disableShield(Lnet/minecraft/item/ItemStack;)V", + constant = @Constant(intValue = 100) + ) + private int modifyShieldCooldownConstant(int original) { + PlayerEntity player = (PlayerEntity)(Object)this; + if (player.getWorld() != null && player.getWorld() instanceof ServerWorld sWorld) { + GameRules.IntRule rule = sWorld.getGameRules().get(Tweaks.SHIELD_AXE_COOLDOWN); + return rule.get(); + } + return original; + } +} \ No newline at end of file diff --git a/src/main/resources/tweaks.mixins.json b/src/main/resources/tweaks.mixins.json index c017c57..0ece2ab 100644 --- a/src/main/resources/tweaks.mixins.json +++ b/src/main/resources/tweaks.mixins.json @@ -5,7 +5,8 @@ "compatibilityLevel": "JAVA_21", "mixins": [ "DontHurtMePearlMixin", - "JustTeleportAlreadyMixin" + "JustTeleportAlreadyMixin", + "PlayerEntityMixin" ], "injectors": { "defaultRequire": 1 From 37310b3d6132cb2306f5859b99e66d076a50b383 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20Miklo=C5=A1?= Date: Wed, 3 Dec 2025 03:31:08 +0100 Subject: [PATCH 08/17] feat: make crit damage multiplier a gamerule --- src/main/java/systems/brn/tweaks/Tweaks.java | 3 +++ .../systems/brn/tweaks/mixin/PlayerEntityMixin.java | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/main/java/systems/brn/tweaks/Tweaks.java b/src/main/java/systems/brn/tweaks/Tweaks.java index 1d742fc..ce97bd3 100644 --- a/src/main/java/systems/brn/tweaks/Tweaks.java +++ b/src/main/java/systems/brn/tweaks/Tweaks.java @@ -15,6 +15,9 @@ public class Tweaks implements ModInitializer { public static final GameRules.Key SHIELD_AXE_COOLDOWN = GameRuleRegistry.register("shieldAxeCooldown", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(100, 0, Integer.MAX_VALUE)); + public static final GameRules.Key CRITICAL_MULTIPLIER = + GameRuleRegistry.register("criticalHitMultiplier", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(150, 0, Integer.MAX_VALUE)); + @Override public void onInitialize() { } diff --git a/src/main/java/systems/brn/tweaks/mixin/PlayerEntityMixin.java b/src/main/java/systems/brn/tweaks/mixin/PlayerEntityMixin.java index d71d384..83226df 100644 --- a/src/main/java/systems/brn/tweaks/mixin/PlayerEntityMixin.java +++ b/src/main/java/systems/brn/tweaks/mixin/PlayerEntityMixin.java @@ -26,4 +26,17 @@ public abstract class PlayerEntityMixin { } return original; } + + @ModifyConstant( + method = "attack", + constant = @Constant(floatValue = 1.5F) + ) + private float modifyCriticalMultiplier(float original) { + PlayerEntity player = (PlayerEntity)(Object)this; + if (player.getWorld() != null && player.getWorld() instanceof ServerWorld serverWorld) { + GameRules.IntRule rule = serverWorld.getGameRules().get(Tweaks.CRITICAL_MULTIPLIER); + return rule.get() / 100.0F; + } + return original; + } } \ No newline at end of file From 90a5d8ea9579840034eb727d38c3a734f0a8184c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20Miklo=C5=A1?= Date: Wed, 3 Dec 2025 03:33:26 +0100 Subject: [PATCH 09/17] chore: optimize imports --- src/main/java/systems/brn/tweaks/mixin/PlayerEntityMixin.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/systems/brn/tweaks/mixin/PlayerEntityMixin.java b/src/main/java/systems/brn/tweaks/mixin/PlayerEntityMixin.java index 83226df..ed3c23c 100644 --- a/src/main/java/systems/brn/tweaks/mixin/PlayerEntityMixin.java +++ b/src/main/java/systems/brn/tweaks/mixin/PlayerEntityMixin.java @@ -1,12 +1,9 @@ package systems.brn.tweaks.mixin; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.PlayerInventory; import net.minecraft.server.world.ServerWorld; import net.minecraft.world.GameRules; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.Constant; import org.spongepowered.asm.mixin.injection.ModifyConstant; import systems.brn.tweaks.Tweaks; From f00fcea5510f6a822a8e5c27c8088b97055c3ffc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20Miklo=C5=A1?= Date: Wed, 3 Dec 2025 03:44:51 +0100 Subject: [PATCH 10/17] feat: make creeper fuse time a gamerule --- src/main/java/systems/brn/tweaks/Tweaks.java | 3 ++ .../brn/tweaks/mixin/CreeperEntityMixin.java | 29 +++++++++++++++++++ .../accessors/CreeperEntityAccessor.java | 14 +++++++++ src/main/resources/tweaks.mixins.json | 4 ++- 4 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 src/main/java/systems/brn/tweaks/mixin/CreeperEntityMixin.java create mode 100644 src/main/java/systems/brn/tweaks/mixin/accessors/CreeperEntityAccessor.java diff --git a/src/main/java/systems/brn/tweaks/Tweaks.java b/src/main/java/systems/brn/tweaks/Tweaks.java index ce97bd3..ccf5cd3 100644 --- a/src/main/java/systems/brn/tweaks/Tweaks.java +++ b/src/main/java/systems/brn/tweaks/Tweaks.java @@ -18,6 +18,9 @@ public class Tweaks implements ModInitializer { public static final GameRules.Key CRITICAL_MULTIPLIER = GameRuleRegistry.register("criticalHitMultiplier", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(150, 0, Integer.MAX_VALUE)); + public static final GameRules.Key CREEPER_FUSE_TIME = + GameRuleRegistry.register("creeperDefaultFuseTime", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(30, 0, Integer.MAX_VALUE)); + @Override public void onInitialize() { } diff --git a/src/main/java/systems/brn/tweaks/mixin/CreeperEntityMixin.java b/src/main/java/systems/brn/tweaks/mixin/CreeperEntityMixin.java new file mode 100644 index 0000000..e52d5af --- /dev/null +++ b/src/main/java/systems/brn/tweaks/mixin/CreeperEntityMixin.java @@ -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 = "", + at = @At("TAIL") + ) + private void onConstructor(EntityType 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()); + } + } +} \ No newline at end of file diff --git a/src/main/java/systems/brn/tweaks/mixin/accessors/CreeperEntityAccessor.java b/src/main/java/systems/brn/tweaks/mixin/accessors/CreeperEntityAccessor.java new file mode 100644 index 0000000..17d3462 --- /dev/null +++ b/src/main/java/systems/brn/tweaks/mixin/accessors/CreeperEntityAccessor.java @@ -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(); +} \ No newline at end of file diff --git a/src/main/resources/tweaks.mixins.json b/src/main/resources/tweaks.mixins.json index 0ece2ab..f193acc 100644 --- a/src/main/resources/tweaks.mixins.json +++ b/src/main/resources/tweaks.mixins.json @@ -4,9 +4,11 @@ "package": "systems.brn.tweaks.mixin", "compatibilityLevel": "JAVA_21", "mixins": [ + "CreeperEntityMixin", "DontHurtMePearlMixin", "JustTeleportAlreadyMixin", - "PlayerEntityMixin" + "PlayerEntityMixin", + "accessors.CreeperEntityAccessor" ], "injectors": { "defaultRequire": 1 From 6832c058ef27920a3a4b9ca301496ea297541069 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20Miklo=C5=A1?= Date: Wed, 3 Dec 2025 03:45:27 +0100 Subject: [PATCH 11/17] feat: change the icon --- src/main/resources/assets/icon.png | Bin 1057 -> 4547 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/icon.png b/src/main/resources/assets/icon.png index c2ae943ea2fccd29f1ba8db67c43e72604a43dbc..99bcf5c9274511f554c8439a2b9f96f6b7ca62b3 100644 GIT binary patch literal 4547 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 literal 1057 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANNfEt$^F0iMpz3I#>^X_+~x z3=A3*YbV-z9Cna78XvsWHQMEk!lMZbt+sY|SxnOsJLr_Dz2#Lx(MxfYOpl-#8P@Af z&GOx$?BeOMvN5cVADE9^J?eSU)$31uREFT=gN63@?pEK~%iNMSb!A#SPk`xZ5A{b$ zdi%A0#Tjzgw+XtqBrThFMkno|)xLKRAHI&AlD>2P?_!pzO(z-pJ!F!1B?{&XoX?B0 zdS3fTK--(^qh;Zd1>8dRMX`CGrJqka%ygbd^5z$t!j1@?uN&?hUX!!pi1Cp`*Q*-w zC$>gD+;cQ??X}3~^Zv9pHf@{q(CTcV%7zw|AOXe2eO#+H2rLa%KI$^-+he_dhR5eC zP4`*HC1EKR(9Cu6WAp!m@AJ++`VwNTDZu_KKIeBb(}%ZAYuj?`O>_%)p?h48n{ROYO@T7#P?~Jbhi+pL25vifF%LuQy|0V2~_vjVN)>&&^HE zD`9XhN=+Eaj?arkQZ-mJq00(O$liq3{6lf^FI zTs(h4^ZkYWGs-_qP(LxlGUekGrxyY*N@ACMcv+)mnGh{|mM_UA{d;%&9#&KexW##@ahAtnq-( zc>|{3U$qjY{KQwD=+J+&Gg9tFl)sD1-#m{sP7gSwu8XLeSaPOiwzN+4jOz7LOkg?u zwa)y(uGy2BRbrPj?%%&xt=;_g;S;YOmRxj7n)YzT6`lfjm%Pok77XQuvgdz&&6=`i zQx@0Jsf&d+J(|8+M{=1)c$jx$t8&zSftn>P&se8~W^v9)cKG$<&#a&(!^*8jCea%= z{7aiPDNy6B*~-$HZzsH5^Vi)ej>C0Q^3rQhH>_lFT(k4<)1NPQiB0Xu-sJ7Jc!9E! z;LfIhGrW9e{QWqmWN(B~#OD`fU)=Uf&k Date: Wed, 3 Dec 2025 03:48:36 +0100 Subject: [PATCH 12/17] chore: capitalize name, add authors, add desc, fix repo -> sources --- src/main/resources/fabric.mod.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 0a33582..ab7538d 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -2,11 +2,11 @@ "schemaVersion": 1, "id": "tweaks", "version": "${version}", - "name": "tweaks", - "description": "", - "authors": [], + "name": "Tweaks", + "description": "Change some values in Minecraft using gamerules", + "authors": ["BRNSystems", "Akis"], "contact": { - "repo": "https://git.brn.systems/BRNSystems/tweaks" + "sources": "https://git.brn.systems/BRNSystems/tweaks" }, "license": "MIT", "icon": "assets/icon.png", From 790568b04d8d122d5fe71388fbd75d1211564446 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20Miklo=C5=A1?= Date: Wed, 3 Dec 2025 04:01:39 +0100 Subject: [PATCH 13/17] feat: divergence and power for the pearl are now gamerules --- src/main/java/systems/brn/tweaks/Tweaks.java | 6 ++ .../brn/tweaks/mixin/EnderPearlItemMixin.java | 57 +++++++++++++++++++ src/main/resources/tweaks.mixins.json | 1 + 3 files changed, 64 insertions(+) create mode 100644 src/main/java/systems/brn/tweaks/mixin/EnderPearlItemMixin.java diff --git a/src/main/java/systems/brn/tweaks/Tweaks.java b/src/main/java/systems/brn/tweaks/Tweaks.java index ccf5cd3..c087fcc 100644 --- a/src/main/java/systems/brn/tweaks/Tweaks.java +++ b/src/main/java/systems/brn/tweaks/Tweaks.java @@ -21,6 +21,12 @@ public class Tweaks implements ModInitializer { public static final GameRules.Key CREEPER_FUSE_TIME = GameRuleRegistry.register("creeperDefaultFuseTime", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(30, 0, Integer.MAX_VALUE)); + public static final GameRules.Key ENDER_PEARL_POWER = + GameRuleRegistry.register("enderPearlPower", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(150, 0, Integer.MAX_VALUE)); + + public static final GameRules.Key ENDER_PEARL_DIVERGENCE = + GameRuleRegistry.register("enderPearlDivergence", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(100, 0, Integer.MAX_VALUE)); + @Override public void onInitialize() { } diff --git a/src/main/java/systems/brn/tweaks/mixin/EnderPearlItemMixin.java b/src/main/java/systems/brn/tweaks/mixin/EnderPearlItemMixin.java new file mode 100644 index 0000000..1f5844e --- /dev/null +++ b/src/main/java/systems/brn/tweaks/mixin/EnderPearlItemMixin.java @@ -0,0 +1,57 @@ +package systems.brn.tweaks.mixin; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.projectile.thrown.EnderPearlEntity; +import net.minecraft.item.EnderPearlItem; +import net.minecraft.item.ItemStack; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +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.CallbackInfoReturnable; +import systems.brn.tweaks.Tweaks; + +@Mixin(EnderPearlItem.class) +public class EnderPearlItemMixin { + + @Inject(method = "use", at = @At("HEAD"), cancellable = true) + private void injectCustomVelocity(World world, PlayerEntity user, Hand hand, + CallbackInfoReturnable cir) { + + if (!(world instanceof ServerWorld serverWorld)) return; + + ItemStack stack = user.getStackInHand(hand); + + float power = serverWorld.getGameRules().getInt(Tweaks.ENDER_PEARL_POWER) / 100f; + float divergence = serverWorld.getGameRules().getInt(Tweaks.ENDER_PEARL_DIVERGENCE) / 100f; + + world.playSound( + null, + user.getX(), + user.getY(), + user.getZ(), + net.minecraft.sound.SoundEvents.ENTITY_ENDER_PEARL_THROW, + net.minecraft.sound.SoundCategory.NEUTRAL, + 0.5F, + 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F) + ); + + net.minecraft.entity.projectile.ProjectileEntity.spawnWithVelocity( + EnderPearlEntity::new, + serverWorld, + stack, + user, + 0f, + power, + divergence + ); + + user.incrementStat(net.minecraft.stat.Stats.USED.getOrCreateStat((EnderPearlItem)(Object)this)); + stack.decrementUnlessCreative(1, user); + + cir.setReturnValue(ActionResult.SUCCESS); + } +} diff --git a/src/main/resources/tweaks.mixins.json b/src/main/resources/tweaks.mixins.json index f193acc..68c00e9 100644 --- a/src/main/resources/tweaks.mixins.json +++ b/src/main/resources/tweaks.mixins.json @@ -6,6 +6,7 @@ "mixins": [ "CreeperEntityMixin", "DontHurtMePearlMixin", + "EnderPearlItemMixin", "JustTeleportAlreadyMixin", "PlayerEntityMixin", "accessors.CreeperEntityAccessor" From 75fed26c3c7025d173342f584e110d52039c715c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20Miklo=C5=A1?= Date: Wed, 3 Dec 2025 04:07:54 +0100 Subject: [PATCH 14/17] feat: ender eye break chance is a gamerule --- src/main/java/systems/brn/tweaks/Tweaks.java | 3 ++ .../brn/tweaks/mixin/EyeOfEnderMixin.java | 39 +++++++++++++++++++ .../accessors/EyeOfEnderEntityAccessor.java | 11 ++++++ src/main/resources/tweaks.mixins.json | 4 +- 4 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 src/main/java/systems/brn/tweaks/mixin/EyeOfEnderMixin.java create mode 100644 src/main/java/systems/brn/tweaks/mixin/accessors/EyeOfEnderEntityAccessor.java diff --git a/src/main/java/systems/brn/tweaks/Tweaks.java b/src/main/java/systems/brn/tweaks/Tweaks.java index c087fcc..8604bc6 100644 --- a/src/main/java/systems/brn/tweaks/Tweaks.java +++ b/src/main/java/systems/brn/tweaks/Tweaks.java @@ -27,6 +27,9 @@ public class Tweaks implements ModInitializer { public static final GameRules.Key ENDER_PEARL_DIVERGENCE = GameRuleRegistry.register("enderPearlDivergence", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(100, 0, Integer.MAX_VALUE)); + public static final GameRules.Key ENDER_EYE_POP_CHANCE = + GameRuleRegistry.register("enderEyePopChance", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(20, 0, 100)); + @Override public void onInitialize() { } diff --git a/src/main/java/systems/brn/tweaks/mixin/EyeOfEnderMixin.java b/src/main/java/systems/brn/tweaks/mixin/EyeOfEnderMixin.java new file mode 100644 index 0000000..5343a02 --- /dev/null +++ b/src/main/java/systems/brn/tweaks/mixin/EyeOfEnderMixin.java @@ -0,0 +1,39 @@ +package systems.brn.tweaks.mixin; + +import net.minecraft.entity.EyeOfEnderEntity; +import net.minecraft.server.world.ServerWorld; +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.EyeOfEnderEntityAccessor; + +@Mixin(EyeOfEnderEntity.class) +public class EyeOfEnderMixin { + + @Inject( + method = "initTargetPos", + at = @At( + value = "FIELD", + target = "Lnet/minecraft/entity/EyeOfEnderEntity;dropsItem:Z", + ordinal = 0, + shift = At.Shift.AFTER + ) + ) + private void applyCustomBreakChance(CallbackInfo ci) { + EyeOfEnderEntity self = (EyeOfEnderEntity)(Object)this; + World world = self.getWorld(); + + if (!(world instanceof ServerWorld serverWorld)) + return; + + int popChance = serverWorld.getGameRules().getInt(Tweaks.ENDER_EYE_POP_CHANCE); + int roll = self.getRandom().nextInt(100); + + boolean dropsItem = roll >= popChance; + + ((EyeOfEnderEntityAccessor) self).setDropsItem(dropsItem); + } +} \ No newline at end of file diff --git a/src/main/java/systems/brn/tweaks/mixin/accessors/EyeOfEnderEntityAccessor.java b/src/main/java/systems/brn/tweaks/mixin/accessors/EyeOfEnderEntityAccessor.java new file mode 100644 index 0000000..b2e72e6 --- /dev/null +++ b/src/main/java/systems/brn/tweaks/mixin/accessors/EyeOfEnderEntityAccessor.java @@ -0,0 +1,11 @@ +package systems.brn.tweaks.mixin.accessors; + +import net.minecraft.entity.EyeOfEnderEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(EyeOfEnderEntity.class) +public interface EyeOfEnderEntityAccessor { + @Accessor("dropsItem") + void setDropsItem(boolean value); +} diff --git a/src/main/resources/tweaks.mixins.json b/src/main/resources/tweaks.mixins.json index 68c00e9..36c8a6d 100644 --- a/src/main/resources/tweaks.mixins.json +++ b/src/main/resources/tweaks.mixins.json @@ -7,9 +7,11 @@ "CreeperEntityMixin", "DontHurtMePearlMixin", "EnderPearlItemMixin", + "EyeOfEnderMixin", "JustTeleportAlreadyMixin", "PlayerEntityMixin", - "accessors.CreeperEntityAccessor" + "accessors.CreeperEntityAccessor", + "accessors.EyeOfEnderEntityAccessor" ], "injectors": { "defaultRequire": 1 From c82c5f911fbfe9d430f690700214c221a1520ced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20Miklo=C5=A1?= Date: Wed, 3 Dec 2025 04:14:36 +0100 Subject: [PATCH 15/17] feat: add leash distance gamerules --- src/main/java/systems/brn/tweaks/Tweaks.java | 6 ++++ .../brn/tweaks/mixin/LeashableMixin.java | 32 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 src/main/java/systems/brn/tweaks/mixin/LeashableMixin.java diff --git a/src/main/java/systems/brn/tweaks/Tweaks.java b/src/main/java/systems/brn/tweaks/Tweaks.java index 8604bc6..7b66dd8 100644 --- a/src/main/java/systems/brn/tweaks/Tweaks.java +++ b/src/main/java/systems/brn/tweaks/Tweaks.java @@ -30,6 +30,12 @@ public class Tweaks implements ModInitializer { public static final GameRules.Key ENDER_EYE_POP_CHANCE = GameRuleRegistry.register("enderEyePopChance", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(20, 0, 100)); + public static final GameRules.Key LEASH_BREAK_DISTANCE = + GameRuleRegistry.register("leashBreakDistance", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(10, 0, Integer.MAX_VALUE)); + + public static final GameRules.Key LEASH_ELASTIC_DISTANCE = + GameRuleRegistry.register("leashElasticDistance", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(6, 0, Integer.MAX_VALUE)); + @Override public void onInitialize() { } diff --git a/src/main/java/systems/brn/tweaks/mixin/LeashableMixin.java b/src/main/java/systems/brn/tweaks/mixin/LeashableMixin.java new file mode 100644 index 0000000..54ba67c --- /dev/null +++ b/src/main/java/systems/brn/tweaks/mixin/LeashableMixin.java @@ -0,0 +1,32 @@ +package systems.brn.tweaks.mixin; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.Leashable; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.world.GameRules; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.Constant; +import org.spongepowered.asm.mixin.injection.ModifyConstant; +import systems.brn.tweaks.Tweaks; + +@Mixin(Leashable.class) +public interface LeashableMixin { + + @ModifyConstant( + method = "tickLeash", + constant = @Constant(doubleValue = 10.0) + ) + private static double modifyLeashBreakDistance(double original, ServerWorld world, Entity entity) { + GameRules.IntRule rule = world.getGameRules().get(Tweaks.LEASH_BREAK_DISTANCE); + return rule.get(); + } + + @ModifyConstant( + method = "tickLeash", + constant = @Constant(doubleValue = 6.0) + ) + private static double modifyLeashElasticDistance(double original, ServerWorld world, Entity entity) { + GameRules.IntRule rule = world.getGameRules().get(Tweaks.LEASH_ELASTIC_DISTANCE); + return rule.get(); + } +} \ No newline at end of file From 39065c8e982f202bacd99b106a7101b357576402 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20Miklo=C5=A1?= Date: Wed, 3 Dec 2025 17:19:21 +0100 Subject: [PATCH 16/17] fix: silly me, forgot to add it to mixins --- src/main/resources/tweaks.mixins.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/tweaks.mixins.json b/src/main/resources/tweaks.mixins.json index 36c8a6d..834f5c4 100644 --- a/src/main/resources/tweaks.mixins.json +++ b/src/main/resources/tweaks.mixins.json @@ -9,6 +9,7 @@ "EnderPearlItemMixin", "EyeOfEnderMixin", "JustTeleportAlreadyMixin", + "LeashableMixin", "PlayerEntityMixin", "accessors.CreeperEntityAccessor", "accessors.EyeOfEnderEntityAccessor" From d8a7331b84ae62ce22abda0af303c2fb3a620f17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20Miklo=C5=A1?= Date: Wed, 3 Dec 2025 18:43:28 +0100 Subject: [PATCH 17/17] chore: bump to 1.3 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index ff6867a..7e71b1d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ loader_version=0.16.14 # Fabric API fabric_version=0.107.3+1.21.3 # Mod Properties -mod_version=1.2.5 +mod_version=1.3 maven_group=systems.brn archives_base_name=tweaks