mirror of
https://github.com/loganintech/render-region-forcefield.git
synced 2026-05-30 22:31:15 +00:00
Some updates
This commit is contained in:
@@ -18,19 +18,34 @@ public final class RegionForcefieldPlugin extends JavaPlugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
// Save default config
|
try {
|
||||||
saveDefaultConfig();
|
// Save default config
|
||||||
|
saveDefaultConfig();
|
||||||
|
|
||||||
// Initialize components
|
// Check for WorldGuard
|
||||||
this.permissionChecker = new RegionPermissionChecker();
|
if (getServer().getPluginManager().getPlugin("WorldGuard") == null) {
|
||||||
this.forcefieldRenderer = new ForcefieldRenderer(this);
|
getLogger().severe("WorldGuard not found! Disabling plugin.");
|
||||||
|
getServer().getPluginManager().disablePlugin(this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Start the periodic update task
|
// Initialize components
|
||||||
this.updateTask = new ForcefieldUpdateTask(this, permissionChecker, forcefieldRenderer);
|
this.permissionChecker = new RegionPermissionChecker(this);
|
||||||
long updateInterval = getConfig().getLong("update-interval-ticks", 20L);
|
this.forcefieldRenderer = new ForcefieldRenderer(this);
|
||||||
updateTask.runTaskTimer(this, 0L, updateInterval);
|
|
||||||
|
|
||||||
getLogger().info("RegionForcefield has been enabled!");
|
// Start the periodic update task
|
||||||
|
this.updateTask = new ForcefieldUpdateTask(this, permissionChecker, forcefieldRenderer);
|
||||||
|
long updateInterval = getConfig().getLong("update-interval-ticks", 20L);
|
||||||
|
updateTask.runTaskTimer(this, 0L, updateInterval);
|
||||||
|
|
||||||
|
getLogger().info("RegionForcefield has been enabled!");
|
||||||
|
getLogger().info("Update interval: " + updateInterval + " ticks");
|
||||||
|
getLogger().info("Max render distance: " + getConfig().getInt("max-render-distance", 100) + " blocks");
|
||||||
|
} catch (Exception e) {
|
||||||
|
getLogger().severe("Failed to enable RegionForcefield: " + e.getMessage());
|
||||||
|
e.printStackTrace();
|
||||||
|
getServer().getPluginManager().disablePlugin(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -62,4 +77,15 @@ public final class RegionForcefieldPlugin extends JavaPlugin {
|
|||||||
public ForcefieldRenderer getForcefieldRenderer() {
|
public ForcefieldRenderer getForcefieldRenderer() {
|
||||||
return forcefieldRenderer;
|
return forcefieldRenderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs a debug message if debug mode is enabled.
|
||||||
|
*
|
||||||
|
* @param message the message to log
|
||||||
|
*/
|
||||||
|
public void debug(@NotNull String message) {
|
||||||
|
if (getConfig().getBoolean("debug", false)) {
|
||||||
|
getLogger().info("[DEBUG] " + message);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
|||||||
import org.bukkit.Color;
|
import org.bukkit.Color;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Particle;
|
import org.bukkit.Particle;
|
||||||
|
import loganintech.regionforcefield.RegionForcefieldPlugin;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -20,7 +20,7 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public class ForcefieldRenderer {
|
public class ForcefieldRenderer {
|
||||||
|
|
||||||
private final Plugin plugin;
|
private final RegionForcefieldPlugin plugin;
|
||||||
private final double particleSpacing;
|
private final double particleSpacing;
|
||||||
private final Particle.DustOptions dustOptions;
|
private final Particle.DustOptions dustOptions;
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@ public class ForcefieldRenderer {
|
|||||||
*
|
*
|
||||||
* @param plugin the plugin instance
|
* @param plugin the plugin instance
|
||||||
*/
|
*/
|
||||||
public ForcefieldRenderer(@NotNull Plugin plugin) {
|
public ForcefieldRenderer(@NotNull RegionForcefieldPlugin plugin) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
this.particleSpacing = plugin.getConfig().getDouble("particle-spacing", 0.5);
|
this.particleSpacing = plugin.getConfig().getDouble("particle-spacing", 0.5);
|
||||||
|
|
||||||
@@ -50,13 +50,21 @@ public class ForcefieldRenderer {
|
|||||||
* @param world the world the region is in
|
* @param world the world the region is in
|
||||||
*/
|
*/
|
||||||
public void renderForcefield(@NotNull Player player, @NotNull ProtectedRegion region, @NotNull World world) {
|
public void renderForcefield(@NotNull Player player, @NotNull ProtectedRegion region, @NotNull World world) {
|
||||||
if (region instanceof ProtectedCuboidRegion) {
|
try {
|
||||||
renderCuboidForcefield(player, (ProtectedCuboidRegion) region, world);
|
plugin.debug("Rendering forcefield for region " + region.getId() + " to player " + player.getName());
|
||||||
} else if (region instanceof ProtectedPolygonalRegion) {
|
|
||||||
renderPolygonalForcefield(player, (ProtectedPolygonalRegion) region, world);
|
if (region instanceof ProtectedCuboidRegion) {
|
||||||
} else {
|
renderCuboidForcefield(player, (ProtectedCuboidRegion) region, world);
|
||||||
// For other region types, fall back to rendering a bounding box
|
} else if (region instanceof ProtectedPolygonalRegion) {
|
||||||
renderBoundingBoxForcefield(player, region, world);
|
renderPolygonalForcefield(player, (ProtectedPolygonalRegion) region, world);
|
||||||
|
} else {
|
||||||
|
// For other region types, fall back to rendering a bounding box
|
||||||
|
plugin.debug("Using bounding box for region type: " + region.getClass().getSimpleName());
|
||||||
|
renderBoundingBoxForcefield(player, region, world);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
plugin.getLogger().warning("Error rendering forcefield for region " + region.getId() + ": " + e.getMessage());
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
|||||||
import com.sk89q.worldguard.protection.flags.Flags;
|
import com.sk89q.worldguard.protection.flags.Flags;
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||||
|
import loganintech.regionforcefield.RegionForcefieldPlugin;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -19,6 +20,19 @@ import java.util.Set;
|
|||||||
*/
|
*/
|
||||||
public class RegionPermissionChecker {
|
public class RegionPermissionChecker {
|
||||||
|
|
||||||
|
private final RegionForcefieldPlugin plugin;
|
||||||
|
private final WorldGuardPlugin worldGuard;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new region permission checker.
|
||||||
|
*
|
||||||
|
* @param plugin the plugin instance
|
||||||
|
*/
|
||||||
|
public RegionPermissionChecker(@NotNull RegionForcefieldPlugin plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.worldGuard = (WorldGuardPlugin) plugin.getServer().getPluginManager().getPlugin("WorldGuard");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets all regions in a world that the specified player cannot enter.
|
* Gets all regions in a world that the specified player cannot enter.
|
||||||
*
|
*
|
||||||
@@ -30,24 +44,39 @@ public class RegionPermissionChecker {
|
|||||||
public Set<ProtectedRegion> getBlockedRegions(@NotNull Player player, @NotNull World world) {
|
public Set<ProtectedRegion> getBlockedRegions(@NotNull Player player, @NotNull World world) {
|
||||||
Set<ProtectedRegion> blockedRegions = new HashSet<>();
|
Set<ProtectedRegion> blockedRegions = new HashSet<>();
|
||||||
|
|
||||||
// Get the region manager for this world
|
try {
|
||||||
RegionManager regionManager = WorldGuard.getInstance()
|
// Get the region manager for this world
|
||||||
.getPlatform()
|
RegionManager regionManager = WorldGuard.getInstance()
|
||||||
.getRegionContainer()
|
.getPlatform()
|
||||||
.get(BukkitAdapter.adapt(world));
|
.getRegionContainer()
|
||||||
|
.get(BukkitAdapter.adapt(world));
|
||||||
|
|
||||||
if (regionManager == null) {
|
if (regionManager == null) {
|
||||||
return blockedRegions;
|
return blockedRegions;
|
||||||
}
|
|
||||||
|
|
||||||
// Convert Bukkit player to WorldGuard LocalPlayer
|
|
||||||
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
|
|
||||||
|
|
||||||
// Check each region
|
|
||||||
for (ProtectedRegion region : regionManager.getRegions().values()) {
|
|
||||||
if (!canEnterRegion(localPlayer, region)) {
|
|
||||||
blockedRegions.add(region);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Convert Bukkit player to WorldGuard LocalPlayer
|
||||||
|
if (worldGuard == null) {
|
||||||
|
plugin.getLogger().warning("WorldGuard plugin reference is null!");
|
||||||
|
return blockedRegions;
|
||||||
|
}
|
||||||
|
|
||||||
|
LocalPlayer localPlayer = worldGuard.wrapPlayer(player);
|
||||||
|
|
||||||
|
// Check each region
|
||||||
|
for (ProtectedRegion region : regionManager.getRegions().values()) {
|
||||||
|
if (!canEnterRegion(localPlayer, region)) {
|
||||||
|
blockedRegions.add(region);
|
||||||
|
plugin.debug("Player " + player.getName() + " blocked from region: " + region.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!blockedRegions.isEmpty()) {
|
||||||
|
plugin.debug("Found " + blockedRegions.size() + " blocked regions for " + player.getName());
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
plugin.getLogger().warning("Error checking blocked regions: " + e.getMessage());
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
return blockedRegions;
|
return blockedRegions;
|
||||||
|
|||||||
@@ -38,17 +38,32 @@ public class ForcefieldUpdateTask extends BukkitRunnable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
// Iterate through all online players
|
try {
|
||||||
for (Player player : plugin.getServer().getOnlinePlayers()) {
|
// Iterate through all online players
|
||||||
// Get all regions the player cannot enter in their current world
|
for (Player player : plugin.getServer().getOnlinePlayers()) {
|
||||||
Set<ProtectedRegion> blockedRegions = permissionChecker.getBlockedRegions(player, player.getWorld());
|
// Get all regions the player cannot enter in their current world
|
||||||
|
Set<ProtectedRegion> blockedRegions = permissionChecker.getBlockedRegions(player, player.getWorld());
|
||||||
|
|
||||||
// Render forcefields for nearby blocked regions
|
if (!blockedRegions.isEmpty()) {
|
||||||
for (ProtectedRegion region : blockedRegions) {
|
plugin.debug("Processing " + blockedRegions.size() + " blocked regions for " + player.getName());
|
||||||
if (isRegionNearPlayer(player, region)) {
|
}
|
||||||
forcefieldRenderer.renderForcefield(player, region, player.getWorld());
|
|
||||||
|
// Render forcefields for nearby blocked regions
|
||||||
|
int rendered = 0;
|
||||||
|
for (ProtectedRegion region : blockedRegions) {
|
||||||
|
if (isRegionNearPlayer(player, region)) {
|
||||||
|
forcefieldRenderer.renderForcefield(player, region, player.getWorld());
|
||||||
|
rendered++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rendered > 0) {
|
||||||
|
plugin.debug("Rendered " + rendered + " forcefields for " + player.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
plugin.getLogger().warning("Error in forcefield update task: " + e.getMessage());
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
# RegionForcefield Configuration
|
# RegionForcefield Configuration
|
||||||
|
|
||||||
|
# Enable debug logging (useful for troubleshooting)
|
||||||
|
debug: false
|
||||||
|
|
||||||
# How often to update forcefields (in ticks, 20 ticks = 1 second)
|
# How often to update forcefields (in ticks, 20 ticks = 1 second)
|
||||||
update-interval-ticks: 20
|
update-interval-ticks: 20
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user