From ec74037f0504a40bf8fad09adebb592de32a0cf7 Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Thu, 26 May 2022 21:48:46 +0200 Subject: [PATCH 1/3] Added ability to create Iris Wand from WorldEdit selection. --- build.gradle | 2 ++ .../iris/core/commands/CommandObject.java | 27 ++++++++++++---- .../volmit/iris/core/link/WorldEditLink.java | 32 +++++++++++++++++++ .../volmit/iris/core/tools/IrisToolbelt.java | 9 ++---- src/main/resources/plugin.yml | 2 +- 5 files changed, 59 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/volmit/iris/core/link/WorldEditLink.java diff --git a/build.gradle b/build.gradle index 82e60860b..e5346f5d5 100644 --- a/build.gradle +++ b/build.gradle @@ -74,6 +74,7 @@ repositories { } } maven { url "https://dl.cloudsmith.io/public/arcane/archive/maven/" } + maven { url "https://maven.enginehub.org/repo/" } mavenCentral() mavenLocal() maven { url "https://jitpack.io"} @@ -128,6 +129,7 @@ dependencies { implementation 'io.th0rgal:oraxen:1.94.0' implementation 'org.bukkit:craftbukkit:1.18.2-R0.1-SNAPSHOT:remapped-mojang' implementation 'com.github.LoneDev6:api-itemsadder:3.1.0b' + implementation 'com.sk89q.worldedit:worldedit-bukkit:7.2.9' // Shaded implementation 'com.dfsek:Paralithic:0.4.0' diff --git a/src/main/java/com/volmit/iris/core/commands/CommandObject.java b/src/main/java/com/volmit/iris/core/commands/CommandObject.java index 0bf075bb5..a2c07c359 100644 --- a/src/main/java/com/volmit/iris/core/commands/CommandObject.java +++ b/src/main/java/com/volmit/iris/core/commands/CommandObject.java @@ -18,7 +18,9 @@ package com.volmit.iris.core.commands; +import com.mojang.datafixers.util.Pair; import com.volmit.iris.Iris; +import com.volmit.iris.core.link.WorldEditLink; import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.core.service.ObjectSVC; import com.volmit.iris.core.service.StudioSVC; @@ -41,12 +43,7 @@ import com.volmit.iris.util.format.C; import com.volmit.iris.util.math.Direction; import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.scheduling.Queue; -import org.bukkit.ChatColor; -import org.bukkit.HeightMap; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.World; +import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.BlockState; import org.bukkit.block.TileState; @@ -426,6 +423,24 @@ public class CommandObject implements DecreeExecutor { sender().sendMessage("Reverted " + actualReverts + " pastes!"); } + @Decree(description = "Gets an object wand and grabs the current WorldEdit selection.", aliases = "we", origin = DecreeOrigin.PLAYER, studio = true) + public void we() { + if(!Bukkit.getPluginManager().isPluginEnabled("WorldEdit")) { + sender().sendMessage(C.RED + "You can't get a WorldEdit selection without WorldEdit, you know."); + return; + } + + Pair locs = WorldEditLink.getSelection(sender().player()); + if(locs.getFirst() == null) + sender().sendMessage(C.RED + "You don't have a WorldEdit selection!"); + else if(locs.getSecond() == null) + sender().sendMessage(C.RED + "You need a valid WorldRegion selection in the current world!"); + else { + sender().player().getInventory().addItem(WandSVC.createWand(locs.getFirst(), locs.getSecond())); + sender().sendMessage(C.GREEN + "A fresh wand with your current WorldEdit selection on it!"); + } + } + @Decree(description = "Get an object wand", sync = true) public void wand() { player().getInventory().addItem(WandSVC.createWand()); diff --git a/src/main/java/com/volmit/iris/core/link/WorldEditLink.java b/src/main/java/com/volmit/iris/core/link/WorldEditLink.java new file mode 100644 index 000000000..eaebb1810 --- /dev/null +++ b/src/main/java/com/volmit/iris/core/link/WorldEditLink.java @@ -0,0 +1,32 @@ +package com.volmit.iris.core.link; + +import com.mojang.datafixers.util.Pair; +import com.sk89q.worldedit.IncompleteRegionException; +import com.sk89q.worldedit.LocalSession; +import com.sk89q.worldedit.WorldEdit; +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldedit.math.BlockVector3; +import com.sk89q.worldedit.regions.Region; +import com.sk89q.worldedit.session.MissingSessionException; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +public class WorldEditLink { + + public static Pair getSelection(Player p) { + LocalSession session = WorldEdit.getInstance().getSessionManager().getIfPresent(BukkitAdapter.adapt(p)); + try { + if(session == null) + throw new MissingSessionException(); + Region r = session.getSelection(BukkitAdapter.adapt(p.getWorld())); + BlockVector3 p1 = r.getMinimumPoint(); + BlockVector3 p2 = r.getMaximumPoint(); + return new Pair<>(new Location(p.getWorld(), p1.getX(), p1.getY(), p1.getZ()), new Location(p.getWorld(), p2.getX(), p2.getY(), p2.getZ())); + } catch(MissingSessionException e) { + return new Pair<>(null, new Location(null, 0, 0, 0)); + } catch(IncompleteRegionException e) { + return new Pair<>(new Location(null, 0, 0, 0), null); + } + + } +} diff --git a/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java b/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java index fba7fc07a..ece0c942d 100644 --- a/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java +++ b/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java @@ -233,20 +233,17 @@ public class IrisToolbelt { return isIrisWorld(i) && access(i).isStudio(); } - public static void retainMantleDataForSlice(String className) - { + public static void retainMantleDataForSlice(String className) { toolbeltConfiguration.put("retain.mantle." + className, true); } - public static T getMantleData(World world, int x, int y, int z, Class of) - { + public static T getMantleData(World world, int x, int y, int z, Class of) { PlatformChunkGenerator e = access(world); if(e == null) {return null;} return e.getEngine().getMantle().getMantle().get(x, y - world.getMinHeight(), z, of); } - public static void deleteMantleData(World world, int x, int y, int z, Class of) - { + public static void deleteMantleData(World world, int x, int y, int z, Class of) { PlatformChunkGenerator e = access(world); if(e == null) {return;} e.getEngine().getMantle().getMantle().remove(x, y - world.getMinHeight(), z, of); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 90814f4b2..bdc0fb9c9 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -22,4 +22,4 @@ commands: aliases: [ ir, irs ] api-version: ${apiversion} hotload-dependencies: false -softdepend: [ "Oraxen", "ItemsAdder", "IrisFeller"] \ No newline at end of file +softdepend: [ "Oraxen", "ItemsAdder", "IrisFeller", "WorldEdit"] \ No newline at end of file From a1fbf254654feb11a9c27f9874173871c9375de6 Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Fri, 27 May 2022 01:54:21 +0200 Subject: [PATCH 2/3] Please don't break or leak again. --- .../com/volmit/iris/engine/IrisWorldManager.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/IrisWorldManager.java b/src/main/java/com/volmit/iris/engine/IrisWorldManager.java index 27b1d1140..e392ffb9e 100644 --- a/src/main/java/com/volmit/iris/engine/IrisWorldManager.java +++ b/src/main/java/com/volmit/iris/engine/IrisWorldManager.java @@ -79,7 +79,7 @@ import java.util.stream.Stream; public class IrisWorldManager extends EngineAssignedWorldManager { private final Looper looper; private final int id; - private final KMap chunkCooldowns; + //private final KMap chunkCooldowns; private final KList updateQueue = new KList<>(); private final ChronoLatch cl; private final ChronoLatch clw; @@ -99,7 +99,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager { ecl = null; cln = null; clw = null; - chunkCooldowns = null; + //chunkCooldowns = null; looper = null; chunkUpdater = null; id = -1; @@ -112,7 +112,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager { cl = new ChronoLatch(3000); ecl = new ChronoLatch(250); clw = new ChronoLatch(1000, true); - chunkCooldowns = new KMap<>(); + //chunkCooldowns = new KMap<>(); id = engine.getCacheID(); energy = 25; looper = new Looper() { @@ -255,13 +255,13 @@ public class IrisWorldManager extends EngineAssignedWorldManager { } } - int chunkCooldownSeconds = 60; + /*int chunkCooldownSeconds = 60; for(Long i : chunkCooldowns.k()) { if(M.ms() - chunkCooldowns.get(i) > TimeUnit.SECONDS.toMillis(chunkCooldownSeconds)) { chunkCooldowns.remove(i); } - } + }*/ int spawnBuffer = RNG.r.i(2, 12); @@ -279,7 +279,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager { } spawnIn(c, false); - chunkCooldowns.put(Cache.key(c), M.ms()); + //chunkCooldowns.put(Cache.key(c), M.ms()); } energy -= (actuallySpawned / 2D); From 9cd5c39bbed9398a201a7f58a9c8db37a2c1ad63 Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Fri, 27 May 2022 03:17:58 +0200 Subject: [PATCH 3/3] V+ --- build.gradle | 2 +- .../com/volmit/iris/engine/IrisWorldManager.java | 12 ------------ 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/build.gradle b/build.gradle index e5346f5d5..fa8ad0aa9 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ plugins { id "de.undercouch.download" version "5.0.1" } -version '2.1.1-1.18.2' // Needs to be version specific +version '2.1.2-1.18.2' // Needs to be version specific def nmsVersion = "1.18.2" def apiVersion = '1.18' def spigotJarVersion = '1.18.2-R0.1-SNAPSHOT' diff --git a/src/main/java/com/volmit/iris/engine/IrisWorldManager.java b/src/main/java/com/volmit/iris/engine/IrisWorldManager.java index e392ffb9e..9e3b9b6a3 100644 --- a/src/main/java/com/volmit/iris/engine/IrisWorldManager.java +++ b/src/main/java/com/volmit/iris/engine/IrisWorldManager.java @@ -79,7 +79,6 @@ import java.util.stream.Stream; public class IrisWorldManager extends EngineAssignedWorldManager { private final Looper looper; private final int id; - //private final KMap chunkCooldowns; private final KList updateQueue = new KList<>(); private final ChronoLatch cl; private final ChronoLatch clw; @@ -99,7 +98,6 @@ public class IrisWorldManager extends EngineAssignedWorldManager { ecl = null; cln = null; clw = null; - //chunkCooldowns = null; looper = null; chunkUpdater = null; id = -1; @@ -112,7 +110,6 @@ public class IrisWorldManager extends EngineAssignedWorldManager { cl = new ChronoLatch(3000); ecl = new ChronoLatch(250); clw = new ChronoLatch(1000, true); - //chunkCooldowns = new KMap<>(); id = engine.getCacheID(); energy = 25; looper = new Looper() { @@ -255,14 +252,6 @@ public class IrisWorldManager extends EngineAssignedWorldManager { } } - /*int chunkCooldownSeconds = 60; - - for(Long i : chunkCooldowns.k()) { - if(M.ms() - chunkCooldowns.get(i) > TimeUnit.SECONDS.toMillis(chunkCooldownSeconds)) { - chunkCooldowns.remove(i); - } - }*/ - int spawnBuffer = RNG.r.i(2, 12); Chunk[] cc = getEngine().getWorld().realWorld().getLoadedChunks(); @@ -279,7 +268,6 @@ public class IrisWorldManager extends EngineAssignedWorldManager { } spawnIn(c, false); - //chunkCooldowns.put(Cache.key(c), M.ms()); } energy -= (actuallySpawned / 2D);