SpongeAPI
SpongeAPI copied to clipboard
[1.21.5 snapshots] Tickets have changed
Major SpongeAPI version
Likely to be API-15
Is this likely to be a breaking change?
Yes
What are you requesting?
As is currently, TicketType is not a registered kind, but with snapshot 25w02a, TicketType is now a registry type and the comparisons are vastly different. Compare what we have currently:
public interface TicketType<T> {
String name();
Ticks lifetime();
}
public interface Ticket {
}
The underlying engine now has this representation:
record TicketType(long timeout, boolean persist, TicketType.TicketUse use) {
public static final int NO_TIMEOUT = 0;
public static final TicketType START = register("start", 0L, false, TicketType.TicketUse.LOADING_AND_SIMULATION);
public static final TicketType DRAGON = register("dragon", 0L, false, TicketType.TicketUse.LOADING_AND_SIMULATION);
public static final TicketType PLAYER_LOADING = register("player_loading", 0L, false, TicketType.TicketUse.LOADING);
public static final TicketType PLAYER_SIMULATION = register("player_simulation", 0L, false, TicketType.TicketUse.SIMULATION);
public static final TicketType FORCED = register("forced", 0L, true, TicketType.TicketUse.LOADING_AND_SIMULATION);
public static final TicketType PORTAL = register("portal", 300L, true, TicketType.TicketUse.LOADING_AND_SIMULATION);
public static final TicketType ENDER_PEARL = register("ender_pearl", 40L, false, TicketType.TicketUse.LOADING_AND_SIMULATION);
public static final TicketType UNKNOWN = register("unknown", 1L, false, TicketType.TicketUse.LOADING);
private static TicketType register(String $$0, long $$1, boolean $$2, TicketType.TicketUse $$3) {
return Registry.register(BuiltInRegistries.TICKET_TYPE, $$0, new TicketType($$1, $$2, $$3));
}
public boolean doesLoad() {
return this.use == TicketType.TicketUse.LOADING || this.use == TicketType.TicketUse.LOADING_AND_SIMULATION;
}
public boolean doesSimulate() {
return this.use == TicketType.TicketUse.SIMULATION || this.use == TicketType.TicketUse.LOADING_AND_SIMULATION;
}
public boolean hasTimeout() {
return this.timeout != 0L;
}
public static enum TicketUse {
LOADING,
SIMULATION,
LOADING_AND_SIMULATION;
}
}
public class Ticket {
private final TicketType type;
private final int ticketLevel;
private long ticksLeft;
}
Of course we've always obviated the exposure of level and ticks left through the api ChunkManager, but if we want to continue to allow plugins to register a new TicketType, we ought to make that viable through registries.