--- a/net/minecraft/server/level/TicketType.java
+++ b/net/minecraft/server/level/TicketType.java
@@ -7,28 +7,42 @@
 import net.minecraft.world.level.ChunkPos;
 
 public class TicketType<T> {
+    public static final TicketType<Long> FUTURE_AWAIT = create("future_await", Long::compareTo); // Paper
+    public static final TicketType<Long> ASYNC_LOAD = create("async_load", Long::compareTo); // Paper
+
     private final String name;
     private final Comparator<T> comparator;
     public long timeout;
-    public static final TicketType<Unit> START = create("start", (unit, unit2) -> {
+    public static final TicketType<Unit> START = TicketType.create("start", (unit, unit1) -> {
         return 0;
     });
-    public static final TicketType<Unit> DRAGON = create("dragon", (unit, unit2) -> {
+    public static final TicketType<Unit> DRAGON = TicketType.create("dragon", (unit, unit1) -> {
         return 0;
     });
-    public static final TicketType<ChunkPos> PLAYER = create("player", Comparator.comparingLong(ChunkPos::toLong));
-    public static final TicketType<ChunkPos> FORCED = create("forced", Comparator.comparingLong(ChunkPos::toLong));
-    public static final TicketType<ChunkPos> LIGHT = create("light", Comparator.comparingLong(ChunkPos::toLong));
-    public static final TicketType<BlockPos> PORTAL = create("portal", Vec3i::compareTo, 300);
-    public static final TicketType<Integer> POST_TELEPORT = create("post_teleport", Integer::compareTo, 5);
-    public static final TicketType<ChunkPos> UNKNOWN = create("unknown", Comparator.comparingLong(ChunkPos::toLong), 1);
+    public static final TicketType<ChunkPos> PLAYER = TicketType.create("player", Comparator.comparingLong(ChunkPos::toLong));
+    public static final TicketType<ChunkPos> FORCED = TicketType.create("forced", Comparator.comparingLong(ChunkPos::toLong));
+    public static final TicketType<ChunkPos> LIGHT = TicketType.create("light", Comparator.comparingLong(ChunkPos::toLong));
+    public static final TicketType<BlockPos> PORTAL = TicketType.create("portal", Vec3i::compareTo, 300);
+    public static final TicketType<Long> LOGIN = create("login", Long::compareTo, 100); // Paper
+    public static final TicketType<Integer> POST_TELEPORT = TicketType.create("post_teleport", Integer::compareTo, 5);
+    public static final TicketType<ChunkPos> UNKNOWN = TicketType.create("unknown", Comparator.comparingLong(ChunkPos::toLong), 1);
+    public static final TicketType<Unit> PLUGIN = TicketType.create("plugin", (a, b) -> 0); // CraftBukkit
+    public static final TicketType<org.bukkit.plugin.Plugin> PLUGIN_TICKET = TicketType.create("plugin_ticket", (plugin1, plugin2) -> plugin1.getClass().getName().compareTo(plugin2.getClass().getName())); // CraftBukkit
+    public static final TicketType<Long> CHUNK_RELIGHT = create("light_update", Long::compareTo); // Paper - ensure chunks stay loaded for lighting
+    // Paper start - rewrite chunk system
+    public static final TicketType<Long> CHUNK_LOAD = create("chunk_load", Long::compareTo);
+    public static final TicketType<Long> STATUS_UPGRADE = create("status_upgrade", Long::compareTo);
+    public static final TicketType<Long> ENTITY_LOAD = create("entity_load", Long::compareTo);
+    public static final TicketType<Long> POI_LOAD = create("poi_load", Long::compareTo);
+    public static final TicketType<Unit> UNLOAD_COOLDOWN = create("unload_cooldown", (u1, u2) -> 0, 5 * 20);
+    // Paper end - rewrite chunk system
 
     public static <T> TicketType<T> create(String name, Comparator<T> argumentComparator) {
         return new TicketType<>(name, argumentComparator, 0L);
     }
 
     public static <T> TicketType<T> create(String name, Comparator<T> argumentComparator, int expiryTicks) {
-        return new TicketType<>(name, argumentComparator, (long)expiryTicks);
+        return new TicketType<>(name, argumentComparator, (long) expiryTicks);
     }
 
     protected TicketType(String name, Comparator<T> argumentComparator, long expiryTicks) {
@@ -37,7 +51,6 @@
         this.timeout = expiryTicks;
     }
 
-    @Override
     public String toString() {
         return this.name;
     }
