WorldSpawnManager class
Пакет: com.hypixel.hytale.server.spawning.world.manager
Файл: com/hypixel/hytale/server/spawning/world/manager/WorldSpawnManager.java
extends: SpawnManager<WorldSpawnWrapper, WorldNPCSpawn>
Поля (63)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
Int2ObjectConcurrentHashMap<EnvironmentSpawnParameters> |
environmentSpawnParametersMap |
|
Store |
var1 |
|
Integer |
var10 |
|
IntIterator |
var11 |
|
int |
var11 |
|
Integer |
var12 |
|
RoleSpawnParameters |
var12 |
|
Integer |
var16 |
|
Integer |
var18 |
|
EnvironmentSpawnParameters |
var19 |
|
|
var19 |
|
WorldSpawnWrapper |
var2 |
|
WorldNPCSpawn |
var2 |
|
int |
var2 |
|
World |
var2 |
|
boolean |
var2 |
|
Store |
var2 |
|
ObjectIterator |
var20 |
|
IntIterator |
var21 |
|
Entry |
var22 |
|
Integer |
var23 |
|
IntSet |
var3 |
|
IndexedLookupTableAssetMap |
var3 |
|
EnvironmentSpawnParameters |
var3 |
|
EnvironmentSpawnParameters |
var3 |
|
IntIterator |
var3 |
|
WorldSpawnData |
var3 |
|
WorldSpawnData |
var3 |
|
WorldTimeResource |
var3 |
|
Store |
var3 |
|
IntIterator |
var4 |
|
|
var4 |
|
IntSet |
var4 |
|
Integer |
var4 |
|
WorldSpawnData |
var4 |
|
EnvironmentSpawnParameters |
var4 |
|
SpawnJobData |
var4 |
|
WorldSpawnData |
var4 |
|
int |
var5 |
|
Int2ObjectMap |
var5 |
|
WorldNPCSpawn |
var5 |
|
NPCEntity |
var5 |
|
NPCEntity |
var5 |
|
Iterator |
var5 |
|
Store |
var5 |
|
EnvironmentSpawnParameters |
var6 |
|
int |
var6 |
|
NPCEntity |
var6 |
|
int |
var6 |
|
int |
var6 |
|
WorldSpawnData |
var6 |
|
IntIterator |
var7 |
|
|
var7 |
|
|
var7 |
|
int |
var7 |
|
int |
var7 |
|
WorldEnvironmentSpawnData |
var7 |
|
Iterator |
var7 |
|
Integer |
var8 |
|
boolean |
var8 |
|
int |
var8 |
|
int |
var9 |
|
IntIterator |
var9 |
Методы (34)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
private |
void |
addCombinationvoid addCombination(int var1, int var2, int var3) |
public |
boolean |
addSpawnWrapperboolean addSpawnWrapper(@Nonnull WorldSpawnWrapper var1) |
static |
long |
combinedIndexlong combinedIndex(int var0, int var1) |
abstract |
|
for for(int var5 = 0; var5 < var3x.size() |
abstract |
|
for for(int var4 = 0; var4 < var2x.size() |
private |
String |
getCombinationString getCombination(int var1, int var2) |
public |
EnvironmentSpawnParameters |
getEnvironmentSpawnParametersEnvironmentSpawnParameters getEnvironmentSpawnParameters(int var1) |
public |
IntSet |
getRolesForEnvironmentIntSet getRolesForEnvironment(int var1) |
private |
boolean |
haveCombinationboolean haveCombination(int var1, int var2) |
|
|
if if(var2 == null) |
|
|
if if(var6 != null) |
|
|
if if(var19 == null) |
|
|
if if(var3 == null) |
|
|
if if(!var8) |
|
|
if if(var1 >= 0) |
|
|
if if(var2) |
|
|
if if(var4 != null) |
|
|
if if(var7 != null) |
static |
void |
onEnvironmentChangedvoid onEnvironmentChanged() |
static |
void |
onEnvironmentChangedvoid onEnvironmentChanged(@Nonnull World var0) |
abstract |
|
onEnvironmentChanged onEnvironmentChanged() |
static |
void |
onRoleAddedvoid onRoleAdded(@Nonnull World var0, int var1, @Nonnull IntSet var2, WorldSpawnWrapper var3, @Nonnull RoleSpawnParameters var4) |
abstract |
|
onRoleAdded onRoleAdded(var17, var11, var4, var1, var12) |
static |
void |
onRoleRemovedvoid onRoleRemoved(@Nonnull World var0, int var1, @Nonnull IntSet var2) |
abstract |
|
onRoleRemoved onRoleRemoved(var7, var9, var3) |
public |
void |
rebuildConfigurationsvoid rebuildConfigurations(@Nullable IntSet var1) |
private |
void |
removeCombinationvoid removeCombination(int var1, int var2) |
static |
void |
trackNPCsvoid trackNPCs(@Nonnull IntSet var0) |
abstract |
|
trackNPCs trackNPCs(var1) |
static |
void |
untrackNPCvoid untrackNPC(@Nonnull World var0, @Nonnull NPCEntity var1) |
abstract |
|
untrackNPC untrackNPC(var2, var5) |
static |
void |
untrackNPCsvoid untrackNPCs(@Nonnull IntSet var0) |
abstract |
|
untrackNPCs untrackNPCs(var1) |
public |
void |
updateSpawnParametersvoid updateSpawnParameters(int var1, @Nullable Environment var2) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.spawning.world.manager;
class="kw">import com.hypixel.fastutil.ints.Int2ObjectConcurrentHashMap;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.server.core.asset.type.environment.config.Environment;
class="kw">import com.hypixel.hytale.server.core.modules.time.WorldTimeResource;
class="kw">import com.hypixel.hytale.server.core.universe.Universe;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.entities.NPCEntity;
class="kw">import com.hypixel.hytale.server.spawning.SpawningPlugin;
class="kw">import com.hypixel.hytale.server.spawning.assets.spawns.config.RoleSpawnParameters;
class="kw">import com.hypixel.hytale.server.spawning.assets.spawns.config.WorldNPCSpawn;
class="kw">import com.hypixel.hytale.server.spawning.managers.SpawnManager;
class="kw">import com.hypixel.hytale.server.spawning.world.WorldEnvironmentSpawnData;
class="kw">import com.hypixel.hytale.server.spawning.world.component.SpawnJobData;
class="kw">import com.hypixel.hytale.server.spawning.world.component.WorldSpawnData;
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.IntIterator;
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.ints.Int2ObjectMap.Entry;
class="kw">import it.unimi.dsi.fastutil.longs.Long2IntMap;
class="kw">import it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import java.util.Iterator;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class WorldSpawnManager class="kw">extends SpawnManager<WorldSpawnWrapper, WorldNPCSpawn> {
class="kw">protected class="kw">final Int2ObjectConcurrentHashMap<EnvironmentSpawnParameters> environmentSpawnParametersMap = new Int2ObjectConcurrentHashMap<>();
class="kw">protected class="kw">final Long2IntMap npcEnvCombinations = new Long2IntOpenHashMap();
class="kw">protected class="kw">final Int2ObjectMap<IntSet> npcTypesPerEnvironment = new Int2ObjectOpenHashMap();
class="kw">public WorldSpawnManager() {
this.npcEnvCombinations.defaultReturnValue(Integer.MIN_VALUE);
}
@Nullable
class="kw">public WorldSpawnWrapper removeSpawnWrapper(int var1) {
WorldSpawnWrapper var2 = (WorldSpawnWrapper)super.removeSpawnWrapper(var1);
if (var2 == null) {
class="kw">return null;
}
IntSet var3 = var2.getSpawn().getEnvironmentIds();
IntIterator var4 = var3.iterator();
while (var4.hasNext()) {
int var5 = (Integer)var4.next();
EnvironmentSpawnParameters var6 = this.environmentSpawnParametersMap.get(var5);
if (var6 != null) {
var6.getSpawnWrappers().remove(var2);
}
}
var4 = var2.getRoles().keySet().iterator();
while (var4.hasNext()) {
int var9 = (Integer)var4.next();
for (World var7 : Universe.get().getWorlds().values()) {
onRoleRemoved(var7, var9, var3);
}
IntIterator var11 = var3.iterator();
while (var11.hasNext()) {
Integer var12 = (Integer)var11.next();
this.removeCombination(var9, var12);
}
}
class="kw">return var2;
}
class="kw">public boolean addSpawnWrapper(@Nonnull WorldSpawnWrapper var1) {
WorldNPCSpawn var2 = var1.getSpawn();
IndexedLookupTableAssetMap var3 = Environment.getAssetMap();
IntSet var4 = var1.getSpawn().getEnvironmentIds();
Int2ObjectMap var5 = var1.getRoles();
int var6 = var1.getSpawnIndex();
IntIterator var7 = var5.keySet().iterator();
while (var7.hasNext()) {
Integer var8 = (Integer)var7.next();
IntIterator var9 = var4.iterator();
while (var9.hasNext()) {
Integer var10 = (Integer)var9.next();
if (this.haveCombination(var8, var10)) {
SpawningPlugin.get()
.getLogger()
.at(Level.SEVERE)
.log(
"Spawning Configuration %s can't be utilised: Combination NPC %s with Environment %s defined before in configuration %s",
var2.getId(),
NPCPlugin.get().getName(var8),
var3.getAsset(var10).getId(),
this.getCombination(var8, var10)
);
class="kw">return false;
}
}
}
var7 = var4.iterator();
while (var7.hasNext()) {
Integer var16 = (Integer)var7.next();
EnvironmentSpawnParameters var19 = this.environmentSpawnParametersMap.get(var16);
if (var19 == null) {
var19 = this.createEnvironmentSpawnParameters(var16, var3.getAsset(var16));
}
var19.getSpawnWrappers().add(var1);
}
for (World var17 : Universe.get().getWorlds().values()) {
ObjectIterator var20 = var5.int2ObjectEntrySet().iterator();
while (var20.hasNext()) {
Entry var22 = (Entry<RoleSpawnParameters>)var20.next();
int var11 = var22.getIntKey();
RoleSpawnParameters var12 = (RoleSpawnParameters)var22.getValue();
onRoleAdded(var17, var11, var4, var1, var12);
}
}
var7 = var5.keySet().iterator();
while (var7.hasNext()) {
Integer var18 = (Integer)var7.next();
IntIterator var21 = var4.iterator();
while (var21.hasNext()) {
Integer var23 = (Integer)var21.next();
this.addCombination(var18, var23, var6);
}
}
super.addSpawnWrapper(var1);
class="kw">return true;
}
class="kw">public IntSet getRolesForEnvironment(int var1) {
class="kw">return (IntSet)this.npcTypesPerEnvironment.get(var1);
}
@Nonnull
class="kw">public EnvironmentSpawnParameters createEnvironmentSpawnParameters(int var1, @Nullable Environment var2) {
EnvironmentSpawnParameters var3 = new EnvironmentSpawnParameters(var2 != null ? var2.getSpawnDensity() : 0.0);
this.environmentSpawnParametersMap.put(var1, var3);
class="kw">return var3;
}
class="kw">public EnvironmentSpawnParameters getEnvironmentSpawnParameters(int var1) {
class="kw">return this.environmentSpawnParametersMap.get(var1);
}
class="kw">public void updateSpawnParameters(int var1, @Nullable Environment var2) {
EnvironmentSpawnParameters var3 = this.getEnvironmentSpawnParameters(var1);
if (var3 == null) {
this.createEnvironmentSpawnParameters(var1, var2);
} else {
var3.setDensity(var2 != null ? var2.getSpawnDensity() : 0.0);
}
}
class="kw">public void rebuildConfigurations(@Nullable IntSet var1) {
if (var1 != null && !var1.isEmpty()) {
untrackNPCs(var1);
int var2 = 0;
IntIterator var3 = var1.iterator();
while (var3.hasNext()) {
Integer var4 = (Integer)var3.next();
this.removeSpawnWrapper(var4);
WorldNPCSpawn var5 = WorldNPCSpawn.getAssetMap().getAssetOrDefault(var4, null);
if (var5 != null && this.addSpawnWrapper(new WorldSpawnWrapper(var5))) {
var2++;
}
}
trackNPCs(var1);
SpawningPlugin.get().getLogger().at(Level.INFO).log("Successfully rebuilt %s world spawn configurations", var2);
}
}
class="kw">public class="kw">static void trackNPCs(@Nonnull IntSet var0) {
Universe.get().getWorlds().forEach((var1, var2) -> var2.execute(() -> {
World var2 = var2.getEntityStore().getStore();
WorldSpawnData var3 = var2.getResource(WorldSpawnData.getResourceType());
var2.forEachChunk(NPCEntity.getComponentType(), (var3x, var4) -> {
for (int var5 = 0; var5 < var3x.size(); var5++) {
NPCEntity var6 = var3x.getComponent(var5, NPCEntity.getComponentType());
int var7 = var6.getSpawnConfiguration();
if (var7 >= 0 && var0.contains(var7)) {
boolean var8 = var6.updateSpawnTrackingState(true);
if (!var8) {
var3.trackNPC(var6.getEnvironment(), var6.getRoleIndex(), 1, var2, var4);
}
}
}
});
}));
}
@Override
class="kw">public void untrackNPCs(int var1) {
if (var1 >= 0) {
Universe.get()
.getWorlds()
.forEach((var1x, var2) -> var2.execute(() -> var2.getEntityStore().getStore().forEachChunk(NPCEntity.getComponentType(), (var2x, var3) -> {
for (int var4 = 0; var4 < var2x.size(); var4++) {
NPCEntity var5 = var2x.getComponent(var4, NPCEntity.getComponentType());
if (var5.getSpawnConfiguration() == var1) {
untrackNPC(var2, var5);
}
}
})));
}
}
class="kw">public class="kw">static void untrackNPCs(@Nonnull IntSet var0) {
Universe.get()
.getWorlds()
.forEach((var1, var2) -> var2.execute(() -> var2.getEntityStore().getStore().forEachChunk(NPCEntity.getComponentType(), (var2x, var3) -> {
for (int var4 = 0; var4 < var2x.size(); var4++) {
NPCEntity var5 = var2x.getComponent(var4, NPCEntity.getComponentType());
int var6 = var5.getSpawnConfiguration();
if (var6 >= 0 && var0.contains(var6)) {
untrackNPC(var2, var5);
}
}
})));
}
class="kw">public class="kw">static void onEnvironmentChanged() {
Universe.get().getWorlds().forEach((var0, var1) -> var1.execute(() -> onEnvironmentChanged(var1)));
}
class="kw">private class="kw">static void untrackNPC(@Nonnull World var0, @Nonnull NPCEntity var1) {
boolean var2 = var1.updateSpawnTrackingState(false);
if (var2) {
WorldSpawnData var3 = var0.getEntityStore().getStore().getResource(WorldSpawnData.getResourceType());
var3.untrackNPC(var1.getEnvironment(), var1.getRoleIndex(), 1);
}
}
class="kw">private class="kw">static void onEnvironmentChanged(@Nonnull World var0) {
Store var1 = var0.getEntityStore().getStore();
Store var2 = var0.getChunkStore().getStore();
WorldTimeResource var3 = var1.getResource(WorldTimeResource.getResourceType());
WorldSpawnData var4 = var1.getResource(WorldSpawnData.getResourceType());
var4.forEachEnvironmentSpawnData(var3x -> {
EnvironmentSpawnParameters var4 = SpawningPlugin.get().getWorldEnvironmentSpawnParameters(var3x.getEnvironmentIndex());
if (var4 != null) {
var3x.setDensity(var4.getSpawnDensity(), var2);
for (WorldSpawnWrapper var6 : var4.getSpawnWrappers()) {
var3x.updateNPCs(var6, var0);
}
int var7 = var3.getMoonPhase();
var3x.recalculateWeight(var7);
var3x.resetUnspawnable();
} else {
var3x.setDensity(0.0, var2);
var3x.clearNPCs();
}
});
var4.recalculateWorldCount();
}
class="kw">private class="kw">static void onRoleRemoved(@Nonnull World var0, int var1, @Nonnull IntSet var2) {
var0.execute(() -> {
var0.getChunkStore().getStore().forEachEntityParallel(SpawnJobData.getComponentType(), (var1x, var2x, var3x) -> {
SpawnJobData var4 = var2x.getComponent(var1x, SpawnJobData.getComponentType());
assert var4 != null;
if (var4.getRoleIndex() == var1) {
var4.terminate();
}
});
Store var3 = var0.getEntityStore().getStore();
WorldSpawnData var4 = var3.getResource(WorldSpawnData.getResourceType());
Iterator var5 = var2.iterator();
while (var5.hasNext()) {
int var6 = (Integer)var5.next();
WorldEnvironmentSpawnData var7 = var4.getWorldEnvironmentSpawnData(var6);
if (var7 != null) {
var7.removeNPC(var1, var3);
}
}
});
}
class="kw">private class="kw">static void onRoleAdded(@Nonnull World var0, int var1, @Nonnull IntSet var2, WorldSpawnWrapper var3, @Nonnull RoleSpawnParameters var4) {
var0.execute(() -> {
Store var5 = var0.getEntityStore().getStore();
WorldSpawnData var6 = var5.getResource(WorldSpawnData.getResourceType());
Iterator var7 = var2.iterator();
while (var7.hasNext()) {
int var8 = (Integer)var7.next();
var6.getOrCreateWorldEnvironmentSpawnData(var8, var0, var5).addNPC(var1, var3, var4, var0, var5);
}
onEnvironmentChanged();
});
}
class="kw">private class="kw">static long combinedIndex(int var0, int var1) {
class="kw">return ((long)var0 << 32) + var1;
}
class="kw">private boolean haveCombination(int var1, int var2) {
class="kw">return this.npcEnvCombinations.containsKey(combinedIndex(var1, var2));
}
class="kw">private void addCombination(int var1, int var2, int var3) {
this.npcEnvCombinations.put(combinedIndex(var1, var2), var3);
((IntSet)this.npcTypesPerEnvironment.computeIfAbsent(var2, var0 -> new IntOpenHashSet())).add(var1);
}
class="kw">private void removeCombination(int var1, int var2) {
this.npcEnvCombinations.remove(combinedIndex(var1, var2));
((IntSet)this.npcTypesPerEnvironment.get(var2)).remove(var1);
}
class="kw">private String getCombination(int var1, int var2) {
class="kw">return WorldNPCSpawn.getAssetMap().getAsset(this.npcEnvCombinations.get(combinedIndex(var1, var2))).getId();
}
}