Complete Nether portal protection plugin for Spigot/Paper 1.8.9
Solves the 3 main issues with Nether portals without having to disable them entirely:
Problem: Players trap others inside portals surrounded by obsidian. The victim can't type in chat or move.
Solution:
- Automatically detects how long a player has been inside a portal
- If the time limit is exceeded (configurable, default 8 seconds), teleports them to a safe location
- Players can press Shift to cancel the teleport and get rescued
- Saves the player's last safe location for rescue
Problem: Exploits that abuse entity desynchronization when crossing portals to duplicate items.
Solution:
- Blocks non-player entities (dropped items, mobs) from crossing Nether portals
- Limits the amount of dropped items near portals (automatic cleanup)
- Monitors suspicious drops near portals
Problem: Players create portals in the Nether (1:8 scale) that generate inside other players' protected bases in the Overworld.
Solution:
- Checks WorldGuard permissions at the portal destination before teleporting
- Blocks portal creation in other players' protected zones
- Essentials fallback: protects a radius around player homes
- Redirects to safe locations when a destination is blocked
- Server: Spigot, PaperSpigot, TacoSpigot, or PandaSpigot 1.8.9
- Java: 8 or higher
- Optional: WorldGuard 6.x, Essentials (improve protected zone detection)
- Compile the plugin or download the pre-built
.jar - Place
NetherGuard-1.0.0.jarin your server'splugins/folder - Restart the server
- Edit
plugins/NetherGuard/config.ymlto your liking - Use
/ng reloadto apply changes
Using Maven:
cd NetherGuard
mvn clean packageThe .jar file will be generated at target/NetherGuard-1.0.0.jar
You can also open the project directly in IntelliJ IDEA (File → Open on the root folder) and run Maven → Lifecycle → package from the Maven panel.
Note: If you run into issues with the WorldGuard dependency, you can comment it out in
pom.xml. The plugin uses reflection to access WorldGuard, so it compiles and works fine without it.
| Command | Description | Permission |
|---|---|---|
/ng reload |
Reload configuration | netherguard.admin |
/ng status |
Show module status | netherguard.admin |
/ng rescue <player> |
Manually rescue a player from a portal | netherguard.admin |
| Permission | Description | Default |
|---|---|---|
netherguard.admin |
Access to all commands | OP |
netherguard.bypass.trap |
Immune to the anti-trap system | OP |
netherguard.bypass.grief |
Can create portals in protected zones | OP |
netherguard.bypass.all |
Full bypass | OP |
All settings are documented in config.yml. Key values:
anti-trap:
max-seconds-in-portal: 8 # Seconds before automatic rescue
shift-to-cancel: true # Shift to exit the portal
rescue-location: SPAWN # SPAWN, BED, or LAST_SAFE
anti-dupe:
block-entity-portal: true # Block entities from crossing portals
max-entities-near-portal: 10 # Item limit near portals
anti-grief:
use-worldguard: true # WorldGuard integration
use-essentials-homes: true # Essentials home-based protection
protection-radius: 50 # Protection radius (blocks)NetherGuard/
├── pom.xml
├── README.md
└── src/main/
├── java/com/netherguard/
│ ├── NetherGuard.java # Main plugin class
│ ├── listeners/
│ │ ├── AntiTrapListener.java # Anti-trap module
│ │ ├── AntiDupeListener.java # Anti-dupe module
│ │ └── AntiGriefListener.java # Anti-grief module
│ ├── tasks/
│ │ └── PortalTrapChecker.java # Periodic rescue task
│ └── utils/
│ ├── MessageUtil.java # Color code utility
│ └── RegionHelper.java # WorldGuard/Essentials integration
└── resources/
├── plugin.yml
└── config.yml
MIT License — feel free to use, modify, and distribute.