mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-07-20 22:00:48 +00:00
Eviction Seams
This commit is contained in:
@@ -39,9 +39,11 @@ import art.arcane.iris.core.pack.PackValidationRegistry;
|
||||
import art.arcane.iris.core.pack.PackValidationResult;
|
||||
import art.arcane.iris.core.pack.PackValidator;
|
||||
import art.arcane.iris.core.gui.PregeneratorJob;
|
||||
import art.arcane.iris.core.service.EditSVC;
|
||||
import art.arcane.iris.core.service.StudioSVC;
|
||||
import art.arcane.iris.core.tools.IrisToolbelt;
|
||||
import art.arcane.iris.engine.EnginePanic;
|
||||
import art.arcane.iris.engine.framework.BlockEditAccess;
|
||||
import art.arcane.iris.engine.framework.Engine;
|
||||
import art.arcane.iris.engine.object.IrisCompat;
|
||||
import art.arcane.iris.engine.object.IrisDimension;
|
||||
@@ -577,6 +579,7 @@ public class Iris extends VolmitPlugin implements Listener, ReloadAware {
|
||||
services.put((Class<? extends IrisService>) i.getClass(), (IrisService) i);
|
||||
IrisServices.register(i.getClass(), i);
|
||||
});
|
||||
IrisServices.register(BlockEditAccess.class, services.get(EditSVC.class));
|
||||
IO.delete(new File("iris"));
|
||||
compat = IrisCompat.configured(getDataFile("compat.json"));
|
||||
IrisServices.register(IrisCompat.class, compat);
|
||||
@@ -584,7 +587,9 @@ public class Iris extends VolmitPlugin implements Listener, ReloadAware {
|
||||
validateAllPacks();
|
||||
IrisSafeguard.execute();
|
||||
getSender().setTag(getTag());
|
||||
IrisSafeguard.splash();
|
||||
splash();
|
||||
IrisSafeguard.printReports();
|
||||
IrisSafeguard.printFooter();
|
||||
tickets = new ChunkTickets();
|
||||
linkMultiverseCore = new MultiverseCoreLink();
|
||||
IrisServices.register(MultiverseCoreLink.class, linkMultiverseCore);
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
package art.arcane.iris.core.events;
|
||||
|
||||
import art.arcane.iris.Iris;
|
||||
import art.arcane.iris.engine.framework.Engine;
|
||||
import art.arcane.iris.engine.object.InventorySlotType;
|
||||
import art.arcane.iris.engine.object.IrisLootTable;
|
||||
import art.arcane.iris.platform.bukkit.BukkitPlatform;
|
||||
import art.arcane.iris.spi.IrisLogging;
|
||||
import art.arcane.volmlib.util.collection.KList;
|
||||
import art.arcane.iris.util.common.scheduling.J;
|
||||
import lombok.Getter;
|
||||
@@ -32,7 +33,7 @@ public class IrisLootEvent extends Event {
|
||||
@NotNull
|
||||
@Override
|
||||
public NamespacedKey getKey() {
|
||||
return new NamespacedKey(Iris.instance, "empty");
|
||||
return new NamespacedKey(BukkitPlatform.plugin(), "empty");
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -103,13 +104,13 @@ public class IrisLootEvent extends Event {
|
||||
LootContext context = new LootContext.Builder(loc).build();
|
||||
LootGenerateEvent event = new LootGenerateEvent(world, null, holder, EMPTY, context, loot, true);
|
||||
if (!Bukkit.isPrimaryThread()) {
|
||||
Iris.warn("LootGenerateEvent was not called on the main thread, please report this issue.");
|
||||
IrisLogging.warn("LootGenerateEvent was not called on the main thread, please report this issue.");
|
||||
Thread.dumpStack();
|
||||
J.sfut(() -> {
|
||||
try {
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
} catch (Throwable e) {
|
||||
Iris.reportError("LootGenerateEvent dispatch failed at "
|
||||
IrisLogging.reportError("LootGenerateEvent dispatch failed at "
|
||||
+ world.getName() + " [" + x + "," + y + "," + z + "].", e);
|
||||
if (e instanceof RuntimeException runtimeException) {
|
||||
throw runtimeException;
|
||||
@@ -124,7 +125,7 @@ public class IrisLootEvent extends Event {
|
||||
try {
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
} catch (Throwable e) {
|
||||
Iris.reportError("LootGenerateEvent dispatch failed at "
|
||||
IrisLogging.reportError("LootGenerateEvent dispatch failed at "
|
||||
+ world.getName() + " [" + x + "," + y + "," + z + "].", e);
|
||||
if (e instanceof RuntimeException runtimeException) {
|
||||
throw runtimeException;
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
package art.arcane.iris.core.gui;
|
||||
|
||||
import art.arcane.iris.Iris;
|
||||
import art.arcane.iris.core.gui.components.IrisRenderer;
|
||||
import art.arcane.iris.core.gui.components.RenderType;
|
||||
import art.arcane.iris.engine.framework.render.IrisRenderer;
|
||||
import art.arcane.iris.engine.framework.render.RenderType;
|
||||
import art.arcane.iris.core.tools.IrisToolbelt;
|
||||
import art.arcane.iris.engine.IrisComplex;
|
||||
import art.arcane.iris.engine.framework.Engine;
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package art.arcane.iris.core.safeguard;
|
||||
|
||||
import art.arcane.iris.Iris;
|
||||
import art.arcane.iris.core.safeguard.task.Diagnostic;
|
||||
import art.arcane.iris.core.safeguard.task.Task;
|
||||
import art.arcane.iris.core.safeguard.task.Tasks;
|
||||
import art.arcane.iris.core.safeguard.task.ValueWithDiagnostics;
|
||||
import art.arcane.iris.spi.IrisLogging;
|
||||
import art.arcane.iris.util.common.format.C;
|
||||
import art.arcane.iris.util.common.scheduling.J;
|
||||
|
||||
@@ -38,7 +38,7 @@ public final class IrisSafeguard {
|
||||
try {
|
||||
result = task.run();
|
||||
} catch (Throwable e) {
|
||||
Iris.reportError(e);
|
||||
IrisLogging.reportError(e);
|
||||
result = new ValueWithDiagnostics<>(
|
||||
Mode.WARNING,
|
||||
new Diagnostic(Diagnostic.Logger.ERROR, "Error while running task " + task.getId(), e)
|
||||
@@ -80,17 +80,11 @@ public final class IrisSafeguard {
|
||||
return attachment;
|
||||
}
|
||||
|
||||
public static void splash() {
|
||||
Iris.instance.splash();
|
||||
printReports();
|
||||
printFooter();
|
||||
}
|
||||
|
||||
public static void printReports() {
|
||||
switch (mode) {
|
||||
case STABLE -> Iris.info(C.BLUE + "0 Conflicts found");
|
||||
case WARNING -> Iris.warn(C.GOLD + "%s Issues found", count);
|
||||
case UNSTABLE -> Iris.error(C.DARK_RED + "%s Issues found", count);
|
||||
case STABLE -> IrisLogging.info(C.BLUE + "0 Conflicts found");
|
||||
case WARNING -> IrisLogging.warn(C.GOLD + "%s Issues found", count);
|
||||
case UNSTABLE -> IrisLogging.error(C.DARK_RED + "%s Issues found", count);
|
||||
}
|
||||
|
||||
for (ValueWithDiagnostics<Mode> value : results.values()) {
|
||||
@@ -100,7 +94,7 @@ public final class IrisSafeguard {
|
||||
|
||||
public static void printFooter() {
|
||||
switch (mode) {
|
||||
case STABLE -> Iris.info(C.BLUE + "Iris is running Stable");
|
||||
case STABLE -> IrisLogging.info(C.BLUE + "Iris is running Stable");
|
||||
case WARNING -> warning();
|
||||
case UNSTABLE -> unstable();
|
||||
}
|
||||
@@ -111,19 +105,19 @@ public final class IrisSafeguard {
|
||||
}
|
||||
|
||||
private static void warning() {
|
||||
Iris.warn(C.GOLD + "Iris is running in Warning Mode");
|
||||
Iris.warn(C.GRAY + "Some startup checks need attention. Review the messages above for tuning suggestions.");
|
||||
Iris.warn(C.GRAY + "Iris will continue startup normally.");
|
||||
Iris.warn("");
|
||||
IrisLogging.warn(C.GOLD + "Iris is running in Warning Mode");
|
||||
IrisLogging.warn(C.GRAY + "Some startup checks need attention. Review the messages above for tuning suggestions.");
|
||||
IrisLogging.warn(C.GRAY + "Iris will continue startup normally.");
|
||||
IrisLogging.warn("");
|
||||
}
|
||||
|
||||
private static void unstable() {
|
||||
Iris.error(C.DARK_RED + "Iris is running in Danger Mode");
|
||||
Iris.error("");
|
||||
Iris.error(C.DARK_GRAY + "--==<" + C.RED + " IMPORTANT " + C.DARK_GRAY + ">==--");
|
||||
Iris.error("Critical startup checks failed. Iris will continue startup in 10 seconds.");
|
||||
Iris.error("Review and resolve the errors above as soon as possible.");
|
||||
IrisLogging.error(C.DARK_RED + "Iris is running in Danger Mode");
|
||||
IrisLogging.error("");
|
||||
IrisLogging.error(C.DARK_GRAY + "--==<" + C.RED + " IMPORTANT " + C.DARK_GRAY + ">==--");
|
||||
IrisLogging.error("Critical startup checks failed. Iris will continue startup in 10 seconds.");
|
||||
IrisLogging.error("Review and resolve the errors above as soon as possible.");
|
||||
J.sleep(10000L);
|
||||
Iris.info("");
|
||||
IrisLogging.info("");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
package art.arcane.iris.core.safeguard;
|
||||
|
||||
import art.arcane.iris.BuildConstants;
|
||||
import art.arcane.iris.Iris;
|
||||
import art.arcane.iris.core.IrisSettings;
|
||||
import art.arcane.iris.platform.bukkit.BukkitPlatform;
|
||||
import art.arcane.iris.spi.IrisLogging;
|
||||
import art.arcane.iris.util.common.format.C;
|
||||
import art.arcane.volmlib.util.format.Form;
|
||||
import org.bukkit.Bukkit;
|
||||
@@ -63,7 +64,7 @@ public enum Mode {
|
||||
public void splash() {
|
||||
String padd = Form.repeat(" ", 4);
|
||||
String padd2 = Form.repeat(" ", 4);
|
||||
String version = Iris.instance.getDescription().getVersion();
|
||||
String version = BukkitPlatform.plugin().getDescription().getVersion();
|
||||
String releaseTrain = getReleaseTrain(version);
|
||||
String serverVersion = getServerVersion();
|
||||
String startupDate = getStartupDate();
|
||||
@@ -90,7 +91,7 @@ public enum Mode {
|
||||
builder.append(padd).append(splash[i]).append(info[i]).append("\n");
|
||||
}
|
||||
|
||||
Iris.info(builder.toString());
|
||||
IrisLogging.info(builder.toString());
|
||||
}
|
||||
|
||||
private String[] renderSplashLogo() {
|
||||
|
||||
@@ -21,6 +21,7 @@ package art.arcane.iris.core.service;
|
||||
import art.arcane.iris.Iris;
|
||||
import art.arcane.iris.core.edit.BlockEditor;
|
||||
import art.arcane.iris.core.edit.BukkitBlockEditor;
|
||||
import art.arcane.iris.engine.framework.BlockEditAccess;
|
||||
import art.arcane.volmlib.util.collection.KMap;
|
||||
import art.arcane.volmlib.util.math.M;
|
||||
import art.arcane.iris.util.common.plugin.IrisService;
|
||||
@@ -31,7 +32,7 @@ import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.world.WorldUnloadEvent;
|
||||
|
||||
public class EditSVC implements IrisService {
|
||||
public class EditSVC implements IrisService, BlockEditAccess<World, BlockData, Biome> {
|
||||
private KMap<World, BlockEditor> editors;
|
||||
private int updateTaskId = -1;
|
||||
public static boolean deletingWorld = false;
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Iris is a World Generator for Minecraft Bukkit Servers
|
||||
* Copyright (c) 2026 Arcane Arts (Volmit Software)
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package art.arcane.iris.engine.framework;
|
||||
|
||||
public interface BlockEditAccess<W, B, M> {
|
||||
B get(W world, int x, int y, int z);
|
||||
|
||||
void set(W world, int x, int y, int z, B block);
|
||||
|
||||
M getBiome(W world, int x, int y, int z);
|
||||
|
||||
void setBiome(W world, int x, int y, int z, M biome);
|
||||
}
|
||||
@@ -21,8 +21,8 @@ package art.arcane.iris.engine.framework;
|
||||
import art.arcane.iris.spi.IrisServices;
|
||||
import art.arcane.iris.core.IrisSettings;
|
||||
import art.arcane.iris.core.events.IrisLootEvent;
|
||||
import art.arcane.iris.core.gui.components.RenderType;
|
||||
import art.arcane.iris.core.gui.components.Renderer;
|
||||
import art.arcane.iris.engine.framework.render.RenderType;
|
||||
import art.arcane.iris.engine.framework.render.Renderer;
|
||||
import art.arcane.iris.core.gui.PregeneratorJob;
|
||||
import art.arcane.iris.core.link.Identifier;
|
||||
import art.arcane.iris.core.loader.IrisData;
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package art.arcane.iris.core.gui.components;
|
||||
package art.arcane.iris.engine.framework.render;
|
||||
|
||||
import art.arcane.iris.engine.framework.Engine;
|
||||
import art.arcane.iris.engine.object.IrisBiome;
|
||||
+1
-1
@@ -16,7 +16,7 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package art.arcane.iris.core.gui.components;
|
||||
package art.arcane.iris.engine.framework.render;
|
||||
|
||||
public enum RenderType {
|
||||
BIOME, BIOME_LAND, BIOME_SEA, REGION, CAVE_LAND, HEIGHT, OBJECT_LOAD, DECORATOR_LOAD, CONTINENT, LAYER_LOAD
|
||||
+1
-1
@@ -16,7 +16,7 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package art.arcane.iris.core.gui.components;
|
||||
package art.arcane.iris.engine.framework.render;
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
package art.arcane.iris.engine.object;
|
||||
|
||||
import art.arcane.iris.core.gui.components.RenderType;
|
||||
import art.arcane.iris.engine.framework.render.RenderType;
|
||||
import art.arcane.iris.core.loader.IrisData;
|
||||
import art.arcane.iris.core.loader.IrisRegistrant;
|
||||
import art.arcane.iris.engine.IrisComplex;
|
||||
|
||||
@@ -137,7 +137,6 @@ public class IrisLoot {
|
||||
is.setItemMeta(applyProperties(is, rng, debug, table));
|
||||
return BukkitPlatform.applyCustomNbt(is, customNbt);
|
||||
} catch (Throwable e) {
|
||||
//Iris.reportError(e);
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
package art.arcane.iris.engine.object;
|
||||
|
||||
import art.arcane.iris.core.gui.components.RenderType;
|
||||
import art.arcane.iris.engine.framework.render.RenderType;
|
||||
import art.arcane.iris.core.loader.IrisData;
|
||||
import art.arcane.iris.spi.IrisLogging;
|
||||
import art.arcane.iris.spi.PlatformBlockState;
|
||||
|
||||
@@ -18,20 +18,27 @@
|
||||
|
||||
package art.arcane.iris.util.project.hunk.view;
|
||||
|
||||
import art.arcane.iris.engine.framework.BlockEditAccess;
|
||||
import art.arcane.iris.spi.IrisServices;
|
||||
import art.arcane.iris.core.service.EditSVC;
|
||||
import art.arcane.iris.platform.bukkit.BukkitBiome;
|
||||
import art.arcane.iris.spi.PlatformBiome;
|
||||
import art.arcane.iris.util.project.hunk.Hunk;
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
|
||||
@SuppressWarnings("ClassCanBeRecord")
|
||||
public class ChunkBiomeHunkView extends art.arcane.volmlib.util.hunk.view.ChunkWorldHunkView<PlatformBiome> implements Hunk<PlatformBiome> {
|
||||
public ChunkBiomeHunkView(Chunk chunk) {
|
||||
super(chunk,
|
||||
chunk.getWorld().getMaxHeight(),
|
||||
(wx, y, wz, t) -> IrisServices.get(EditSVC.class).setBiome(chunk.getWorld(), wx, y, wz, (Biome) t.nativeHandle()),
|
||||
(wx, y, wz) -> BukkitBiome.of(IrisServices.get(EditSVC.class).getBiome(chunk.getWorld(), wx, y, wz)));
|
||||
(wx, y, wz, t) -> edits().setBiome(chunk.getWorld(), wx, y, wz, (Biome) t.nativeHandle()),
|
||||
(wx, y, wz) -> BukkitBiome.of(edits().getBiome(chunk.getWorld(), wx, y, wz)));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static BlockEditAccess<World, BlockData, Biome> edits() {
|
||||
return (BlockEditAccess<World, BlockData, Biome>) IrisServices.get(BlockEditAccess.class);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,12 +18,14 @@
|
||||
|
||||
package art.arcane.iris.util.project.hunk.view;
|
||||
|
||||
import art.arcane.iris.engine.framework.BlockEditAccess;
|
||||
import art.arcane.iris.spi.IrisServices;
|
||||
import art.arcane.iris.core.service.EditSVC;
|
||||
import art.arcane.iris.platform.bukkit.BukkitBlockState;
|
||||
import art.arcane.iris.spi.PlatformBlockState;
|
||||
import art.arcane.iris.util.project.hunk.Hunk;
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
|
||||
@SuppressWarnings("ClassCanBeRecord")
|
||||
@@ -31,7 +33,12 @@ public class ChunkHunkView extends art.arcane.volmlib.util.hunk.view.ChunkWorldH
|
||||
public ChunkHunkView(Chunk chunk) {
|
||||
super(chunk,
|
||||
chunk.getWorld().getMaxHeight(),
|
||||
(wx, y, wz, t) -> IrisServices.get(EditSVC.class).set(chunk.getWorld(), wx, y, wz, (BlockData) t.nativeHandle()),
|
||||
(wx, y, wz) -> BukkitBlockState.of(IrisServices.get(EditSVC.class).get(chunk.getWorld(), wx, y, wz)));
|
||||
(wx, y, wz, t) -> edits().set(chunk.getWorld(), wx, y, wz, (BlockData) t.nativeHandle()),
|
||||
(wx, y, wz) -> BukkitBlockState.of(edits().get(chunk.getWorld(), wx, y, wz)));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static BlockEditAccess<World, BlockData, Biome> edits() {
|
||||
return (BlockEditAccess<World, BlockData, Biome>) IrisServices.get(BlockEditAccess.class);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user