A Minecraft Forge mod that adds a PvP toggle system with combat tagging, cooldowns, and admin controls.
- Mod Version: 1.0.0
- Minecraft Version: 1.20.1
- Forge Version: 47.3.0
- Java Version: 17
- Peace/Combat Mode Toggle: Players can switch between Peace mode (PvP disabled) and Combat mode (PvP enabled)
- Keybind: Caps Lock key to toggle modes (configurable)
- HUD Display: Visual indicator showing current mode (top center of screen, 120x27 pixels)
- Nameplate Indicators:
- Text/emoji prefixes: [PVP] for Combat mode, [PEACE] for Peace mode (fully customizable - see EMOJI_GUIDE.md)
- Color coding: RED nameplate for Combat mode, BLUE for Peace mode (vanilla scoreboard teams)
- Both prefixes and colors can be independently enabled/disabled
- Combat Tagging: Players are tagged for 30 seconds after PvP engagement
- Smart Cooldown System: PvP-triggered 10-minute cooldown (not toggle-triggered by default)
- Players cannot toggle to Peace mode while combat-tagged (configurable)
- Combat tags persist across logout/login and server restarts
- Optional forced Combat mode while tagged
- Tag data stored in player persistent NBT
All commands require permission level 2 (OP):
/combattoggle get <player>
- View a player's current mode and tag status
/combattoggle set <player> <peace|combat> [bypassCooldown]
- Set a player's mode (optionally bypass cooldown)
/combattoggle resetcooldown <player>
- Reset a player's toggle cooldown
/combattoggle tag <player> [seconds]
- Apply combat tag to a player (default: config value)
/combattoggle untag <player>
- Remove combat tag from a player
/combattoggle reload
- Reload configuration (ceremonial - Forge auto-reloads)
Configuration file: config/combattoggle.toml
Combat & Tagging:
combatTagSeconds(default: 30) - Combat tag duration after PvPrequireBothCombatEnabled(default: true) - If true, both players must be in Combat mode for PvPforceCombatWhileTagged(default: true) - Force Combat mode while taggedallowToggleWhileTagged(default: false) - Allow toggling while combat-tagged
Cooldown System (NEW):
cooldownSeconds(default: 600) - Cooldown duration in seconds (10 minutes)cooldownTriggersOnToggle(default: false) - If true, cooldown starts on toggle; if false, toggling is instantcooldownTriggersOnPvp(default: true) - If true, cooldown starts when dealing/receiving PvP damagecooldownAppliesToPeaceOnly(default: true) - If true, cooldown only blocks Peace mode (Combat always available)
Admin:
allowAdminBypassCooldown(default: true) - Allow admins to bypass cooldown via commands
Nameplate Visual Customization:
useEmojiPrefixes(default: true) - Show text/emoji prefixes on nameplatescombatEmoji(default: "[PVP] ") - Text/emoji prefix for Combat mode players (see EMOJI_GUIDE.md for emoji options)peaceEmoji(default: "[PEACE] ") - Text/emoji prefix for Peace mode players (see EMOJI_GUIDE.md for emoji options)useNameplateColors(default: true) - Use scoreboard team colors (RED for Combat, BLUE for Peace)
showHud(default: true) - Display HUD overlayallowClientButtonClick(default: true) - Allow clicking HUD to toggle (not yet implemented)
- Install Minecraft Forge 47.3.0 for Minecraft 1.20.1
- Download the Combat Toggle mod JAR file
- Place the JAR in your
modsfolder - Launch Minecraft
Prerequisites:
- Java Development Kit (JDK) 17
- Gradle 8.x or higher
Setup:
- Clone or download this repository
- Open a terminal in the project directory
- Run
gradle wrapperto generate Gradle wrapper files (if missing) - Run
./gradlew build(Linux/Mac) orgradlew.bat build(Windows) - The compiled JAR will be in
build/libs/
Development Environment:
- Run
./gradlew genIntellijRunsfor IntelliJ IDEA - Run
./gradlew genEclipseRunsfor Eclipse - Run
./gradlew runClientto test in development
src/main/java/com/runecraft/combattoggle/
├── CombatToggle.java # Main mod class
├── config/
│ └── CTConfig.java # Server configuration
├── data/
│ └── CombatToggleData.java # Player data persistence
├── events/
│ ├── CombatEnforcementEvents.java # PvP blocking & tagging
│ ├── PlayerLifecycleEvents.java # Login/respawn sync
│ └── CommandEvents.java # Admin commands
├── network/
│ ├── PacketHandler.java # Network registration
│ ├── C2SRequestTogglePacket.java # Client→Server toggle request
│ └── S2CSyncStatePacket.java # Server→Client state sync
├── client/
│ ├── ClientCombatState.java # Client-side state cache
│ ├── ClientKeybinds.java # Keybind registration
│ └── CombatHudOverlay.java # HUD rendering
└── util/
└── TextUtil.java # Text formatting utilities
src/main/resources/
├── META-INF/
│ └── mods.toml # Mod metadata
├── pack.mcmeta # Resource pack metadata
└── assets/combattoggle/
├── lang/
│ └── en_us.json # English translations
└── textures/gui/
├── peace.png # Peace mode icon (450x101)
└── combat.png # Combat mode icon (450x101)
- Smart Cooldown: Cooldown now triggers on PvP activity, not just toggling
- Free Safe Zone Toggling: Players can switch modes instantly when not fighting
- Configurable Behavior: Three new config options for fine-tuned control
- Better UX: Clear messages about why cooldown is active
- See:
PVP_COOLDOWN_SYSTEM.mdfor full documentation
- Visual Status: RED nameplates for Combat mode, BLUE for Peace mode
- Vanilla Teams: Uses Minecraft's scoreboard system (no client hacks)
- Auto-Sync: Updates on toggle, login, respawn, and admin commands
- See:
NAMEPLATE_COLORS.mdfor full documentation
- Proper Scaling: HUD icons now display at correct 120x27 pixel size
- Matrix Transformation: Uses pose stack scaling for proper rendering
- Full Texture: Shows complete icon, not just corner/enlarged portion
- Fixed mods.toml: Corrected TOML format for Forge 1.20.1
- Proper Syntax: Changed to
[[mods]]array with required fields - See:
CRASH_FIX.mdfor technical details
- ✅ All core Java classes
- ✅ Server-side logic (config, data persistence, enforcement)
- ✅ Client-side logic (state management, keybinds, HUD)
- ✅ Network packet system
- ✅ Admin command system
- ✅ PvP-triggered cooldown system
- ✅ Nameplate color system (scoreboard teams)
- ✅ HUD rendering with proper scaling
- ✅ Configuration files
- ✅ Language localization
- ✅ Texture assets (peace.png, combat.png)
- ✅ Build successful - JAR ready for deployment
- Click-to-toggle HUD functionality
- Sound effects for mode changes
- Particle effects for combat tagging
- Gradual cooldown reduction
- Safe zone detection
- Per-world cooldowns
The mod is ready to build with Gradle wrapper included.
Windows:
.\gradlew.bat buildLinux/Mac:
./gradlew buildOutput:
- Compiled JAR:
build/libs/combattoggle-1.0.0.jar - Current size: ~47 KB
- Build time: ~25 seconds
IntelliJ IDEA:
.\gradlew.bat genIntellijRunsEclipse:
.\gradlew.bat genEclipseRunsTest Client:
.\gradlew.bat runClient- README.md - This file, main documentation
- PVP_COOLDOWN_SYSTEM.md - Complete guide to the PvP-triggered cooldown system
- NAMEPLATE_COLORS.md - Documentation for the scoreboard team nameplate colors
- CRASH_FIX.md - Technical details on fixes applied (mods.toml, HUD rendering)
- TODO.md - Development progress tracker
- BUILD_SUMMARY.md - Build history and technical notes
- IDE Errors: VSCode/IntelliJ may show false import errors - these are IDE issues and do not affect compilation
- Scoreboard Conflicts: May conflict with mods that heavily use scoreboard teams (factions, etc.)
GPL-3.0 License - See project documentation for details
- Developer: Runecraft
- Minecraft Version: 1.20.1
- Forge Version: 47.3.0
For issues, questions, or contributions, please refer to the project repository or contact the development team.