2026.02.19-1a311a592
This commit is contained in:
@@ -128,15 +128,14 @@ public class MemoriesPlugin extends JavaPlugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void start() {
|
protected void start() {
|
||||||
try {
|
Path path = Constants.UNIVERSE_PATH.resolve("memories.json");
|
||||||
Path path = Constants.UNIVERSE_PATH.resolve("memories.json");
|
if (Files.exists(path)) {
|
||||||
if (Files.exists(path)) {
|
this.recordedMemories = RawJsonReader.readSyncWithBak(path, MemoriesPlugin.RecordedMemories.CODEC, this.getLogger());
|
||||||
this.recordedMemories = RawJsonReader.readSync(path, MemoriesPlugin.RecordedMemories.CODEC, this.getLogger());
|
if (this.recordedMemories == null) {
|
||||||
} else {
|
|
||||||
this.recordedMemories = new MemoriesPlugin.RecordedMemories();
|
this.recordedMemories = new MemoriesPlugin.RecordedMemories();
|
||||||
}
|
}
|
||||||
} catch (IOException var2) {
|
} else {
|
||||||
throw new RuntimeException(var2);
|
this.recordedMemories = new MemoriesPlugin.RecordedMemories();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.hasInitializedMemories = true;
|
this.hasInitializedMemories = true;
|
||||||
|
|||||||
@@ -232,7 +232,6 @@ public class ArchetypeChunk<ECS_TYPE> {
|
|||||||
@Nonnull IntObjectConsumer<Ref<ECS_TYPE>> referenceConsumer
|
@Nonnull IntObjectConsumer<Ref<ECS_TYPE>> referenceConsumer
|
||||||
) {
|
) {
|
||||||
int firstTransfered = Integer.MIN_VALUE;
|
int firstTransfered = Integer.MIN_VALUE;
|
||||||
int lastTransfered = Integer.MIN_VALUE;
|
|
||||||
Component<ECS_TYPE>[] entityComponents = new Component[this.archetype.length()];
|
Component<ECS_TYPE>[] entityComponents = new Component[this.archetype.length()];
|
||||||
|
|
||||||
for (int entityIndex = 0; entityIndex < this.entitiesSize; entityIndex++) {
|
for (int entityIndex = 0; entityIndex < this.entitiesSize; entityIndex++) {
|
||||||
@@ -241,7 +240,6 @@ public class ArchetypeChunk<ECS_TYPE> {
|
|||||||
firstTransfered = entityIndex;
|
firstTransfered = entityIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
lastTransfered = entityIndex;
|
|
||||||
Ref<ECS_TYPE> ref = this.refs[entityIndex];
|
Ref<ECS_TYPE> ref = this.refs[entityIndex];
|
||||||
this.refs[entityIndex] = null;
|
this.refs[entityIndex] = null;
|
||||||
|
|
||||||
@@ -263,29 +261,31 @@ public class ArchetypeChunk<ECS_TYPE> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (firstTransfered != Integer.MIN_VALUE) {
|
if (firstTransfered != Integer.MIN_VALUE) {
|
||||||
if (lastTransfered == this.entitiesSize - 1) {
|
int writeIndex = firstTransfered;
|
||||||
this.entitiesSize = firstTransfered;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int newSize = this.entitiesSize - (lastTransfered - firstTransfered + 1);
|
for (int readIndex = firstTransfered + 1; readIndex < this.entitiesSize; readIndex++) {
|
||||||
|
if (this.refs[readIndex] != null) {
|
||||||
for (int entityIndexx = firstTransfered; entityIndexx <= lastTransfered; entityIndexx++) {
|
if (writeIndex != readIndex) {
|
||||||
if (this.refs[entityIndexx] == null) {
|
this.fillEmptyIndex(writeIndex, readIndex);
|
||||||
int lastIndex = this.entitiesSize - 1;
|
|
||||||
if (lastIndex == lastTransfered) {
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entityIndexx != lastIndex) {
|
writeIndex++;
|
||||||
this.fillEmptyIndex(entityIndexx, lastIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.entitiesSize--;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.entitiesSize = newSize;
|
for (int ix = writeIndex; ix < this.entitiesSize; ix++) {
|
||||||
|
this.refs[ix] = null;
|
||||||
|
|
||||||
|
for (int j = this.archetype.getMinIndex(); j < this.archetype.length(); j++) {
|
||||||
|
ComponentType<ECS_TYPE, ? extends Component<ECS_TYPE>> componentType = (ComponentType<ECS_TYPE, ? extends Component<ECS_TYPE>>)this.archetype
|
||||||
|
.get(j);
|
||||||
|
if (componentType != null) {
|
||||||
|
this.components[componentType.getIndex()][ix] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.entitiesSize = writeIndex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import com.hypixel.hytale.common.util.PathUtil;
|
|||||||
import com.hypixel.hytale.common.util.java.ManifestUtil;
|
import com.hypixel.hytale.common.util.java.ManifestUtil;
|
||||||
import com.hypixel.hytale.event.EventPriority;
|
import com.hypixel.hytale.event.EventPriority;
|
||||||
import com.hypixel.hytale.logger.HytaleLogger;
|
import com.hypixel.hytale.logger.HytaleLogger;
|
||||||
import com.hypixel.hytale.server.core.Constants;
|
|
||||||
import com.hypixel.hytale.server.core.HytaleServer;
|
import com.hypixel.hytale.server.core.HytaleServer;
|
||||||
import com.hypixel.hytale.server.core.HytaleServerConfig;
|
import com.hypixel.hytale.server.core.HytaleServerConfig;
|
||||||
import com.hypixel.hytale.server.core.Message;
|
import com.hypixel.hytale.server.core.Message;
|
||||||
@@ -54,7 +53,6 @@ import java.nio.file.FileSystem;
|
|||||||
import java.nio.file.FileSystems;
|
import java.nio.file.FileSystems;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.time.Duration;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
@@ -161,15 +159,6 @@ public class AssetModule extends JavaPlugin {
|
|||||||
this.getLogger()
|
this.getLogger()
|
||||||
.at(Level.SEVERE)
|
.at(Level.SEVERE)
|
||||||
.log("One or more asset packs are targeting an older server version. It is recommended to update these plugins to ensure compatibility.");
|
.log("One or more asset packs are targeting an older server version. It is recommended to update these plugins to ensure compatibility.");
|
||||||
|
|
||||||
try {
|
|
||||||
if (!Constants.SINGLEPLAYER) {
|
|
||||||
Thread.sleep(Duration.ofSeconds(2L));
|
|
||||||
}
|
|
||||||
} catch (InterruptedException var9) {
|
|
||||||
throw new RuntimeException(var9);
|
|
||||||
}
|
|
||||||
|
|
||||||
HytaleServer.get().getEventBus().registerGlobal(AddPlayerToWorldEvent.class, event -> {
|
HytaleServer.get().getEventBus().registerGlobal(AddPlayerToWorldEvent.class, event -> {
|
||||||
PlayerRef playerRef = event.getHolder().getComponent(PlayerRef.getComponentType());
|
PlayerRef playerRef = event.getHolder().getComponent(PlayerRef.getComponentType());
|
||||||
Player player = event.getHolder().getComponent(Player.getComponentType());
|
Player player = event.getHolder().getComponent(Player.getComponentType());
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ public class PluginClassLoader extends URLClassLoader {
|
|||||||
public static boolean isFromThirdPartyPlugin(@Nullable Throwable throwable) {
|
public static boolean isFromThirdPartyPlugin(@Nullable Throwable throwable) {
|
||||||
while (throwable != null) {
|
while (throwable != null) {
|
||||||
for (StackTraceElement element : throwable.getStackTrace()) {
|
for (StackTraceElement element : throwable.getStackTrace()) {
|
||||||
if ("ThirdParty".equals(element.getClassLoaderName())) {
|
if (element.getClassLoaderName() != null && element.getClassLoaderName().startsWith("ThirdParty")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ import java.nio.file.FileSystems;
|
|||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.time.Duration;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -157,8 +156,8 @@ public class PluginManager {
|
|||||||
Path self;
|
Path self;
|
||||||
try {
|
try {
|
||||||
self = Paths.get(PluginManager.class.getProtectionDomain().getCodeSource().getLocation().toURI());
|
self = Paths.get(PluginManager.class.getProtectionDomain().getCodeSource().getLocation().toURI());
|
||||||
} catch (URISyntaxException var30) {
|
} catch (URISyntaxException var28) {
|
||||||
throw new RuntimeException(var30);
|
throw new RuntimeException(var28);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.loadPluginsFromDirectory(pending, self.getParent().resolve("builtin"), false, this.availablePlugins);
|
this.loadPluginsFromDirectory(pending, self.getParent().resolve("builtin"), false, this.availablePlugins);
|
||||||
@@ -183,8 +182,8 @@ public class PluginManager {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
this.validatePluginDeps(pendingLoadPlugin, pending);
|
this.validatePluginDeps(pendingLoadPlugin, pending);
|
||||||
} catch (MissingPluginDependencyException var29) {
|
} catch (MissingPluginDependencyException var27) {
|
||||||
LOGGER.at(Level.SEVERE).log(var29.getMessage());
|
LOGGER.at(Level.SEVERE).log(var27.getMessage());
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -195,15 +194,6 @@ public class PluginManager {
|
|||||||
if (this.hasOutdatedPlugins && System.getProperty("hytale.allow_outdated_mods") == null) {
|
if (this.hasOutdatedPlugins && System.getProperty("hytale.allow_outdated_mods") == null) {
|
||||||
LOGGER.at(Level.SEVERE)
|
LOGGER.at(Level.SEVERE)
|
||||||
.log("One or more plugins are targeting a different server version. It is recommended to update these plugins to ensure compatibility.");
|
.log("One or more plugins are targeting a different server version. It is recommended to update these plugins to ensure compatibility.");
|
||||||
|
|
||||||
try {
|
|
||||||
if (!Constants.SINGLEPLAYER) {
|
|
||||||
Thread.sleep(Duration.ofSeconds(2L));
|
|
||||||
}
|
|
||||||
} catch (InterruptedException var32) {
|
|
||||||
throw new RuntimeException(var32);
|
|
||||||
}
|
|
||||||
|
|
||||||
HytaleServer.get().getEventBus().registerGlobal(AddPlayerToWorldEvent.class, event -> {
|
HytaleServer.get().getEventBus().registerGlobal(AddPlayerToWorldEvent.class, event -> {
|
||||||
PlayerRef playerRef = event.getHolder().getComponent(PlayerRef.getComponentType());
|
PlayerRef playerRef = event.getHolder().getComponent(PlayerRef.getComponentType());
|
||||||
Player player = event.getHolder().getComponent(Player.getComponentType());
|
Player player = event.getHolder().getComponent(Player.getComponentType());
|
||||||
@@ -236,14 +226,14 @@ public class PluginManager {
|
|||||||
if (future != null) {
|
if (future != null) {
|
||||||
preLoadFutures.add(future);
|
preLoadFutures.add(future);
|
||||||
}
|
}
|
||||||
} catch (ClassNotFoundException var26) {
|
} catch (ClassNotFoundException var24) {
|
||||||
LOGGER.at(Level.SEVERE).withCause(var26).log("Failed to load plugin %s. Failed to find main class!", pendingLoadPlugin.getPath());
|
LOGGER.at(Level.SEVERE).withCause(var24).log("Failed to load plugin %s. Failed to find main class!", pendingLoadPlugin.getPath());
|
||||||
failedBootPlugins.add(pendingLoadPlugin.getIdentifier());
|
failedBootPlugins.add(pendingLoadPlugin.getIdentifier());
|
||||||
} catch (NoSuchMethodException var27) {
|
} catch (NoSuchMethodException var25) {
|
||||||
LOGGER.at(Level.SEVERE).withCause(var27).log("Failed to load plugin %s. Requires default constructor!", pendingLoadPlugin.getPath());
|
LOGGER.at(Level.SEVERE).withCause(var25).log("Failed to load plugin %s. Requires default constructor!", pendingLoadPlugin.getPath());
|
||||||
failedBootPlugins.add(pendingLoadPlugin.getIdentifier());
|
failedBootPlugins.add(pendingLoadPlugin.getIdentifier());
|
||||||
} catch (Throwable var28) {
|
} catch (Throwable var26) {
|
||||||
LOGGER.at(Level.SEVERE).withCause(var28).log("Failed to load plugin %s", pendingLoadPlugin.getPath());
|
LOGGER.at(Level.SEVERE).withCause(var26).log("Failed to load plugin %s", pendingLoadPlugin.getPath());
|
||||||
failedBootPlugins.add(pendingLoadPlugin.getIdentifier());
|
failedBootPlugins.add(pendingLoadPlugin.getIdentifier());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -249,42 +249,42 @@ public class WorldSpawningSystem extends TickingSystem<ChunkStore> {
|
|||||||
boolean fullyPopulated = true;
|
boolean fullyPopulated = true;
|
||||||
if (wasFullyPopulated) {
|
if (wasFullyPopulated) {
|
||||||
for (Ref<ChunkStore> chunkRef : chunkRefSet) {
|
for (Ref<ChunkStore> chunkRef : chunkRefSet) {
|
||||||
ChunkSpawnData chunkSpawnDataComponent = store.getComponent(chunkRef, this.chunkSpawnDataComponentType);
|
if (chunkRef.isValid()) {
|
||||||
|
ChunkSpawnData chunkSpawnDataComponent = store.getComponent(chunkRef, this.chunkSpawnDataComponentType);
|
||||||
assert chunkSpawnDataComponent != null;
|
if (chunkSpawnDataComponent != null) {
|
||||||
|
ChunkSpawnedNPCData chunkSpawnedNPCDataComponent = store.getComponent(chunkRef, this.chunkSpawnedNPCDataComponentType);
|
||||||
ChunkSpawnedNPCData chunkSpawnedNPCDataComponent = store.getComponent(chunkRef, this.chunkSpawnedNPCDataComponentType);
|
if (chunkSpawnedNPCDataComponent != null) {
|
||||||
|
ChunkEnvironmentSpawnData chunkEnvironmentSpawnData = chunkSpawnDataComponent.getEnvironmentSpawnData(environmentIndex);
|
||||||
assert chunkSpawnedNPCDataComponent != null;
|
fullyPopulated = fullyPopulated
|
||||||
|
&& chunkEnvironmentSpawnData.isFullyPopulated(chunkSpawnedNPCDataComponent.getEnvironmentSpawnCount(environmentIndex));
|
||||||
ChunkEnvironmentSpawnData chunkEnvironmentSpawnData = chunkSpawnDataComponent.getEnvironmentSpawnData(environmentIndex);
|
if (chunkEnvironmentSpawnData.isRoleSpawnable(roleIndex)) {
|
||||||
fullyPopulated = fullyPopulated
|
spawnable = true;
|
||||||
&& chunkEnvironmentSpawnData.isFullyPopulated(chunkSpawnedNPCDataComponent.getEnvironmentSpawnCount(environmentIndex));
|
weight += store.getComponent(chunkRef, this.spawnJobDataComponentType) == null && !getAndUpdateSpawnCooldown(chunkSpawnDataComponent)
|
||||||
if (chunkEnvironmentSpawnData.isRoleSpawnable(roleIndex)) {
|
? 1.0
|
||||||
spawnable = true;
|
: 0.0;
|
||||||
weight += store.getComponent(chunkRef, this.spawnJobDataComponentType) == null && !getAndUpdateSpawnCooldown(chunkSpawnDataComponent)
|
}
|
||||||
? 1.0
|
}
|
||||||
: 0.0;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (Ref<ChunkStore> chunkRef : chunkRefSet) {
|
for (Ref<ChunkStore> chunkRefx : chunkRefSet) {
|
||||||
ChunkSpawnData chunkSpawnDataComponentx = store.getComponent(chunkRef, this.chunkSpawnDataComponentType);
|
if (chunkRefx.isValid()) {
|
||||||
|
ChunkSpawnData chunkSpawnDataComponent = store.getComponent(chunkRefx, this.chunkSpawnDataComponentType);
|
||||||
assert chunkSpawnDataComponentx != null;
|
if (chunkSpawnDataComponent != null) {
|
||||||
|
ChunkSpawnedNPCData chunkSpawnedNPCDataComponent = store.getComponent(chunkRefx, this.chunkSpawnedNPCDataComponentType);
|
||||||
ChunkSpawnedNPCData chunkSpawnedNPCDataComponentx = store.getComponent(chunkRef, this.chunkSpawnedNPCDataComponentType);
|
if (chunkSpawnedNPCDataComponent != null) {
|
||||||
|
ChunkEnvironmentSpawnData chunkEnvironmentSpawnData = chunkSpawnDataComponent.getEnvironmentSpawnData(environmentIndex);
|
||||||
assert chunkSpawnedNPCDataComponentx != null;
|
double spawnCount = chunkSpawnedNPCDataComponent.getEnvironmentSpawnCount(environmentIndex);
|
||||||
|
fullyPopulated = fullyPopulated && chunkEnvironmentSpawnData.isFullyPopulated(spawnCount);
|
||||||
ChunkEnvironmentSpawnData chunkEnvironmentSpawnData = chunkSpawnDataComponentx.getEnvironmentSpawnData(environmentIndex);
|
if (chunkEnvironmentSpawnData.isRoleSpawnable(roleIndex)) {
|
||||||
double spawnCount = chunkSpawnedNPCDataComponentx.getEnvironmentSpawnCount(environmentIndex);
|
spawnable = true;
|
||||||
fullyPopulated = fullyPopulated && chunkEnvironmentSpawnData.isFullyPopulated(spawnCount);
|
weight += store.getComponent(chunkRefx, this.spawnJobDataComponentType) == null && !getAndUpdateSpawnCooldown(chunkSpawnDataComponent)
|
||||||
if (chunkEnvironmentSpawnData.isRoleSpawnable(roleIndex)) {
|
? chunkEnvironmentSpawnData.getWeight(spawnCount)
|
||||||
spawnable = true;
|
: 0.0;
|
||||||
weight += store.getComponent(chunkRef, this.spawnJobDataComponentType) == null && !getAndUpdateSpawnCooldown(chunkSpawnDataComponentx)
|
}
|
||||||
? chunkEnvironmentSpawnData.getWeight(spawnCount)
|
}
|
||||||
: 0.0;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -293,8 +293,8 @@ public class WorldSpawningSystem extends TickingSystem<ChunkStore> {
|
|||||||
if (spawnable) {
|
if (spawnable) {
|
||||||
return RandomExtra.randomWeightedElement(
|
return RandomExtra.randomWeightedElement(
|
||||||
chunkRefSet,
|
chunkRefSet,
|
||||||
(chunkRefx, index) -> {
|
(chunkRefxx, index) -> {
|
||||||
ChunkSpawnData chunkSpawnDataComponent = store.getComponent(chunkRefx, this.chunkSpawnDataComponentType);
|
ChunkSpawnData chunkSpawnDataComponent = store.getComponent(chunkRefxx, this.chunkSpawnDataComponentType);
|
||||||
|
|
||||||
assert chunkSpawnDataComponent != null;
|
assert chunkSpawnDataComponent != null;
|
||||||
|
|
||||||
@@ -302,24 +302,24 @@ public class WorldSpawningSystem extends TickingSystem<ChunkStore> {
|
|||||||
return chunkEnvironmentSpawnDatax.isRoleSpawnable(index);
|
return chunkEnvironmentSpawnDatax.isRoleSpawnable(index);
|
||||||
},
|
},
|
||||||
wasFullyPopulated
|
wasFullyPopulated
|
||||||
? (chunkRefx, index) -> {
|
? (chunkRefxx, index) -> {
|
||||||
ChunkSpawnData spawnChunkDataComponent = store.getComponent(chunkRefx, this.chunkSpawnDataComponentType);
|
ChunkSpawnData spawnChunkDataComponent = store.getComponent(chunkRefxx, this.chunkSpawnDataComponentType);
|
||||||
|
|
||||||
assert spawnChunkDataComponent != null;
|
assert spawnChunkDataComponent != null;
|
||||||
|
|
||||||
return store.getComponent(chunkRefx, this.spawnJobDataComponentType) == null && !spawnChunkDataComponent.isOnSpawnCooldown() ? 1.0 : 0.0;
|
return store.getComponent(chunkRefxx, this.spawnJobDataComponentType) == null && !spawnChunkDataComponent.isOnSpawnCooldown() ? 1.0 : 0.0;
|
||||||
}
|
}
|
||||||
: (chunkRefx, index) -> {
|
: (chunkRefxx, index) -> {
|
||||||
ChunkSpawnData chunkSpawnDataComponent = store.getComponent(chunkRefx, this.chunkSpawnDataComponentType);
|
ChunkSpawnData chunkSpawnDataComponent = store.getComponent(chunkRefxx, this.chunkSpawnDataComponentType);
|
||||||
|
|
||||||
assert chunkSpawnDataComponent != null;
|
assert chunkSpawnDataComponent != null;
|
||||||
|
|
||||||
ChunkSpawnedNPCData chunkSpawnedNPCDataComponentx = store.getComponent(chunkRefx, this.chunkSpawnedNPCDataComponentType);
|
ChunkSpawnedNPCData chunkSpawnedNPCDataComponentx = store.getComponent(chunkRefxx, this.chunkSpawnedNPCDataComponentType);
|
||||||
|
|
||||||
assert chunkSpawnedNPCDataComponentx != null;
|
assert chunkSpawnedNPCDataComponentx != null;
|
||||||
|
|
||||||
ChunkEnvironmentSpawnData chunkEnvironmentSpawnDatax = chunkSpawnDataComponent.getEnvironmentSpawnData(environmentIndex);
|
ChunkEnvironmentSpawnData chunkEnvironmentSpawnDatax = chunkSpawnDataComponent.getEnvironmentSpawnData(environmentIndex);
|
||||||
return store.getComponent(chunkRefx, this.spawnJobDataComponentType) == null && !chunkSpawnDataComponent.isOnSpawnCooldown()
|
return store.getComponent(chunkRefxx, this.spawnJobDataComponentType) == null && !chunkSpawnDataComponent.isOnSpawnCooldown()
|
||||||
? chunkEnvironmentSpawnDatax.getWeight(chunkSpawnedNPCDataComponentx.getEnvironmentSpawnCount(environmentIndex))
|
? chunkEnvironmentSpawnDatax.getWeight(chunkSpawnedNPCDataComponentx.getEnvironmentSpawnCount(environmentIndex))
|
||||||
: 0.0;
|
: 0.0;
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user