PlayerAddedSystem class
Пакет: com.hypixel.hytale.builtin.crafting
Файл: com/hypixel/hytale/builtin/crafting/CraftingPlugin.java
extends: RefSystem<EntityStore>
Поля (1)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private final Query<EntityStore> |
query |
Методы (3)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public Query<EntityStore> |
getQuerypublic Query<EntityStore> getQuery() |
|
public void |
onEntityAddedpublic void onEntityAdded(@Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4) |
|
public void |
onEntityRemovepublic void onEntityRemove(@Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.crafting;
class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
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.DefaultAssetMap;
class="kw">import com.hypixel.hytale.builtin.crafting.commands.RecipeCommand;
class="kw">import com.hypixel.hytale.builtin.crafting.component.BenchBlock;
class="kw">import com.hypixel.hytale.builtin.crafting.component.CraftingManager;
class="kw">import com.hypixel.hytale.builtin.crafting.component.ProcessingBenchBlock;
class="kw">import com.hypixel.hytale.builtin.crafting.interaction.LearnRecipeInteraction;
class="kw">import com.hypixel.hytale.builtin.crafting.interaction.OpenBenchPageInteraction;
class="kw">import com.hypixel.hytale.builtin.crafting.interaction.OpenProcessingBenchInteraction;
class="kw">import com.hypixel.hytale.builtin.crafting.system.BenchSystems;
class="kw">import com.hypixel.hytale.builtin.crafting.system.PlayerCraftingSystems;
class="kw">import com.hypixel.hytale.builtin.crafting.window.FieldCraftingWindow;
class="kw">import com.hypixel.hytale.codec.ExtraInfo;
class="kw">import com.hypixel.hytale.common.util.ArrayUtil;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.Archetype;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
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.component.data.unknown.UnknownComponents;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.system.RefSystem;
class="kw">import com.hypixel.hytale.event.EventRegistry;
class="kw">import com.hypixel.hytale.protocol.BenchRequirement;
class="kw">import com.hypixel.hytale.protocol.BenchType;
class="kw">import com.hypixel.hytale.protocol.ItemResourceType;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.UpdateKnownRecipes;
class="kw">import com.hypixel.hytale.protocol.packets.window.WindowType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.bench.Bench;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.bench.BenchUpgradeRequirement;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.CraftingRecipe;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandManager;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.data.PlayerConfigData;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.windows.Window;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.inventory.MaterialQuantity;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.Interaction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.RootInteraction;
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.PlayerRef;
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 it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
class="kw">import java.util.HashSet;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonDocument;
class="kw">public class CraftingPlugin class="kw">extends JavaPlugin {
class="kw">private class="kw">static CraftingPlugin instance;
@Nonnull
class="kw">private class="kw">static class="kw">final Map<String, BenchRecipeRegistry> registries = new Object2ObjectOpenHashMap();
@Nonnull
class="kw">private class="kw">static class="kw">final Map<String, String[]> itemGeneratedRecipes = new Object2ObjectOpenHashMap();
class="kw">private ComponentType<EntityStore, CraftingManager> craftingManagerComponentType;
class="kw">private ComponentType<ChunkStore, BenchBlock> benchBlockComponentType;
class="kw">private ComponentType<ChunkStore, ProcessingBenchBlock> processingBenchBlockComponentType;
class="kw">public CraftingPlugin(@Nonnull JavaPluginInit var1) {
super(var1);
instance = this;
}
@Nullable
class="kw">public class="kw">static Set<String> getAvailableRecipesForCategory(@Nonnull String var0, @Nonnull String var1) {
BenchRecipeRegistry var2 = registries.get(var0);
class="kw">return var2 == null ? null : var2.getRecipesForCategory(var1);
}
class="kw">public class="kw">static boolean isValidCraftingMaterialForBench(@Nonnull Bench var0, @Nonnull ItemStack var1) {
BenchRecipeRegistry var2 = registries.get(var0.getId());
class="kw">return var2 == null ? false : var2.isValidCraftingMaterial(var1);
}
class="kw">public class="kw">static boolean isValidUpgradeMaterialForBench(@Nonnull Bench var0, int var1, @Nonnull ItemStack var2) {
BenchUpgradeRequirement var3 = var0.getUpgradeRequirement(var1);
if (var3 == null) {
class="kw">return false;
}
for (MaterialQuantity var7 : var3.getInput()) {
if (var2.getItemId().equals(var7.getItemId())) {
class="kw">return true;
}
ItemResourceType[] var8 = var2.getItem().getResourceTypes();
if (var8 != null) {
for (ItemResourceType var12 : var8) {
if (var12.id != null && var12.id.equals(var7.getResourceTypeId())) {
class="kw">return true;
}
}
}
}
class="kw">return false;
}
@Override
class="kw">protected void setup() {
AssetRegistry.getAssetStore(Interaction.class)
.loadAssets(
"Hytale:Hytale",
List.of(OpenBenchPageInteraction.SIMPLE_CRAFTING, OpenBenchPageInteraction.DIAGRAM_CRAFTING, OpenBenchPageInteraction.STRUCTURAL_CRAFTING)
);
AssetRegistry.getAssetStore(RootInteraction.class)
.loadAssets(
"Hytale:Hytale",
List.of(
OpenBenchPageInteraction.SIMPLE_CRAFTING_ROOT, OpenBenchPageInteraction.DIAGRAM_CRAFTING_ROOT, OpenBenchPageInteraction.STRUCTURAL_CRAFTING_ROOT
)
);
ComponentRegistryProxy var1 = this.getEntityStoreRegistry();
EventRegistry var2 = this.getEventRegistry();
this.craftingManagerComponentType = var1.registerComponent(CraftingManager.class, CraftingManager::new);
this.getCodecRegistry(Interaction.CODEC)
.register("OpenBenchPage", OpenBenchPageInteraction.class, OpenBenchPageInteraction.CODEC)
.register("OpenProcessingBench", OpenProcessingBenchInteraction.class, OpenProcessingBenchInteraction.CODEC);
Bench.registerRootInteraction(BenchType.Crafting, OpenBenchPageInteraction.SIMPLE_CRAFTING_ROOT);
Bench.registerRootInteraction(BenchType.DiagramCrafting, OpenBenchPageInteraction.DIAGRAM_CRAFTING_ROOT);
Bench.registerRootInteraction(BenchType.StructuralCrafting, OpenBenchPageInteraction.STRUCTURAL_CRAFTING_ROOT);
this.benchBlockComponentType = this.getChunkStoreRegistry().registerComponent(BenchBlock.class, "BenchBlock", BenchBlock.CODEC);
this.processingBenchBlockComponentType = this.getChunkStoreRegistry()
.registerComponent(ProcessingBenchBlock.class, "ProcessingBenchBlock", ProcessingBenchBlock.CODEC);
this.getChunkStoreRegistry().registerSystem(new CraftingPlugin.MigrateCrafting());
this.getChunkStoreRegistry().registerSystem(new BenchSystems.OnAddOrRemoved());
this.getChunkStoreRegistry().registerSystem(new BenchSystems.ProcessingBenchTick(this.processingBenchBlockComponentType, this.benchBlockComponentType));
this.getChunkStoreRegistry()
.registerSystem(new BenchSystems.ProcessingBenchLifecycle(this.processingBenchBlockComponentType, this.benchBlockComponentType));
Window.CLIENT_REQUESTABLE_WINDOW_TYPES.put(WindowType.PocketCrafting, FieldCraftingWindow::new);
var2.register(LoadedAssetsEvent.class, CraftingRecipe.class, CraftingPlugin::onRecipeLoad);
var2.register(RemovedAssetsEvent.class, CraftingRecipe.class, CraftingPlugin::onRecipeRemove);
var2.register(LoadedAssetsEvent.class, Item.class, CraftingPlugin::onItemAssetLoad);
var2.register(RemovedAssetsEvent.class, Item.class, CraftingPlugin::onItemAssetRemove);
Interaction.CODEC.register("LearnRecipe", LearnRecipeInteraction.class, LearnRecipeInteraction.CODEC);
CommandManager.get().registerSystemCommand(new RecipeCommand());
ComponentType var3 = Player.getComponentType();
ComponentType var4 = PlayerRef.getComponentType();
var1.registerSystem(new PlayerCraftingSystems.CraftingTickingSystem(this.craftingManagerComponentType));
var1.registerSystem(new PlayerCraftingSystems.CraftingHolderSystem(var3, this.craftingManagerComponentType));
var1.registerSystem(new PlayerCraftingSystems.CraftingRefSystem(var3, this.craftingManagerComponentType));
var1.registerSystem(new CraftingPlugin.PlayerAddedSystem(var3, var4));
}
class="kw">private class="kw">static void onItemAssetLoad(@Nonnull LoadedAssetsEvent<String, Item, DefaultAssetMap<String, Item>> var0) {
List var1 = new ObjectArrayList();
for (Item var3 : var0.getLoadedAssets().values()) {
if (var3.hasRecipesToGenerate()) {
List var4 = new ObjectArrayList();
var3.collectRecipesToGenerate(var4);
List var5 = new ObjectArrayList();
for (CraftingRecipe var7 : var4) {
String var8 = var7.getId();
var5.add(var8);
}
itemGeneratedRecipes.put(var3.getId(), var5.toArray(String[]::new));
var1.addAll(var4);
}
}
if (!var1.isEmpty()) {
CraftingRecipe.getAssetStore().loadAssets("Hytale:Hytale", var1);
}
}
class="kw">private class="kw">static void onItemAssetRemove(@Nonnull RemovedAssetsEvent<String, Item, DefaultAssetMap<String, Item>> var0) {
for (String var2 : var0.getRemovedAssets()) {
String[] var3 = itemGeneratedRecipes.get(var2);
if (var3 != null) {
CraftingRecipe.getAssetStore().removeAssets(List.of(var3));
}
}
}
class="kw">private class="kw">static void onRecipeLoad(@Nonnull LoadedAssetsEvent<String, CraftingRecipe, DefaultAssetMap<String, CraftingRecipe>> var0) {
for (CraftingRecipe var2 : var0.getLoadedAssets().values()) {
for (BenchRecipeRegistry var4 : registries.values()) {
var4.removeRecipe(var2.getId());
}
if (var2.getBenchRequirement() != null) {
for (BenchRequirement var6 : var2.getBenchRequirement()) {
BenchRecipeRegistry var7 = registries.computeIfAbsent(var6.id, BenchRecipeRegistry::new);
var7.addRecipe(var6, var2);
}
}
}
computeBenchRecipeRegistries();
}
class="kw">private class="kw">static void onRecipeRemove(@Nonnull RemovedAssetsEvent<String, CraftingRecipe, DefaultAssetMap<String, CraftingRecipe>> var0) {
for (String var2 : var0.getRemovedAssets()) {
for (BenchRecipeRegistry var4 : registries.values()) {
var4.removeRecipe(var2);
}
}
computeBenchRecipeRegistries();
}
class="kw">private class="kw">static void computeBenchRecipeRegistries() {
for (BenchRecipeRegistry var1 : registries.values()) {
var1.recompute();
}
}
@Nonnull
class="kw">public class="kw">static List<CraftingRecipe> getBenchRecipes(@Nonnull Bench var0) {
class="kw">return getBenchRecipes(var0.getType(), var0.getId());
}
@Nonnull
class="kw">public class="kw">static List<CraftingRecipe> getBenchRecipes(BenchType var0, String var1) {
class="kw">return getBenchRecipes(var0, var1, null);
}
@Nonnull
class="kw">public class="kw">static List<CraftingRecipe> getBenchRecipes(BenchType var0, String var1, @Nullable String var2) {
BenchRecipeRegistry var3 = registries.get(var1);
if (var3 == null) {
class="kw">return List.of();
}
List var4 = new ObjectArrayList();
for (CraftingRecipe var8 : var3.getAllRecipes()) {
BenchRequirement[] var9 = var8.getBenchRequirement();
if (var9 != null) {
for (BenchRequirement var13 : var9) {
if (var13.type == var0 && var13.id.equals(var1) && (var2 == null || hasCategory(var8, var2))) {
var4.add(var8);
break;
}
}
}
}
class="kw">return var4;
}
class="kw">private class="kw">static boolean hasCategory(@Nonnull CraftingRecipe var0, String var1) {
for (BenchRequirement var5 : var0.getBenchRequirement()) {
if (var5.categories != null && ArrayUtil.contains(var5.categories, var1)) {
class="kw">return true;
}
}
class="kw">return false;
}
class="kw">public class="kw">static boolean learnRecipe(@Nonnull Ref<EntityStore> var0, @Nonnull String var1, @Nonnull ComponentAccessor<EntityStore> var2) {
Player var3 = var2.getComponent(var0, Player.getComponentType());
assert var3 != null;
PlayerConfigData var4 = var3.getPlayerConfigData();
Set var5 = new HashSet<>(var4.getKnownRecipes());
if (var5.add(var1)) {
var4.setKnownRecipes(var5);
sendKnownRecipes(var0, var2);
class="kw">return true;
} else {
class="kw">return false;
}
}
class="kw">public class="kw">static boolean forgetRecipe(@Nonnull Ref<EntityStore> var0, @Nonnull String var1, @Nonnull ComponentAccessor<EntityStore> var2) {
Player var3 = var2.getComponent(var0, Player.getComponentType());
assert var3 != null;
PlayerConfigData var4 = var3.getPlayerConfigData();
Set var5 = new ObjectOpenHashSet(var4.getKnownRecipes());
if (var5.remove(var1)) {
var4.setKnownRecipes(var5);
sendKnownRecipes(var0, var2);
class="kw">return true;
} else {
class="kw">return false;
}
}
class="kw">public class="kw">static void sendKnownRecipes(@Nonnull Ref<EntityStore> var0, @Nonnull ComponentAccessor<EntityStore> var1) {
PlayerRef var2 = var1.getComponent(var0, PlayerRef.getComponentType());
assert var2 != null;
Player var3 = var1.getComponent(var0, Player.getComponentType());
assert var3 != null;
PlayerConfigData var4 = var3.getPlayerConfigData();
DefaultAssetMap var5 = Item.getAssetMap();
Map var6 = new Object2ObjectOpenHashMap();
for (String var8 : var4.getKnownRecipes()) {
Item var9 = var5.getAsset(var8);
if (var9 != null) {
for (BenchRecipeRegistry var11 : registries.values()) {
for (String var14 : var11.getIncomingRecipesForItem(var9.getId())) {
CraftingRecipe var15 = CraftingRecipe.getAssetMap().getAsset(var14);
if (var15 != null) {
var6.put(var8, var15.toPacket(var8));
}
}
}
}
}
var2.getPacketHandler().writeNoCache(new UpdateKnownRecipes(var6));
}
class="kw">public ComponentType<EntityStore, CraftingManager> getCraftingManagerComponentType() {
class="kw">return this.craftingManagerComponentType;
}
class="kw">public ComponentType<ChunkStore, BenchBlock> getBenchBlockComponentType() {
class="kw">return this.benchBlockComponentType;
}
class="kw">public ComponentType<ChunkStore, ProcessingBenchBlock> getProcessingBenchBlockComponentType() {
class="kw">return this.processingBenchBlockComponentType;
}
class="kw">public class="kw">static CraftingPlugin get() {
class="kw">return instance;
}
class="kw">public class="kw">static class MigrateCrafting class="kw">extends BlockModule.MigrationSystem {
class="kw">public MigrateCrafting() {
}
@Override
class="kw">public void onEntityAdd(@Nonnull Holder<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3) {
UnknownComponents var4 = var1.getComponent(ChunkStore.REGISTRY.getUnknownComponentType());
assert var4 != null;
Map var5 = var4.getUnknownComponents();
if (var5.containsKey("crafting")) {
BenchBlock var6 = var4.removeComponent("crafting", BenchBlock.CODEC);
assert var6 != null;
var1.putComponent(BenchBlock.getComponentType(), var6);
} else if (var5.containsKey("processingBench")) {
BsonDocument var10 = var5.remove("processingBench");
ExtraInfo var7 = ExtraInfo.THREAD_LOCAL.get();
BenchBlock var8 = BenchBlock.CODEC.decode(var10, var7);
var7.getValidationResults().logOrThrowValidatorExceptions(CraftingPlugin.get().getLogger());
ProcessingBenchBlock var9 = ProcessingBenchBlock.CODEC.decode(var10, var7);
var7.getValidationResults().logOrThrowValidatorExceptions(CraftingPlugin.get().getLogger());
assert var9 != null;
assert var8 != null;
var1.putComponent(ProcessingBenchBlock.getComponentType(), var9);
var1.putComponent(BenchBlock.getComponentType(), var8);
}
}
@Override
class="kw">public void onEntityRemoved(@Nonnull Holder<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3) {
}
@Nullable
@Override
class="kw">public Query<ChunkStore> getQuery() {
class="kw">return ChunkStore.REGISTRY.getUnknownComponentType();
}
}
class="kw">public class="kw">static class PlayerAddedSystem class="kw">extends RefSystem<EntityStore> {
@Nonnull
class="kw">private class="kw">final Query<EntityStore> query;
class="kw">public PlayerAddedSystem(@Nonnull ComponentType<EntityStore, Player> var1, @Nonnull ComponentType<EntityStore, PlayerRef> var2) {
this.query = Archetype.of(var1, var2);
}
@Nonnull
@Override
class="kw">public Query<EntityStore> getQuery() {
class="kw">return this.query;
}
@Override
class="kw">public void onEntityAdded(
@Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
) {
CraftingPlugin.sendKnownRecipes(var1, var4);
}
@Override
class="kw">public void onEntityRemove(
@Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
) {
}
}
}