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());
}
}
}