commit fa1f4190ca51b54540352e7c56a29c7a5edcfa9c Author: JernejTDO Date: Mon Jul 28 20:52:54 2025 +0200 UTD diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..f0e9804 --- /dev/null +++ b/.classpath @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..8f75a0a --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + Regions + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..29abf99 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding//src/test/resources=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..2af1e7b --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/README.md b/README.md new file mode 100644 index 0000000..7ece59b --- /dev/null +++ b/README.md @@ -0,0 +1,104 @@ +# πŸ—ΊοΈ Regions – Lightweight Region Library for Bukkit + +**Regions** is a lightweight and simple **Java library** for Bukkit/Spigot plugins. It helps you define 3D rectangular regions and automatically detects when players **enter or leave** them. + +Use it as a dependency in your own plugins to easily add region logic. + +--- + +## ✨ Features + +- βœ… Define rectangular cuboid regions with two `Location`s +- 🚢 Detect when a player **enters** or **exits** a region +- 🧰 Easy API to add, remove, and query regions +- πŸ”„ Registerable event listeners +- 🧩 Built for plugin developers – plug and play + +--- + +## πŸ”§ Getting Started + +### 1. Create a Region + +First, create two `Location` points and then create a region between them: + +```java +Location loc1 = new Location(Bukkit.getWorld(""), x1, y1, z1); +Location loc2 = new Location(Bukkit.getWorld(""), x2, y2, z2); + +RegionData region = new RegionData("", loc1, loc2); +Regions.addRegion(region); +``` + +### 2. Register the Event Listener + +Call this once (e.g. in your plugin's `onEnable`) to enable automatic region tracking: + +```java +public void onEnable() { + Regions.registerListener(this); // 'this' is your plugin instance +} +``` + +--- + +## πŸ“‘ Region Events + +These are custom events that you can listen for: + +```java +@EventHandler +public void onRegionEnter(PlayerEnterRegionEvent event) { + Player player = event.getPlayer(); + RegionData region = event.getRegion(); + player.sendMessage("Entered region: " + region.getName()); +} + +@EventHandler +public void onRegionExit(PlayerExitRegionEvent event) { + Player player = event.getPlayer(); + RegionData region = event.getRegion(); + player.sendMessage("Left region: " + region.getName()); +} +``` + +--- + +## πŸ§ͺ API Reference + +```java +Regions.addRegion(RegionData region); // Add a region +Regions.deleteRegion(RegionData region); // Remove a region + +Regions.getRegions(); // Get all regions +Regions.getRegionsByName("Spawn"); // Get regions by name + +Regions.getRegionInLocation(Location loc); // First region that contains loc +Regions.getRegionsInLocation(Location loc); // All regions that contain loc +``` + +--- + +## πŸ“¦ Integration in Your Plugin + +Simply include the compiled `Regions-1.0.jar` as a library in your plugin project. Then: + +1. Register the movement listener: + ```java + Regions.registerListener(this); + ``` +2. Add or query regions as needed. +3. Listen for `PlayerEnterRegionEvent` and `PlayerExitRegionEvent`. + +--- + +## πŸ§‘β€πŸ’» Author + +Created by **Jernej T.** +Pull requests and contributions are welcome! + +--- + +## πŸ“„ License + +MIT – do whatever you want, just give credit. diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..0d0cf9f --- /dev/null +++ b/pom.xml @@ -0,0 +1,64 @@ + + 4.0.0 + si.jernejtdo + Regions + 1.0 + Regions + + + 11 + UTF-8 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ${java.version} + ${java.version} + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + false + + + + + + + + src/main/resources + true + + + + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + + + + org.spigotmc + spigot-api + 1.21.5-R0.1-SNAPSHOT + provided + + + diff --git a/src/main/java/si/jernejtdo/regions/RegionData.java b/src/main/java/si/jernejtdo/regions/RegionData.java new file mode 100644 index 0000000..be53cf8 --- /dev/null +++ b/src/main/java/si/jernejtdo/regions/RegionData.java @@ -0,0 +1,51 @@ +package si.jernejtdo.regions; + +import org.bukkit.Location; + +public class RegionData { + + private String name; + private Location location_0; + private Location location_1; + + public RegionData(String regionName, Location location_0, Location location_1) { + this.name = regionName; + sortLocations(location_0, location_1); + } + + private void sortLocations(Location loc1, Location loc2) { + location_0 = new Location(loc1.getWorld(), Math.min(loc1.getX(), loc2.getX()), Math.min(loc1.getY(), loc2.getY()), Math.min(loc1.getZ(), loc2.getZ())); + location_1 = new Location(loc1.getWorld(), Math.max(loc1.getX(), loc2.getX()), Math.max(loc1.getY(), loc2.getY()), Math.max(loc1.getZ(), loc2.getZ())); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Location getLocation_0() { + return location_0; + } + + public void setLocation_0(Location location_0) { + sortLocations(location_0, location_1); + } + + public Location getLocation_1() { + return location_1; + } + + public void setLocation_1(Location location_1) { + sortLocations(location_0, location_1); + } + + public boolean isInRegion(Location location) { + boolean isInX = location.getX() >= location_0.getX() && location.getX() <= location_1.getX(); + boolean isInY = location.getY() >= location_0.getY() && location.getY() <= location_1.getY(); + boolean isInZ = location.getZ() >= location_0.getZ() && location.getZ() <= location_1.getZ(); + return isInX && isInY && isInZ; + } +} \ No newline at end of file diff --git a/src/main/java/si/jernejtdo/regions/Regions.java b/src/main/java/si/jernejtdo/regions/Regions.java new file mode 100644 index 0000000..64a95cd --- /dev/null +++ b/src/main/java/si/jernejtdo/regions/Regions.java @@ -0,0 +1,60 @@ +package si.jernejtdo.regions; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.plugin.Plugin; + +import si.jernejtdo.regions.bukkitevents.BukkitPlayerMoveEvent; + +public class Regions { + + public static void registerListener(Plugin plugin) { + Bukkit.getPluginManager().registerEvents(new BukkitPlayerMoveEvent(), plugin); + } + + private static List regionsList = new ArrayList<>(); + + public static void addRegion(RegionData region) { + regionsList.add(region); + } + + public static void deleteRegion(RegionData region) { + regionsList.remove(region); + } + + public static List getRegionsByName(String name) { + List reg = new ArrayList<>(); + for(RegionData region : regionsList) { + if(region.getName().equals(name)) { + reg.add(region); + } + } + return reg; + } + + public static List getRegions() { + return regionsList; + } + + public static List getRegionsInLocation(Location loc) { + List reg = new ArrayList<>(); + for(RegionData region : regionsList) { + if(region.isInRegion(loc)) { + reg.add(region); + } + } + return reg; + } + + public static RegionData getRegionInLocation(Location loc) { + for(RegionData region : regionsList) { + if(region.isInRegion(loc)) { + return region; + } + } + return null; + } +} diff --git a/src/main/java/si/jernejtdo/regions/bukkitevents/BukkitPlayerMoveEvent.java b/src/main/java/si/jernejtdo/regions/bukkitevents/BukkitPlayerMoveEvent.java new file mode 100644 index 0000000..59a0fab --- /dev/null +++ b/src/main/java/si/jernejtdo/regions/bukkitevents/BukkitPlayerMoveEvent.java @@ -0,0 +1,47 @@ +package si.jernejtdo.regions.bukkitevents; + +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; + +import si.jernejtdo.regions.RegionData; +import si.jernejtdo.regions.Regions; +import si.jernejtdo.regions.event.PlayerEnterRegionEvent; +import si.jernejtdo.regions.event.PlayerExitRegionEvent; + +public class BukkitPlayerMoveEvent implements Listener { + + @EventHandler + public void move(PlayerMoveEvent event) { + if(event.getFrom().getBlockX() != event.getTo().getBlockX() + || event.getFrom().getBlockY() != event.getTo().getBlockY() + || event.getFrom().getBlockZ() != event.getTo().getBlockZ()) { + + RegionData to = Regions.getRegionInLocation(event.getTo()); + RegionData from = Regions.getRegionInLocation(event.getFrom()); + + if(to != null) { + if(from != null) { + if(to != from) { + PlayerEnterRegionEvent enterEvent = new PlayerEnterRegionEvent(event.getPlayer(), from, to, event.isCancelled()); + Bukkit.getPluginManager().callEvent(enterEvent); + PlayerExitRegionEvent exitEvent = new PlayerExitRegionEvent(event.getPlayer(), from, to, enterEvent.isCanceled()); + Bukkit.getPluginManager().callEvent(exitEvent); + event.setCancelled(exitEvent.isCanceled()); + } + } else { + PlayerEnterRegionEvent enterEvent = new PlayerEnterRegionEvent(event.getPlayer(), from, to, event.isCancelled()); + Bukkit.getPluginManager().callEvent(enterEvent); + event.setCancelled(enterEvent.isCanceled()); + } + } else { + if(from != null) { + PlayerExitRegionEvent exitEvent = new PlayerExitRegionEvent(event.getPlayer(), from, to, event.isCancelled()); + Bukkit.getPluginManager().callEvent(exitEvent); + event.setCancelled(exitEvent.isCanceled()); + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/si/jernejtdo/regions/event/PlayerEnterRegionEvent.java b/src/main/java/si/jernejtdo/regions/event/PlayerEnterRegionEvent.java new file mode 100644 index 0000000..22f6574 --- /dev/null +++ b/src/main/java/si/jernejtdo/regions/event/PlayerEnterRegionEvent.java @@ -0,0 +1,52 @@ +package si.jernejtdo.regions.event; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import si.jernejtdo.regions.RegionData; + +public class PlayerEnterRegionEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + private RegionData from; + private RegionData to; + private Player player; + private boolean isCanceled; + + public PlayerEnterRegionEvent(Player player, RegionData from, RegionData to, boolean isCanceled) { + this.from = from; + this.to = to; + this.player = player; + this.isCanceled = isCanceled; + } + + public RegionData getFrom() { + return from; + } + + public RegionData getTo() { + return to; + } + + public Player getPlayer() { + return player; + } + + public boolean isCanceled() { + return isCanceled; + } + + public void setCanceled(boolean isCanceled) { + this.isCanceled = isCanceled; + } +} \ No newline at end of file diff --git a/src/main/java/si/jernejtdo/regions/event/PlayerExitRegionEvent.java b/src/main/java/si/jernejtdo/regions/event/PlayerExitRegionEvent.java new file mode 100644 index 0000000..6866b38 --- /dev/null +++ b/src/main/java/si/jernejtdo/regions/event/PlayerExitRegionEvent.java @@ -0,0 +1,52 @@ +package si.jernejtdo.regions.event; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import si.jernejtdo.regions.RegionData; + +public class PlayerExitRegionEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + private RegionData from; + private RegionData to; + private Player player; + private boolean isCanceled; + + public PlayerExitRegionEvent(Player player, RegionData from, RegionData to, boolean isCanceled) { + this.from = from; + this.to = to; + this.player = player; + this.isCanceled = isCanceled; + } + + public RegionData getFrom() { + return from; + } + + public RegionData getTo() { + return to; + } + + public Player getPlayer() { + return player; + } + + public boolean isCanceled() { + return isCanceled; + } + + public void setCanceled(boolean isCanceled) { + this.isCanceled = isCanceled; + } +} \ No newline at end of file diff --git a/target/Regions-1.0.jar b/target/Regions-1.0.jar new file mode 100644 index 0000000..960bb24 Binary files /dev/null and b/target/Regions-1.0.jar differ diff --git a/target/classes/META-INF/MANIFEST.MF b/target/classes/META-INF/MANIFEST.MF new file mode 100644 index 0000000..0e15486 --- /dev/null +++ b/target/classes/META-INF/MANIFEST.MF @@ -0,0 +1,4 @@ +Manifest-Version: 1.0 +Build-Jdk-Spec: 23 +Created-By: Maven Integration for Eclipse + diff --git a/target/classes/META-INF/maven/si.jernejtdo/Regions/pom.properties b/target/classes/META-INF/maven/si.jernejtdo/Regions/pom.properties new file mode 100644 index 0000000..ab9d47f --- /dev/null +++ b/target/classes/META-INF/maven/si.jernejtdo/Regions/pom.properties @@ -0,0 +1,7 @@ +#Generated by Maven Integration for Eclipse +#Sat Jul 12 16:40:40 CEST 2025 +artifactId=Regions +groupId=si.jernejtdo +m2e.projectLocation=D\:\\Codespace\\JernejTDO\\Regions +m2e.projectName=Regions +version=1.0 diff --git a/target/classes/META-INF/maven/si.jernejtdo/Regions/pom.xml b/target/classes/META-INF/maven/si.jernejtdo/Regions/pom.xml new file mode 100644 index 0000000..0d0cf9f --- /dev/null +++ b/target/classes/META-INF/maven/si.jernejtdo/Regions/pom.xml @@ -0,0 +1,64 @@ + + 4.0.0 + si.jernejtdo + Regions + 1.0 + Regions + + + 11 + UTF-8 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ${java.version} + ${java.version} + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + false + + + + + + + + src/main/resources + true + + + + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + + + + org.spigotmc + spigot-api + 1.21.5-R0.1-SNAPSHOT + provided + + + diff --git a/target/classes/si/jernejtdo/regions/RegionData.class b/target/classes/si/jernejtdo/regions/RegionData.class new file mode 100644 index 0000000..95f0d11 Binary files /dev/null and b/target/classes/si/jernejtdo/regions/RegionData.class differ diff --git a/target/classes/si/jernejtdo/regions/Regions.class b/target/classes/si/jernejtdo/regions/Regions.class new file mode 100644 index 0000000..a59cd11 Binary files /dev/null and b/target/classes/si/jernejtdo/regions/Regions.class differ diff --git a/target/classes/si/jernejtdo/regions/bukkitevents/BukkitPlayerMoveEvent.class b/target/classes/si/jernejtdo/regions/bukkitevents/BukkitPlayerMoveEvent.class new file mode 100644 index 0000000..dfa844e Binary files /dev/null and b/target/classes/si/jernejtdo/regions/bukkitevents/BukkitPlayerMoveEvent.class differ diff --git a/target/classes/si/jernejtdo/regions/event/PlayerEnterRegionEvent.class b/target/classes/si/jernejtdo/regions/event/PlayerEnterRegionEvent.class new file mode 100644 index 0000000..845517c Binary files /dev/null and b/target/classes/si/jernejtdo/regions/event/PlayerEnterRegionEvent.class differ diff --git a/target/classes/si/jernejtdo/regions/event/PlayerExitRegionEvent.class b/target/classes/si/jernejtdo/regions/event/PlayerExitRegionEvent.class new file mode 100644 index 0000000..9d018ad Binary files /dev/null and b/target/classes/si/jernejtdo/regions/event/PlayerExitRegionEvent.class differ diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 0000000..b4b27e8 --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=Regions +groupId=si.jernejtdo +version=1.0 diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..c1aa9df --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,5 @@ +si\jernejtdo\regions\bukkitevents\BukkitPlayerMoveEvent.class +si\jernejtdo\regions\event\PlayerEnterRegionEvent.class +si\jernejtdo\regions\RegionData.class +si\jernejtdo\regions\event\PlayerExitRegionEvent.class +si\jernejtdo\regions\Regions.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..2ee8c64 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,5 @@ +D:\Codespace\JernejTDO\Regions\src\main\java\si\jernejtdo\regions\event\PlayerExitRegionEvent.java +D:\Codespace\JernejTDO\Regions\src\main\java\si\jernejtdo\regions\RegionData.java +D:\Codespace\JernejTDO\Regions\src\main\java\si\jernejtdo\regions\Regions.java +D:\Codespace\JernejTDO\Regions\src\main\java\si\jernejtdo\regions\bukkitevents\BukkitPlayerMoveEvent.java +D:\Codespace\JernejTDO\Regions\src\main\java\si\jernejtdo\regions\event\PlayerEnterRegionEvent.java diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/target/original-Regions-1.0.jar b/target/original-Regions-1.0.jar new file mode 100644 index 0000000..99e01da Binary files /dev/null and b/target/original-Regions-1.0.jar differ