From 9420b8c5ef71dee01d7e19160992c34d5feef154 Mon Sep 17 00:00:00 2001 From: Leonard Kugis Date: Mon, 25 Apr 2022 18:40:22 +0200 Subject: . --- .../com/encrox/instanceddungeons/DungeonWorld.java | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/main/java/com/encrox/instanceddungeons/DungeonWorld.java (limited to 'src/main/java/com/encrox/instanceddungeons/DungeonWorld.java') diff --git a/src/main/java/com/encrox/instanceddungeons/DungeonWorld.java b/src/main/java/com/encrox/instanceddungeons/DungeonWorld.java new file mode 100644 index 0000000..7d4b99c --- /dev/null +++ b/src/main/java/com/encrox/instanceddungeons/DungeonWorld.java @@ -0,0 +1,59 @@ +package com.encrox.instanceddungeons; + +import java.util.ArrayList; + +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.plugin.Plugin; + +import com.encrox.instancedregions.InstancedProtectedCuboidRegion; +import com.sk89q.worldedit.BlockVector; +import com.sk89q.worldedit.BlockVector2D; +import com.sk89q.worldedit.regions.CuboidRegion; +import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; + +public class DungeonWorld { + + private Plugin plugin; + private World world; + private ArrayList regions; + private int lastX; + + public DungeonWorld(Plugin plugin, World world) { + this.world = world; + this.plugin = plugin; + regions = new ArrayList(); + lastX = 0; + } + + public InstancedProtectedCuboidRegion allocate(int width, int length) { + BlockVector min, max; + InstancedProtectedCuboidRegion region; + for(int i = 0; true; i+=16) { + if(new ProtectedCuboidRegion("current", (min = new BlockVector(lastX+i, 0, 0)), (max = new BlockVector(lastX+i+width, 255, length))).getIntersectingRegions(regions).isEmpty()) { + region = new InstancedProtectedCuboidRegion(plugin, world, ""+min.getBlockX(), min, max); + regions.add(region); + return region; + } + } + } + + //YOU STILL HAVE TO DISPOSE THE INSTANCED REGION MANUALLY! + public void deallocate(InstancedProtectedCuboidRegion region) { + BlockVector min = region.getMinimumPoint(), max = region.getMaximumPoint(); + for(int y = min.getBlockY(), ymax = max.getBlockY(); y