diff --git a/src/main/java/me/youhavetrouble/moregamerules/ExtraGameRule.java b/src/main/java/me/youhavetrouble/moregamerules/ExtraGameRule.java new file mode 100644 index 0000000..ffc1cb8 --- /dev/null +++ b/src/main/java/me/youhavetrouble/moregamerules/ExtraGameRule.java @@ -0,0 +1,25 @@ +package me.youhavetrouble.moregamerules; + +import net.fabricmc.fabric.api.gamerule.v1.GameRuleFactory; +import net.fabricmc.fabric.api.gamerule.v1.GameRuleRegistry; +import net.minecraft.world.GameRules; + +public class ExtraGameRule { + + public static GameRules.Key MAGMA_BLOCK_DAMAGE; + public static GameRules.Key LIGHTNING_ROD_RANGE; + + protected static void init() { + MAGMA_BLOCK_DAMAGE = GameRuleRegistry.register( + "magmaBlockDamage", + GameRules.Category.MISC, + GameRuleFactory.createBooleanRule(true) + ); + LIGHTNING_ROD_RANGE = GameRuleRegistry.register( + "lightningRodRange", + GameRules.Category.MISC, + GameRuleFactory.createIntRule(128, 0, Integer.MAX_VALUE) + ); + } + +} diff --git a/src/main/java/me/youhavetrouble/moregamerules/MoreGameRules.java b/src/main/java/me/youhavetrouble/moregamerules/MoreGameRules.java index 2f3d83e..f5413e8 100644 --- a/src/main/java/me/youhavetrouble/moregamerules/MoreGameRules.java +++ b/src/main/java/me/youhavetrouble/moregamerules/MoreGameRules.java @@ -1,26 +1,15 @@ package me.youhavetrouble.moregamerules; import net.fabricmc.api.ModInitializer; -import net.fabricmc.fabric.api.gamerule.v1.GameRuleFactory; -import net.fabricmc.fabric.api.gamerule.v1.GameRuleRegistry; -import net.minecraft.world.GameRules; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MoreGameRules implements ModInitializer { - public static final Logger LOGGER = LoggerFactory.getLogger("moregamerules"); - - public static GameRules.Key MAGMA_BLOCK_DAMAGE; + public static final Logger LOGGER = LoggerFactory.getLogger("MoreGameRules"); @Override public void onInitialize() { - - MAGMA_BLOCK_DAMAGE = GameRuleRegistry.register( - "magmaBlockDamage", - GameRules.Category.MISC, - GameRuleFactory.createBooleanRule(true) - ); - + ExtraGameRule.init(); LOGGER.info("Finished loading up!"); } } diff --git a/src/main/java/me/youhavetrouble/moregamerules/mixin/MagmaBlockMixin.java b/src/main/java/me/youhavetrouble/moregamerules/mixin/MagmaBlockMixin.java index 8d3e735..f3d2dff 100644 --- a/src/main/java/me/youhavetrouble/moregamerules/mixin/MagmaBlockMixin.java +++ b/src/main/java/me/youhavetrouble/moregamerules/mixin/MagmaBlockMixin.java @@ -1,6 +1,6 @@ package me.youhavetrouble.moregamerules.mixin; -import me.youhavetrouble.moregamerules.MoreGameRules; +import me.youhavetrouble.moregamerules.ExtraGameRule; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.MagmaBlock; @@ -21,6 +21,6 @@ public class MagmaBlockMixin extends Block { @Inject(at = @At("HEAD"), method = "onSteppedOn", cancellable = true) private void injectedOnSteppedOn(World world, BlockPos pos, BlockState state, Entity entity, CallbackInfo info) { - if (!world.getGameRules().getBoolean(MoreGameRules.MAGMA_BLOCK_DAMAGE)) info.cancel(); + if (!world.getGameRules().getBoolean(ExtraGameRule.MAGMA_BLOCK_DAMAGE)) info.cancel(); } } diff --git a/src/main/java/me/youhavetrouble/moregamerules/mixin/ServerWorldMixin.java b/src/main/java/me/youhavetrouble/moregamerules/mixin/ServerWorldMixin.java new file mode 100644 index 0000000..c72c9ec --- /dev/null +++ b/src/main/java/me/youhavetrouble/moregamerules/mixin/ServerWorldMixin.java @@ -0,0 +1,18 @@ +package me.youhavetrouble.moregamerules.mixin; + +import me.youhavetrouble.moregamerules.ExtraGameRule; +import net.minecraft.server.world.ServerWorld; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; + +@Mixin(ServerWorld.class) +public class ServerWorldMixin { + + @ModifyArg(method = "getLightningRodPos", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/poi/PointOfInterestStorage;getNearestPosition(Ljava/util/function/Predicate;Ljava/util/function/Predicate;Lnet/minecraft/util/math/BlockPos;ILnet/minecraft/world/poi/PointOfInterestStorage$OccupationStatus;)Ljava/util/Optional;"), index = 3) + private int injectedGetLightningRodPos(int range) { + ServerWorld serverWorld = (ServerWorld)(Object) this; + return serverWorld.getGameRules().getInt(ExtraGameRule.LIGHTNING_ROD_RANGE); + } + +} diff --git a/src/main/resources/assets/moregamerules/lang/en_us.json b/src/main/resources/assets/moregamerules/lang/en_us.json index 026b7e7..244e200 100644 --- a/src/main/resources/assets/moregamerules/lang/en_us.json +++ b/src/main/resources/assets/moregamerules/lang/en_us.json @@ -1,4 +1,6 @@ { "gamerule.magmaBlockDamage": "Magma block damage", - "gamerule.magmaBlockDamage.description": "Controls if magma blocks should do damage when stepped on" + "gamerule.magmaBlockDamage.description": "Controls if magma blocks should do damage when stepped on", + "gamerule.lightningRodRange": "Lightning rod range", + "gamerule.lightningRodRange.description": "Sets the range in which lightning rod will redirect lightning" } \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 913a946..ae39a2a 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -14,7 +14,7 @@ }, "license": "CC0-1.0", - "icon": "assets/modid/icon.png", + "icon": "assets/moregamerules/icon.png", "environment": "*", "entrypoints": { diff --git a/src/main/resources/moregamerules.mixins.json b/src/main/resources/moregamerules.mixins.json index 3ec2c17..871bd14 100644 --- a/src/main/resources/moregamerules.mixins.json +++ b/src/main/resources/moregamerules.mixins.json @@ -3,10 +3,14 @@ "minVersion": "0.8", "package": "me.youhavetrouble.moregamerules.mixin", "compatibilityLevel": "JAVA_17", - "mixins": [], - "client": [], + "mixins": [ + "ServerWorldMixin" + ], + "client": [ + ], "server": [ "MagmaBlockMixin" + ], "injectors": { "defaultRequire": 1