CompanionBlockSpawnerPlugin class
Пакет: com.hypixel.hytale.builtin.companionblockspawner
Файл: com/hypixel/hytale/builtin/companionblockspawner/CompanionBlockSpawnerPlugin.java
extends: JavaPlugin
Поля (8)
| Модификаторы | Тип | Имя |
|---|---|---|
static |
CompanionBlockSpawnerPlugin |
instance |
|
|
instance |
|
Collection |
var1 |
|
BlockTypeAssetMap |
var1 |
|
int |
var2 |
|
BlockType |
var5 |
|
Holder |
var6 |
|
|
var6 |
Методы (18)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
static |
CompanionBlockSpawnerPlugin |
getCompanionBlockSpawnerPlugin get() |
|
ComponentType<EntityStore, CompanionSpawnerMarkerReference> |
getMarkerReferenceComponentTypeComponentType<EntityStore, CompanionSpawnerMarkerReference> getMarkerReferenceComponentType() |
|
CompanionBlockSpawnerRecipeCompendium |
getRecipeIndexCompanionBlockSpawnerRecipeCompendium getRecipeIndex() |
|
ResourceType<ChunkStore, SpatialResource<Ref<ChunkStore>, ChunkStore>> |
getSpatialResourceResourceType<ChunkStore, SpatialResource<Ref<ChunkStore>, ChunkStore>> getSpatialResource() |
|
ComponentType<ChunkStore, CompanionBlockSpawnerBlock> |
getSpawnerBlockComponentTypeComponentType<ChunkStore, CompanionBlockSpawnerBlock> getSpawnerBlockComponentType() |
|
|
if if(this.ready) |
|
|
if if(this.ready) |
|
|
if if(this.ready) |
|
|
if if(this.ready) |
|
|
if if(var5 != null) |
|
|
if if(var2 > 0) |
private |
void |
injectComponentsvoid injectComponents() |
private |
void |
onBlockTypesChangedvoid onBlockTypesChanged(@Nonnull LoadedAssetsEvent<String, BlockType, BlockTypeAssetMap<String, BlockType>> var1) |
private |
void |
onBlockTypesRemovedvoid onBlockTypesRemoved(@Nonnull RemovedAssetsEvent<String, BlockType, BlockTypeAssetMap<String, BlockType>> var1) |
private |
void |
onRecipesChangedvoid onRecipesChanged(@Nonnull LoadedAssetsEvent<String, CompanionBlockSpawnerRecipe, DefaultAssetMap<String, CompanionBlockSpawnerRecipe>> var1) |
private |
void |
onRecipesRemovedvoid onRecipesRemoved(@Nonnull RemovedAssetsEvent<String, CompanionBlockSpawnerRecipe, DefaultAssetMap<String, CompanionBlockSpawnerRecipe>> var1) |
private |
void |
rebuildRecipeIndexvoid rebuildRecipeIndex() |
abstract |
|
super super(var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.companionblockspawner;
class="kw">import com.hypixel.hytale.assetstore.event.LoadedAssetsEvent;
class="kw">import com.hypixel.hytale.assetstore.event.RemovedAssetsEvent;
class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.assetstore.map.DefaultAssetMap;
class="kw">import com.hypixel.hytale.builtin.companionblockspawner.config.CompanionBlockSpawnerRecipe;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.ResourceType;
class="kw">import com.hypixel.hytale.component.spatial.KDTree;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.server.core.asset.HytaleAssetStore;
class="kw">import com.hypixel.hytale.server.core.asset.type.blockset.config.BlockSet;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPlugin;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
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.spawning.assets.spawnmarker.config.SpawnMarker;
class="kw">import java.util.Collection;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">public class CompanionBlockSpawnerPlugin class="kw">extends JavaPlugin {
class="kw">private class="kw">static CompanionBlockSpawnerPlugin instance;
class="kw">private ComponentType<ChunkStore, CompanionBlockSpawnerBlock> spawnerBlockComponentType;
class="kw">private ComponentType<EntityStore, CompanionSpawnerMarkerReference> markerReferenceComponentType;
class="kw">private ResourceType<ChunkStore, SpatialResource<Ref<ChunkStore>, ChunkStore>> spatialResource;
class="kw">private class="kw">final CompanionBlockSpawnerRecipeCompendium recipeIndex = new CompanionBlockSpawnerRecipeCompendium();
class="kw">private boolean ready;
class="kw">public class="kw">static CompanionBlockSpawnerPlugin get() {
class="kw">return instance;
}
class="kw">public CompanionBlockSpawnerPlugin(@Nonnull JavaPluginInit var1) {
super(var1);
}
@Override
class="kw">public void setup() {
instance = this;
this.getAssetRegistry()
.register(
((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)HytaleAssetStore.builder(
CompanionBlockSpawnerRecipe.class, new DefaultAssetMap()
)
.setPath("NPC/Spawn/CompanionBlockSpawners"))
.setCodec(CompanionBlockSpawnerRecipe.CODEC))
.setKeyFunction(CompanionBlockSpawnerRecipe::getId))
.loadsAfter(SpawnMarker.class, BlockSet.class, BlockType.class, Item.class))
.build()
);
this.getEventRegistry().register(LoadedAssetsEvent.class, CompanionBlockSpawnerRecipe.class, this::onRecipesChanged);
this.getEventRegistry().register(RemovedAssetsEvent.class, CompanionBlockSpawnerRecipe.class, this::onRecipesRemoved);
this.getEventRegistry().register(LoadedAssetsEvent.class, BlockType.class, this::onBlockTypesChanged);
this.getEventRegistry().register(RemovedAssetsEvent.class, BlockType.class, this::onBlockTypesRemoved);
this.spawnerBlockComponentType = this.getChunkStoreRegistry()
.registerComponent(CompanionBlockSpawnerBlock.class, "CompanionBlockSpawnerBlock", CompanionBlockSpawnerBlock.CODEC);
this.markerReferenceComponentType = this.getEntityStoreRegistry()
.registerComponent(CompanionSpawnerMarkerReference.class, "CompanionSpawnerMarkerReference", CompanionSpawnerMarkerReference.CODEC);
this.spatialResource = this.getChunkStoreRegistry().registerSpatialResource(() -> new KDTree<>(Ref::isValid));
this.getChunkStoreRegistry().registerSystem(new CompanionBlockSpawnerSpatialSystem(this.spatialResource, this.spawnerBlockComponentType));
this.getChunkStoreRegistry().registerSystem(new CompanionBlockSpawnerSystems.AddOrRemove(this.spawnerBlockComponentType));
this.getChunkStoreRegistry().registerSystem(new CompanionBlockSpawnerSystems.ReconcileTick(this.spawnerBlockComponentType));
this.getEntityStoreRegistry().registerSystem(new CompanionBlockSpawnerSystems.MarkerHeartbeat(this.markerReferenceComponentType));
}
@Override
class="kw">public void start() {
this.rebuildRecipeIndex();
this.ready = true;
}
ComponentType<ChunkStore, CompanionBlockSpawnerBlock> getSpawnerBlockComponentType() {
class="kw">return this.spawnerBlockComponentType;
}
ComponentType<EntityStore, CompanionSpawnerMarkerReference> getMarkerReferenceComponentType() {
class="kw">return this.markerReferenceComponentType;
}
ResourceType<ChunkStore, SpatialResource<Ref<ChunkStore>, ChunkStore>> getSpatialResource() {
class="kw">return this.spatialResource;
}
CompanionBlockSpawnerRecipeCompendium getRecipeIndex() {
class="kw">return this.recipeIndex;
}
class="kw">private void onRecipesChanged(@Nonnull LoadedAssetsEvent<String, CompanionBlockSpawnerRecipe, DefaultAssetMap<String, CompanionBlockSpawnerRecipe>> var1) {
if (this.ready) {
this.rebuildRecipeIndex();
}
}
class="kw">private void onRecipesRemoved(@Nonnull RemovedAssetsEvent<String, CompanionBlockSpawnerRecipe, DefaultAssetMap<String, CompanionBlockSpawnerRecipe>> var1) {
if (this.ready) {
this.rebuildRecipeIndex();
}
}
class="kw">private void onBlockTypesChanged(@Nonnull LoadedAssetsEvent<String, BlockType, BlockTypeAssetMap<String, BlockType>> var1) {
if (this.ready) {
this.rebuildRecipeIndex();
}
}
class="kw">private void onBlockTypesRemoved(@Nonnull RemovedAssetsEvent<String, BlockType, BlockTypeAssetMap<String, BlockType>> var1) {
if (this.ready) {
this.rebuildRecipeIndex();
}
}
class="kw">private void rebuildRecipeIndex() {
Collection var1 = CompanionBlockSpawnerRecipe.getAssetMap().getAssetMap().values();
this.recipeIndex.rebuild(var1);
this.getLogger().at(Level.INFO).log("Companion block spawner: loaded %d recipe(s)", var1.size());
this.injectComponents();
}
class="kw">private void injectComponents() {
BlockTypeAssetMap var1 = BlockType.getAssetMap();
int var2 = 0;
for (String var4 : this.recipeIndex.getParticipatingKeys()) {
BlockType var5 = var1.getAsset(var4);
if (var5 != null) {
Holder var6 = var5.getBlockEntity();
if (var6 == null || var6.getComponent(this.spawnerBlockComponentType) == null) {
var6 = var6 != null ? var6.clone() : ChunkStore.REGISTRY.newHolder();
var6.putComponent(this.spawnerBlockComponentType, new CompanionBlockSpawnerBlock());
var5.setBlockEntity(var6);
var2++;
}
}
}
if (var2 > 0) {
this.getLogger().at(Level.INFO).log("Injected CompanionBlockSpawnerBlock into %d block types", var2);
}
}
}