EventHandler class

Пакет: com.hypixel.hytale.builtin.worldgen.modifier

Файл: com/hypixel/hytale/builtin/worldgen/modifier/EventHandler.java

implements: AutoCloseable

Поля (12)

МодификаторыТипИмя
final EventHandler EMPTY
public static final EventHandler.Modifier[] EMPTY_ARRAY
public static final EventHandler.PriorityEntry[] EMPTY_ARRAY
EventHandler var1
EventHandler var1
EventHandler.PriorityEntry var11
Op[] var12
String var2
List var3
Object2IntOpenHashMap var4
String var7
int var8

Методы (8)

МодификаторыВозвратСигнатура
public record Modifierrecord Modifier(@Nonnull Target target, @Nonnull Op[] ops)
static EventHandler acquireEventHandler acquire(@Nonnull Path var0)
public int compareTopublic int compareTo(EventHandler.PriorityEntry var1)
for for(Content.Type var21 : Content.Type.VALUES)
abstract for for(int var5 = 0; var5 < var3.size()
abstract for for(int var10 = 0; var10 < var2.size()
static <T> void handle<T> void handle(@Nonnull ModifyEvent<T> var0)
if if(var12.length != 0)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.worldgen.modifier;

class="kw">import com.hypixel.hytale.assetstore.AssetPack;
class="kw">import com.hypixel.hytale.builtin.worldgen.modifier.content.Content;
class="kw">import com.hypixel.hytale.builtin.worldgen.modifier.event.ModifyEvent;
class="kw">import com.hypixel.hytale.builtin.worldgen.modifier.op.Op;
class="kw">import com.hypixel.hytale.server.core.asset.AssetModule;
class="kw">import com.hypixel.hytale.server.worldgen.util.ListPool;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
class="kw">import java.nio.file.Path;
class="kw">import java.util.Collections;
class="kw">import java.util.EnumMap;
class="kw">import java.util.List;
class="kw">import java.util.Map.Entry;
class="kw">import javax.annotation.Nonnull;

class="kw">public class="kw">final class EventHandler class="kw">implements AutoCloseable {
   class="kw">private class="kw">static class="kw">final EventHandler EMPTY = new EventHandler();
   class="kw">private class="kw">static class="kw">final ThreadLocal<EventHandler> SCOPED_HANDLER = ThreadLocal.withInitial(() -> EMPTY);
   class="kw">private class="kw">static class="kw">final ListPool<EventHandler.Modifier> POOL = new ListPool<>(5, EventHandler.Modifier.EMPTY_ARRAY);
   class="kw">private class="kw">static class="kw">final ListPool<EventHandler.PriorityEntry> ENTRY_POOL = new ListPool<>(5, EventHandler.PriorityEntry.EMPTY_ARRAY);
   @Nonnull
   class="kw">private class="kw">final EnumMap<Content.Type, EventHandler.Modifier[]> events = new EnumMap<>(Content.Type.class);

   class="kw">private EventHandler() {
   }

   class="kw">private EventHandler(@Nonnull String var1) {
      try (ListPool.Resource var2 = ENTRY_POOL.acquire()) {
         List var3 = AssetModule.get().getAssetPacks();
         Object2IntOpenHashMap var4 = new Object2IntOpenHashMap();

         for (int var5 = 0; var5 < var3.size(); var5++) {
            var4.put(var3.get(var5).getName(), var5);
         }

         for (Entry var6 : WorldGenModifier.ASSET_MAP.getAssetMap().entrySet()) {
            if (var6.getValue().getTarget().matchesRoot(var1)) {
               String var7 = WorldGenModifier.ASSET_MAP.getAssetPack(var6.getKey());
               int var8 = var4.getOrDefault(var7, 0);
               var2.add(new EventHandler.PriorityEntry(var6.getValue(), var8));
            }
         }

         Collections.sort(var2);

         for (Content.Type var21 : Content.Type.VALUES) {
            try (ListPool.Resource var9 = POOL.acquire()) {
               for (int var10 = 0; var10 < var2.size(); var10++) {
                  EventHandler.PriorityEntry var11 = (EventHandler.PriorityEntry)var2.get(var10);
                  Op[] var12 = var11.modifier.getOperations(var21);
                  if (var12.length != 0) {
                     var9.add(new EventHandler.Modifier(var11.modifier.target, var12));
                  }
               }

               this.events.put(var21, var9.toArray());
            }
         }
      }
   }

   @Nonnull
   class="kw">public EventHandler.Modifier[] get(@Nonnull Content.Type var1) {
      class="kw">return this.events.getOrDefault(var1, EventHandler.Modifier.EMPTY_ARRAY);
   }

   @Override
   class="kw">public void close() {
      this.events.clear();
      SCOPED_HANDLER.set(EMPTY);
   }

   class="kw">public class="kw">static <T> void handle(@Nonnull ModifyEvent<T> var0) {
      EventHandler var1 = SCOPED_HANDLER.get();
      String var2 = var0.file().getContentPath();

      for (EventHandler.Modifier var6 : var1.get(var0.type())) {
         if (var6.target().matchesRule(var2)) {
            for (Op var10 : var6.ops()) {
               var10.apply(var0);
            }
         }
      }
   }

   class="kw">public class="kw">static EventHandler acquire(@Nonnull Path var0) {
      assert SCOPED_HANDLER.get() == EMPTY : "EventHandler already open or was not closed!";
      EventHandler var1 = new EventHandler(var0.getFileName().toString());
      SCOPED_HANDLER.set(var1);
      class="kw">return var1;
   }

   class="kw">public record Modifier(@Nonnull Target target, @Nonnull Op[] ops) {
      class="kw">public class="kw">static class="kw">final EventHandler.Modifier[] EMPTY_ARRAY = new EventHandler.Modifier[0];

      class="kw">public Modifier {
      }
   }

   class="kw">public record PriorityEntry(WorldGenModifier modifier, int packPriority) class="kw">implements Comparable<EventHandler.PriorityEntry> {
      class="kw">public class="kw">static class="kw">final EventHandler.PriorityEntry[] EMPTY_ARRAY = new EventHandler.PriorityEntry[0];

      class="kw">public PriorityEntry {
      }

      class="kw">public int compareTo(EventHandler.PriorityEntry var1) {
         class="kw">return this.modifier.priority == var1.modifier.priority
            ? Integer.compare(this.packPriority, var1.packPriority)
            : Integer.compare(this.modifier.priority.getValue(), var1.modifier.priority.getValue());
      }
   }
}