Spectator mode

This commit is contained in:
Daniel Mills 2021-07-24 11:49:03 -04:00
parent 902a489b04
commit cce41082a1

View File

@ -190,6 +190,8 @@ public class IrisProject {
if (d == null) { if (d == null) {
sender.sendMessage("Can't find dimension: " + getName()); sender.sendMessage("Can't find dimension: " + getName());
return; return;
} else if (sender.isPlayer()) {
sender.player().setGameMode(GameMode.SPECTATOR);
} }
J.attemptAsync(() -> J.attemptAsync(() ->
@ -239,47 +241,73 @@ public class IrisProject {
} }
}); });
MultiBurst.burst.lazy(() -> { String wfp = "iris/" + UUID.randomUUID();
try {
IrisAccess a = IrisToolbelt.createWorld()
.studio(true)
.sender(sender)
.name("iris/" + UUID.randomUUID())
.dimension(d.getLoadKey())
.seed(1337)
.headless(false)
.create();
World world = a.getCompound().getWorld().realWorld();
J.s(() -> { WorldCreator c = new IrisWorldCreator().dimension(getName())
activeProvider = a; .seed(1337)
if (IrisSettings.get().getStudio().isDisableTimeAndWeather()) { .name(wfp)
world.setGameRule(GameRule.DO_WEATHER_CYCLE, false); .studioMode()
world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false); .create();
world.setTime(6000);
}
Iris.linkMultiverseCore.removeFromConfig(world);
if (sender.isPlayer()) { IrisAccess gx = ((IrisAccess) c.generator());
assert world != null; O<Boolean> done = new O<>();
sender.player().teleport(world.getSpawnLocation()); done.set(false);
} else { activeProvider = gx;
sender.sendMessage(C.WHITE + "Generating Complete!");
}
Bukkit.getScheduler().scheduleSyncDelayedTask(Iris.instance, () -> J.a(() ->
{ {
if (sender.isPlayer()) { double last = 0;
sender.player().setGameMode(GameMode.SPECTATOR); int req = 400;
}
onDone.run(); while (gx.getGenerated() < req) {
}, 0); assert gx != null;
}); double v = (double) gx.getGenerated() / (double) req;
} catch (IrisException e) {
e.printStackTrace(); if (sender.isPlayer()) {
sender.player().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(C.WHITE + "Generating " + Form.pc(v) + ((C.GRAY + " (" + (req - gx.getGenerated()) + " Left)"))));
J.sleep(50);
} else {
sender.sendMessage(C.WHITE + "Generating " + Form.pc(v) + ((C.GRAY + " (" + (req - gx.getGenerated()) + " Left)")));
J.sleep(1000);
}
if (gx.isFailing()) {
sender.sendMessage("Generation Failed!");
break;
}
}
if (sender.isPlayer()) {
sender.player().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(C.WHITE + "Generation Complete"));
} }
}); });
//@builder
World world = INMS.get().createWorld(c);
if (IrisSettings.get().getStudio().isDisableTimeAndWeather()) {
world.setGameRule(GameRule.DO_WEATHER_CYCLE, false);
world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false);
world.setTime(6000);
}
Iris.linkMultiverseCore.removeFromConfig(world);
done.set(true);
if (sender.isPlayer()) {
assert world != null;
sender.player().teleport(world.getSpawnLocation());
} else {
sender.sendMessage(C.WHITE + "Generating Complete!");
}
Bukkit.getScheduler().scheduleSyncDelayedTask(Iris.instance, () ->
{
if (sender.isPlayer()) {
sender.player().setGameMode(GameMode.SPECTATOR);
}
onDone.run();
}, 0);
} }
public void close() { public void close() {
@ -399,7 +427,27 @@ public class IrisProject {
} }
//TODO: EXPORT JIGSAW PIECES FROM STRUCTURES //TODO: EXPORT JIGSAW PIECES FROM STRUCTURES
dimension.getFeatures().forEach((i) -> {
if (i.getZone().getCustomBiome() != null)
{
biomes.add(dm.getBiomeLoader().load(i.getZone().getCustomBiome()));
}
});
dimension.getSpecificFeatures().forEach((i) -> {
if (i.getFeature().getCustomBiome() != null)
{
biomes.add(dm.getBiomeLoader().load(i.getFeature().getCustomBiome()));
}
});
dimension.getRegions().forEach((i) -> regions.add(dm.getRegionLoader().load(i))); dimension.getRegions().forEach((i) -> regions.add(dm.getRegionLoader().load(i)));
regions.forEach((r) -> {
r.getFeatures().forEach((i) -> {
if (i.getZone().getCustomBiome() != null)
{
biomes.add(dm.getBiomeLoader().load(i.getZone().getCustomBiome()));
}
});
});
dimension.getLoot().getTables().forEach((i) -> loot.add(dm.getLootLoader().load(i))); dimension.getLoot().getTables().forEach((i) -> loot.add(dm.getLootLoader().load(i)));
regions.forEach((i) -> biomes.addAll(i.getAllBiomes(null))); regions.forEach((i) -> biomes.addAll(i.getAllBiomes(null)));
biomes.forEach((i) -> i.getGenerators().forEach((j) -> generators.add(j.getCachedGenerator(null)))); biomes.forEach((i) -> i.getGenerators().forEach((j) -> generators.add(j.getCachedGenerator(null))));
@ -409,6 +457,19 @@ public class IrisProject {
regions.forEach((r) -> r.getEntitySpawnOverrides().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity())))); regions.forEach((r) -> r.getEntitySpawnOverrides().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity()))));
dimension.getEntitySpawnOverrides().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity()))); dimension.getEntitySpawnOverrides().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity())));
biomes.forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity())))); biomes.forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity()))));
for(int f = 0; f < IrisSettings.get().getGenerator().getMaxBiomeChildDepth(); f++)
{
biomes.copy().forEach((r) -> {
r.getFeatures().forEach((i) -> {
if (i.getZone().getCustomBiome() != null)
{
biomes.add(dm.getBiomeLoader().load(i.getZone().getCustomBiome()));
}
});
});
}
regions.forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity())))); regions.forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity()))));
dimension.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity()))); dimension.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity())));
KMap<String, String> renameObjects = new KMap<>(); KMap<String, String> renameObjects = new KMap<>();