Proper warnings

This commit is contained in:
Daniel Mills 2021-07-16 06:27:25 -04:00
parent 9896d6e6b2
commit 7a62af78d0
5 changed files with 134 additions and 3 deletions

View File

@ -28,10 +28,13 @@ import com.volmit.iris.core.link.MythicMobsLink;
import com.volmit.iris.core.nms.INMS; import com.volmit.iris.core.nms.INMS;
import com.volmit.iris.engine.IrisWorlds; import com.volmit.iris.engine.IrisWorlds;
import com.volmit.iris.engine.framework.EngineCompositeGenerator; import com.volmit.iris.engine.framework.EngineCompositeGenerator;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisBiomeCustom;
import com.volmit.iris.engine.object.IrisCompat; import com.volmit.iris.engine.object.IrisCompat;
import com.volmit.iris.engine.object.IrisDimension; import com.volmit.iris.engine.object.IrisDimension;
import com.volmit.iris.engine.stream.utility.CachedStream2D; import com.volmit.iris.engine.stream.utility.CachedStream2D;
import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.collection.KSet;
import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.C;
import com.volmit.iris.util.format.Form; import com.volmit.iris.util.format.Form;
import com.volmit.iris.util.function.NastyRunnable; import com.volmit.iris.util.function.NastyRunnable;
@ -42,6 +45,7 @@ import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.plugin.Metrics; import com.volmit.iris.util.plugin.Metrics;
import com.volmit.iris.util.plugin.Permission; import com.volmit.iris.util.plugin.Permission;
import com.volmit.iris.util.plugin.VolmitPlugin; import com.volmit.iris.util.plugin.VolmitPlugin;
import com.volmit.iris.util.plugin.VolmitSender;
import com.volmit.iris.util.scheduling.GroupedExecutor; import com.volmit.iris.util.scheduling.GroupedExecutor;
import com.volmit.iris.util.scheduling.J; import com.volmit.iris.util.scheduling.J;
import com.volmit.iris.util.scheduling.Queue; import com.volmit.iris.util.scheduling.Queue;
@ -51,6 +55,7 @@ import org.bukkit.Bukkit;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.generator.ChunkGenerator; import org.bukkit.generator.ChunkGenerator;
@ -115,7 +120,7 @@ public class Iris extends VolmitPlugin implements Listener {
return null; return null;
} }
private void installDataPacks() { public void installDataPacks() {
Iris.info("Checking Data Packs..."); Iris.info("Checking Data Packs...");
boolean reboot = false; boolean reboot = false;
File packs = new File("plugins/Iris/packs"); File packs = new File("plugins/Iris/packs");
@ -323,6 +328,108 @@ public class Iris extends VolmitPlugin implements Listener {
return instance.getDataFolder("cache", "temp"); return instance.getDataFolder("cache", "temp");
} }
public void verifyDataPacksPost()
{
File packs = new File("plugins/Iris/packs");
File dpacks = getDatapacksFolder();
if (dpacks == null) {
Iris.error("Cannot find the datapacks folder! Please try generating a default world first maybe? Is this a new server?");
return;
}
boolean bad = false;
if (packs.exists()) {
for (File i : packs.listFiles()) {
if (i.isDirectory()) {
Iris.verbose("Checking Pack: " + i.getPath());
IrisDataManager data = new IrisDataManager(i);
File dims = new File(i, "dimensions");
if (dims.exists()) {
for (File j : dims.listFiles()) {
if (j.getName().endsWith(".json")) {
IrisDimension dim = data.getDimensionLoader().load(j.getName().split("\\Q.\\E")[0]);
if(!verifyDataPackInstalled(dim))
{
bad = true;
}
}
}
}
}
}
}
if(bad && INMS.get().supportsDataPacks())
{
Iris.error(C.ITALIC + "You need to restart your server to properly generate custom biomes.");
Iris.error(C.ITALIC + "By continuing, Iris will use backup biomes in place of the custom biomes.");
Iris.error(C.UNDERLINE + "IT IS HIGHLY RECOMMENDED YOU RESTART THE SERVER BEFORE GENERATING!");
for(Player i : Bukkit.getOnlinePlayers())
{
if(i.isOp() || Iris.perm.has(i))
{
VolmitSender sender = new VolmitSender(i, getTag("WARNING"));
sender.sendMessage("There are some Iris Packs that have custom biomes in them");
sender.sendMessage("You need to restart your server to use these packs.");
}
}
}
}
public boolean verifyDataPackInstalled(IrisDimension dimension)
{
IrisDataManager idm = new IrisDataManager(getDataFolder("packs", dimension.getLoadKey()));
KSet<String> keys = new KSet<>();
boolean warn = false;
for(IrisBiome i : dimension.getAllBiomes(() -> idm))
{
if(i.isCustom())
{
for(IrisBiomeCustom j : i.getCustomDerivitives())
{
keys.add(dimension.getLoadKey() +":"+ j.getId());
}
}
}
if(!INMS.get().supportsDataPacks())
{
if(!keys.isEmpty())
{
Iris.warn("===================================================================================");
Iris.warn("Pack " + dimension.getLoadKey() + " has " + keys.size() + " custom biome(s). ");
Iris.warn("Your server version does not yet support datapacks for iris.");
Iris.warn("The world will generate these biomes as backup biomes.");
Iris.warn("====================================================================================");
}
return true;
}
for(String i : keys)
{
Object o = INMS.get().getCustomBiomeBaseFor(i);
if(o == null)
{
Iris.warn("The Biome " + i + " is not registered on the server.");
warn = true;
}
}
if(warn)
{
Iris.error("The Pack " + dimension.getLoadKey() + " is INCAPABLE of generating custom biomes, restart your server before generating with this pack!");
}
return !warn;
}
@Override @Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
return super.onCommand(sender, command, label, args); return super.onCommand(sender, command, label, args);
@ -461,6 +568,7 @@ public class Iris extends VolmitPlugin implements Listener {
} }
public void splash() { public void splash() {
J.a(this::verifyDataPacksPost, 20);
if (!IrisSettings.get().getGeneral().isSplashLogoStartup()) { if (!IrisSettings.get().getGeneral().isSplashLogoStartup()) {
return; return;
} }

View File

@ -281,6 +281,8 @@ public class ProjectManager {
} }
sender.sendMessage("Successfully Aquired " + d.getName()); sender.sendMessage("Successfully Aquired " + d.getName());
Iris.instance.installDataPacks();
Iris.instance.verifyDataPacksPost();
} }
public KMap<String, String> getListing(boolean cached) { public KMap<String, String> getListing(boolean cached) {

View File

@ -52,4 +52,9 @@ public interface INMSBinding {
int countCustomBiomes(); int countCustomBiomes();
void forceBiomeInto(int x, int y, int z, Object somethingVeryDirty, ChunkGenerator.BiomeGrid chunk); void forceBiomeInto(int x, int y, int z, Object somethingVeryDirty, ChunkGenerator.BiomeGrid chunk);
default boolean supportsDataPacks()
{
return false;
}
} }

View File

@ -43,6 +43,11 @@ public class NMSBinding17_1 implements INMSBinding {
private final KMap<Biome, Object> baseBiomeCache = new KMap<>(); private final KMap<Biome, Object> baseBiomeCache = new KMap<>();
private Field biomeStorageCache = null; private Field biomeStorageCache = null;
public boolean supportsDataPacks()
{
return true;
}
private Object getBiomeStorage(ChunkGenerator.BiomeGrid g) { private Object getBiomeStorage(ChunkGenerator.BiomeGrid g) {
try { try {
return getFieldForBiomeStorage(g).get(g); return getFieldForBiomeStorage(g).get(g);
@ -101,9 +106,18 @@ public class NMSBinding17_1 implements INMSBinding {
@Override @Override
public Object getCustomBiomeBaseFor(String mckey) { public Object getCustomBiomeBaseFor(String mckey) {
try {
return getCustomBiomeRegistry().d(ResourceKey.a(IRegistry.aO, new MinecraftKey(mckey))); return getCustomBiomeRegistry().d(ResourceKey.a(IRegistry.aO, new MinecraftKey(mckey)));
} }
catch(Throwable e)
{
Iris.reportError(e);
}
return null;
}
@SuppressWarnings("OptionalGetWithoutIsPresent") @SuppressWarnings("OptionalGetWithoutIsPresent")
@Override @Override
public String getKeyForBiomeBase(Object biomeBase) { public String getKeyForBiomeBase(Object biomeBase) {
@ -225,7 +239,7 @@ public class NMSBinding17_1 implements INMSBinding {
} }
a.incrementAndGet(); a.incrementAndGet();
Iris.verbose("Custom Biome: " + k); Iris.debug("Custom Biome: " + k);
}); });
return a.get(); return a.get();

View File

@ -31,12 +31,14 @@ import com.volmit.iris.engine.data.DirectWorldWriter;
import com.volmit.iris.engine.data.chunk.TerrainChunk; import com.volmit.iris.engine.data.chunk.TerrainChunk;
import com.volmit.iris.engine.hunk.Hunk; import com.volmit.iris.engine.hunk.Hunk;
import com.volmit.iris.engine.object.IrisBiome; import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisBiomeCustom;
import com.volmit.iris.engine.object.IrisDimension; import com.volmit.iris.engine.object.IrisDimension;
import com.volmit.iris.engine.object.IrisPosition; import com.volmit.iris.engine.object.IrisPosition;
import com.volmit.iris.engine.parallel.BurstExecutor; import com.volmit.iris.engine.parallel.BurstExecutor;
import com.volmit.iris.engine.parallel.MultiBurst; import com.volmit.iris.engine.parallel.MultiBurst;
import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.collection.KMap;
import com.volmit.iris.util.collection.KSet;
import com.volmit.iris.util.fakenews.FakeWorld; import com.volmit.iris.util.fakenews.FakeWorld;
import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.C;
import com.volmit.iris.util.format.Form; import com.volmit.iris.util.format.Form;