GameRule-Extensions
No reviews yet
[1.7.10] Rewrites Minecraft's gamerules to be more accessible and extensible for mod authors
Provides a framework or library for other mods to use.
Forge is a popular mod loader for versions 1.1+ of Minecraft.
Community voices
Reviews
Click once to include, again to exclude, again to clear
No reviews yet. Be the first to review this project!
Get it on
Available Platforms
Compatibility
Supported Environments
About
Project Details
For authors
Embed Badge
If you're the author of this project, you can embed a live badge anywhere that supports HTML or Markdown. It updates automatically whenever ratings change.
Use HTML for any page that supports it, or Markdown for README files and Markdown-based descriptions.
Identifiers
Platform IDs
About
Description
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
- Add the API jar as a dependency to your project.
- Call
dev.rndmorris.gameruleexts.api.GameRulesApi.registerGameRule(...)to add a new gamerule for your mod. Theapi.rulespackage contains basic implementations for declaring boolean, numerical, and string gamerules. - If necessary, write your own
IGameRuleimplementation.
Reading a game rule
- Call
dev.rndmorris.gameruleexts.api.GameRulesApi.getGameRules(...). - The returned
IGameRulesobject can be used to retrieve and update gamerules by their name.
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
- Add the API jar as a dependency to your project.
- Call
dev.rndmorris.gameruleexts.api.GameRulesApi.registerGameRule(...)to add a new gamerule for your mod. Theapi.rulespackage contains basic implementations for declaring boolean, numerical, and string gamerules. - If necessary, write your own
IGameRuleimplementation.
Reading a game rule
- Call
dev.rndmorris.gameruleexts.api.GameRulesApi.getGameRules(...). - The returned
IGameRulesobject can be used to retrieve and update gamerules by their name.
Examples
Creating and reading a gamerule
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<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;
}
}
Credits
- rndmorris (primary author)
- The GTNH team, for the project template
Screenshots
Gallery
Versions
Files
Relations
Project Relations
More like this
Similar Mods
Suggestions use data such as tags, dependencies, dependents, descriptions, titles, and more to rank how much they overlap with this mod.
On ModDex
Community snapshot
By the numbers
Statistics
Want to reach Minecraft players?
We're looking for a server hosting partner to feature here and other parts of the site. Interested? Send us a message!
Get in touchGet it on
Available Platforms
On ModDex
Community snapshot
By the numbers