Some updates

This commit is contained in:
Logan Saso
2025-10-04 21:44:34 -07:00
parent 9395065465
commit 8a95a982bb
5 changed files with 125 additions and 44 deletions

View File

@@ -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);
}
}
} }

View File

@@ -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();
} }
} }

View File

@@ -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;

View File

@@ -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();
} }
} }

View File

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