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 096f42b67..b0bd2dac4 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 @@ -9,8 +9,8 @@ import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine; import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer; import net.momirealms.craftengine.bukkit.world.BukkitWorld; import net.momirealms.craftengine.core.entity.furniture.AnchorType; +import net.momirealms.craftengine.core.entity.furniture.CustomFurniture; import net.momirealms.craftengine.core.entity.furniture.Furniture; -import net.momirealms.craftengine.core.entity.furniture.FurnitureConfig; import net.momirealms.craftengine.core.entity.furniture.FurnitureDataAccessor; import net.momirealms.craftengine.core.entity.player.InteractionHand; import net.momirealms.craftengine.core.item.Item; @@ -49,7 +49,7 @@ public final class CraftEngineFurniture { * @return a non-null map containing all loaded custom furniture */ @NotNull - public static Map loadedFurniture() { + public static Map loadedFurniture() { return BukkitFurnitureManager.instance().loadedFurniture(); } @@ -59,7 +59,7 @@ public final class CraftEngineFurniture { * @param id id * @return the custom furniture */ - public static FurnitureConfig byId(@NotNull Key id) { + public static CustomFurniture byId(@NotNull Key id) { return BukkitFurnitureManager.instance().furnitureById(id).orElse(null); } @@ -111,7 +111,7 @@ public final class CraftEngineFurniture { */ @Nullable public static BukkitFurniture place(Location location, Key furnitureId) { - FurnitureConfig furniture = byId(furnitureId); + CustomFurniture furniture = byId(furnitureId); if (furniture == null) return null; return place(location, furniture, furniture.anyVariantName(), false); } @@ -140,7 +140,7 @@ public final class CraftEngineFurniture { */ @Nullable public static BukkitFurniture place(Location location, Key furnitureId, String variant) { - FurnitureConfig furniture = byId(furnitureId); + CustomFurniture furniture = byId(furnitureId); if (furniture == null) return null; return BukkitFurnitureManager.instance().place(location, furniture, FurnitureDataAccessor.ofVariant(variant), true); } @@ -155,7 +155,7 @@ public final class CraftEngineFurniture { */ @NotNull @Deprecated(since = "0.0.66", forRemoval = true) - public static BukkitFurniture place(Location location, FurnitureConfig furniture, AnchorType anchorType) { + public static BukkitFurniture place(Location location, CustomFurniture furniture, AnchorType anchorType) { return place(location, furniture, anchorType.variantName(), true); } @@ -171,7 +171,7 @@ public final class CraftEngineFurniture { @Nullable @Deprecated(since = "0.0.66", forRemoval = true) public static BukkitFurniture place(Location location, Key furnitureId, AnchorType anchorType, boolean playSound) { - FurnitureConfig furniture = byId(furnitureId); + CustomFurniture furniture = byId(furnitureId); if (furniture == null) return null; return place(location, furniture, anchorType.variantName(), playSound); } @@ -187,7 +187,7 @@ public final class CraftEngineFurniture { */ @Nullable public static BukkitFurniture place(Location location, Key furnitureId, String variant, boolean playSound) { - FurnitureConfig furniture = byId(furnitureId); + CustomFurniture furniture = byId(furnitureId); if (furniture == null) return null; return place(location, furniture, variant, playSound); } @@ -203,7 +203,7 @@ public final class CraftEngineFurniture { */ @NotNull @Deprecated(since = "0.0.66", forRemoval = true) - public static BukkitFurniture place(Location location, FurnitureConfig furniture, AnchorType anchorType, boolean playSound) { + public static BukkitFurniture place(Location location, CustomFurniture furniture, AnchorType anchorType, boolean playSound) { return place(location, furniture, anchorType.variantName(), playSound); } @@ -217,7 +217,7 @@ public final class CraftEngineFurniture { * @return the loaded furniture */ @NotNull - public static BukkitFurniture place(Location location, FurnitureConfig furniture, String variant, boolean playSound) { + public static BukkitFurniture place(Location location, CustomFurniture furniture, String variant, boolean playSound) { return BukkitFurnitureManager.instance().place(location, furniture, FurnitureDataAccessor.ofVariant(variant), playSound); } @@ -231,7 +231,7 @@ public final class CraftEngineFurniture { * @return the loaded furniture */ @NotNull - public static BukkitFurniture place(Location location, FurnitureConfig furniture, CompoundTag data, boolean playSound) { + public static BukkitFurniture place(Location location, CustomFurniture furniture, CompoundTag data, boolean playSound) { return BukkitFurnitureManager.instance().place(location, furniture, FurnitureDataAccessor.of(data), playSound); } @@ -245,7 +245,7 @@ public final class CraftEngineFurniture { * @return the loaded furniture */ @NotNull - public static BukkitFurniture place(Location location, FurnitureConfig furniture, FurnitureDataAccessor dataAccessor, boolean playSound) { + public static BukkitFurniture place(Location location, CustomFurniture furniture, FurnitureDataAccessor dataAccessor, boolean playSound) { return BukkitFurnitureManager.instance().place(location, furniture, dataAccessor, playSound); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureAttemptPlaceEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureAttemptPlaceEvent.java index 7e492239e..566a516da 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureAttemptPlaceEvent.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureAttemptPlaceEvent.java @@ -1,6 +1,6 @@ package net.momirealms.craftengine.bukkit.api.event; -import net.momirealms.craftengine.core.entity.furniture.FurnitureConfig; +import net.momirealms.craftengine.core.entity.furniture.CustomFurniture; import net.momirealms.craftengine.core.entity.furniture.FurnitureVariant; import net.momirealms.craftengine.core.entity.player.InteractionHand; import org.bukkit.Location; @@ -14,14 +14,14 @@ import org.jetbrains.annotations.NotNull; public final class FurnitureAttemptPlaceEvent extends PlayerEvent implements Cancellable { private static final HandlerList HANDLER_LIST = new HandlerList(); private boolean cancelled; - private final FurnitureConfig furniture; + private final CustomFurniture furniture; private final Location location; private final FurnitureVariant variant; private final Block clickedBlock; private final InteractionHand hand; public FurnitureAttemptPlaceEvent(@NotNull Player player, - @NotNull FurnitureConfig furniture, + @NotNull CustomFurniture furniture, @NotNull FurnitureVariant variant, @NotNull Location location, @NotNull InteractionHand hand, @@ -60,7 +60,7 @@ public final class FurnitureAttemptPlaceEvent extends PlayerEvent implements Can } @NotNull - public FurnitureConfig furniture() { + public CustomFurniture furniture() { return furniture; } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurniture.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurniture.java index 08bb220f8..ec5a845ca 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurniture.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurniture.java @@ -30,7 +30,7 @@ public class BukkitFurniture extends Furniture { private final WeakReference metaEntity; private Location location; - public BukkitFurniture(ItemDisplay metaEntity, FurnitureConfig config, FurnitureDataAccessor data) { + public BukkitFurniture(ItemDisplay metaEntity, CustomFurniture config, FurnitureDataAccessor data) { super(new BukkitEntity(metaEntity), data, config); this.metaEntity = new WeakReference<>(metaEntity); this.location = metaEntity.getLocation(); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureManager.java index c1cb3f717..88e847160 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureManager.java @@ -62,11 +62,11 @@ public class BukkitFurnitureManager extends AbstractFurnitureManager { } @Override - public Furniture place(WorldPosition position, FurnitureConfig furniture, FurnitureDataAccessor dataAccessor, boolean playSound) { + public Furniture place(WorldPosition position, CustomFurniture furniture, FurnitureDataAccessor dataAccessor, boolean playSound) { return this.place(LocationUtils.toLocation(position), furniture, dataAccessor, playSound); } - public BukkitFurniture place(Location location, FurnitureConfig furniture, FurnitureDataAccessor data, boolean playSound) { + public BukkitFurniture place(Location location, CustomFurniture furniture, FurnitureDataAccessor data, boolean playSound) { Entity furnitureEntity = EntityUtils.spawnEntity(location.getWorld(), location, EntityType.ITEM_DISPLAY, entity -> { ItemDisplay display = (ItemDisplay) entity; display.getPersistentDataContainer().set(BukkitFurnitureManager.FURNITURE_KEY, PersistentDataType.STRING, furniture.id().toString()); @@ -218,7 +218,7 @@ public class BukkitFurnitureManager extends AbstractFurnitureManager { // 获取家具配置 Key key = Key.of(id); - Optional optionalFurniture = furnitureById(key); + Optional optionalFurniture = furnitureById(key); if (optionalFurniture.isEmpty()) return; // 只对1.20.2及以上生效,1.20.1比较特殊 @@ -227,7 +227,7 @@ public class BukkitFurnitureManager extends AbstractFurnitureManager { } // 已经在其他事件里加载过了 - FurnitureConfig customFurniture = optionalFurniture.get(); + CustomFurniture customFurniture = optionalFurniture.get(); BukkitFurniture previous = this.byMetaEntityId.get(entity.getEntityId()); if (previous != null) return; @@ -254,11 +254,11 @@ public class BukkitFurnitureManager extends AbstractFurnitureManager { // 获取家具配置 Key key = Key.of(id); - Optional optionalFurniture = furnitureById(key); + Optional optionalFurniture = furnitureById(key); if (optionalFurniture.isEmpty()) return; // 已经在其他事件里加载过了 - FurnitureConfig customFurniture = optionalFurniture.get(); + CustomFurniture customFurniture = optionalFurniture.get(); BukkitFurniture previous = this.byMetaEntityId.get(entity.getEntityId()); if (previous != null) return; @@ -321,7 +321,7 @@ public class BukkitFurnitureManager extends AbstractFurnitureManager { } // 创建家具实例,并初始化碰撞实体 - private BukkitFurniture createFurnitureInstance(ItemDisplay display, FurnitureConfig furniture) { + private BukkitFurniture createFurnitureInstance(ItemDisplay display, CustomFurniture furniture) { BukkitFurniture bukkitFurniture = new BukkitFurniture(display, furniture, getFurnitureDataAccessor(display)); initFurniture(bukkitFurniture); Location location = display.getLocation(); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/FurnitureItemBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/FurnitureItemBehavior.java index 12e62569e..a40c5a34e 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/FurnitureItemBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/FurnitureItemBehavior.java @@ -74,7 +74,7 @@ public class FurnitureItemBehavior extends ItemBehavior { } public InteractionResult place(UseOnContext context) { - Optional optionalCustomFurniture = BukkitFurnitureManager.instance().furnitureById(this.id); + Optional optionalCustomFurniture = BukkitFurnitureManager.instance().furnitureById(this.id); if (optionalCustomFurniture.isEmpty()) { CraftEngine.instance().logger().warn("Furniture " + this.id + " not found"); return InteractionResult.FAIL; @@ -87,7 +87,7 @@ public class FurnitureItemBehavior extends ItemBehavior { case DOWN -> AnchorType.CEILING; }; - FurnitureConfig customFurniture = optionalCustomFurniture.get(); + CustomFurniture customFurniture = optionalCustomFurniture.get(); FurnitureVariant variant = customFurniture.getVariant(anchorType.variantName()); if (variant == null) { return InteractionResult.FAIL; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugSpawnFurnitureCommand.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugSpawnFurnitureCommand.java index 832a1c40e..016169435 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugSpawnFurnitureCommand.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugSpawnFurnitureCommand.java @@ -4,7 +4,7 @@ import net.momirealms.craftengine.bukkit.api.CraftEngineFurniture; import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurnitureManager; import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature; import net.momirealms.craftengine.bukkit.util.KeyUtils; -import net.momirealms.craftengine.core.entity.furniture.FurnitureConfig; +import net.momirealms.craftengine.core.entity.furniture.CustomFurniture; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager; import net.momirealms.craftengine.core.plugin.command.FlagKeys; @@ -48,7 +48,7 @@ public class DebugSpawnFurnitureCommand extends BukkitCommandFeature optionalCustomFurniture = furnitureManager.furnitureById(id); + Optional optionalCustomFurniture = furnitureManager.furnitureById(id); return optionalCustomFurniture.>>map(config -> CompletableFuture.completedFuture(config.variants().keySet().stream().map(Suggestion::suggestion).toList())).orElseGet(() -> CompletableFuture.completedFuture(List.of())); } })) @@ -57,12 +57,12 @@ public class DebugSpawnFurnitureCommand extends BukkitCommandFeature optionalCustomFurniture = furnitureManager.furnitureById(id); + Optional optionalCustomFurniture = furnitureManager.furnitureById(id); if (optionalCustomFurniture.isEmpty()) { return; } Location location = context.get("location"); - FurnitureConfig customFurniture = optionalCustomFurniture.get(); + CustomFurniture customFurniture = optionalCustomFurniture.get(); String variant = (String) context.optional("variant").orElse(customFurniture.anyVariantName()); boolean playSound = context.flags().hasFlag("silent"); CraftEngineFurniture.place(location, customFurniture, variant, playSound); diff --git a/common-files/src/main/resources/translations/en.yml b/common-files/src/main/resources/translations/en.yml index bb9da733c..e42ae799d 100644 --- a/common-files/src/main/resources/translations/en.yml +++ b/common-files/src/main/resources/translations/en.yml @@ -238,6 +238,8 @@ warning.config.furniture.element.item_display.missing_item: "Issue found warning.config.furniture.settings.unknown: "Issue found in file - The furniture '' is using an unknown setting type ''." warning.config.furniture.hitbox.invalid_type: "Issue found in file - The furniture '' is using an invalid hitbox type ''." warning.config.furniture.hitbox.custom.invalid_entity: "Issue found in file - The furniture '' is using a custom hitbox with invalid entity type ''." +warning.config.furniture.behavior.missing_type: "Issue found in file - The furniture '' is missing the required 'type' argument for behavior." +warning.config.furniture.behavior.invalid_type: "Issue found in file - The furniture '' is using an invalid behavior type ''." warning.config.item.duplicate: "Issue found in file - Duplicated item ''. Please check if there is the same configuration in other files." warning.config.item.settings.unknown: "Issue found in file - The item '' is using an unknown setting type ''." warning.config.item.settings.invulnerable.invalid_damage_source: "Issue found in file - The item '' is using an unknown damage source ''. Allowed sources: []." diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/behavior/BlockBehaviorFactory.java b/core/src/main/java/net/momirealms/craftengine/core/block/behavior/BlockBehaviorFactory.java index 287d7ecd4..3e2b97bad 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/behavior/BlockBehaviorFactory.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/behavior/BlockBehaviorFactory.java @@ -5,6 +5,7 @@ import net.momirealms.craftengine.core.block.CustomBlock; import java.util.Map; +// todo refactor this on 1.0 public interface BlockBehaviorFactory { BlockBehavior create(CustomBlock block, Map arguments); 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 c3c0d50a8..d757898ff 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 @@ -25,7 +25,7 @@ import java.nio.file.Path; import java.util.*; public abstract class AbstractFurnitureManager implements FurnitureManager { - protected final Map byId = new HashMap<>(); + protected final Map byId = new HashMap<>(); private final CraftEngine plugin; private final FurnitureParser furnitureParser; // Cached command suggestions @@ -60,12 +60,12 @@ public abstract class AbstractFurnitureManager implements FurnitureManager { } @Override - public Optional furnitureById(Key id) { + public Optional furnitureById(Key id) { return Optional.ofNullable(this.byId.get(id)); } @Override - public Map loadedFurniture() { + public Map loadedFurniture() { return Collections.unmodifiableMap(this.byId); } @@ -130,7 +130,6 @@ public abstract class AbstractFurnitureManager implements FurnitureManager { Optional optionalLootSpawnOffset = Optional.ofNullable(variantArguments.get("loot-spawn-offset")).map(it -> ResourceConfigUtils.getAsVector3f(it, "loot-spawn-offset")); List> elements = ResourceConfigUtils.parseConfigAsList(variantArguments.get("elements"), FurnitureElementConfigs::fromMap); - // fixme 外部模型不应该在这 Optional externalModel; if (variantArguments.containsKey("model-engine")) { externalModel = Optional.of(plugin.compatibilityManager().createModel("ModelEngine", variantArguments.get("model-engine").toString())); @@ -155,7 +154,7 @@ public abstract class AbstractFurnitureManager implements FurnitureManager { )); } - FurnitureConfig furniture = FurnitureConfig.builder() + CustomFurniture furniture = CustomFurniture.builder() .id(id) .settings(FurnitureSettings.fromMap(MiscUtils.castToMap(section.get("settings"), true))) .variants(variants) diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureConfig.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/CustomFurniture.java similarity index 95% rename from core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureConfig.java rename to core/src/main/java/net/momirealms/craftengine/core/entity/furniture/CustomFurniture.java index cd5634893..6a4b89499 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureConfig.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/CustomFurniture.java @@ -14,7 +14,7 @@ import java.util.Locale; import java.util.Map; import java.util.Optional; -public interface FurnitureConfig { +public interface CustomFurniture { void execute(Context context, EventTrigger trigger); @@ -68,7 +68,7 @@ public interface FurnitureConfig { } static Builder builder() { - return new FurnitureConfigImpl.BuilderImpl(); + return new CustomFurnitureImpl.BuilderImpl(); } interface Builder { @@ -85,6 +85,6 @@ public interface FurnitureConfig { Builder behavior(FurnitureBehavior behavior); - FurnitureConfig build(); + CustomFurniture build(); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureConfigImpl.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/CustomFurnitureImpl.java similarity index 94% rename from core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureConfigImpl.java rename to core/src/main/java/net/momirealms/craftengine/core/entity/furniture/CustomFurnitureImpl.java index facc01f27..ca01c0538 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureConfigImpl.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/CustomFurnitureImpl.java @@ -16,7 +16,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; -class FurnitureConfigImpl implements FurnitureConfig { +class CustomFurnitureImpl implements CustomFurniture { private final Key id; private final FurnitureSettings settings; private final Map variants; @@ -25,7 +25,7 @@ class FurnitureConfigImpl implements FurnitureConfig { @Nullable private final LootTable lootTable; - private FurnitureConfigImpl(@NotNull Key id, + private CustomFurnitureImpl(@NotNull Key id, @NotNull FurnitureSettings settings, @NotNull Map variants, @NotNull Map>> events, @@ -86,8 +86,8 @@ class FurnitureConfigImpl implements FurnitureConfig { private FurnitureBehavior behavior = EmptyFurnitureBehavior.INSTANCE; @Override - public FurnitureConfig build() { - return new FurnitureConfigImpl(this.id, this.settings, this.variants, this.events, this.behavior, this.lootTable); + public CustomFurniture build() { + return new CustomFurnitureImpl(this.id, this.settings, this.variants, this.events, this.behavior, this.lootTable); } @Override diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/Furniture.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/Furniture.java index ec865cdff..98033012d 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/Furniture.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/Furniture.java @@ -35,7 +35,7 @@ import java.util.UUID; import java.util.concurrent.CompletableFuture; public abstract class Furniture implements Cullable { - public final FurnitureConfig config; + public final CustomFurniture config; public final FurnitureDataAccessor dataAccessor; public final Entity metaDataEntity; @@ -50,7 +50,7 @@ public abstract class Furniture implements Cullable { private boolean hasExternalModel; - protected Furniture(Entity metaDataEntity, FurnitureDataAccessor data, FurnitureConfig config) { + protected Furniture(Entity metaDataEntity, FurnitureDataAccessor data, CustomFurniture config) { this.config = config; this.dataAccessor = data; this.metaDataEntity = metaDataEntity; @@ -257,7 +257,7 @@ public abstract class Furniture implements Cullable { public abstract void destroy(); - public FurnitureConfig config() { + public CustomFurniture config() { return this.config; } diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureDataAccessor.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureDataAccessor.java index fb4785432..84357733d 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureDataAccessor.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureDataAccessor.java @@ -112,7 +112,6 @@ public class FurnitureDataAccessor { this.data.putString(VARIANT, variant); } - @SuppressWarnings("deprecation") @ApiStatus.Obsolete public Optional anchorType() { if (this.data.containsKey(ANCHOR_TYPE)) return Optional.of(AnchorType.byId(this.data.getInt(ANCHOR_TYPE))); @@ -120,7 +119,7 @@ public class FurnitureDataAccessor { } @ApiStatus.Obsolete - public FurnitureDataAccessor anchorType(@SuppressWarnings("deprecation") AnchorType type) { + public FurnitureDataAccessor anchorType(AnchorType type) { this.data.putInt(ANCHOR_TYPE, type.getId()); return this; } 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 99d4ee3a0..e36080e4c 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 @@ -16,19 +16,17 @@ public interface FurnitureManager extends Manageable { Key FURNITURE_EXTRA_DATA_KEY = Key.of("craftengine:furniture_extra_data"); Key FURNITURE_COLLISION = Key.of("craftengine:collision"); - String FURNITURE_ADMIN_NODE = "craftengine.furniture.admin"; - ConfigParser parser(); void initSuggestions(); Collection cachedSuggestions(); - Furniture place(WorldPosition position, FurnitureConfig furniture, FurnitureDataAccessor extraData, boolean playSound); + Furniture place(WorldPosition position, CustomFurniture furniture, FurnitureDataAccessor extraData, boolean playSound); - Optional furnitureById(Key id); + Optional furnitureById(Key id); - Map loadedFurniture(); + Map loadedFurniture(); boolean isFurnitureMetaEntity(int entityId); diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureSounds.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureSounds.java index 4434eaed4..55584e83f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureSounds.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureSounds.java @@ -7,36 +7,29 @@ import java.util.Map; public class FurnitureSounds { public static final SoundData EMPTY_SOUND = new SoundData(Key.of("minecraft:intentionally_empty"), SoundData.SoundValue.FIXED_1, SoundData.SoundValue.FIXED_1); - public static final FurnitureSounds EMPTY = new FurnitureSounds(EMPTY_SOUND, EMPTY_SOUND, EMPTY_SOUND); + public static final FurnitureSounds EMPTY = new FurnitureSounds(EMPTY_SOUND, EMPTY_SOUND); private final SoundData breakSound; private final SoundData placeSound; - private final SoundData rotateSound; - public FurnitureSounds(SoundData breakSound, SoundData placeSound, SoundData rotateSound) { + public FurnitureSounds(SoundData breakSound, SoundData placeSound) { this.breakSound = breakSound; this.placeSound = placeSound; - this.rotateSound = rotateSound; } public static FurnitureSounds fromMap(Map map) { if (map == null) return EMPTY; return new FurnitureSounds( SoundData.create(map.getOrDefault("break", "minecraft:intentionally_empty"), SoundData.SoundValue.FIXED_1, SoundData.SoundValue.FIXED_0_8), - SoundData.create(map.getOrDefault("place", "minecraft:intentionally_empty"), SoundData.SoundValue.FIXED_1, SoundData.SoundValue.FIXED_0_8), - SoundData.create(map.getOrDefault("rotate", "minecraft:intentionally_empty"), SoundData.SoundValue.FIXED_1, SoundData.SoundValue.FIXED_0_8) + SoundData.create(map.getOrDefault("place", "minecraft:intentionally_empty"), SoundData.SoundValue.FIXED_1, SoundData.SoundValue.FIXED_0_8) ); } public SoundData breakSound() { - return breakSound; + return this.breakSound; } public SoundData placeSound() { - return placeSound; - } - - public SoundData rotateSound() { - return rotateSound; + return this.placeSound; } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/behavior/FurnitureBehaviorFactory.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/behavior/FurnitureBehaviorFactory.java new file mode 100644 index 000000000..99e3eaa3c --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/behavior/FurnitureBehaviorFactory.java @@ -0,0 +1,8 @@ +package net.momirealms.craftengine.core.entity.furniture.behavior; + +import java.util.Map; + +public interface FurnitureBehaviorFactory { + + T create(Map properties); +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/behavior/FurnitureBehaviorType.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/behavior/FurnitureBehaviorType.java new file mode 100644 index 000000000..08d006d02 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/behavior/FurnitureBehaviorType.java @@ -0,0 +1,6 @@ +package net.momirealms.craftengine.core.entity.furniture.behavior; + +import net.momirealms.craftengine.core.util.Key; + +public record FurnitureBehaviorType(Key id, FurnitureBehaviorFactory factory) { +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/behavior/FurnitureBehaviorTypes.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/behavior/FurnitureBehaviorTypes.java new file mode 100644 index 000000000..18570cbd8 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/behavior/FurnitureBehaviorTypes.java @@ -0,0 +1,34 @@ +package net.momirealms.craftengine.core.entity.furniture.behavior; + +import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; +import net.momirealms.craftengine.core.registry.BuiltInRegistries; +import net.momirealms.craftengine.core.registry.Registries; +import net.momirealms.craftengine.core.registry.WritableRegistry; +import net.momirealms.craftengine.core.util.Key; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; +import net.momirealms.craftengine.core.util.ResourceKey; +import org.jetbrains.annotations.Nullable; + +import java.util.Map; + +public class FurnitureBehaviorTypes { + public static final Key EMPTY = Key.from("craftengine:empty"); + + public static FurnitureBehavior fromMap(@Nullable Map map) { + if (map == null || map.isEmpty()) return EmptyFurnitureBehavior.INSTANCE; + String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("type"), "warning.config.furniture.behavior.missing_type"); + Key key = Key.withDefaultNamespace(type, Key.DEFAULT_NAMESPACE); + FurnitureBehaviorType furnitureBehaviorType = BuiltInRegistries.FURNITURE_BEHAVIOR_TYPE.getValue(key); + if (furnitureBehaviorType == null) { + throw new LocalizedResourceConfigException("warning.config.furniture.behavior.invalid_type", type); + } + return furnitureBehaviorType.factory().create(map); + } + + public static FurnitureBehaviorType register(Key id, FurnitureBehaviorFactory factory) { + FurnitureBehaviorType type = new FurnitureBehaviorType<>(id, factory); + ((WritableRegistry>) BuiltInRegistries.FURNITURE_BEHAVIOR_TYPE) + .register(ResourceKey.create(Registries.BLOCK_BEHAVIOR_FACTORY.location(), id), type); + return type; + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/modifier/ComponentsModifier.java b/core/src/main/java/net/momirealms/craftengine/core/item/modifier/ComponentsModifier.java index ade22825d..bb4213a32 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/modifier/ComponentsModifier.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/modifier/ComponentsModifier.java @@ -4,11 +4,7 @@ import com.google.gson.JsonElement; import net.momirealms.craftengine.core.item.*; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; -import net.momirealms.craftengine.core.util.GsonHelper; -import net.momirealms.craftengine.core.util.Key; -import net.momirealms.craftengine.core.util.Pair; -import net.momirealms.craftengine.core.util.ResourceConfigUtils; -import net.momirealms.craftengine.core.util.TagParser; +import net.momirealms.craftengine.core.util.*; import net.momirealms.sparrow.nbt.CompoundTag; import net.momirealms.sparrow.nbt.Tag; diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/CraftRemainderFactory.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/CraftRemainderFactory.java index a52960288..e01ecae98 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/CraftRemainderFactory.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/CraftRemainderFactory.java @@ -2,7 +2,7 @@ package net.momirealms.craftengine.core.item.recipe.remainder; import java.util.Map; -public interface CraftRemainderFactory { +public interface CraftRemainderFactory { - CraftRemainder create(Map args); + T create(Map args); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/CraftRemainders.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/CraftRemainders.java index ed1551cac..8bb4a868f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/CraftRemainders.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/CraftRemainders.java @@ -23,15 +23,15 @@ public class CraftRemainders { register(HURT_AND_BREAK, HurtAndBreakRemainder.FACTORY); } - public static void register(Key key, CraftRemainderFactory factory) { - ((WritableRegistry) BuiltInRegistries.CRAFT_REMAINDER_FACTORY) + public static void register(Key key, CraftRemainderFactory factory) { + ((WritableRegistry>) BuiltInRegistries.CRAFT_REMAINDER_FACTORY) .register(ResourceKey.create(Registries.CRAFT_REMAINDER_FACTORY.location(), key), factory); } public static CraftRemainder fromMap(Map map) { String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("type"), "warning.config.item.settings.craft_remainder.missing_type"); Key key = Key.withDefaultNamespace(type, Key.DEFAULT_NAMESPACE); - CraftRemainderFactory factory = BuiltInRegistries.CRAFT_REMAINDER_FACTORY.getValue(key); + CraftRemainderFactory factory = BuiltInRegistries.CRAFT_REMAINDER_FACTORY.getValue(key); if (factory == null) { throw new LocalizedResourceConfigException("warning.config.item.settings.craft_remainder.invalid_type", type); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/FixedCraftRemainder.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/FixedCraftRemainder.java index 61302aa50..1275e7339 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/FixedCraftRemainder.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/FixedCraftRemainder.java @@ -21,10 +21,10 @@ public class FixedCraftRemainder implements CraftRemainder { return (Item) CraftEngine.instance().itemManager().createWrappedItem(this.item, null); } - public static class Factory implements CraftRemainderFactory { + public static class Factory implements CraftRemainderFactory { @Override - public CraftRemainder create(Map args) { + public FixedCraftRemainder create(Map args) { Key item = Key.of(ResourceConfigUtils.requireNonEmptyStringOrThrow(args.get("item"), "warning.config.item.settings.craft_remainder.fixed.missing_item")); return new FixedCraftRemainder(item); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/HurtAndBreakRemainder.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/HurtAndBreakRemainder.java index 8d304a4f4..8ca7bc1b4 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/HurtAndBreakRemainder.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/HurtAndBreakRemainder.java @@ -28,10 +28,10 @@ public class HurtAndBreakRemainder implements CraftRemainder { } } - public static class Factory implements CraftRemainderFactory { + public static class Factory implements CraftRemainderFactory { @Override - public CraftRemainder create(Map args) { + public HurtAndBreakRemainder create(Map args) { int damage = ResourceConfigUtils.getAsInt(args.getOrDefault("damage", 1), "damage"); return new HurtAndBreakRemainder(damage); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/RecipeBasedCraftRemainder.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/RecipeBasedCraftRemainder.java index afe0b8e17..5cf66566e 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/RecipeBasedCraftRemainder.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/remainder/RecipeBasedCraftRemainder.java @@ -30,10 +30,10 @@ public class RecipeBasedCraftRemainder implements CraftRemainder { return this.fallback != null ? this.fallback.remainder(recipeId, item) : null; } - public static class Factory implements CraftRemainderFactory { + public static class Factory implements CraftRemainderFactory { @Override - public CraftRemainder create(Map args) { + public RecipeBasedCraftRemainder create(Map args) { Map remainders = new HashMap<>(); List remainderList = ResourceConfigUtils.parseConfigAsList(ResourceConfigUtils.requireNonNullOrThrow(args.get("terms"), "warning.config.item.settings.craft_remainder.recipe_based.missing_terms"), map -> { List recipes = MiscUtils.getAsStringList(map.get("recipes")).stream().map(Key::of).toList(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/template/ArgumentString.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/template/ArgumentString.java index 0241d73b2..3394bed15 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/template/ArgumentString.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/template/ArgumentString.java @@ -1,6 +1,5 @@ package net.momirealms.craftengine.core.plugin.config.template; -import com.mojang.brigadier.exceptions.CommandSyntaxException; import net.momirealms.craftengine.core.plugin.config.template.argument.TemplateArgument; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.util.TagParser; diff --git a/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java b/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java index 287ca2752..85a3de7bd 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java +++ b/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java @@ -5,6 +5,7 @@ import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; import net.momirealms.craftengine.core.block.entity.BlockEntityType; import net.momirealms.craftengine.core.block.entity.render.element.BlockEntityElementConfigFactory; import net.momirealms.craftengine.core.block.properties.PropertyFactory; +import net.momirealms.craftengine.core.entity.furniture.behavior.FurnitureBehaviorType; import net.momirealms.craftengine.core.entity.furniture.element.FurnitureElementConfigFactory; import net.momirealms.craftengine.core.entity.furniture.hitbox.FurnitureHitBoxConfigFactory; import net.momirealms.craftengine.core.item.ItemDataModifierFactory; @@ -90,9 +91,10 @@ public class BuiltInRegistries { public static final Registry> MOD_PACKET = createConstantBoundRegistry(Registries.MOD_PACKET, 16); public static final Registry> BLOCK_ENTITY_TYPE = createConstantBoundRegistry(Registries.BLOCK_ENTITY_TYPE, 64); public static final Registry> BLOCK_ENTITY_ELEMENT_TYPE = createConstantBoundRegistry(Registries.BLOCK_ENTITY_ELEMENT_TYPE, 16); - public static final Registry CRAFT_REMAINDER_FACTORY = createConstantBoundRegistry(Registries.CRAFT_REMAINDER_FACTORY, 16); + public static final Registry> CRAFT_REMAINDER_FACTORY = createConstantBoundRegistry(Registries.CRAFT_REMAINDER_FACTORY, 16); public static final Registry> FURNITURE_ELEMENT_TYPE = createConstantBoundRegistry(Registries.FURNITURE_ELEMENT_TYPE, 16); public static final Registry> FURNITURE_HITBOX_TYPE = createConstantBoundRegistry(Registries.FURNITURE_HITBOX_TYPE, 16); + public static final Registry> FURNITURE_BEHAVIOR_TYPE = createConstantBoundRegistry(Registries.FURNITURE_BEHAVIOR_TYPE, 32); private static Registry createConstantBoundRegistry(ResourceKey> key, int expectedSize) { return new ConstantBoundRegistry<>(key, expectedSize); diff --git a/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java b/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java index 4afecdcd7..102dec975 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java +++ b/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java @@ -5,6 +5,7 @@ import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; import net.momirealms.craftengine.core.block.entity.BlockEntityType; import net.momirealms.craftengine.core.block.entity.render.element.BlockEntityElementConfigFactory; import net.momirealms.craftengine.core.block.properties.PropertyFactory; +import net.momirealms.craftengine.core.entity.furniture.behavior.FurnitureBehaviorType; import net.momirealms.craftengine.core.entity.furniture.element.FurnitureElementConfigFactory; import net.momirealms.craftengine.core.entity.furniture.hitbox.FurnitureHitBoxConfigFactory; import net.momirealms.craftengine.core.item.ItemDataModifierFactory; @@ -92,7 +93,8 @@ public class Registries { public static final ResourceKey>> MOD_PACKET = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("mod_packet_type")); public static final ResourceKey>> BLOCK_ENTITY_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("block_entity_type")); public static final ResourceKey>> BLOCK_ENTITY_ELEMENT_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("block_entity_element_type")); - public static final ResourceKey> CRAFT_REMAINDER_FACTORY = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("craft_remainder_factory")); + public static final ResourceKey>> CRAFT_REMAINDER_FACTORY = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("craft_remainder_factory")); public static final ResourceKey>> FURNITURE_ELEMENT_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("furniture_element_type")); public static final ResourceKey>> FURNITURE_HITBOX_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("furniture_hitbox_type")); + public static final ResourceKey>> FURNITURE_BEHAVIOR_TYPE = ResourceKey.create(ROOT_REGISTRY, Key.withDefaultNamespace("furniture_behavior_type")); }