9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-28 03:19:14 +00:00

添加can-place物品设置,准备重构物品

This commit is contained in:
XiaoMoMi
2025-04-13 17:01:14 +08:00
parent 002876c3e6
commit c7001bc092
25 changed files with 190 additions and 92 deletions

View File

@@ -24,7 +24,7 @@ public abstract class AbstractItemManager<I> extends AbstractModelGenerator impl
protected static final Map<Key, List<Holder<Key>>> VANILLA_ITEM_TAGS = new HashMap<>();
protected final Map<String, ExternalItemProvider<I>> externalItemProviders = new HashMap<>();
protected final Map<String, Function<Object, ItemModifier<I>>> dataFunctions = new HashMap<>();
protected final Map<String, Function<Object, ItemDataModifier<I>>> dataFunctions = new HashMap<>();
protected final Map<Key, CustomItem<I>> customItems = new HashMap<>();
protected final Map<Key, List<Holder<Key>>> customItemTags;
protected final Map<Key, Map<Integer, Key>> cmdConflictChecker;
@@ -37,7 +37,7 @@ public abstract class AbstractItemManager<I> extends AbstractModelGenerator impl
protected final List<Suggestion> cachedSuggestions = new ArrayList<>();
protected final List<Suggestion> cachedTotemSuggestions = new ArrayList<>();
protected void registerDataFunction(Function<Object, ItemModifier<I>> function, String... alias) {
protected void registerDataFunction(Function<Object, ItemDataModifier<I>> function, String... alias) {
for (String a : alias) {
dataFunctions.put(a, function);
}

View File

@@ -1,23 +1,24 @@
package net.momirealms.craftengine.core.item;
import net.kyori.adventure.key.Key;
import net.momirealms.craftengine.core.util.Key;
public class ComponentKeys {
public static final String CUSTOM_MODEL_DATA = Key.key("minecraft", "custom_model_data").asString();
public static final String CUSTOM_NAME = Key.key("minecraft", "custom_name").asString();
public static final String ITEM_NAME = Key.key("minecraft", "item_name").asString();
public static final String LORE = Key.key("minecraft", "lore").asString();
public static final String DAMAGE = Key.key("minecraft", "damage").asString();
public static final String MAX_DAMAGE = Key.key("minecraft", "max_damage").asString();
public static final String ENCHANTMENT_GLINT_OVERRIDE = Key.key("minecraft", "enchantment_glint_override").asString();
public static final String ENCHANTMENTS = Key.key("minecraft", "enchantments").asString();
public static final String STORED_ENCHANTMENTS = Key.key("minecraft", "stored_enchantments").asString();
public static final String UNBREAKABLE = Key.key("minecraft", "unbreakable").asString();
public static final String MAX_STACK_SIZE = Key.key("minecraft", "max_stack_size").asString();
public static final String EQUIPPABLE = Key.key("minecraft", "equippable").asString();
public static final String ITEM_MODEL = Key.key("minecraft", "item_model").asString();
public static final String TOOLTIP_STYLE = Key.key("minecraft", "tooltip_style").asString();
public static final String JUKEBOX_PLAYABLE = Key.key("minecraft", "jukebox_playable").asString();
public static final String TRIM = Key.key("minecraft", "trim").asString();
public static final String REPAIR_COST = Key.key("minecraft", "repair_cost").asString();
public static final String CUSTOM_MODEL_DATA = Key.of("minecraft", "custom_model_data").toString();
public static final String CUSTOM_NAME = Key.of("minecraft", "custom_name").toString();
public static final String ITEM_NAME = Key.of("minecraft", "item_name").toString();
public static final String LORE = Key.of("minecraft", "lore").toString();
public static final String DAMAGE = Key.of("minecraft", "damage").toString();
public static final String MAX_DAMAGE = Key.of("minecraft", "max_damage").toString();
public static final String ENCHANTMENT_GLINT_OVERRIDE = Key.of("minecraft", "enchantment_glint_override").toString();
public static final String ENCHANTMENTS = Key.of("minecraft", "enchantments").toString();
public static final String STORED_ENCHANTMENTS = Key.of("minecraft", "stored_enchantments").toString();
public static final String UNBREAKABLE = Key.of("minecraft", "unbreakable").toString();
public static final String MAX_STACK_SIZE = Key.of("minecraft", "max_stack_size").toString();
public static final String EQUIPPABLE = Key.of("minecraft", "equippable").toString();
public static final String ITEM_MODEL = Key.of("minecraft", "item_model").toString();
public static final String TOOLTIP_STYLE = Key.of("minecraft", "tooltip_style").toString();
public static final String JUKEBOX_PLAYABLE = Key.of("minecraft", "jukebox_playable").toString();
public static final String TRIM = Key.of("minecraft", "trim").toString();
public static final String REPAIR_COST = Key.of("minecraft", "repair_cost").toString();
public static final String CUSTOM_DATA = Key.of("minecraft", "custom_data").toString();
}

View File

@@ -2,12 +2,13 @@ package net.momirealms.craftengine.core.item;
import net.momirealms.craftengine.core.entity.player.Player;
import net.momirealms.craftengine.core.item.behavior.ItemBehavior;
import net.momirealms.craftengine.core.item.modifier.ItemModifier;
import net.momirealms.craftengine.core.item.modifier.ItemDataModifier;
import net.momirealms.craftengine.core.util.Key;
import net.momirealms.craftengine.core.util.context.ContextHolder;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.Map;
public interface CustomItem<I> extends BuildableItem<I> {
@@ -15,7 +16,15 @@ public interface CustomItem<I> extends BuildableItem<I> {
Key material();
List<ItemModifier<I>> modifiers();
List<ItemDataModifier<I>> dataModifiers();
Map<String, ItemDataModifier<I>> dataModifierMap();
boolean hasClientBoundDataModifier();
List<ItemDataModifier<I>> clientBoundDataModifiers();
Map<String, ItemDataModifier<I>> clientBoundDataModifierMap();
ItemSettings settings();
@@ -37,13 +46,17 @@ public interface CustomItem<I> extends BuildableItem<I> {
Builder<I> material(Key material);
Builder<I> modifiers(List<ItemModifier<I>> modifiers);
Builder<I> dataModifier(ItemDataModifier<I> modifier);
Builder<I> modifier(ItemModifier<I> modifier);
Builder<I> dataModifiers(List<ItemDataModifier<I>> modifiers);
Builder<I> clientBoundDataModifier(ItemDataModifier<I> modifier);
Builder<I> clientBoundDataModifiers(List<ItemDataModifier<I>> modifiers);
Builder<I> behavior(ItemBehavior behavior);
Builder<I> behavior(List<ItemBehavior> behaviors);
Builder<I> behaviors(List<ItemBehavior> behaviors);
Builder<I> settings(ItemSettings settings);

View File

@@ -1,7 +1,7 @@
package net.momirealms.craftengine.core.item;
import net.momirealms.craftengine.core.item.modifier.EquippableModifier;
import net.momirealms.craftengine.core.item.modifier.ItemModifier;
import net.momirealms.craftengine.core.item.modifier.ItemDataModifier;
import net.momirealms.craftengine.core.pack.misc.EquipmentGeneration;
import net.momirealms.craftengine.core.util.Key;
import net.momirealms.craftengine.core.util.MiscUtils;
@@ -19,13 +19,14 @@ public class ItemSettings {
boolean canRepair = true;
List<AnvilRepairItem> anvilRepairItems = List.of();
boolean renameable = true;
boolean canPlaceRelatedVanillaBlock = false;
private ItemSettings() {}
public <I> List<ItemModifier<I>> modifiers() {
ArrayList<ItemModifier<I>> modifiers = new ArrayList<>();
public <I> List<ItemDataModifier<I>> modifiers() {
ArrayList<ItemDataModifier<I>> modifiers = new ArrayList<>();
if (VersionHelper.isVersionNewerThan1_21_2() && this.equipment != null && this.equipment.modernData() != null) modifiers.add(new EquippableModifier<>(this.equipment.modernData()));
// TODO 1.20
// TODO 1.20 leather armor
return modifiers;
}
@@ -45,6 +46,7 @@ public class ItemSettings {
newSettings.canRepair = settings.canRepair;
newSettings.anvilRepairItems = settings.anvilRepairItems;
newSettings.renameable = settings.renameable;
newSettings.canPlaceRelatedVanillaBlock = settings.canPlaceRelatedVanillaBlock;
return newSettings;
}
@@ -60,6 +62,10 @@ public class ItemSettings {
return settings;
}
public boolean canPlaceRelatedVanillaBlock() {
return canPlaceRelatedVanillaBlock;
}
public boolean canRepair() {
return canRepair;
}
@@ -100,6 +106,11 @@ public class ItemSettings {
return this;
}
public ItemSettings canPlaceRelatedVanillaBlock(boolean canPlaceRelatedVanillaBlock) {
this.canPlaceRelatedVanillaBlock = canPlaceRelatedVanillaBlock;
return this;
}
public ItemSettings fuelTime(int fuelTime) {
this.fuelTime = fuelTime;
return this;
@@ -175,6 +186,10 @@ public class ItemSettings {
);
return settings -> settings.equipment(equipment);
}));
registerFactory("can-place", (value -> {
boolean bool = (boolean) value;
return settings -> settings.canPlaceRelatedVanillaBlock(bool);
}));
}
private static void registerFactory(String id, ItemSettings.Modifier.Factory factory) {

View File

@@ -5,7 +5,7 @@ import net.momirealms.craftengine.core.item.ItemBuildContext;
import java.util.Map;
public class ComponentModifier<I> implements ItemModifier<I> {
public class ComponentModifier<I> implements ItemDataModifier<I> {
private final Map<String, Object> arguments;
public ComponentModifier(Map<String, Object> arguments) {

View File

@@ -3,7 +3,7 @@ package net.momirealms.craftengine.core.item.modifier;
import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.item.ItemBuildContext;
public class CustomModelDataModifier<I> implements ItemModifier<I> {
public class CustomModelDataModifier<I> implements ItemDataModifier<I> {
private final int argument;
public CustomModelDataModifier(int argument) {

View File

@@ -5,7 +5,7 @@ import net.momirealms.craftengine.core.item.ItemBuildContext;
import net.momirealms.craftengine.core.plugin.config.Config;
import net.momirealms.craftengine.core.util.AdventureHelper;
public class DisplayNameModifier<I> implements ItemModifier<I> {
public class DisplayNameModifier<I> implements ItemDataModifier<I> {
private final String argument;
public DisplayNameModifier(String argument) {

View File

@@ -7,7 +7,7 @@ import net.momirealms.craftengine.core.item.ItemKeys;
import java.util.List;
public class EnchantmentModifier<I> implements ItemModifier<I> {
public class EnchantmentModifier<I> implements ItemDataModifier<I> {
private final List<Enchantment> enchantments;
public EnchantmentModifier(List<Enchantment> enchantments) {

View File

@@ -5,7 +5,7 @@ import net.momirealms.craftengine.core.item.EquipmentData;
import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.item.ItemBuildContext;
public class EquippableModifier<I> implements ItemModifier<I> {
public class EquippableModifier<I> implements ItemDataModifier<I> {
private final EquipmentData data;
public EquippableModifier(EquipmentData data) {

View File

@@ -5,7 +5,7 @@ import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.item.ItemBuildContext;
import net.momirealms.craftengine.core.plugin.CraftEngine;
public class ExternalModifier<I> implements ItemModifier<I> {
public class ExternalModifier<I> implements ItemDataModifier<I> {
private final String id;
private final ExternalItemProvider<I> provider;

View File

@@ -4,7 +4,7 @@ import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.item.ItemBuildContext;
import net.momirealms.craftengine.core.util.Key;
public class IdModifier<I> implements ItemModifier<I> {
public class IdModifier<I> implements ItemDataModifier<I> {
public static final String CRAFT_ENGINE_ID = "craftengine:id";
private final Key argument;

View File

@@ -3,7 +3,7 @@ package net.momirealms.craftengine.core.item.modifier;
import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.item.ItemBuildContext;
public interface ItemModifier<I> {
public interface ItemDataModifier<I> {
String name();

View File

@@ -5,7 +5,7 @@ import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.item.ItemBuildContext;
import net.momirealms.craftengine.core.util.Key;
public class ItemModelModifier<I> implements ItemModifier<I> {
public class ItemModelModifier<I> implements ItemDataModifier<I> {
private final Key data;
public ItemModelModifier(Key data) {

View File

@@ -5,7 +5,7 @@ import net.momirealms.craftengine.core.item.ItemBuildContext;
import net.momirealms.craftengine.core.plugin.config.Config;
import net.momirealms.craftengine.core.util.AdventureHelper;
public class ItemNameModifier<I> implements ItemModifier<I> {
public class ItemNameModifier<I> implements ItemDataModifier<I> {
private final String argument;
public ItemNameModifier(String argument) {

View File

@@ -8,7 +8,7 @@ import net.momirealms.craftengine.core.util.VersionHelper;
import java.util.Map;
public class JukeboxSongModifier<I> implements ItemModifier<I> {
public class JukeboxSongModifier<I> implements ItemDataModifier<I> {
private final Key song;
public JukeboxSongModifier(Key song) {

View File

@@ -7,7 +7,7 @@ import net.momirealms.craftengine.core.util.AdventureHelper;
import java.util.List;
public class LoreModifier<I> implements ItemModifier<I> {
public class LoreModifier<I> implements ItemDataModifier<I> {
private final List<String> argument;
public LoreModifier(List<String> argument) {

View File

@@ -8,7 +8,7 @@ import net.momirealms.craftengine.core.util.TypeUtils;
import java.util.LinkedHashMap;
import java.util.Map;
public class TagsModifier<I> implements ItemModifier<I> {
public class TagsModifier<I> implements ItemDataModifier<I> {
private final Map<String, Object> arguments;
public TagsModifier(Map<String, Object> arguments) {

View File

@@ -5,7 +5,7 @@ import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.item.ItemBuildContext;
import net.momirealms.craftengine.core.util.Key;
public class TooltipStyleModifier<I> implements ItemModifier<I> {
public class TooltipStyleModifier<I> implements ItemDataModifier<I> {
private final Key argument;
public TooltipStyleModifier(Key argument) {

View File

@@ -7,7 +7,7 @@ import net.momirealms.craftengine.core.util.VersionHelper;
import java.util.Map;
public class TrimModifier<I> implements ItemModifier<I> {
public class TrimModifier<I> implements ItemDataModifier<I> {
private final String material;
private final String pattern;

View File

@@ -3,7 +3,7 @@ package net.momirealms.craftengine.core.item.modifier;
import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.item.ItemBuildContext;
public class UnbreakableModifier<I> implements ItemModifier<I> {
public class UnbreakableModifier<I> implements ItemDataModifier<I> {
private final boolean argument;
public UnbreakableModifier(boolean argument) {