GameRule-Extensions

⭐ — (1 endorsements) 📥 162 downloads 📌 v1.0.0 📅 9/20/2024
🟠 Updated over a year ago

By rndmorris · forge

⬇ Download Mod Source: Modrinth 📅 Updated: 9/19/2024 📅 Created: 9/20/2024
⚠️ Install Order · 2 steps
1🛠️ Forge — Minecraft Forge (mod loader) Download ↗
2🛠️ Fabric — Fabric Loader Download ↗

Install in this order, then this mod last — most mods fail to load without their framework and dependencies in place.

🔍 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 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 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

🤖 AI-enhanced — based on mod data

📊 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

📋 All Minecraft Mods Mods 🏆 Top 25 📂 More forge 👤 More by rndmorris 🔎 Similar Mods 🌐 Best forge (All Games) 🔀 Check Compatibility ⚖️ Compare Mods 🆕 New Mods