mirror of
https://github.com/loganintech/render-region-forcefield.git
synced 2026-05-30 14:21:14 +00:00
Some updates
This commit is contained in:
@@ -18,19 +18,34 @@ public final class RegionForcefieldPlugin extends JavaPlugin {
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
// Save default config
|
||||
saveDefaultConfig();
|
||||
try {
|
||||
// Save default config
|
||||
saveDefaultConfig();
|
||||
|
||||
// Initialize components
|
||||
this.permissionChecker = new RegionPermissionChecker();
|
||||
this.forcefieldRenderer = new ForcefieldRenderer(this);
|
||||
// Check for WorldGuard
|
||||
if (getServer().getPluginManager().getPlugin("WorldGuard") == null) {
|
||||
getLogger().severe("WorldGuard not found! Disabling plugin.");
|
||||
getServer().getPluginManager().disablePlugin(this);
|
||||
return;
|
||||
}
|
||||
|
||||
// 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);
|
||||
// Initialize components
|
||||
this.permissionChecker = new RegionPermissionChecker(this);
|
||||
this.forcefieldRenderer = new ForcefieldRenderer(this);
|
||||
|
||||
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
|
||||
@@ -62,4 +77,15 @@ public final class RegionForcefieldPlugin extends JavaPlugin {
|
||||
public ForcefieldRenderer getForcefieldRenderer() {
|
||||
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.Location;
|
||||
import org.bukkit.Particle;
|
||||
import loganintech.regionforcefield.RegionForcefieldPlugin;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
@@ -20,7 +20,7 @@ import java.util.List;
|
||||
*/
|
||||
public class ForcefieldRenderer {
|
||||
|
||||
private final Plugin plugin;
|
||||
private final RegionForcefieldPlugin plugin;
|
||||
private final double particleSpacing;
|
||||
private final Particle.DustOptions dustOptions;
|
||||
|
||||
@@ -29,7 +29,7 @@ public class ForcefieldRenderer {
|
||||
*
|
||||
* @param plugin the plugin instance
|
||||
*/
|
||||
public ForcefieldRenderer(@NotNull Plugin plugin) {
|
||||
public ForcefieldRenderer(@NotNull RegionForcefieldPlugin plugin) {
|
||||
this.plugin = plugin;
|
||||
this.particleSpacing = plugin.getConfig().getDouble("particle-spacing", 0.5);
|
||||
|
||||
@@ -50,13 +50,21 @@ public class ForcefieldRenderer {
|
||||
* @param world the world the region is in
|
||||
*/
|
||||
public void renderForcefield(@NotNull Player player, @NotNull ProtectedRegion region, @NotNull World world) {
|
||||
if (region instanceof ProtectedCuboidRegion) {
|
||||
renderCuboidForcefield(player, (ProtectedCuboidRegion) region, world);
|
||||
} else if (region instanceof ProtectedPolygonalRegion) {
|
||||
renderPolygonalForcefield(player, (ProtectedPolygonalRegion) region, world);
|
||||
} else {
|
||||
// For other region types, fall back to rendering a bounding box
|
||||
renderBoundingBoxForcefield(player, region, world);
|
||||
try {
|
||||
plugin.debug("Rendering forcefield for region " + region.getId() + " to player " + player.getName());
|
||||
|
||||
if (region instanceof ProtectedCuboidRegion) {
|
||||
renderCuboidForcefield(player, (ProtectedCuboidRegion) region, world);
|
||||
} else if (region instanceof ProtectedPolygonalRegion) {
|
||||
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.managers.RegionManager;
|
||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||
import loganintech.regionforcefield.RegionForcefieldPlugin;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -19,6 +20,19 @@ import java.util.Set;
|
||||
*/
|
||||
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.
|
||||
*
|
||||
@@ -30,24 +44,39 @@ public class RegionPermissionChecker {
|
||||
public Set<ProtectedRegion> getBlockedRegions(@NotNull Player player, @NotNull World world) {
|
||||
Set<ProtectedRegion> blockedRegions = new HashSet<>();
|
||||
|
||||
// Get the region manager for this world
|
||||
RegionManager regionManager = WorldGuard.getInstance()
|
||||
.getPlatform()
|
||||
.getRegionContainer()
|
||||
.get(BukkitAdapter.adapt(world));
|
||||
try {
|
||||
// Get the region manager for this world
|
||||
RegionManager regionManager = WorldGuard.getInstance()
|
||||
.getPlatform()
|
||||
.getRegionContainer()
|
||||
.get(BukkitAdapter.adapt(world));
|
||||
|
||||
if (regionManager == null) {
|
||||
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);
|
||||
if (regionManager == null) {
|
||||
return blockedRegions;
|
||||
}
|
||||
|
||||
// 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;
|
||||
|
||||
@@ -38,17 +38,32 @@ public class ForcefieldUpdateTask extends BukkitRunnable {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
// Iterate through all online players
|
||||
for (Player player : plugin.getServer().getOnlinePlayers()) {
|
||||
// Get all regions the player cannot enter in their current world
|
||||
Set<ProtectedRegion> blockedRegions = permissionChecker.getBlockedRegions(player, player.getWorld());
|
||||
try {
|
||||
// Iterate through all online players
|
||||
for (Player player : plugin.getServer().getOnlinePlayers()) {
|
||||
// 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
|
||||
for (ProtectedRegion region : blockedRegions) {
|
||||
if (isRegionNearPlayer(player, region)) {
|
||||
forcefieldRenderer.renderForcefield(player, region, player.getWorld());
|
||||
if (!blockedRegions.isEmpty()) {
|
||||
plugin.debug("Processing " + blockedRegions.size() + " blocked regions for " + player.getName());
|
||||
}
|
||||
|
||||
// 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
|
||||
|
||||
# Enable debug logging (useful for troubleshooting)
|
||||
debug: false
|
||||
|
||||
# How often to update forcefields (in ticks, 20 ticks = 1 second)
|
||||
update-interval-ticks: 20
|
||||
|
||||
|
||||
Reference in New Issue
Block a user