GameRule-Extensions
🟠 Updated over a year ago⚠️ Install Order · 2 steps
Install in this order, then this mod last — most mods fail to load without their framework and dependencies in place.
Preview

🔍 Analysis
- 🏆 #266 of 372 forge mods in this game by downloads
📋 About This Mod
# GameRule-Extensions An extension library to allow mod developers to more easily add custom gamerules, with additional datatype support. # Usage (Mod Developers Only) ## Adding a new game rule 1. Add the API jar as a dependency to your project. 2. Call `dev.rndmorris.gameruleexts.api.GameRulesApi.registerGameRule(...)` to add a new gamerule for your mod. The `api.rules` package contains basic implementations for declaring boolean, numerical, and string gamerules. 3. If necessary, write your own `IGameRule` implementation. ## Reading a game rule 1. Call `dev.rndmorris.gameruleexts.api.GameRulesApi.getGameRules(...)`. 2. The returned `IGameRules` object can be used to retrieve and update gamerules by their name. # Examples ## Creating and reading a gamerule ```java public class CommonProxy { // ... public void postInit(FMLPostInitializationEvent event) { GameRulesApi.registerGameRule(new FloatGameRule("grassCuttingSwordDamage", 90F)); } // ... } public class SwordGrassCutting extends ItemSword { // ... public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase player) { final var gameRules = GameRulesApi.getGameRules(player.worldObj); target.attackEntityFrom(DamageSource.causePlayerDamage(player).setMagicDamage(), gameRules.getFloat("grassCuttingSwordDamage")); return super.hitEntity(stack, target, player); } // ... } ``` ## Creating a custom gamerule implementation Here's an example custom gamerule that maps enums to bytes. <details> ```java import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; import net.minecraft.command.ICommandSender; import net.minecraft.nbt.NBTTagCompound; import dev.rndmorris.gameruleexts.api.IGameRule; import dev.rndmorris.gameruleexts.api.IRuleValue; import dev.rndmorris.gameruleexts.api.values.EnumValue; public class ExampleCustomGameRule implements IGameRule { public enum ModDifficulty { EASY, MEDIUM, HARD; public static ModDifficulty fromByte(int val, ModDifficulty defaultValue) { return switch (val) { case 0 -> ModDifficulty.EASY; case 1 -> ModDifficulty.MEDIUM; case 2 -> ModDifficulty.HARD; default -> defaultValue; }; } public byte toByte() { return switch (this) { case EASY -> 0; case MEDIUM -> 1; case HARD -> 2; }; } } private final String name = "modDifficulty"; private final ModDifficulty defaultValue; private List<String> tabCompletionValues; public ExampleCustomGameRule(ModDifficulty defaultValue) { this.defaultValue = defaultValue; } @Override public String getName() { return name; } @Override public IRuleValue getDefaultValue() { return new EnumValue<>(defaultValue, ModDifficulty.class); } @Override public IRuleValue readValueFromNBT(NBTTagCompound tag) { if (!tag.hasKey(name)) { return getDefaultValue(); } final var value = ModDifficulty.fromByte(tag.getByte(name), defaultValue); return new EnumValue<>(value, ModDifficulty.class); } @Override public void writeValueToNBT(NBTTagCompound tag, IRuleValue value) { if (value instanceof EnumValue storedVal && storedVal.getValue() instanceof ModDifficulty enumVal) { tag.setByte(name, enumVal.toByte()); } } @Override public Collection<String> tabCompletionValues(ICommandSender commandSender) { if (tabCompletionValues == null) { tabCompletionValues = Arrays.stream(ModDifficulty.values()) .map(ModDifficulty::toString) .collect(Collectors.toList()); } return tabCompletionValues; } } ``` </details> # Credits * rndmorris (primary author) * The GTNH team, for the project template
# GameRule-Extensions An extension library to allow mod developers to more easily add custom gamerules, with additional datatype support.
# Usage (Mod Developers Only)
## Adding a new game rule
1. Add the API jar as a dependency to your project. 2. Call `dev.rndmorris.gameruleexts.api. GameRulesApi.registerGameRule(...)` to add a new gamerule for your mod. The `api.rules` package contains basic implementations for declaring boolean, numerical, and string gamerules. 3. If necessary, write your own `IGameRule` implementation.
## Reading a game rule 1. Call `dev.rndmorris.gameruleexts.api. GameRulesApi.getGameRules(...)`. 2. The returned `IGameRules` object can be used to retrieve and update gamerules by their name.
## Creating and reading a gamerule ```java
public class CommonProxy { // ... public void postInit(FMLPostInitializationEvent event) { GameRulesApi.registerGameRule(new FloatGameRule("grassCuttingSwordDamage", 90F)); } // ... }
public class SwordGrassCutting extends ItemSword { // ... public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase player) { final var gameRules = GameRulesApi.getGameRules(player.worldObj); target.attackEntityFrom(DamageSource.causePlayerDamage(player).setMagicDamage(), gameRules.getFloat("grassCuttingSwordDamage")); return super.hitEntity(stack, target, player); } // ... }
## Creating a custom gamerule implementation
Here's an example custom gamerule that maps enums to bytes.
import java.util. Arrays; import java.util. Collection; import java.util. List; import java.util.stream. Collectors;
import net.minecraft.command. ICommandSender; import net.minecraft.nbt. NBTTagCompound;
import dev.rndmorris.gameruleexts.api. IGameRule; import dev.rndmorris.gameruleexts.api. IRuleValue; import dev.rndmorris.gameruleexts.api.values. EnumValue;
public class ExampleCustomGameRule implements IGameRule {
public enum ModDifficulty {
EASY, MEDIUM, HARD;
public static ModDifficulty fromByte(int val, ModDifficulty defaultValue) { return switch (val) { case 0 -> ModDifficulty. EASY; case 1 -> ModDifficulty. MEDIUM; case 2 -> ModDifficulty. HARD; default -> defaultValue; }; }
public byte toByte() { return switch (this) { case EASY -> 0; case MEDIUM -> 1; case HARD -> 2; }; } }
private final String name = "modDifficulty";
private final ModDifficulty defaultValue;
private List
public ExampleCustomGameRule(ModDifficulty defaultValue) { this.defaultValue = defaultValue; }
@Override public String getName() { return name; }
@Override public IRuleValue getDefaultValue() { return new EnumValue<>(defaultValue, ModDifficulty.class); }
@Override public IRuleValue readValueFromNBT(NBTTagCompound tag) { if (!tag.hasKey(name)) { return getDefaultValue(); } final var value = ModDifficulty.fromByte(tag.getByte(name), defaultValue); return new EnumValue<>(value, ModDifficulty.class); }
@Override public void writeValueToNBT(NBTTagCompound tag, IRuleValue value) { if (value instanceof EnumValue storedVal && storedVal.getValue() instanceof ModDifficulty enumVal) { tag.setByte(name, enumVal.toByte()); } }
@Override
public Collection
# Credits rndmorris (primary author) The GTNH team, for the project template
📊 Mod Details
- Game
- Minecraft Mods
- Author
- rndmorris
- Version
- 1.0.0
- Downloads
- 162
- Endorsements
- 1
- Category
- forge
- Created
- 9/20/2024
- Updated
- 9/19/2024
- Game Versions
- 1.7.10
- Tags
- library
🔧 How to Install Minecraft Mods Mods
Download from Modrinth. Use Prism Launcher or drop into your mods folder.
📖 Full step-by-step install guide for Minecraft Mods →
Visit the official mod page for specific installation instructions for this mod.
🎮 Need cheat codes or console commands? Check ur gaming wiki for Minecraft Mods commands, item IDs, and more.
❓ Frequently Asked Questions
Which Minecraft Mods versions does GameRule-Extensions support?
The author lists 1.7.10. Other versions may work but are untested by the author.
What is the latest version of GameRule-Extensions?
Version 1.0.0, published 2024-09-19 with 162 downloads recorded at the source.
Keep browsing — more Minecraft Mods mods await