Instant changes

This commit is contained in:
Daniel Mills 2020-09-09 00:29:22 -04:00
parent 1d11585fcd
commit 8ffe6fa8fb
36 changed files with 298 additions and 65 deletions

11
pom.xml
View File

@ -152,6 +152,10 @@
<id>CodeMC</id>
<url>https://repo.codemc.org/repository/maven-public</url>
</repository>
<repository>
<id>WorldEdit</id>
<url>https://maven.enginehub.org/repo/</url>
</repository>
</repositories>
<dependencies>
<!-- Spigot API -->
@ -186,6 +190,13 @@
<version>1.14.4</version>
<scope>provided</scope>
</dependency>
<!-- Hooks -->
<dependency>
<groupId>com.sk89q.worldedit</groupId>
<artifactId>worldedit-bukkit</artifactId>
<version>7.2.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<!-- Utilities -->
<dependency>
<groupId>org.bstats</groupId>

View File

@ -1,21 +0,0 @@
package com.volmit.iris;
import org.bukkit.generator.ChunkGenerator.BiomeGrid;
import org.bukkit.generator.ChunkGenerator.ChunkData;
import com.volmit.iris.util.ChunkPosition;
import lombok.Data;
@Data
public class GeneratedChunk
{
private ChunkPosition pos;
private ChunkData data;
private BiomeGrid grid;
public GeneratedChunk(ChunkPosition pos)
{
this.pos = pos;
}
}

View File

@ -23,6 +23,13 @@ import com.volmit.iris.gen.provisions.ProvisionBukkit;
import com.volmit.iris.gen.scaffold.IrisGenConfiguration;
import com.volmit.iris.gen.scaffold.TerrainTarget;
import com.volmit.iris.link.MultiverseCoreLink;
import com.volmit.iris.manager.EditManager;
import com.volmit.iris.manager.IrisBoardManager;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.manager.IrisHotloadManager;
import com.volmit.iris.manager.ProjectManager;
import com.volmit.iris.manager.StructureManager;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.C;
import com.volmit.iris.util.Form;
import com.volmit.iris.util.GroupedExecutor;
@ -44,6 +51,7 @@ public class Iris extends MortarPlugin
public static IrisHotloadManager hotloader;
public static WandManager wand;
public static StructureManager struct;
public static EditManager edit;
public static IrisBoardManager board;
public static String nmsTag = findNMSTag();
public static MultiverseCoreLink linkMultiverseCore;
@ -141,6 +149,7 @@ public class Iris extends MortarPlugin
proj = new ProjectManager();
board = new IrisBoardManager();
linkMultiverseCore = new MultiverseCoreLink();
edit = new EditManager();
J.a(() -> IO.delete(getTemp()));
J.a(() -> bstats());
J.s(this::splash, 20);

View File

@ -11,13 +11,13 @@ import org.zeroturnaround.zip.ZipUtil;
import org.zeroturnaround.zip.commons.FileUtils;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisDataManager;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.gen.IrisTerrainProvider;
import com.volmit.iris.gen.nms.NMSCreator;
import com.volmit.iris.gen.provisions.ProvisionBukkit;
import com.volmit.iris.gen.scaffold.IrisGenConfiguration;
import com.volmit.iris.gen.scaffold.TerrainTarget;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.util.Form;
import com.volmit.iris.util.IO;

View File

@ -4,9 +4,9 @@ import org.bukkit.World;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisMetrics;
import com.volmit.iris.gen.IrisTerrainProvider;
import com.volmit.iris.gen.provisions.ProvisionBukkit;
import com.volmit.iris.gen.scaffold.IrisMetrics;
import com.volmit.iris.util.C;
import com.volmit.iris.util.Form;
import com.volmit.iris.util.MortarCommand;

View File

@ -6,7 +6,7 @@ import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.WandManager;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.Cuboid;
import com.volmit.iris.util.Direction;
import com.volmit.iris.util.MortarCommand;

View File

@ -6,7 +6,7 @@ import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.WandManager;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.Cuboid;
import com.volmit.iris.util.Direction;
import com.volmit.iris.util.MortarCommand;

View File

@ -9,7 +9,7 @@ import org.bukkit.inventory.ItemStack;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.WandManager;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;

View File

@ -9,7 +9,7 @@ import org.bukkit.inventory.ItemStack;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.WandManager;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;

View File

@ -11,7 +11,7 @@ import org.bukkit.inventory.ItemStack;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.WandManager;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.object.IrisObject;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;

View File

@ -8,7 +8,7 @@ import org.bukkit.inventory.ItemStack;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.WandManager;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.object.IrisObject;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;

View File

@ -6,7 +6,7 @@ import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.WandManager;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.Cuboid;
import com.volmit.iris.util.Direction;
import com.volmit.iris.util.MortarCommand;

View File

@ -4,7 +4,7 @@ import org.bukkit.Sound;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.WandManager;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;

View File

@ -8,7 +8,7 @@ import org.bukkit.util.Vector;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.WandManager;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.Cuboid;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;

View File

@ -8,7 +8,7 @@ import org.bukkit.util.Vector;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.WandManager;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.Cuboid;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;

View File

@ -4,9 +4,9 @@ import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.structure.StructureTemplate;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import com.volmit.iris.util.StructureTemplate;
public class CommandIrisStructureClose extends MortarCommand
{

View File

@ -4,9 +4,9 @@ import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.structure.StructureTemplate;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import com.volmit.iris.util.StructureTemplate;
public class CommandIrisStructureCreate extends MortarCommand
{

View File

@ -4,9 +4,9 @@ import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.structure.StructureTemplate;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import com.volmit.iris.util.StructureTemplate;
public class CommandIrisStructureExpand extends MortarCommand
{

View File

@ -4,9 +4,9 @@ import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.structure.StructureTemplate;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import com.volmit.iris.util.StructureTemplate;
public class CommandIrisStructureMore extends MortarCommand
{

View File

@ -5,9 +5,9 @@ import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.object.IrisStructure;
import com.volmit.iris.structure.StructureTemplate;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import com.volmit.iris.util.StructureTemplate;
public class CommandIrisStructureOpen extends MortarCommand
{

View File

@ -4,9 +4,9 @@ import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.structure.StructureTemplate;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import com.volmit.iris.util.StructureTemplate;
public class CommandIrisStructureSave extends MortarCommand
{

View File

@ -0,0 +1,17 @@
package com.volmit.iris.edit;
import java.io.Closeable;
import org.bukkit.block.data.BlockData;
public interface BlockEditor extends Closeable
{
public long last();
public void set(int x, int y, int z, BlockData d);
public BlockData get(int x, int y, int z);
@Override
public void close();
}

View File

@ -0,0 +1,40 @@
package com.volmit.iris.edit;
import org.bukkit.World;
import org.bukkit.block.data.BlockData;
import com.volmit.iris.util.M;
public class BukkitBlockEditor implements BlockEditor
{
private final World world;
public BukkitBlockEditor(World world)
{
this.world = world;
}
@Override
public void set(int x, int y, int z, BlockData d)
{
world.getBlockAt(x, y, z).setBlockData(d, false);
}
@Override
public BlockData get(int x, int y, int z)
{
return world.getBlockAt(x, y, z).getBlockData();
}
@Override
public void close()
{
}
@Override
public long last()
{
return M.ms();
}
}

View File

@ -0,0 +1,51 @@
package com.volmit.iris.edit;
import org.bukkit.World;
import org.bukkit.block.data.BlockData;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.math.BlockVector3;
import com.volmit.iris.util.M;
public class WEBlockEditor implements BlockEditor
{
private final World world;
private final EditSession es;
private long last;
public WEBlockEditor(World world)
{
last = M.ms();
this.world = world;
es = WorldEdit.getInstance().newEditSessionBuilder().world(BukkitAdapter.adapt(world)).build();
}
@Override
public void set(int x, int y, int z, BlockData d)
{
last = M.ms();
es.rawSetBlock(BlockVector3.at(x, y, z), BukkitAdapter.adapt(d));
world.getBlockAt(x, y, z).setBlockData(d, false);
}
@Override
public BlockData get(int x, int y, int z)
{
return world.getBlockAt(x, y, z).getBlockData();
}
@Override
public void close()
{
es.close();
return;
}
@Override
public long last()
{
return last;
}
}

View File

@ -22,14 +22,14 @@ import org.bukkit.event.world.ChunkUnloadEvent;
import org.bukkit.event.world.WorldUnloadEvent;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisContext;
import com.volmit.iris.IrisDataManager;
import com.volmit.iris.IrisMetrics;
import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.gen.atomics.AtomicMulticache;
import com.volmit.iris.gen.scaffold.IrisContext;
import com.volmit.iris.gen.scaffold.IrisMetrics;
import com.volmit.iris.gen.scaffold.TerrainChunk;
import com.volmit.iris.gen.scaffold.TerrainProvider;
import com.volmit.iris.gen.scaffold.TerrainTarget;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.noise.CNG;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisDimension;

View File

@ -14,9 +14,9 @@ import org.bukkit.event.entity.EntitySpawnEvent;
import org.bukkit.inventory.ItemStack;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisContext;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.gen.atomics.AtomicRegionData;
import com.volmit.iris.gen.scaffold.IrisContext;
import com.volmit.iris.gen.scaffold.IrisGenConfiguration;
import com.volmit.iris.gen.scaffold.TerrainChunk;
import com.volmit.iris.gen.scaffold.TerrainTarget;

View File

@ -1,6 +1,5 @@
package com.volmit.iris;
package com.volmit.iris.gen.scaffold;
import com.volmit.iris.gen.scaffold.TerrainTarget;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.object.IrisRegion;

View File

@ -1,5 +1,6 @@
package com.volmit.iris;
package com.volmit.iris.gen.scaffold;
import com.volmit.iris.Iris;
import com.volmit.iris.util.RollingSequence;
import lombok.Data;

View File

@ -0,0 +1,81 @@
package com.volmit.iris.manager;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.block.data.BlockData;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.world.WorldUnloadEvent;
import com.volmit.iris.Iris;
import com.volmit.iris.edit.BlockEditor;
import com.volmit.iris.edit.BukkitBlockEditor;
import com.volmit.iris.edit.WEBlockEditor;
import com.volmit.iris.util.KMap;
import com.volmit.iris.util.M;
public class EditManager implements Listener
{
private KMap<World, BlockEditor> editors;
public EditManager()
{
this.editors = new KMap<>();
Iris.instance.registerListener(this);
Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, this::update, 0, 20);
}
public BlockData get(World world, int x, int y, int z)
{
return open(world).get(x, y, z);
}
public void set(World world, int x, int y, int z, BlockData d)
{
open(world).set(x, y, z, d);
}
@EventHandler
public void on(WorldUnloadEvent e)
{
if(editors.containsKey(e.getWorld()))
{
editors.remove(e.getWorld()).close();
}
}
public void update()
{
for(World i : editors.k())
{
if(M.ms() - editors.get(i).last() > 1000)
{
editors.remove(i).close();
}
}
}
public BlockEditor open(World world)
{
if(editors.containsKey(world))
{
return editors.get(world);
}
BlockEditor e = null;
if(Bukkit.getPluginManager().isPluginEnabled("WorldEdit"))
{
e = new WEBlockEditor(world);
}
else
{
e = new BukkitBlockEditor(world);
}
editors.put(world, e);
return e;
}
}

View File

@ -1,4 +1,4 @@
package com.volmit.iris;
package com.volmit.iris.manager;
import java.util.List;
@ -8,6 +8,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerChangedWorldEvent;
import com.volmit.iris.Iris;
import com.volmit.iris.gen.IrisTerrainProvider;
import com.volmit.iris.gen.provisions.ProvisionBukkit;
import com.volmit.iris.noise.CNG;

View File

@ -1,4 +1,4 @@
package com.volmit.iris;
package com.volmit.iris.manager;
import java.io.File;

View File

@ -1,10 +1,13 @@
package com.volmit.iris;
package com.volmit.iris.manager;
import java.io.File;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.gen.scaffold.IrisContext;
import com.volmit.iris.util.ChronoLatch;
import com.volmit.iris.util.FolderWatcher;
import com.volmit.iris.util.J;

View File

@ -1,4 +1,4 @@
package com.volmit.iris;
package com.volmit.iris.manager;
import java.awt.Desktop;
import java.awt.GraphicsEnvironment;
@ -26,6 +26,8 @@ import org.zeroturnaround.zip.commons.FileUtils;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.gen.IrisTerrainProvider;
import com.volmit.iris.gen.nms.NMSCreator;
import com.volmit.iris.gen.provisions.ProvisionBukkit;

View File

@ -1,9 +1,9 @@
package com.volmit.iris;
package com.volmit.iris.manager;
import org.bukkit.entity.Player;
import com.volmit.iris.structure.StructureTemplate;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.StructureTemplate;
public class StructureManager
{

View File

@ -1,4 +1,4 @@
package com.volmit.iris;
package com.volmit.iris.manager;
import java.awt.Color;
import java.util.Iterator;
@ -22,6 +22,7 @@ import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.util.BlockVector;
import org.bukkit.util.Vector;
import com.volmit.iris.Iris;
import com.volmit.iris.object.IrisObject;
import com.volmit.iris.util.C;
import com.volmit.iris.util.Cuboid;

View File

@ -1,4 +1,4 @@
package com.volmit.iris.util;
package com.volmit.iris.structure;
import java.io.File;
import java.util.Iterator;
@ -38,6 +38,23 @@ import com.volmit.iris.object.IrisStructureTile;
import com.volmit.iris.object.NoiseStyle;
import com.volmit.iris.object.StructureTileCondition;
import com.volmit.iris.object.TileResult;
import com.volmit.iris.util.B;
import com.volmit.iris.util.C;
import com.volmit.iris.util.ChronoLatch;
import com.volmit.iris.util.Cuboid;
import com.volmit.iris.util.Form;
import com.volmit.iris.util.IO;
import com.volmit.iris.util.IObjectPlacer;
import com.volmit.iris.util.J;
import com.volmit.iris.util.JSONObject;
import com.volmit.iris.util.KMap;
import com.volmit.iris.util.MaterialBlock;
import com.volmit.iris.util.RNG;
import com.volmit.iris.util.UIElement;
import com.volmit.iris.util.UIStaticDecorator;
import com.volmit.iris.util.UIWindow;
import com.volmit.iris.util.Window;
import com.volmit.iris.util.WindowResolution;
import lombok.Data;
@ -64,6 +81,7 @@ public class StructureTemplate implements Listener, IObjectPlacer
private KMap<Location, Runnable> updates = new KMap<>();
private File folder;
private CNG variants;
private boolean quiet = true;
private KMap<Location, Integer> forceVariant = new KMap<>();
public StructureTemplate(String name, String dimension, Player worker, Location c, int size, int w, int h, boolean use3d)
@ -74,7 +92,7 @@ public class StructureTemplate implements Listener, IObjectPlacer
folder = Iris.instance.getDataFolder("packs", dimension);
gLatch = new ChronoLatch(250);
focus = center;
dirtyLatch = new ChronoLatch(2350);
dirtyLatch = new ChronoLatch(250);
task = Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, this::tick, 0, 0);
this.world = c.getWorld();
this.center = c.clone();
@ -143,6 +161,8 @@ public class StructureTemplate implements Listener, IObjectPlacer
{
Iris.info("Loading existing structure");
// TODO load input properties
for(IrisStructureTile i : structure.getTiles().copy())
{
String realType = i.getForceObjects().get(1).getLoadKey().replaceAll("\\Q-1\\E", "");
@ -354,11 +374,15 @@ public class StructureTemplate implements Listener, IObjectPlacer
if(dirtyLatch.couldFlip())
{
int u = 3;
while(updates.size() > 0 && u-- > 0)
{
runClosestTo();
}
updateAll();
}
}
public void updateAll()
{
while(updates.size() > 0)
{
runClosestTo();
}
}
@ -386,6 +410,11 @@ public class StructureTemplate implements Listener, IObjectPlacer
}
private void mod(Location l)
{
mod(l, true);
}
private void mod(Location l, boolean u)
{
if(!isWithinBounds(l))
{
@ -538,8 +567,11 @@ public class StructureTemplate implements Listener, IObjectPlacer
}
r.getTile().getForceObjects().get(getVariant(c, r.getTile())).place(bottomCenter.getBlockX(), bottomCenter.getBlockY(), bottomCenter.getBlockZ(), this, r.getPlacement(), rng);
center.getWorld().playSound(center, Sound.BLOCK_ANCIENT_DEBRIS_BREAK, 1f, 0.35f);
center.getWorld().spawnParticle(Particle.FLASH, center.getX(), center.getY(), center.getZ(), 1);
if(!quiet)
{
center.getWorld().playSound(center, Sound.ENTITY_SHULKER_BULLET_HIT, 1f, 1.6f);
center.getWorld().spawnParticle(Particle.FLASH, center.getX(), center.getY(), center.getZ(), 1);
}
}
public boolean isWithinBounds(Location l)
@ -774,7 +806,7 @@ public class StructureTemplate implements Listener, IObjectPlacer
return;
}
world.getBlockAt(x, y, z).setBlockData(d, false);
Iris.edit.set(world, x, y, z, d);
}
@Override
@ -1068,7 +1100,10 @@ public class StructureTemplate implements Listener, IObjectPlacer
@EventHandler
public void on(BlockBreakEvent e)
{
Bukkit.getScheduler().scheduleSyncDelayedTask(Iris.instance, () -> mod(e.getBlock().getLocation()), 5);
quiet = false;
mod(e.getBlock().getLocation(), false);
updateAll();
quiet = true;
}
@EventHandler
@ -1134,7 +1169,10 @@ public class StructureTemplate implements Listener, IObjectPlacer
@EventHandler
public void on(BlockPlaceEvent e)
{
Bukkit.getScheduler().scheduleSyncDelayedTask(Iris.instance, () -> mod(e.getBlock().getLocation()), 5);
quiet = false;
mod(e.getBlock().getLocation(), false);
updateAll();
quiet = true;
}
public void more()