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;