Merge remote-tracking branch 'upstream/master' into DecreeCommands

This commit is contained in:
CocoTheOwner 2021-08-24 18:52:27 +02:00
commit dae6957093
10 changed files with 121 additions and 78 deletions

View File

@ -32,7 +32,7 @@ plugins {
}
group 'com.volmit.iris'
version '1.7.8'
version '1.7.8-Dumpy'
def apiVersion = '1.17'
def name = getRootProject().getName() // See settings.gradle
def main = 'com.volmit.iris.Iris'

View File

@ -107,6 +107,14 @@ public class Iris extends VolmitPlugin implements Listener {
IO.delete(new File("iris"));
installDataPacks();
fixShading();
(new Looper() {
protected long loop() {
File ff = Iris.instance.getDataFolderNoCreate("dump");
if (ff.exists() && ff.isDirectory() && ff.listFiles().length == 0)
Iris.dump();
return 10000L;
}
}).start();
}
@SuppressWarnings("unchecked")

View File

@ -59,7 +59,6 @@ import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
import org.bukkit.command.CommandSender;
import org.bukkit.generator.BlockPopulator;
import java.io.File;
import java.io.IOException;
@ -68,9 +67,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
@EqualsAndHashCode(callSuper = true)
@Data
public class IrisEngine extends BlockPopulator implements Engine {
public class IrisEngine implements Engine {
// TODO: Remove block population, stop using bukkit
private final AtomicInteger generated;
private final AtomicInteger generatedLast;
@ -460,22 +458,6 @@ public class IrisEngine extends BlockPopulator implements Engine {
return getData().getBiomeLoader().load(getDimension().getFocus());
}
// TODO: Remove block population
@ChunkCoordinates
@Override
public void populate(World world, Random random, Chunk c) {
try
{
updateChunk(c);
placeTiles(c);
}
catch(Throwable e)
{
Iris.reportError(e);
}
}
@Override
public void fail(String error, Throwable e) {
failing = true;

View File

@ -39,11 +39,13 @@ import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.scheduling.ChronoLatch;
import com.volmit.iris.util.scheduling.J;
import com.volmit.iris.util.scheduling.Looper;
import io.papermc.lib.PaperLib;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.bukkit.Chunk;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.inventory.ItemStack;
@ -64,6 +66,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
private final ChronoLatch cl;
private final ChronoLatch ecl;
private final ChronoLatch cln;
private final ChronoLatch chunkUpdater;
private long charge = 0;
private int actuallySpawned = 0;
private int cooldown = 0;
@ -76,11 +79,13 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
cln = null;
chunkCooldowns = null;
looper = null;
chunkUpdater = null;
id = -1;
}
public IrisWorldManager(Engine engine) {
super(engine);
chunkUpdater = new ChronoLatch(1000);
cln = new ChronoLatch(60000);
cl = new ChronoLatch(3000);
ecl = new ChronoLatch(250);
@ -94,6 +99,13 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
interrupt();
}
if(getEngine().getWorld().hasRealWorld())
{
if(chunkUpdater.flip())
{
updateChunks();
}
if (getDimension().isInfiniteEnergy()) {
energy += 1000;
fixEnergy();
@ -129,6 +141,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
}
onAsyncTick();
}
return 50;
}
@ -138,6 +151,16 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
looper.start();
}
private void updateChunks() {
for(Player i : getEngine().getWorld().realWorld().getPlayers())
{
J.s(() -> {
Chunk c = i.getLocation().getChunk();
J.a(() -> getEngine().updateChunk(c));
}, RNG.r.i(0, 5));
}
}
private boolean onAsyncTick() {
if (getEngine().isClosed()) {
return false;

View File

@ -21,6 +21,8 @@ package com.volmit.iris.engine.framework;
import com.volmit.iris.util.math.RNG;
import org.bukkit.Chunk;
import org.bukkit.block.data.BlockData;
import org.bukkit.generator.LimitedRegion;
import org.bukkit.generator.WorldInfo;
public interface BlockUpdater {

View File

@ -45,8 +45,10 @@ import com.volmit.iris.util.data.B;
import com.volmit.iris.util.data.DataProvider;
import com.volmit.iris.util.documentation.BlockCoordinates;
import com.volmit.iris.util.documentation.ChunkCoordinates;
import com.volmit.iris.util.format.Form;
import com.volmit.iris.util.function.Function2;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.util.mantle.Mantle;
import com.volmit.iris.util.mantle.MantleFlag;
import com.volmit.iris.util.math.BlockPosition;
import com.volmit.iris.util.math.M;
@ -57,9 +59,8 @@ import com.volmit.iris.util.scheduling.ChronoLatch;
import com.volmit.iris.util.scheduling.J;
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
import com.volmit.iris.util.stream.ProceduralStream;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.Material;
import io.papermc.lib.PaperLib;
import org.bukkit.*;
import org.bukkit.block.Biome;
import org.bukkit.block.Block;
import org.bukkit.block.data.BlockData;
@ -69,6 +70,7 @@ import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import java.awt.*;
import java.awt.Color;
import java.util.Arrays;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicBoolean;
@ -232,6 +234,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
@ChunkCoordinates
@Override
default void updateChunk(Chunk c) {
getMantle().getMantle().raiseFlag(c.getX(), c.getZ(), MantleFlag.UPDATE, () -> J.s(() -> {
PrecisionStopwatch p = PrecisionStopwatch.start();
getMantle().getMantle().iterateChunk(c.getX(), c.getZ(), Boolean.class, (x, y, z, v) -> {
if (v != null && v) {
@ -245,6 +248,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
}
});
getMetrics().getUpdates().put(p.getMilliseconds());
}));
}
@BlockCoordinates
@ -389,11 +393,37 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
items.addAll(i.getLoot(debug, items.isEmpty(), rng, slot, x, y, z, b + b, mgf + b));
}
if(PaperLib.isPaper() && getWorld().hasRealWorld())
{
PaperLib.getChunkAtAsync(getWorld().realWorld(), x >> 4, z >> 4).thenAccept((c) -> {
Runnable r = () -> {
for (ItemStack i : items) {
inv.addItem(i);
}
scramble(inv, rng);
};
if(Bukkit.isPrimaryThread())
{
r.run();
}
else
{
J.s(r);
}
});
}
else
{
for (ItemStack i : items) {
inv.addItem(i);
}
scramble(inv, rng);
}
}
EngineEffects getEffects();

View File

@ -136,7 +136,6 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun
engine = new IrisEngine(new EngineTarget(world, dimension, data), studio);
populators.clear();
populators.add((BlockPopulator) engine);
}
@Override

View File

@ -46,7 +46,6 @@ public class B {
private static final IntSet storageCache = buildStorageCache();
private static final IntSet storageChestCache = buildStorageChestCache();
private static final IntSet litCache = buildLitCache();
private static final KMap<String, BlockData> blockDataCache = new KMap<>();
private static final ChronoLatch clw = new ChronoLatch(1000);
private static IntSet buildFoliageCache() {
@ -346,12 +345,6 @@ public class B {
private static BlockData parseBlockData(String ix) {
try {
BlockData bb = blockDataCache.get(ix);
if (bb != null) {
return bb;
}
BlockData bx = null;
if (ix.startsWith("oraxen:") && Iris.linkOraxen.supported()) {
@ -368,7 +361,6 @@ public class B {
((Leaves) bx).setPersistent(false);
}
blockDataCache.put(ix, bx);
return bx;
} catch (Throwable e) {
if(clw.flip())
@ -420,9 +412,7 @@ public class B {
Iris.debug("Converting " + ix + " to " + newBlock);
try {
BlockData bd = Bukkit.createBlockData(newBlock);
blockDataCache.put(ix, bd);
return bd;
return Bukkit.createBlockData(newBlock);
} catch (Throwable e1) {
Iris.reportError(e1);
}

View File

@ -473,8 +473,7 @@ public class Mantle {
* @return the file
*/
public static File fileForRegion(File folder, Long key) {
String id = UUID.nameUUIDFromBytes(("TectonicPlate:" + key).getBytes(StandardCharsets.UTF_8)).toString();
File f = new File(folder, id.substring(0, 2) + "/" + id.split("\\Q-\\E")[3] + "/" + id + ".ttp");
File f = new File(folder, "p." + key + ".ttp");
if(!f.getParentFile().exists())
{
f.getParentFile().mkdirs();

View File

@ -513,6 +513,16 @@ public abstract class VolmitPlugin extends JavaPlugin implements Listener {
return f;
}
public File getDataFolderNoCreate(String... strings) {
if (strings.length == 0) {
return super.getDataFolder();
}
File f = new File(getDataFolder(), new KList<>(strings).toString(File.separator));
return f;
}
public File getDataFolderList(String pre, String[] strings) {
KList<String> v = new KList<>(strings);
v.add(0, pre);