mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 18:23:06 +00:00
Fixes
This commit is contained in:
parent
eb4b42c089
commit
9455860554
@ -30,6 +30,7 @@ import com.volmit.iris.core.link.OraxenLink;
|
|||||||
import com.volmit.iris.core.nms.INMS;
|
import com.volmit.iris.core.nms.INMS;
|
||||||
import com.volmit.iris.core.project.loader.IrisData;
|
import com.volmit.iris.core.project.loader.IrisData;
|
||||||
import com.volmit.iris.core.tools.IrisToolbelt;
|
import com.volmit.iris.core.tools.IrisToolbelt;
|
||||||
|
import com.volmit.iris.engine.object.noise.NoiseStyle;
|
||||||
import com.volmit.iris.engine.platform.BukkitChunkGenerator;
|
import com.volmit.iris.engine.platform.BukkitChunkGenerator;
|
||||||
import com.volmit.iris.engine.object.biome.IrisBiome;
|
import com.volmit.iris.engine.object.biome.IrisBiome;
|
||||||
import com.volmit.iris.engine.object.biome.IrisBiomeCustom;
|
import com.volmit.iris.engine.object.biome.IrisBiomeCustom;
|
||||||
@ -47,6 +48,7 @@ import com.volmit.iris.util.io.InstanceState;
|
|||||||
import com.volmit.iris.util.io.JarScanner;
|
import com.volmit.iris.util.io.JarScanner;
|
||||||
import com.volmit.iris.util.math.M;
|
import com.volmit.iris.util.math.M;
|
||||||
import com.volmit.iris.util.math.RNG;
|
import com.volmit.iris.util.math.RNG;
|
||||||
|
import com.volmit.iris.util.noise.CNG;
|
||||||
import com.volmit.iris.util.parallel.MultiBurst;
|
import com.volmit.iris.util.parallel.MultiBurst;
|
||||||
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;
|
||||||
@ -68,6 +70,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||||
import org.bukkit.generator.ChunkGenerator;
|
import org.bukkit.generator.ChunkGenerator;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
@ -170,9 +173,17 @@ public class Iris extends VolmitPlugin implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void callEvent(Event e) {
|
public static void callEvent(Event e) {
|
||||||
|
if(!e.isAsynchronous())
|
||||||
|
{
|
||||||
J.s(() -> Bukkit.getPluginManager().callEvent(e));
|
J.s(() -> Bukkit.getPluginManager().callEvent(e));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Bukkit.getPluginManager().callEvent(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static KList<Object> initialize(String s, Class<? extends Annotation> slicedClass) {
|
public static KList<Object> initialize(String s, Class<? extends Annotation> slicedClass) {
|
||||||
JarScanner js = new JarScanner(instance.getJarFile(), s);
|
JarScanner js = new JarScanner(instance.getJarFile(), s);
|
||||||
KList<Object> v = new KList<>();
|
KList<Object> v = new KList<>();
|
||||||
|
@ -23,8 +23,11 @@ import com.volmit.iris.core.IrisSettings;
|
|||||||
import com.volmit.iris.core.tools.IrisToolbelt;
|
import com.volmit.iris.core.tools.IrisToolbelt;
|
||||||
import com.volmit.iris.engine.platform.PlatformChunkGenerator;
|
import com.volmit.iris.engine.platform.PlatformChunkGenerator;
|
||||||
import com.volmit.iris.util.collection.KList;
|
import com.volmit.iris.util.collection.KList;
|
||||||
|
import com.volmit.iris.util.format.C;
|
||||||
|
import com.volmit.iris.util.parallel.MultiBurst;
|
||||||
import com.volmit.iris.util.plugin.MortarCommand;
|
import com.volmit.iris.util.plugin.MortarCommand;
|
||||||
import com.volmit.iris.util.plugin.VolmitSender;
|
import com.volmit.iris.util.plugin.VolmitSender;
|
||||||
|
import com.volmit.iris.util.scheduling.J;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
@ -32,6 +32,10 @@ public class IrisEngineEvent extends Event {
|
|||||||
private static final HandlerList handlers = new HandlerList();
|
private static final HandlerList handlers = new HandlerList();
|
||||||
private Engine engine;
|
private Engine engine;
|
||||||
|
|
||||||
|
public IrisEngineEvent() {
|
||||||
|
super(true);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public HandlerList getHandlers() {
|
public HandlerList getHandlers() {
|
||||||
return handlers;
|
return handlers;
|
||||||
|
@ -198,11 +198,11 @@ public class IrisProject {
|
|||||||
double v = (double) gx.getEngine().getGenerated() / (double) req;
|
double v = (double) gx.getEngine().getGenerated() / (double) req;
|
||||||
|
|
||||||
if (sender.isPlayer()) {
|
if (sender.isPlayer()) {
|
||||||
sender.player().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(C.WHITE + "Generating " + Form.pc(v) + ((C.GRAY + " (" + (req - gx.getEngine().getGenerated()) + " Left)"))));
|
sender.sendProgress(v, "Generating");
|
||||||
J.sleep(50);
|
J.sleep(16);
|
||||||
} else {
|
} else {
|
||||||
sender.sendMessage(C.WHITE + "Generating " + Form.pc(v) + ((C.GRAY + " (" + (req - gx.getEngine().getGenerated()) + " Left)")));
|
sender.sendProgress(v, "Generating");
|
||||||
J.sleep(1000);
|
J.sleep(16);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sender.isPlayer()) {
|
if (sender.isPlayer()) {
|
||||||
@ -225,7 +225,7 @@ public class IrisProject {
|
|||||||
assert world != null;
|
assert world != null;
|
||||||
sender.player().teleport(world.getSpawnLocation());
|
sender.player().teleport(world.getSpawnLocation());
|
||||||
} else {
|
} else {
|
||||||
sender.sendMessage(C.WHITE + "Generating Complete!");
|
sender.sendAction(C.IRIS + "Generation Complete");
|
||||||
}
|
}
|
||||||
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(Iris.instance, () ->
|
Bukkit.getScheduler().scheduleSyncDelayedTask(Iris.instance, () ->
|
||||||
|
@ -135,7 +135,6 @@ public class IrisEngine extends BlockPopulator implements Engine {
|
|||||||
effects = new IrisEngineEffects(this);
|
effects = new IrisEngineEffects(this);
|
||||||
art = J.ar(effects::tickRandomPlayer, 0);
|
art = J.ar(effects::tickRandomPlayer, 0);
|
||||||
J.a(this::computeBiomeMaxes);
|
J.a(this::computeBiomeMaxes);
|
||||||
Iris.callEvent(new IrisEngineHotloadEvent(this));
|
|
||||||
context = new IrisContext(this);
|
context = new IrisContext(this);
|
||||||
context.touch();
|
context.touch();
|
||||||
this.complex = new IrisComplex(this);
|
this.complex = new IrisComplex(this);
|
||||||
|
@ -19,13 +19,17 @@
|
|||||||
package com.volmit.iris.engine.framework;
|
package com.volmit.iris.engine.framework;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.core.events.IrisEngineHotloadEvent;
|
||||||
import com.volmit.iris.util.collection.KList;
|
import com.volmit.iris.util.collection.KList;
|
||||||
|
import com.volmit.iris.util.format.C;
|
||||||
import com.volmit.iris.util.math.Position2;
|
import com.volmit.iris.util.math.Position2;
|
||||||
|
import com.volmit.iris.util.plugin.VolmitSender;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.entity.EnderSignal;
|
import org.bukkit.entity.EnderSignal;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
@ -49,6 +53,16 @@ public abstract class EngineAssignedWorldManager extends EngineAssignedComponent
|
|||||||
taskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, this::onTick, 0, 0);
|
taskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, this::onTick, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void on(IrisEngineHotloadEvent e) {
|
||||||
|
for(Player i : e.getEngine().getWorld().getPlayers())
|
||||||
|
{
|
||||||
|
i.playSound(i.getLocation(), Sound.ITEM_TRIDENT_RETURN, 1f, 1.6f);
|
||||||
|
VolmitSender s = new VolmitSender(i);
|
||||||
|
s.sendTitle(C.IRIS + "Engine " + C.AQUA + "<font:minecraft:uniform>Hotloaded", 70, 60, 410);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void on(WorldSaveEvent e) {
|
public void on(WorldSaveEvent e) {
|
||||||
if (e.getWorld().equals(getTarget().getWorld().realWorld())) {
|
if (e.getWorld().equals(getTarget().getWorld().realWorld())) {
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
package com.volmit.iris.engine.platform;
|
package com.volmit.iris.engine.platform;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.core.events.IrisEngineHotloadEvent;
|
||||||
import com.volmit.iris.core.project.loader.IrisData;
|
import com.volmit.iris.core.project.loader.IrisData;
|
||||||
import com.volmit.iris.engine.IrisEngine;
|
import com.volmit.iris.engine.IrisEngine;
|
||||||
import com.volmit.iris.engine.data.chunk.TerrainChunk;
|
import com.volmit.iris.engine.data.chunk.TerrainChunk;
|
||||||
@ -31,7 +32,9 @@ import com.volmit.iris.util.hunk.Hunk;
|
|||||||
import com.volmit.iris.util.io.IO;
|
import com.volmit.iris.util.io.IO;
|
||||||
import com.volmit.iris.util.io.ReactiveFolder;
|
import com.volmit.iris.util.io.ReactiveFolder;
|
||||||
import com.volmit.iris.util.parallel.MultiBurst;
|
import com.volmit.iris.util.parallel.MultiBurst;
|
||||||
|
import com.volmit.iris.util.scheduling.ChronoLatch;
|
||||||
import com.volmit.iris.util.scheduling.J;
|
import com.volmit.iris.util.scheduling.J;
|
||||||
|
import com.volmit.iris.util.scheduling.Looper;
|
||||||
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
|
import com.volmit.iris.util.scheduling.PrecisionStopwatch;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -45,10 +48,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
|
||||||
|
|
||||||
public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChunkGenerator {
|
public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChunkGenerator {
|
||||||
private static final BlockData ERROR_BLOCK = Material.RED_GLAZED_TERRACOTTA.createBlockData();
|
private static final BlockData ERROR_BLOCK = Material.RED_GLAZED_TERRACOTTA.createBlockData();
|
||||||
@ -58,18 +58,36 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun
|
|||||||
private final String dimensionKey;
|
private final String dimensionKey;
|
||||||
private final ReactiveFolder folder;
|
private final ReactiveFolder folder;
|
||||||
private final KList<BlockPopulator> populators;
|
private final KList<BlockPopulator> populators;
|
||||||
|
private final ChronoLatch hotloadChecker;
|
||||||
|
private final Looper hotloader;
|
||||||
private final boolean studio;
|
private final boolean studio;
|
||||||
|
|
||||||
public BukkitChunkGenerator(IrisWorld world, boolean studio, File dataLocation, String dimensionKey)
|
public BukkitChunkGenerator(IrisWorld world, boolean studio, File dataLocation, String dimensionKey)
|
||||||
{
|
{
|
||||||
populators = new KList<>();
|
populators = new KList<>();
|
||||||
this.world = world;
|
this.world = world;
|
||||||
|
this.hotloadChecker = new ChronoLatch(1000, false);
|
||||||
this.studio = studio;
|
this.studio = studio;
|
||||||
this.dataLocation = dataLocation;
|
this.dataLocation = dataLocation;
|
||||||
this.dimensionKey = dimensionKey;
|
this.dimensionKey = dimensionKey;
|
||||||
this.folder = new ReactiveFolder(dataLocation, (_a, _b, _c) -> initialize());
|
this.folder = new ReactiveFolder(dataLocation, (_a, _b, _c) -> hotload());
|
||||||
this.provider = new EngineProvider();
|
this.provider = new EngineProvider();
|
||||||
initialize();
|
initialize();
|
||||||
|
|
||||||
|
this.hotloader = new Looper() {
|
||||||
|
@Override
|
||||||
|
protected long loop() {
|
||||||
|
if(hotloadChecker.flip())
|
||||||
|
{
|
||||||
|
folder.check();
|
||||||
|
}
|
||||||
|
|
||||||
|
return 250;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
hotloader.setPriority(Thread.MIN_PRIORITY);
|
||||||
|
hotloader.start();
|
||||||
|
hotloader.setName(getTarget().getWorld().name() + " Hotloader");
|
||||||
}
|
}
|
||||||
|
|
||||||
public Engine getEngine()
|
public Engine getEngine()
|
||||||
@ -84,6 +102,7 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
|
hotloader.interrupt();
|
||||||
provider.close();
|
provider.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,7 +111,6 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun
|
|||||||
return studio;
|
return studio;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void hotload() {
|
public void hotload() {
|
||||||
initialize();
|
initialize();
|
||||||
@ -103,6 +121,7 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun
|
|||||||
provider.provideEngine(world, dimensionKey, dataLocation, isStudio(), (e) -> {
|
provider.provideEngine(world, dimensionKey, dataLocation, isStudio(), (e) -> {
|
||||||
populators.clear();
|
populators.clear();
|
||||||
populators.add((BlockPopulator) e);
|
populators.add((BlockPopulator) e);
|
||||||
|
folder.checkIgnore();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,6 +129,7 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun
|
|||||||
public @NotNull ChunkData generateChunkData(@NotNull World world, @NotNull Random ignored, int x, int z, @NotNull BiomeGrid biome) {
|
public @NotNull ChunkData generateChunkData(@NotNull World world, @NotNull Random ignored, int x, int z, @NotNull BiomeGrid biome) {
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
Iris.debug("Generated " + x + " " + z);
|
||||||
PrecisionStopwatch ps = PrecisionStopwatch.start();
|
PrecisionStopwatch ps = PrecisionStopwatch.start();
|
||||||
TerrainChunk tc = TerrainChunk.create(world, biome);
|
TerrainChunk tc = TerrainChunk.create(world, biome);
|
||||||
Hunk<BlockData> blocks = Hunk.view((ChunkData) tc);
|
Hunk<BlockData> blocks = Hunk.view((ChunkData) tc);
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
|
|
||||||
package com.volmit.iris.engine.platform;
|
package com.volmit.iris.engine.platform;
|
||||||
|
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.core.events.IrisEngineHotloadEvent;
|
||||||
import com.volmit.iris.core.project.loader.IrisData;
|
import com.volmit.iris.core.project.loader.IrisData;
|
||||||
import com.volmit.iris.engine.IrisEngine;
|
import com.volmit.iris.engine.IrisEngine;
|
||||||
import com.volmit.iris.engine.framework.Engine;
|
import com.volmit.iris.engine.framework.Engine;
|
||||||
@ -46,6 +48,7 @@ public class EngineProvider {
|
|||||||
post.accept(engine);
|
post.accept(engine);
|
||||||
return engine;
|
return engine;
|
||||||
}));
|
}));
|
||||||
|
engine.get().whenComplete((e, x) -> Iris.callEvent(new IrisEngineHotloadEvent(e)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Engine getEngine()
|
public Engine getEngine()
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
package com.volmit.iris.util.format;
|
package com.volmit.iris.util.format;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.util.plugin.VolmitSender;
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
import org.apache.commons.lang.Validate;
|
import org.apache.commons.lang.Validate;
|
||||||
@ -368,6 +369,10 @@ public enum C {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String aura(String s, int hrad, int srad, int vrad) {
|
public static String aura(String s, int hrad, int srad, int vrad) {
|
||||||
|
return aura(s, hrad, srad, vrad, 0.3D);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String aura(String s, int hrad, int srad, int vrad, double pulse) {
|
||||||
String msg = compress(s);
|
String msg = compress(s);
|
||||||
StringBuilder b = new StringBuilder();
|
StringBuilder b = new StringBuilder();
|
||||||
boolean c = false;
|
boolean c = false;
|
||||||
@ -379,11 +384,19 @@ public enum C {
|
|||||||
C o = C.getByChar(i);
|
C o = C.getByChar(i);
|
||||||
|
|
||||||
if (hrad != 0 || srad != 0 || vrad != 0) {
|
if (hrad != 0 || srad != 0 || vrad != 0) {
|
||||||
|
if(pulse > 0)
|
||||||
|
{
|
||||||
|
b.append(VolmitSender.pulse(spinToHex(o, hrad, srad, vrad), spinToHex(o, -hrad, -srad, -vrad), pulse));
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
b.append("<gradient:")
|
b.append("<gradient:")
|
||||||
.append(spinToHex(o, hrad, srad, vrad))
|
.append(spinToHex(o, hrad, srad, vrad))
|
||||||
.append(":")
|
.append(":")
|
||||||
.append(spinToHex(o, -hrad, -srad, -vrad))
|
.append(spinToHex(o, -hrad, -srad, -vrad))
|
||||||
.append(">");
|
.append(">");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
b.append(C.getByChar(i).token);
|
b.append(C.getByChar(i).token);
|
||||||
}
|
}
|
||||||
|
@ -21,10 +21,16 @@ package com.volmit.iris.util.plugin;
|
|||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.core.IrisSettings;
|
import com.volmit.iris.core.IrisSettings;
|
||||||
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.math.M;
|
||||||
|
import com.volmit.iris.util.scheduling.J;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
|
import net.kyori.adventure.text.minimessage.transformation.inbuild.GradientTransformation;
|
||||||
|
import net.kyori.adventure.text.minimessage.transformation.inbuild.RainbowTransformation;
|
||||||
|
import net.kyori.adventure.title.Title;
|
||||||
import org.bukkit.Server;
|
import org.bukkit.Server;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -33,8 +39,14 @@ import org.bukkit.permissions.PermissionAttachment;
|
|||||||
import org.bukkit.permissions.PermissionAttachmentInfo;
|
import org.bukkit.permissions.PermissionAttachmentInfo;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a volume sender. A command sender with extra crap in it
|
* Represents a volume sender. A command sender with extra crap in it
|
||||||
@ -181,6 +193,114 @@ public class VolmitSender implements CommandSender {
|
|||||||
s.sendMessage("========================================================");
|
s.sendMessage("========================================================");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void sendTitle(String title, String subtitle, int i, int s, int o)
|
||||||
|
{
|
||||||
|
Iris.audiences.player(player()).showTitle(Title.title(
|
||||||
|
createComponent(title),
|
||||||
|
createComponent(subtitle),
|
||||||
|
Title.Times.of(Duration.ofMillis(i), Duration.ofMillis(s), Duration.ofMillis(o))));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static long getTick()
|
||||||
|
{
|
||||||
|
return M.ms() / 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendProgress(double percent, String thing)
|
||||||
|
{
|
||||||
|
if(percent < 0)
|
||||||
|
{
|
||||||
|
int l = 44;
|
||||||
|
int g = (int) (1D * l);
|
||||||
|
sendTitle(C.IRIS + thing + " ", 0, 500, 250);
|
||||||
|
sendActionNoProcessing("" + "" + pulse("#00ff80","#00373d",1D)+"<underlined> " + Form.repeat(" ", g) + "<reset>" + Form.repeat(" ", l - g));
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int l = 44;
|
||||||
|
int g = (int) (percent * l);
|
||||||
|
sendTitle(C.IRIS + thing + " " + C.BLUE + "<font:minecraft:uniform>" + Form.pc(percent, 0), 0, 500, 250);
|
||||||
|
sendActionNoProcessing("" + "" + pulse("#00ff80","#00373d",1D)+"<underlined> " + Form.repeat(" ", g) + "<reset>" + Form.repeat(" ", l - g));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String pulse(String colorA, String colorB, double speed)
|
||||||
|
{
|
||||||
|
return "<gradient:" + colorA + ":" + colorB + ":" + pulse(speed) + ">";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String pulse(double speed) {
|
||||||
|
return Form.f(invertSpread((((getTick()*15D * speed)%1000D)/1000D)), 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static double invertSpread(double v) {
|
||||||
|
return ((1D - v) * 2D) - 1D;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendAction(String action)
|
||||||
|
{
|
||||||
|
Iris.audiences.player(player()).sendActionBar(createNoPrefixComponent(action));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendActionNoProcessing(String action)
|
||||||
|
{
|
||||||
|
Iris.audiences.player(player()).sendActionBar(createNoPrefixComponentNoProcessing(action));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendTitle(String subtitle, int i, int s, int o)
|
||||||
|
{
|
||||||
|
Iris.audiences.player(player()).showTitle(Title.title(
|
||||||
|
createNoPrefixComponent(" "),
|
||||||
|
createNoPrefixComponent(subtitle),
|
||||||
|
Title.Times.of(Duration.ofMillis(i), Duration.ofMillis(s), Duration.ofMillis(o))));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Component createNoPrefixComponent(String message)
|
||||||
|
{
|
||||||
|
String t = C.translateAlternateColorCodes('&', message);
|
||||||
|
String a = C.aura(t, IrisSettings.get().getGeneral().getSpinh(), IrisSettings.get().getGeneral().getSpins(), IrisSettings.get().getGeneral().getSpinb(), 0.36);
|
||||||
|
return MiniMessage.get().parse(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Component createNoPrefixComponentNoProcessing(String message)
|
||||||
|
{
|
||||||
|
return MiniMessage.get().parse(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Component createComponent(String message)
|
||||||
|
{
|
||||||
|
String t = C.translateAlternateColorCodes('&', getTag() + message);
|
||||||
|
String a = C.aura(t, IrisSettings.get().getGeneral().getSpinh(), IrisSettings.get().getGeneral().getSpins(), IrisSettings.get().getGeneral().getSpinb());
|
||||||
|
return MiniMessage.get().parse(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T> void showWaiting(String passive, CompletableFuture<T> f)
|
||||||
|
{
|
||||||
|
AtomicInteger v = new AtomicInteger();
|
||||||
|
AtomicReference<T> g = new AtomicReference<>();
|
||||||
|
v.set(J.ar(() -> {
|
||||||
|
if(f.isDone() && g.get() != null)
|
||||||
|
{
|
||||||
|
J.car(v.get());
|
||||||
|
sendAction(" ");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sendProgress(-1, passive);
|
||||||
|
}, 0));
|
||||||
|
J.a(() -> {
|
||||||
|
try {
|
||||||
|
g.set(f.get());
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (ExecutionException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendMessage(String message) {
|
public void sendMessage(String message) {
|
||||||
if (message.contains("<NOMINI>")) {
|
if (message.contains("<NOMINI>")) {
|
||||||
@ -189,10 +309,7 @@ public class VolmitSender implements CommandSender {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String t = C.translateAlternateColorCodes('&', getTag() + message);
|
Iris.audiences.sender(s).sendMessage(createComponent(message));
|
||||||
String a = C.aura(t, IrisSettings.get().getGeneral().getSpinh(), IrisSettings.get().getGeneral().getSpins(), IrisSettings.get().getGeneral().getSpinb());
|
|
||||||
Component c = MiniMessage.get().parse(a);
|
|
||||||
Iris.audiences.sender(s).sendMessage(c);
|
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
String t = C.translateAlternateColorCodes('&', getTag() + message);
|
String t = C.translateAlternateColorCodes('&', getTag() + message);
|
||||||
String a = C.aura(t, IrisSettings.get().getGeneral().getSpinh(), IrisSettings.get().getGeneral().getSpins(), IrisSettings.get().getGeneral().getSpinb());
|
String a = C.aura(t, IrisSettings.get().getGeneral().getSpinh(), IrisSettings.get().getGeneral().getSpins(), IrisSettings.get().getGeneral().getSpinb());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user