From e1fdc17fd29ea5eecbb2008e870bed56a333e802 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Thu, 11 Sep 2025 01:54:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0api=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/api/CraftEngineBlocks.java | 18 ++++++++++++++++++ .../bukkit/api/CraftEngineFurniture.java | 16 ++++++++++++++++ .../bukkit/api/CraftEngineItems.java | 18 ++++++++++++++++++ .../core/block/AbstractBlockManager.java | 2 +- .../craftengine/core/block/BlockManager.java | 7 ++++++- .../furniture/AbstractFurnitureManager.java | 5 +++++ .../entity/furniture/FurnitureManager.java | 3 +++ .../core/item/AbstractItemManager.java | 4 ++-- .../craftengine/core/item/CustomItem.java | 4 ++++ .../craftengine/core/item/ItemManager.java | 7 ++++++- .../craftengine/core/world/CEWorld.java | 1 - 11 files changed, 79 insertions(+), 6 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineBlocks.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineBlocks.java index 1cad23f69..93ec4c025 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineBlocks.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineBlocks.java @@ -27,10 +27,28 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Map; + public final class CraftEngineBlocks { private CraftEngineBlocks() {} + /** + * + * Returns an unmodifiable map of all currently loaded custom blocks. + * The map keys represent unique identifiers, and the values are the corresponding CustomBlock instances. + * + *

Important: Do not attempt to access this method during the onEnable phase + * as it will be empty. Instead, listen for the {@code CraftEngineReloadEvent} and use this method + * after the event is fired to obtain the complete block list. + * + * @return a non-null map containing all loaded custom blocks + */ + @NotNull + public static Map loadedBlocks() { + return BukkitBlockManager.instance().loadedBlocks(); + } + /** * Gets a custom block by ID * diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineFurniture.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineFurniture.java index 113fc0d93..d7367e5cd 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineFurniture.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineFurniture.java @@ -27,11 +27,27 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; +import java.util.Map; public final class CraftEngineFurniture { private CraftEngineFurniture() {} + /** + * Returns an unmodifiable map of all currently loaded custom furniture. + * The map keys represent unique identifiers, and the values are the corresponding CustomFurniture instances. + * + *

Important: Do not attempt to access this method during the onEnable phase + * as it will be empty. Instead, listen for the {@code CraftEngineReloadEvent} and use this method + * after the event is fired to obtain the complete furniture list. + * + * @return a non-null map containing all loaded custom furniture + */ + @NotNull + public static Map loadedFurniture() { + return BukkitFurnitureManager.instance().loadedFurniture(); + } + /** * Gets custom furniture by ID * diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineItems.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineItems.java index 64c628693..2fe0c11c5 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineItems.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineItems.java @@ -8,10 +8,28 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Map; + public final class CraftEngineItems { private CraftEngineItems() {} + /** + * Returns an unmodifiable map of all currently loaded custom items. + * The map keys represent unique identifiers, and the values are the corresponding CustomItem instances. + * + *

Important: Do not attempt to access this method during the onEnable phase + * as it will be empty. Instead, listen for the {@code CraftEngineReloadEvent} and use this method + * after the event is fired to obtain the complete item list. + * + * @return a non-null map containing all loaded custom items + * @throws IllegalStateException if the BukkitItemManager instance is not available + */ + @NotNull + public static Map> loadedItems() { + return BukkitItemManager.instance().loadedItems(); + } + /** * Gets a custom item by ID * diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/AbstractBlockManager.java b/core/src/main/java/net/momirealms/craftengine/core/block/AbstractBlockManager.java index 96916ea58..0fde49874 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/AbstractBlockManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/AbstractBlockManager.java @@ -86,7 +86,7 @@ public abstract class AbstractBlockManager extends AbstractModelGenerator implem } @Override - public Map blocks() { + public Map loadedBlocks() { return Collections.unmodifiableMap(this.byId); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/BlockManager.java b/core/src/main/java/net/momirealms/craftengine/core/block/BlockManager.java index 1f6568636..785d13b17 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/BlockManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/BlockManager.java @@ -24,7 +24,12 @@ public interface BlockManager extends Manageable, ModelGenerator { Map modBlockStates(); - Map blocks(); + Map loadedBlocks(); + + @Deprecated(forRemoval = true) + default Map blocks() { + return loadedBlocks(); + } Optional blockById(Key key); diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/AbstractFurnitureManager.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/AbstractFurnitureManager.java index f343eb7ea..2e5b56471 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/AbstractFurnitureManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/AbstractFurnitureManager.java @@ -58,6 +58,11 @@ public abstract class AbstractFurnitureManager implements FurnitureManager { return Optional.ofNullable(this.byId.get(id)); } + @Override + public Map loadedFurniture() { + return Collections.unmodifiableMap(this.byId); + } + @Override public void unload() { this.byId.clear(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureManager.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureManager.java index 2a31d46de..68cf5fa05 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureManager.java @@ -9,6 +9,7 @@ import org.incendo.cloud.suggestion.Suggestion; import org.jetbrains.annotations.Nullable; import java.util.Collection; +import java.util.Map; import java.util.Optional; public interface FurnitureManager extends Manageable { @@ -30,6 +31,8 @@ public interface FurnitureManager extends Manageable { Optional furnitureById(Key id); + Map loadedFurniture(); + boolean isFurnitureRealEntity(int entityId); @Nullable diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java index f2fb1bba1..61a06df52 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java @@ -229,8 +229,8 @@ public abstract class AbstractItemManager extends AbstractModelGenerator impl } @Override - public Collection items() { - return Collections.unmodifiableCollection(this.customItemsById.keySet()); + public Map> loadedItems() { + return Collections.unmodifiableMap(this.customItemsById); } @Override diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/CustomItem.java b/core/src/main/java/net/momirealms/craftengine/core/item/CustomItem.java index b02cbea0b..bb7a71ed9 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/CustomItem.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/CustomItem.java @@ -16,6 +16,10 @@ import java.util.Optional; public interface CustomItem extends BuildableItem { + /** + * Since CraftEngine allows users to add certain functionalities to vanilla items, this custom item might actually be a vanilla item. + * This will be refactored before the 1.0 release, but no changes will be made for now to ensure compatibility. + */ boolean isVanillaItem(); Key id(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java b/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java index 4f34eff44..a255c23de 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java @@ -54,7 +54,12 @@ public interface ItemManager extends Manageable, ModelGenerator { Item fromByteArray(byte[] bytes); - Collection items(); + Map> loadedItems(); + + @Deprecated(forRemoval = true) + default Collection items() { + return loadedItems().keySet(); + } ExternalItemSource getExternalItemSource(String name); diff --git a/core/src/main/java/net/momirealms/craftengine/core/world/CEWorld.java b/core/src/main/java/net/momirealms/craftengine/core/world/CEWorld.java index cc9ccc239..c5c9f5249 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/world/CEWorld.java +++ b/core/src/main/java/net/momirealms/craftengine/core/world/CEWorld.java @@ -1,6 +1,5 @@ package net.momirealms.craftengine.core.world; -import ca.spottedleaf.concurrentutil.collection.MultiThreadedQueue; import ca.spottedleaf.concurrentutil.map.ConcurrentLong2ReferenceChainedHashTable; import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; import net.momirealms.craftengine.core.block.ImmutableBlockState;