EncounterManagerPlugin class
Пакет: com.hypixel.hytale.builtin.encountermanager
Файл: com/hypixel/hytale/builtin/encountermanager/EncounterManagerPlugin.java
extends: JavaPlugin
Поля (17)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
String |
CATEGORY |
|
|
instance |
|
ComponentRegistryProxy |
var1 |
|
ModelAsset |
var1 |
|
BuilderManager |
var2 |
|
Schema |
var2 |
|
int |
var2 |
|
BuilderFactory |
var3 |
|
Schema.HytaleMetadata |
var3 |
|
ObjectArrayList |
var3 |
|
ObjectListIterator |
var4 |
|
World |
var5 |
|
Ref |
var5 |
|
EncounterManager |
var6 |
|
Holder |
var6 |
|
TransformComponent |
var7 |
|
EncounterManager |
var7 |
Методы (8)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
|
for for(int var6 = 0; var6 < var4x.size() |
abstract |
|
for for(int var5 = 0; var5 < var3x.size() |
static |
EncounterManagerPlugin |
getEncounterManagerPlugin get() |
|
|
if if(var7 != null) |
|
|
if if(this.markerModel == null) |
private |
void |
onBuilderReloadedvoid onBuilderReloaded(@Nonnull BuilderInfo var1) |
private |
void |
reloadEncountersvoid reloadEncounters(@Nonnull Store<EntityStore> var1, int var2) |
abstract |
|
super super(var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.encountermanager;
class="kw">import com.hypixel.hytale.builtin.encountermanager.npc.builders.BuilderActionChangeTargetRole;
class="kw">import com.hypixel.hytale.builtin.encountermanager.npc.builders.BuilderActionClearEncounterBossBar;
class="kw">import com.hypixel.hytale.builtin.encountermanager.npc.builders.BuilderActionSetEncounterAudioState;
class="kw">import com.hypixel.hytale.builtin.encountermanager.npc.builders.BuilderActionSetEncounterBossBar;
class="kw">import com.hypixel.hytale.builtin.encountermanager.npc.builders.BuilderActionSetTargetNPCInvulnerable;
class="kw">import com.hypixel.hytale.builtin.encountermanager.npc.builders.BuilderActionSignalWorldEvent;
class="kw">import com.hypixel.hytale.builtin.encountermanager.npc.builders.BuilderActionStartEncounterMusic;
class="kw">import com.hypixel.hytale.builtin.encountermanager.npc.builders.BuilderActionStopEncounterMusic;
class="kw">import com.hypixel.hytale.builtin.encountermanager.npc.builders.BuilderEncounterMemberCollector;
class="kw">import com.hypixel.hytale.codec.schema.config.Schema;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.ComponentRegistryProxy;
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.RemoveReason;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.asset.type.model.config.Model;
class="kw">import com.hypixel.hytale.server.core.asset.type.model.config.ModelAsset;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.NetworkId;
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.schema.SchemaGenerator;
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.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderFactory;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderInfo;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderManager;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectListIterator;
class="kw">import java.util.List;
class="kw">import java.util.Objects;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">public class EncounterManagerPlugin class="kw">extends JavaPlugin {
class="kw">public class="kw">static class="kw">final String CATEGORY = "EncounterManager";
class="kw">public class="kw">static class="kw">final String ASSET_PATH = "Server/EncounterManager";
class="kw">public class="kw">static class="kw">final String MARKER_MODEL = "Encounter_Marker";
class="kw">private class="kw">static EncounterManagerPlugin instance;
class="kw">private ComponentType<EntityStore, EncounterManager> encounterComponentType;
class="kw">private ComponentType<EntityStore, EncounterMembers> encounterMembersComponentType;
class="kw">private ComponentType<EntityStore, EncounterAudioState> encounterAudioStateComponentType;
class="kw">private ComponentType<EntityStore, EncounterBossBarState> encounterBossBarStateComponentType;
class="kw">private Model markerModel;
class="kw">public class="kw">static EncounterManagerPlugin get() {
class="kw">return instance;
}
class="kw">public EncounterManagerPlugin(@Nonnull JavaPluginInit var1) {
super(var1);
}
@Nonnull
class="kw">public ComponentType<EntityStore, EncounterManager> getEncounterComponentType() {
class="kw">return this.encounterComponentType;
}
@Nonnull
class="kw">public ComponentType<EntityStore, EncounterMembers> getEncounterMembersComponentType() {
class="kw">return this.encounterMembersComponentType;
}
@Nonnull
class="kw">public ComponentType<EntityStore, EncounterAudioState> getEncounterAudioStateComponentType() {
class="kw">return this.encounterAudioStateComponentType;
}
@Nonnull
class="kw">public ComponentType<EntityStore, EncounterBossBarState> getEncounterBossBarStateComponentType() {
class="kw">return this.encounterBossBarStateComponentType;
}
@Override
class="kw">protected void setup() {
instance = this;
ComponentRegistryProxy var1 = this.getEntityStoreRegistry();
BuilderManager var2 = NPCPlugin.get().getBuilderManager();
var2.addCategory("EncounterManager", EncounterManager.class);
BuilderFactory var3 = new BuilderFactory<>(EncounterManager.class, "Type");
var3.add("Generic", BuilderEncounterManager::new);
var3.add("Abstract", BuilderEncounterManagerAbstract::new);
var3.add("Variant", BuilderEncounterManagerVariant::new);
var2.registerFactory(var3);
var2.registerAssetPath("Server/EncounterManager", "EncounterManager");
NPCPlugin.get()
.registerCoreComponentType("ChangeTargetRole", BuilderActionChangeTargetRole::new)
.registerCoreComponentType("SetTargetNPCInvulnerable", BuilderActionSetTargetNPCInvulnerable::new)
.registerCoreComponentType("EncounterMembers", BuilderEncounterMemberCollector::new)
.registerCoreComponentType("StartEncounterMusic", BuilderActionStartEncounterMusic::new)
.registerCoreComponentType("SetEncounterAudioState", BuilderActionSetEncounterAudioState::new)
.registerCoreComponentType("StopEncounterMusic", BuilderActionStopEncounterMusic::new)
.registerCoreComponentType("SetEncounterBossBar", BuilderActionSetEncounterBossBar::new)
.registerCoreComponentType("ClearEncounterBossBar", BuilderActionClearEncounterBossBar::new)
.registerCoreComponentType("SignalWorldEvent", BuilderActionSignalWorldEvent::new);
SchemaGenerator.registerAssetSchema("EncounterManager.json", var1x -> {
Schema var2 = var2.generateSchema(var1x, EncounterManager.class);
var2.setId("EncounterManager.json");
var2.setTitle("EncounterManager");
Schema.HytaleMetadata var3 = var2.getHytale();
var3.setPath("EncounterManager");
var3.setExtension(".json");
class="kw">return var2;
}, List.of("EncounterManager/*.json", "EncounterManager/**/*.json"), null);
this.encounterComponentType = var1.registerComponent(EncounterManager.class, "EncounterManager", EncounterManager.CODEC);
this.encounterMembersComponentType = var1.registerComponent(EncounterMembers.class, EncounterMembers::new);
this.encounterAudioStateComponentType = var1.registerComponent(EncounterAudioState.class, EncounterAudioState::new);
this.encounterBossBarStateComponentType = var1.registerComponent(EncounterBossBarState.class, EncounterBossBarState::new);
var1.registerSystem(new EncounterManagerSystems.BuilderSystem(this.encounterComponentType));
var1.registerSystem(new EncounterManagerSystems.ActivateSystem(this.encounterComponentType));
var1.registerSystem(new EncounterManagerSystems.TickSystem(this.encounterComponentType));
var1.registerSystem(new EncounterManagerSystems.EnsureEntityComponents(this.encounterComponentType));
var1.registerSystem(new EncounterManagerSystems.LifecycleSystem(this.encounterComponentType));
var1.registerSystem(new EncounterManagerSystems.TeleportSystem(this.encounterComponentType));
var1.registerSystem(
new EncounterMemberSystems.Tick(this.encounterMembersComponentType, this.encounterAudioStateComponentType, this.encounterBossBarStateComponentType)
);
var2.addBuilderReloadListener(this::onBuilderReloaded);
NPCPlugin.get().registerBeaconReceiverProvider((var0, var1x, var3x, var4) -> var3x.forEachChunk(EncounterManager.getComponentType(), (var4x, var5) -> {
for (int var6 = 0; var6 < var4x.size(); var6++) {
TransformComponent var7 = var4x.getComponent(var6, TransformComponent.getComponentType());
if (var7 != null && var7.getPosition().distanceSquared(var0) <= var1x * var1x) {
var4.add(var4x.getReferenceTo(var6));
}
}
}));
this.getCommandRegistry().registerCommand(new EncounterCommand());
}
class="kw">private void onBuilderReloaded(@Nonnull BuilderInfo var1) {
if (var1.getBuilder().category() == EncounterManager.class) {
int var2 = var1.getIndex();
for (Entry var4 : Universe.get().getWorlds().entrySet()) {
World var5 = var4.getValue();
var5.execute(() -> this.reloadEncounters(var5.getEntityStore().getStore(), var2));
}
}
}
class="kw">private void reloadEncounters(@Nonnull Store<EntityStore> var1, int var2) {
ObjectArrayList var3 = new ObjectArrayList();
var1.forEachChunk(this.encounterComponentType, (var3x, var4x) -> {
for (int var5 = 0; var5 < var3x.size(); var5++) {
EncounterManager var6 = var3x.getComponent(var5, this.encounterComponentType);
if (var6 != null && var6.getEncounterIndex() == var2) {
var3.add(var3x.getReferenceTo(var5));
}
}
});
ObjectListIterator var4 = var3.iterator();
while (var4.hasNext()) {
Ref var5 = (Ref<EntityStore>)var4.next();
if (var5.isValid()) {
try {
Holder var6 = var1.removeEntity(var5, RemoveReason.UNLOAD);
EncounterManager var7 = var6.getComponent(this.encounterComponentType);
if (var7 != null) {
var7.resetRuntime();
}
var6.tryRemoveComponent(NetworkId.getComponentType());
var1.addEntity(var6, AddReason.LOAD);
} catch (RuntimeException var8) {
((HytaleLogger.Api)this.getLogger().at(Level.SEVERE).withCause(var8)).log("Failed to hot-reload encounter entity %s", var5);
}
}
}
}
@Nonnull
class="kw">public Model getMarkerModel() {
if (this.markerModel == null) {
ModelAsset var1 = ModelAsset.getAssetMap().getAsset("Encounter_Marker");
Objects.requireNonNull(var1, "Missing model asset 'Encounter_Marker' for the encounter marker");
this.markerModel = Model.createUnitScaleModel(var1);
}
class="kw">return this.markerModel;
}
}