TagSetLookupTable class
Пакет: com.hypixel.hytale.builtin.tagset
Файл: com/hypixel/hytale/builtin/tagset/TagSetLookupTable.java
Поля (17)
| Модификаторы | Тип | Имя |
|---|---|---|
|
String[] |
var16 |
|
String[] |
var18 |
|
String[] |
var21 |
|
IntArrayList |
var4 |
|
int |
var5 |
|
IntOpenHashSet |
var6 |
|
Entry |
var6 |
|
int |
var6 |
|
int |
var7 |
|
int |
var7 |
|
IntSet |
var7 |
|
ObjectIterator |
var7 |
|
IntSet |
var7 |
|
|
var7 |
|
|
var7 |
|
String[] |
var8 |
|
TagSet |
var8 |
Методы (16)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException(var5 + ": ", var9) |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Cyclic reference to set detected: " + var1) |
private |
void |
consumeSetvoid consumeSet(String var1,
@Nonnull Map<String, T> var2,
@Nonnull Object2IntMap<String> var3,
@Nonnull Object2IntMap<String> var4,
@Nonnull IntArrayList var5,
@Nonnull Consumer<IntSet> var6) |
private |
void |
consumeTagvoid consumeTag(@Nonnull String var1, @Nonnull T var2, @Nonnull Object2IntMap<String> var3, @Nonnull IntConsumer var4) |
private |
void |
createTagMapvoid createTagMap(@Nonnull Map<String, T> var1, @Nonnull Object2IntMap<String> var2, @Nonnull Object2IntMap<String> var3) |
|
|
for for(String var12 : var8) |
|
|
for for(String var13 : var16) |
|
|
for for(String var14 : var18) |
|
|
for for(String var15 : var21) |
|
|
if if(var8 != null) |
|
|
if if(var16 != null) |
|
|
if if(var18 != null) |
|
|
if if(var21 != null) |
|
|
if if(var7 != null) |
|
|
if if(var5 >= 0) |
|
|
if if(var8 != null) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.tagset;
class="kw">import com.hypixel.hytale.common.util.StringUtil;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.ints.IntArrayList;
class="kw">import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
class="kw">import it.unimi.dsi.fastutil.ints.IntSet;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntMaps;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntMap.Entry;
class="kw">import java.util.Map;
class="kw">import java.util.function.Consumer;
class="kw">import java.util.function.IntConsumer;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class TagSetLookupTable<T class="kw">extends TagSet> {
@Nonnull
class="kw">private Int2ObjectMap<IntSet> tagMatcher = new Int2ObjectOpenHashMap();
class="kw">public TagSetLookupTable(@Nonnull Map<String, T> var1, @Nonnull Object2IntMap<String> var2, @Nonnull Object2IntMap<String> var3) {
this.createTagMap(var1, var2, var3);
}
class="kw">private void createTagMap(@Nonnull Map<String, T> var1, @Nonnull Object2IntMap<String> var2, @Nonnull Object2IntMap<String> var3) {
IntArrayList var4 = new IntArrayList();
var1.forEach((var5, var6) -> {
int var7 = var2.getOrDefault(var5, -1);
if (var7 < 0 || !this.tagMatcher.containsKey(var7)) {
try {
this.createTagSet((T)var6, var1, var2, var3, var4);
} catch (IllegalStateException var9) {
throw new IllegalStateException(var5 + ": ", var9);
}
var4.clear();
}
});
}
@Nonnull
class="kw">private IntSet createTagSet(
@Nonnull T var1, @Nonnull Map<String, T> var2, @Nonnull Object2IntMap<String> var3, @Nonnull Object2IntMap<String> var4, @Nonnull IntArrayList var5
) {
IntOpenHashSet var6 = new IntOpenHashSet();
int var7 = var3.getInt(var1.getId());
if (var5.contains(var7)) {
throw new IllegalStateException("Cyclic reference to set detected: " + var1.getId());
}
var5.add(var7);
this.tagMatcher.put(var7, var6);
if (!var4.isEmpty()) {
String[] var8 = var1.getIncludedTagSets();
if (var8 != null) {
for (String var12 : var8) {
this.consumeSet(var12, var2, var3, var4, var5, var6::addAll);
}
}
String[] var16 = var1.getExcludedTagSets();
if (var16 != null) {
for (String var13 : var16) {
this.consumeSet(var13, var2, var3, var4, var5, var6::removeAll);
}
}
String[] var18 = var1.getIncludedTags();
if (var18 != null) {
for (String var14 : var18) {
this.consumeTag(var14, var1, var4, var6::add);
}
}
String[] var21 = var1.getExcludedTags();
if (var21 != null) {
for (String var15 : var21) {
this.consumeTag(var15, var1, var4, var6::remove);
}
}
}
class="kw">return var6;
}
class="kw">private void consumeSet(
String var1,
@Nonnull Map<String, T> var2,
@Nonnull Object2IntMap<String> var3,
@Nonnull Object2IntMap<String> var4,
@Nonnull IntArrayList var5,
@Nonnull Consumer<IntSet> var6
) {
IntSet var7 = this.getOrCreateTagSet(var1, var2, var3, var4, var5);
if (var7 != null) {
var6.accept(var7);
}
}
class="kw">private void consumeTag(@Nonnull String var1, @Nonnull T var2, @Nonnull Object2IntMap<String> var3, @Nonnull IntConsumer var4) {
if (StringUtil.isGlobPattern(var1)) {
ObjectIterator var7 = Object2IntMaps.fastIterator(var3);
while (var7.hasNext()) {
Entry var6 = (Entry<String>)var7.next();
if (StringUtil.isGlobMatching(var1, (String)var6.getKey())) {
var4.accept(var6.getIntValue());
}
}
} else {
int var5 = var3.getOrDefault(var1, -1);
if (var5 >= 0) {
var4.accept(var5);
} else {
TagSetPlugin.get()
.getLogger()
.at(Level.WARNING)
.log("Tag Set '%s' references '%s' which is not a pattern and does not otherwise exist", var2.getId(), var1);
}
}
}
@Nullable
class="kw">private IntSet getOrCreateTagSet(
String var1, @Nonnull Map<String, T> var2, @Nonnull Object2IntMap<String> var3, @Nonnull Object2IntMap<String> var4, @Nonnull IntArrayList var5
) {
int var6 = var3.getOrDefault(var1, -1);
IntSet var7 = null;
if (var6 >= 0 && this.tagMatcher.containsKey(var6)) {
if (var5.contains(var6)) {
throw new IllegalStateException("Cyclic reference to set detected: " + var1);
}
var5.add(var6);
var7 = (IntSet)this.tagMatcher.get(var6);
} else {
TagSet var8 = var2.get(var1);
if (var8 != null) {
var7 = this.createTagSet(var8, var2, var3, var4, var5);
} else {
TagSetPlugin.get().getLogger().at(Level.WARNING).log("Creating tag sets: Tag Set '%s' does not exist, but is being referenced as a tag", var1);
}
}
var5.removeInt(var5.size() - 1);
class="kw">return var7;
}
@Nonnull
class="kw">public Int2ObjectMap<IntSet> getFlattenedSet() {
class="kw">return this.tagMatcher;
}
}