CompanionBlockSpawnerRecipeCompendium class
Пакет: com.hypixel.hytale.builtin.companionblockspawner
Файл: com/hypixel/hytale/builtin/companionblockspawner/CompanionBlockSpawnerRecipeCompendium.java
Поля (11)
| Модификаторы | Тип | Имя |
|---|---|---|
|
|
break |
|
BlockTypeAssetMap |
var1 |
|
int |
var1 |
|
Set |
var1 |
|
String |
var10 |
|
Set |
var11 |
|
CompanionBlockSpawnerRecipe.RequiredBlock[] |
var2 |
|
String |
var3 |
|
List |
var4 |
|
List |
var4 |
|
CompanionBlockSpawnerRecipe.RequiredBlock.MatchBy |
var9 |
Методы (11)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
for for(CompanionBlockSpawnerRecipe var3 : var1) |
|
|
for for(Set var6 : var4) |
|
|
for for(CompanionBlockSpawnerRecipe.RequiredBlock var8 : var2) |
public |
double |
getMaxRadiusdouble getMaxRadius() |
|
|
if if(var4 != null) |
|
|
if if(var2.length == 0) |
public |
boolean |
isEmptyboolean isEmpty() |
|
boolean |
isIngredientboolean isIngredient(@Nonnull String var1) |
|
boolean |
isParticipatingboolean isParticipating(@Nonnull String var1) |
|
void |
rebuildvoid rebuild(@Nonnull Collection<CompanionBlockSpawnerRecipe> var1) |
|
|
switch switch(var9) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.companionblockspawner;
class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.builtin.companionblockspawner.config.CompanionBlockSpawnerRecipe;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.spawning.assets.spawnmarker.config.SpawnMarker;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
class="kw">import java.util.ArrayList;
class="kw">import java.util.Collection;
class="kw">import java.util.List;
class="kw">import java.util.Set;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class="kw">final class CompanionBlockSpawnerRecipeCompendium {
@Nonnull
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
@Nonnull
class="kw">private class="kw">final Object2ObjectMap<String, List<CompanionBlockSpawnerRecipe>> recipeBySpawnerBlock = new Object2ObjectOpenHashMap();
@Nonnull
class="kw">private class="kw">final Object2ObjectMap<String, List<Set<String>>> entryKeysByRecipe = new Object2ObjectOpenHashMap();
@Nonnull
class="kw">private class="kw">final Set<String> ingredientKeys = new ObjectOpenHashSet();
class="kw">private double maxRadius;
class="kw">public CompanionBlockSpawnerRecipeCompendium() {
}
void rebuild(@Nonnull Collection<CompanionBlockSpawnerRecipe> var1) {
this.recipeBySpawnerBlock.clear();
this.entryKeysByRecipe.clear();
this.ingredientKeys.clear();
this.maxRadius = 0.0;
for (CompanionBlockSpawnerRecipe var3 : var1) {
List var4 = expandAndValidate(var3);
if (var4 != null) {
((List)this.recipeBySpawnerBlock.computeIfAbsent(var3.getSpawnerBlockTypeKey(), var0 -> new ArrayList(1))).add(var3);
this.entryKeysByRecipe.put(var3.getId(), var4);
for (Set var6 : var4) {
this.ingredientKeys.addAll(var6);
}
this.maxRadius = Math.max(this.maxRadius, var3.getRadius());
}
}
}
@Nullable
class="kw">private class="kw">static List<Set<String>> expandAndValidate(@Nonnull CompanionBlockSpawnerRecipe var0) {
BlockTypeAssetMap var1 = BlockType.getAssetMap();
if (var0.getSpawnerBlockTypeKey() != null && var1.getIndex(var0.getSpawnerBlockTypeKey()) != Integer.MIN_VALUE) {
CompanionBlockSpawnerRecipe.RequiredBlock[] var2 = var0.getRequiredBlocks();
if (var2.length == 0) {
LOGGER.at(Level.SEVERE).log("Companion block spawner recipe %s defines no required blocks - skipping", var0.getId());
class="kw">return null;
}
String var3 = var0.getSpawnMarker();
if (var3 != null && !var3.isEmpty() && SpawnMarker.getAssetMap().getAsset(var3) != null) {
List var4 = new ArrayList<>(var2.length);
for (CompanionBlockSpawnerRecipe.RequiredBlock var8 : var2) {
CompanionBlockSpawnerRecipe.RequiredBlock.MatchBy var9 = var8.getMatchBy();
String var10 = var8.getValue();
if (var9 == null || var10 == null || var10.isEmpty()) {
LOGGER.at(Level.SEVERE)
.log("Companion block spawner recipe %s: each RequiredBlocks entry must define MatchBy and Value - skipping", var0.getId());
class="kw">return null;
}
class="kw">switch (var9) {
case BLOCK_ID:
if (var1.getIndex(var10) == Integer.MIN_VALUE) {
LOGGER.at(Level.SEVERE).log("Companion block spawner recipe %s references unknown required block '%s' - skipping", var0.getId(), var10);
class="kw">return null;
}
var4.add(Set.of(var10));
break;
case TAG:
Set var11 = expandTag(var10);
if (var11.isEmpty()) {
LOGGER.at(Level.SEVERE).log("Companion block spawner recipe %s: tag '%s' matches no block types - skipping", var0.getId(), var10);
class="kw">return null;
}
var4.add(var11);
}
}
class="kw">return var4;
} else {
LOGGER.at(Level.SEVERE).log("Companion block spawner recipe %s references unknown spawn marker '%s' - skipping", var0.getId(), var3);
class="kw">return null;
}
} else {
LOGGER.at(Level.SEVERE)
.log("Companion block spawner recipe %s references unknown spawner block '%s' - skipping", var0.getId(), var0.getSpawnerBlockTypeKey());
class="kw">return null;
}
}
@Nonnull
class="kw">private class="kw">static Set<String> expandTag(@Nonnull String var0) {
int var1 = AssetRegistry.getTagIndex(var0);
class="kw">return (Set<String>)(var1 == Integer.MIN_VALUE ? Set.of() : new ObjectOpenHashSet(BlockType.getAssetMap().getKeysForTag(var1)));
}
@Nullable
List<CompanionBlockSpawnerRecipe> getRecipesForSpawner(@Nonnull String var1) {
class="kw">return (List<CompanionBlockSpawnerRecipe>)this.recipeBySpawnerBlock.get(var1);
}
@Nullable
class="kw">public List<Set<String>> getEntryKeySets(@Nonnull CompanionBlockSpawnerRecipe var1) {
class="kw">return (List<Set<String>>)this.entryKeysByRecipe.get(var1.getId());
}
boolean isIngredient(@Nonnull String var1) {
class="kw">return this.ingredientKeys.contains(var1);
}
boolean isParticipating(@Nonnull String var1) {
class="kw">return this.recipeBySpawnerBlock.containsKey(var1) || this.ingredientKeys.contains(var1);
}
@Nonnull
Set<String> getParticipatingKeys() {
Set var1 = new ObjectOpenHashSet(this.ingredientKeys);
var1.addAll(this.recipeBySpawnerBlock.keySet());
class="kw">return var1;
}
class="kw">public boolean isEmpty() {
class="kw">return this.recipeBySpawnerBlock.isEmpty();
}
class="kw">public double getMaxRadius() {
class="kw">return this.maxRadius;
}
}