mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-23 17:09:19 +00:00
添加can-place物品设置,准备重构物品
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package net.momirealms.craftengine.bukkit.item;
|
package net.momirealms.craftengine.bukkit.item;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
||||||
import net.momirealms.craftengine.bukkit.util.MaterialUtils;
|
import net.momirealms.craftengine.bukkit.util.MaterialUtils;
|
||||||
import net.momirealms.craftengine.core.item.CustomItem;
|
import net.momirealms.craftengine.core.item.CustomItem;
|
||||||
@@ -7,57 +8,97 @@ import net.momirealms.craftengine.core.item.Item;
|
|||||||
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
||||||
import net.momirealms.craftengine.core.item.ItemSettings;
|
import net.momirealms.craftengine.core.item.ItemSettings;
|
||||||
import net.momirealms.craftengine.core.item.behavior.ItemBehavior;
|
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.Key;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class BukkitCustomItem implements CustomItem<ItemStack> {
|
public class BukkitCustomItem implements CustomItem<ItemStack> {
|
||||||
private final Key id;
|
private final Key id;
|
||||||
private final Key materialKey;
|
private final Key materialKey;
|
||||||
private final Material material;
|
private final Material material;
|
||||||
private final List<ItemModifier<ItemStack>> modifiers;
|
private final List<ItemDataModifier<ItemStack>> modifiers;
|
||||||
private final List<ItemBehavior> behavior;
|
private final Map<String, ItemDataModifier<ItemStack>> modifierMap;
|
||||||
|
private final List<ItemDataModifier<ItemStack>> clientBoundModifiers;
|
||||||
|
private final Map<String, ItemDataModifier<ItemStack>> clientBoundModifierMap;
|
||||||
|
private final List<ItemBehavior> behaviors;
|
||||||
private final ItemSettings settings;
|
private final ItemSettings settings;
|
||||||
|
|
||||||
public BukkitCustomItem(Key id, Key materialKey, Material material, List<ItemModifier<ItemStack>> modifiers, List<ItemBehavior> behavior, ItemSettings settings) {
|
public BukkitCustomItem(Key id,
|
||||||
|
Key materialKey,
|
||||||
|
Material material,
|
||||||
|
List<ItemDataModifier<ItemStack>> modifiers,
|
||||||
|
List<ItemDataModifier<ItemStack>> clientBoundModifiers,
|
||||||
|
List<ItemBehavior> behaviors,
|
||||||
|
ItemSettings settings) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.material = material;
|
this.material = material;
|
||||||
this.modifiers = modifiers;
|
|
||||||
this.behavior = behavior;
|
|
||||||
this.materialKey = materialKey;
|
this.materialKey = materialKey;
|
||||||
|
this.modifiers = List.copyOf(modifiers);
|
||||||
|
this.clientBoundModifiers = List.copyOf(clientBoundModifiers);
|
||||||
|
this.behaviors = List.copyOf(behaviors);
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
|
ImmutableMap.Builder<String, ItemDataModifier<ItemStack>> modifierMapBuilder = ImmutableMap.builder();
|
||||||
|
for (ItemDataModifier<ItemStack> modifier : modifiers) {
|
||||||
|
modifierMapBuilder.put(modifier.name(), modifier);
|
||||||
|
}
|
||||||
|
this.modifierMap = modifierMapBuilder.build();
|
||||||
|
ImmutableMap.Builder<String, ItemDataModifier<ItemStack>> clientSideModifierMapBuilder = ImmutableMap.builder();
|
||||||
|
for (ItemDataModifier<ItemStack> modifier : clientBoundModifiers) {
|
||||||
|
clientSideModifierMapBuilder.put(modifier.name(), modifier);
|
||||||
|
}
|
||||||
|
this.clientBoundModifierMap = clientSideModifierMapBuilder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Key id() {
|
public Key id() {
|
||||||
return id;
|
return this.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Key material() {
|
public Key material() {
|
||||||
return materialKey;
|
return this.materialKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ItemModifier<ItemStack>> modifiers() {
|
public List<ItemDataModifier<ItemStack>> dataModifiers() {
|
||||||
return modifiers;
|
return this.modifiers;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, ItemDataModifier<ItemStack>> dataModifierMap() {
|
||||||
|
return this.modifierMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasClientBoundDataModifier() {
|
||||||
|
return !this.clientBoundModifiers.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ItemDataModifier<ItemStack>> clientBoundDataModifiers() {
|
||||||
|
return this.clientBoundModifiers;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, ItemDataModifier<ItemStack>> clientBoundDataModifierMap() {
|
||||||
|
return this.clientBoundModifierMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack buildItemStack(ItemBuildContext context, int count) {
|
public ItemStack buildItemStack(ItemBuildContext context, int count) {
|
||||||
ItemStack item = new ItemStack(material);
|
ItemStack item = new ItemStack(this.material);
|
||||||
if (this.modifiers.isEmpty()) {
|
if (this.modifiers.isEmpty()) {
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
Item<ItemStack> wrapped = BukkitCraftEngine.instance().itemManager().wrap(item);
|
Item<ItemStack> wrapped = BukkitCraftEngine.instance().itemManager().wrap(item);
|
||||||
wrapped.count(count);
|
wrapped.count(count);
|
||||||
for (ItemModifier<ItemStack> modifier : this.modifiers) {
|
for (ItemDataModifier<ItemStack> modifier : this.modifiers) {
|
||||||
modifier.apply(wrapped, context);
|
modifier.apply(wrapped, context);
|
||||||
}
|
}
|
||||||
return wrapped.load();
|
return wrapped.load();
|
||||||
@@ -70,9 +111,9 @@ public class BukkitCustomItem implements CustomItem<ItemStack> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Item<ItemStack> buildItem(ItemBuildContext context) {
|
public Item<ItemStack> buildItem(ItemBuildContext context) {
|
||||||
ItemStack item = new ItemStack(material);
|
ItemStack item = new ItemStack(this.material);
|
||||||
Item<ItemStack> wrapped = BukkitCraftEngine.instance().itemManager().wrap(item);
|
Item<ItemStack> wrapped = BukkitCraftEngine.instance().itemManager().wrap(item);
|
||||||
for (ItemModifier<ItemStack> modifier : modifiers()) {
|
for (ItemDataModifier<ItemStack> modifier : dataModifiers()) {
|
||||||
modifier.apply(wrapped, context);
|
modifier.apply(wrapped, context);
|
||||||
}
|
}
|
||||||
wrapped.load();
|
wrapped.load();
|
||||||
@@ -81,7 +122,7 @@ public class BukkitCustomItem implements CustomItem<ItemStack> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<ItemBehavior> behaviors() {
|
public @NotNull List<ItemBehavior> behaviors() {
|
||||||
return this.behavior;
|
return this.behaviors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Builder<ItemStack> builder() {
|
public static Builder<ItemStack> builder() {
|
||||||
@@ -92,9 +133,10 @@ public class BukkitCustomItem implements CustomItem<ItemStack> {
|
|||||||
private Key id;
|
private Key id;
|
||||||
private Material material;
|
private Material material;
|
||||||
private Key materialKey;
|
private Key materialKey;
|
||||||
private List<ItemBehavior> behavior = List.of();
|
private final List<ItemBehavior> behaviors = new ArrayList<>();
|
||||||
private ItemSettings settings = ItemSettings.of();
|
private ItemSettings settings = ItemSettings.of();
|
||||||
private final List<ItemModifier<ItemStack>> modifiers = new ArrayList<>();
|
private final List<ItemDataModifier<ItemStack>> modifiers = new ArrayList<>();
|
||||||
|
private final List<ItemDataModifier<ItemStack>> clientBoundModifiers = new ArrayList<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Builder<ItemStack> id(Key id) {
|
public Builder<ItemStack> id(Key id) {
|
||||||
@@ -110,26 +152,38 @@ public class BukkitCustomItem implements CustomItem<ItemStack> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Builder<ItemStack> modifier(ItemModifier<ItemStack> modifier) {
|
public Builder<ItemStack> dataModifier(ItemDataModifier<ItemStack> modifier) {
|
||||||
this.modifiers.add(modifier);
|
this.modifiers.add(modifier);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Builder<ItemStack> modifiers(List<ItemModifier<ItemStack>> list) {
|
public Builder<ItemStack> dataModifiers(List<ItemDataModifier<ItemStack>> modifiers) {
|
||||||
this.modifiers.addAll(list);
|
this.modifiers.addAll(modifiers);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Builder<ItemStack> clientBoundDataModifier(ItemDataModifier<ItemStack> modifier) {
|
||||||
|
this.clientBoundModifiers.add(modifier);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Builder<ItemStack> clientBoundDataModifiers(List<ItemDataModifier<ItemStack>> modifiers) {
|
||||||
|
this.clientBoundModifiers.addAll(modifiers);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Builder<ItemStack> behavior(ItemBehavior behavior) {
|
public Builder<ItemStack> behavior(ItemBehavior behavior) {
|
||||||
this.behavior= List.of(behavior);
|
this.behaviors.add(behavior);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Builder<ItemStack> behavior(List<ItemBehavior> behaviors) {
|
public Builder<ItemStack> behaviors(List<ItemBehavior> behaviors) {
|
||||||
this.behavior = behaviors;
|
this.behaviors.addAll(behaviors);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,7 +196,7 @@ public class BukkitCustomItem implements CustomItem<ItemStack> {
|
|||||||
@Override
|
@Override
|
||||||
public CustomItem<ItemStack> build() {
|
public CustomItem<ItemStack> build() {
|
||||||
this.modifiers.addAll(this.settings.modifiers());
|
this.modifiers.addAll(this.settings.modifiers());
|
||||||
return new BukkitCustomItem(id, materialKey, material, Collections.unmodifiableList(modifiers), behavior, settings);
|
return new BukkitCustomItem(id, materialKey, material, modifiers, clientBoundModifiers, behaviors, settings);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -235,14 +235,14 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
|
|||||||
Key itemModelKey = null;
|
Key itemModelKey = null;
|
||||||
|
|
||||||
CustomItem.Builder<ItemStack> itemBuilder = BukkitCustomItem.builder().id(id).material(materialId);
|
CustomItem.Builder<ItemStack> itemBuilder = BukkitCustomItem.builder().id(id).material(materialId);
|
||||||
itemBuilder.modifier(new IdModifier<>(id));
|
itemBuilder.dataModifier(new IdModifier<>(id));
|
||||||
|
|
||||||
boolean hasItemModelSection = section.containsKey("item-model");
|
boolean hasItemModelSection = section.containsKey("item-model");
|
||||||
|
|
||||||
// To get at least one model provider
|
// To get at least one model provider
|
||||||
// Sets some basic model info
|
// Sets some basic model info
|
||||||
if (customModelData != 0) {
|
if (customModelData != 0) {
|
||||||
itemBuilder.modifier(new CustomModelDataModifier<>(customModelData));
|
itemBuilder.dataModifier(new CustomModelDataModifier<>(customModelData));
|
||||||
}
|
}
|
||||||
// Requires the item to have model before apply item-model
|
// Requires the item to have model before apply item-model
|
||||||
else if (!hasItemModelSection && section.containsKey("model") && VersionHelper.isVersionNewerThan1_21_2()) {
|
else if (!hasItemModelSection && section.containsKey("model") && VersionHelper.isVersionNewerThan1_21_2()) {
|
||||||
@@ -250,7 +250,7 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
|
|||||||
// customize or use the id
|
// customize or use the id
|
||||||
itemModelKey = Key.from(section.getOrDefault("item-model", id.toString()).toString());
|
itemModelKey = Key.from(section.getOrDefault("item-model", id.toString()).toString());
|
||||||
if (ResourceLocation.isValid(itemModelKey.toString())) {
|
if (ResourceLocation.isValid(itemModelKey.toString())) {
|
||||||
itemBuilder.modifier(new ItemModelModifier<>(itemModelKey));
|
itemBuilder.dataModifier(new ItemModelModifier<>(itemModelKey));
|
||||||
} else {
|
} else {
|
||||||
itemModelKey = null;
|
itemModelKey = null;
|
||||||
}
|
}
|
||||||
@@ -258,7 +258,7 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
|
|||||||
|
|
||||||
if (hasItemModelSection) {
|
if (hasItemModelSection) {
|
||||||
itemModelKey = Key.from(section.get("item-model").toString());
|
itemModelKey = Key.from(section.get("item-model").toString());
|
||||||
itemBuilder.modifier(new ItemModelModifier<>(itemModelKey));
|
itemBuilder.dataModifier(new ItemModelModifier<>(itemModelKey));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get item behaviors
|
// Get item behaviors
|
||||||
@@ -270,7 +270,7 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
|
|||||||
for (Map<String, Object> behaviorMap : behavior) {
|
for (Map<String, Object> behaviorMap : behavior) {
|
||||||
behaviors.add(ItemBehaviors.fromMap(pack, path, id, behaviorMap));
|
behaviors.add(ItemBehaviors.fromMap(pack, path, id, behaviorMap));
|
||||||
}
|
}
|
||||||
itemBuilder.behavior(behaviors);
|
itemBuilder.behaviors(behaviors);
|
||||||
} else if (behaviorConfig instanceof Map<?, ?>) {
|
} else if (behaviorConfig instanceof Map<?, ?>) {
|
||||||
Map<String, Object> behaviorSection = MiscUtils.castToMap(section.get("behavior"), true);
|
Map<String, Object> behaviorSection = MiscUtils.castToMap(section.get("behavior"), true);
|
||||||
if (behaviorSection != null) {
|
if (behaviorSection != null) {
|
||||||
@@ -284,7 +284,7 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
|
|||||||
for (Map.Entry<String, Object> dataEntry : dataSection.entrySet()) {
|
for (Map.Entry<String, Object> dataEntry : dataSection.entrySet()) {
|
||||||
Optional.ofNullable(dataFunctions.get(dataEntry.getKey())).ifPresent(function -> {
|
Optional.ofNullable(dataFunctions.get(dataEntry.getKey())).ifPresent(function -> {
|
||||||
try {
|
try {
|
||||||
itemBuilder.modifier(function.apply(dataEntry.getValue()));
|
itemBuilder.dataModifier(function.apply(dataEntry.getValue()));
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
plugin.logger().warn("Invalid data format", e);
|
plugin.logger().warn("Invalid data format", e);
|
||||||
}
|
}
|
||||||
@@ -292,6 +292,20 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get item data
|
||||||
|
Map<String, Object> clientSideDataSection = MiscUtils.castToMap(section.get("client-bound-data"), true);
|
||||||
|
if (clientSideDataSection != null) {
|
||||||
|
for (Map.Entry<String, Object> dataEntry : clientSideDataSection.entrySet()) {
|
||||||
|
Optional.ofNullable(dataFunctions.get(dataEntry.getKey())).ifPresent(function -> {
|
||||||
|
try {
|
||||||
|
itemBuilder.clientBoundDataModifier(function.apply(dataEntry.getValue()));
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
plugin.logger().warn("Invalid client bound data format", e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (section.containsKey("settings")) {
|
if (section.containsKey("settings")) {
|
||||||
Map<String, Object> settings = MiscUtils.castToMap(section.get("settings"), false);
|
Map<String, Object> settings = MiscUtils.castToMap(section.get("settings"), false);
|
||||||
itemBuilder.settings(ItemSettings.fromMap(settings));
|
itemBuilder.settings(ItemSettings.fromMap(settings));
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import net.momirealms.craftengine.bukkit.util.*;
|
|||||||
import net.momirealms.craftengine.core.block.ImmutableBlockState;
|
import net.momirealms.craftengine.core.block.ImmutableBlockState;
|
||||||
import net.momirealms.craftengine.core.entity.player.InteractionHand;
|
import net.momirealms.craftengine.core.entity.player.InteractionHand;
|
||||||
import net.momirealms.craftengine.core.entity.player.InteractionResult;
|
import net.momirealms.craftengine.core.entity.player.InteractionResult;
|
||||||
|
import net.momirealms.craftengine.core.item.CustomItem;
|
||||||
import net.momirealms.craftengine.core.item.Item;
|
import net.momirealms.craftengine.core.item.Item;
|
||||||
import net.momirealms.craftengine.core.item.behavior.ItemBehavior;
|
import net.momirealms.craftengine.core.item.behavior.ItemBehavior;
|
||||||
import net.momirealms.craftengine.core.item.context.UseOnContext;
|
import net.momirealms.craftengine.core.item.context.UseOnContext;
|
||||||
@@ -138,7 +139,12 @@ public class ItemEventListener implements Listener {
|
|||||||
boolean interactable = InteractUtils.isInteractable(BlockStateUtils.getBlockOwnerId(clickedBlock), bukkitPlayer, clickedBlock.getBlockData(), hitResult, itemInHand);
|
boolean interactable = InteractUtils.isInteractable(BlockStateUtils.getBlockOwnerId(clickedBlock), bukkitPlayer, clickedBlock.getBlockData(), hitResult, itemInHand);
|
||||||
|
|
||||||
// do not allow to place block if it's a vanilla block
|
// do not allow to place block if it's a vanilla block
|
||||||
if (itemInHand.isBlockItem() && itemInHand.isCustomItem()) {
|
Optional<CustomItem<ItemStack>> optionalCustomItem = itemInHand.getCustomItem();
|
||||||
|
if (itemInHand.isBlockItem() && optionalCustomItem.isPresent()) {
|
||||||
|
// it's a custom item, but now it's ignored
|
||||||
|
if (optionalCustomItem.get().settings().canPlaceRelatedVanillaBlock()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (!interactable || player.isSecondaryUseActive()) {
|
if (!interactable || player.isSecondaryUseActive()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
package net.momirealms.craftengine.bukkit.plugin.command.feature;
|
package net.momirealms.craftengine.bukkit.plugin.command.feature;
|
||||||
|
|
||||||
|
import com.saicone.rtag.RtagItem;
|
||||||
import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature;
|
import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature;
|
||||||
|
import net.momirealms.craftengine.core.item.ComponentKeys;
|
||||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||||
import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager;
|
import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Shulker;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.incendo.cloud.Command;
|
import org.incendo.cloud.Command;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Map;
|
||||||
|
|
||||||
public class TestCommand extends BukkitCommandFeature<CommandSender> {
|
public class TestCommand extends BukkitCommandFeature<CommandSender> {
|
||||||
|
|
||||||
@@ -24,16 +25,11 @@ public class TestCommand extends BukkitCommandFeature<CommandSender> {
|
|||||||
.senderType(Player.class)
|
.senderType(Player.class)
|
||||||
.handler(context -> {
|
.handler(context -> {
|
||||||
Player player = context.sender();
|
Player player = context.sender();
|
||||||
Location location = player.getLocation();
|
ItemStack itemStack = new ItemStack(Material.STONE);
|
||||||
try {
|
RtagItem rtagItem = new RtagItem(itemStack);
|
||||||
Collection<Entity> entities = player.getLocation().getNearbyEntities(2,2,2);
|
rtagItem.setComponent(ComponentKeys.CUSTOM_DATA, Map.of("test1", "1"));
|
||||||
for (Entity entity : entities) {
|
rtagItem.setComponent(ComponentKeys.CUSTOM_DATA, Map.of("test2", "2"));
|
||||||
if (entity instanceof Shulker) {
|
player.getInventory().addItem(rtagItem.load());
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 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, 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, CustomItem<I>> customItems = new HashMap<>();
|
||||||
protected final Map<Key, List<Holder<Key>>> customItemTags;
|
protected final Map<Key, List<Holder<Key>>> customItemTags;
|
||||||
protected final Map<Key, Map<Integer, Key>> cmdConflictChecker;
|
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> cachedSuggestions = new ArrayList<>();
|
||||||
protected final List<Suggestion> cachedTotemSuggestions = 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) {
|
for (String a : alias) {
|
||||||
dataFunctions.put(a, function);
|
dataFunctions.put(a, function);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,23 +1,24 @@
|
|||||||
package net.momirealms.craftengine.core.item;
|
package net.momirealms.craftengine.core.item;
|
||||||
|
|
||||||
import net.kyori.adventure.key.Key;
|
import net.momirealms.craftengine.core.util.Key;
|
||||||
|
|
||||||
public class ComponentKeys {
|
public class ComponentKeys {
|
||||||
public static final String CUSTOM_MODEL_DATA = Key.key("minecraft", "custom_model_data").asString();
|
public static final String CUSTOM_MODEL_DATA = Key.of("minecraft", "custom_model_data").toString();
|
||||||
public static final String CUSTOM_NAME = Key.key("minecraft", "custom_name").asString();
|
public static final String CUSTOM_NAME = Key.of("minecraft", "custom_name").toString();
|
||||||
public static final String ITEM_NAME = Key.key("minecraft", "item_name").asString();
|
public static final String ITEM_NAME = Key.of("minecraft", "item_name").toString();
|
||||||
public static final String LORE = Key.key("minecraft", "lore").asString();
|
public static final String LORE = Key.of("minecraft", "lore").toString();
|
||||||
public static final String DAMAGE = Key.key("minecraft", "damage").asString();
|
public static final String DAMAGE = Key.of("minecraft", "damage").toString();
|
||||||
public static final String MAX_DAMAGE = Key.key("minecraft", "max_damage").asString();
|
public static final String MAX_DAMAGE = Key.of("minecraft", "max_damage").toString();
|
||||||
public static final String ENCHANTMENT_GLINT_OVERRIDE = Key.key("minecraft", "enchantment_glint_override").asString();
|
public static final String ENCHANTMENT_GLINT_OVERRIDE = Key.of("minecraft", "enchantment_glint_override").toString();
|
||||||
public static final String ENCHANTMENTS = Key.key("minecraft", "enchantments").asString();
|
public static final String ENCHANTMENTS = Key.of("minecraft", "enchantments").toString();
|
||||||
public static final String STORED_ENCHANTMENTS = Key.key("minecraft", "stored_enchantments").asString();
|
public static final String STORED_ENCHANTMENTS = Key.of("minecraft", "stored_enchantments").toString();
|
||||||
public static final String UNBREAKABLE = Key.key("minecraft", "unbreakable").asString();
|
public static final String UNBREAKABLE = Key.of("minecraft", "unbreakable").toString();
|
||||||
public static final String MAX_STACK_SIZE = Key.key("minecraft", "max_stack_size").asString();
|
public static final String MAX_STACK_SIZE = Key.of("minecraft", "max_stack_size").toString();
|
||||||
public static final String EQUIPPABLE = Key.key("minecraft", "equippable").asString();
|
public static final String EQUIPPABLE = Key.of("minecraft", "equippable").toString();
|
||||||
public static final String ITEM_MODEL = Key.key("minecraft", "item_model").asString();
|
public static final String ITEM_MODEL = Key.of("minecraft", "item_model").toString();
|
||||||
public static final String TOOLTIP_STYLE = Key.key("minecraft", "tooltip_style").asString();
|
public static final String TOOLTIP_STYLE = Key.of("minecraft", "tooltip_style").toString();
|
||||||
public static final String JUKEBOX_PLAYABLE = Key.key("minecraft", "jukebox_playable").asString();
|
public static final String JUKEBOX_PLAYABLE = Key.of("minecraft", "jukebox_playable").toString();
|
||||||
public static final String TRIM = Key.key("minecraft", "trim").asString();
|
public static final String TRIM = Key.of("minecraft", "trim").toString();
|
||||||
public static final String REPAIR_COST = Key.key("minecraft", "repair_cost").asString();
|
public static final String REPAIR_COST = Key.of("minecraft", "repair_cost").toString();
|
||||||
|
public static final String CUSTOM_DATA = Key.of("minecraft", "custom_data").toString();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,12 +2,13 @@ package net.momirealms.craftengine.core.item;
|
|||||||
|
|
||||||
import net.momirealms.craftengine.core.entity.player.Player;
|
import net.momirealms.craftengine.core.entity.player.Player;
|
||||||
import net.momirealms.craftengine.core.item.behavior.ItemBehavior;
|
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.Key;
|
||||||
import net.momirealms.craftengine.core.util.context.ContextHolder;
|
import net.momirealms.craftengine.core.util.context.ContextHolder;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public interface CustomItem<I> extends BuildableItem<I> {
|
public interface CustomItem<I> extends BuildableItem<I> {
|
||||||
|
|
||||||
@@ -15,7 +16,15 @@ public interface CustomItem<I> extends BuildableItem<I> {
|
|||||||
|
|
||||||
Key material();
|
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();
|
ItemSettings settings();
|
||||||
|
|
||||||
@@ -37,13 +46,17 @@ public interface CustomItem<I> extends BuildableItem<I> {
|
|||||||
|
|
||||||
Builder<I> material(Key material);
|
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(ItemBehavior behavior);
|
||||||
|
|
||||||
Builder<I> behavior(List<ItemBehavior> behaviors);
|
Builder<I> behaviors(List<ItemBehavior> behaviors);
|
||||||
|
|
||||||
Builder<I> settings(ItemSettings settings);
|
Builder<I> settings(ItemSettings settings);
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package net.momirealms.craftengine.core.item;
|
package net.momirealms.craftengine.core.item;
|
||||||
|
|
||||||
import net.momirealms.craftengine.core.item.modifier.EquippableModifier;
|
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.pack.misc.EquipmentGeneration;
|
||||||
import net.momirealms.craftengine.core.util.Key;
|
import net.momirealms.craftengine.core.util.Key;
|
||||||
import net.momirealms.craftengine.core.util.MiscUtils;
|
import net.momirealms.craftengine.core.util.MiscUtils;
|
||||||
@@ -19,13 +19,14 @@ public class ItemSettings {
|
|||||||
boolean canRepair = true;
|
boolean canRepair = true;
|
||||||
List<AnvilRepairItem> anvilRepairItems = List.of();
|
List<AnvilRepairItem> anvilRepairItems = List.of();
|
||||||
boolean renameable = true;
|
boolean renameable = true;
|
||||||
|
boolean canPlaceRelatedVanillaBlock = false;
|
||||||
|
|
||||||
private ItemSettings() {}
|
private ItemSettings() {}
|
||||||
|
|
||||||
public <I> List<ItemModifier<I>> modifiers() {
|
public <I> List<ItemDataModifier<I>> modifiers() {
|
||||||
ArrayList<ItemModifier<I>> modifiers = new ArrayList<>();
|
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()));
|
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;
|
return modifiers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,6 +46,7 @@ public class ItemSettings {
|
|||||||
newSettings.canRepair = settings.canRepair;
|
newSettings.canRepair = settings.canRepair;
|
||||||
newSettings.anvilRepairItems = settings.anvilRepairItems;
|
newSettings.anvilRepairItems = settings.anvilRepairItems;
|
||||||
newSettings.renameable = settings.renameable;
|
newSettings.renameable = settings.renameable;
|
||||||
|
newSettings.canPlaceRelatedVanillaBlock = settings.canPlaceRelatedVanillaBlock;
|
||||||
return newSettings;
|
return newSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,6 +62,10 @@ public class ItemSettings {
|
|||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean canPlaceRelatedVanillaBlock() {
|
||||||
|
return canPlaceRelatedVanillaBlock;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean canRepair() {
|
public boolean canRepair() {
|
||||||
return canRepair;
|
return canRepair;
|
||||||
}
|
}
|
||||||
@@ -100,6 +106,11 @@ public class ItemSettings {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ItemSettings canPlaceRelatedVanillaBlock(boolean canPlaceRelatedVanillaBlock) {
|
||||||
|
this.canPlaceRelatedVanillaBlock = canPlaceRelatedVanillaBlock;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public ItemSettings fuelTime(int fuelTime) {
|
public ItemSettings fuelTime(int fuelTime) {
|
||||||
this.fuelTime = fuelTime;
|
this.fuelTime = fuelTime;
|
||||||
return this;
|
return this;
|
||||||
@@ -175,6 +186,10 @@ public class ItemSettings {
|
|||||||
);
|
);
|
||||||
return settings -> settings.equipment(equipment);
|
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) {
|
private static void registerFactory(String id, ItemSettings.Modifier.Factory factory) {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import net.momirealms.craftengine.core.item.ItemBuildContext;
|
|||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class ComponentModifier<I> implements ItemModifier<I> {
|
public class ComponentModifier<I> implements ItemDataModifier<I> {
|
||||||
private final Map<String, Object> arguments;
|
private final Map<String, Object> arguments;
|
||||||
|
|
||||||
public ComponentModifier(Map<String, Object> arguments) {
|
public ComponentModifier(Map<String, Object> arguments) {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package net.momirealms.craftengine.core.item.modifier;
|
|||||||
import net.momirealms.craftengine.core.item.Item;
|
import net.momirealms.craftengine.core.item.Item;
|
||||||
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
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;
|
private final int argument;
|
||||||
|
|
||||||
public CustomModelDataModifier(int argument) {
|
public CustomModelDataModifier(int argument) {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import net.momirealms.craftengine.core.item.ItemBuildContext;
|
|||||||
import net.momirealms.craftengine.core.plugin.config.Config;
|
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||||
import net.momirealms.craftengine.core.util.AdventureHelper;
|
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;
|
private final String argument;
|
||||||
|
|
||||||
public DisplayNameModifier(String argument) {
|
public DisplayNameModifier(String argument) {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import net.momirealms.craftengine.core.item.ItemKeys;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class EnchantmentModifier<I> implements ItemModifier<I> {
|
public class EnchantmentModifier<I> implements ItemDataModifier<I> {
|
||||||
private final List<Enchantment> enchantments;
|
private final List<Enchantment> enchantments;
|
||||||
|
|
||||||
public EnchantmentModifier(List<Enchantment> enchantments) {
|
public EnchantmentModifier(List<Enchantment> enchantments) {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import net.momirealms.craftengine.core.item.EquipmentData;
|
|||||||
import net.momirealms.craftengine.core.item.Item;
|
import net.momirealms.craftengine.core.item.Item;
|
||||||
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
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;
|
private final EquipmentData data;
|
||||||
|
|
||||||
public EquippableModifier(EquipmentData data) {
|
public EquippableModifier(EquipmentData data) {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import net.momirealms.craftengine.core.item.Item;
|
|||||||
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
||||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
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 String id;
|
||||||
private final ExternalItemProvider<I> provider;
|
private final ExternalItemProvider<I> provider;
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import net.momirealms.craftengine.core.item.Item;
|
|||||||
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
||||||
import net.momirealms.craftengine.core.util.Key;
|
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";
|
public static final String CRAFT_ENGINE_ID = "craftengine:id";
|
||||||
private final Key argument;
|
private final Key argument;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package net.momirealms.craftengine.core.item.modifier;
|
|||||||
import net.momirealms.craftengine.core.item.Item;
|
import net.momirealms.craftengine.core.item.Item;
|
||||||
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
||||||
|
|
||||||
public interface ItemModifier<I> {
|
public interface ItemDataModifier<I> {
|
||||||
|
|
||||||
String name();
|
String name();
|
||||||
|
|
||||||
@@ -5,7 +5,7 @@ import net.momirealms.craftengine.core.item.Item;
|
|||||||
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
||||||
import net.momirealms.craftengine.core.util.Key;
|
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;
|
private final Key data;
|
||||||
|
|
||||||
public ItemModelModifier(Key data) {
|
public ItemModelModifier(Key data) {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import net.momirealms.craftengine.core.item.ItemBuildContext;
|
|||||||
import net.momirealms.craftengine.core.plugin.config.Config;
|
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||||
import net.momirealms.craftengine.core.util.AdventureHelper;
|
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;
|
private final String argument;
|
||||||
|
|
||||||
public ItemNameModifier(String argument) {
|
public ItemNameModifier(String argument) {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import net.momirealms.craftengine.core.util.VersionHelper;
|
|||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class JukeboxSongModifier<I> implements ItemModifier<I> {
|
public class JukeboxSongModifier<I> implements ItemDataModifier<I> {
|
||||||
private final Key song;
|
private final Key song;
|
||||||
|
|
||||||
public JukeboxSongModifier(Key song) {
|
public JukeboxSongModifier(Key song) {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import net.momirealms.craftengine.core.util.AdventureHelper;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class LoreModifier<I> implements ItemModifier<I> {
|
public class LoreModifier<I> implements ItemDataModifier<I> {
|
||||||
private final List<String> argument;
|
private final List<String> argument;
|
||||||
|
|
||||||
public LoreModifier(List<String> argument) {
|
public LoreModifier(List<String> argument) {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import net.momirealms.craftengine.core.util.TypeUtils;
|
|||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class TagsModifier<I> implements ItemModifier<I> {
|
public class TagsModifier<I> implements ItemDataModifier<I> {
|
||||||
private final Map<String, Object> arguments;
|
private final Map<String, Object> arguments;
|
||||||
|
|
||||||
public TagsModifier(Map<String, Object> arguments) {
|
public TagsModifier(Map<String, Object> arguments) {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import net.momirealms.craftengine.core.item.Item;
|
|||||||
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
||||||
import net.momirealms.craftengine.core.util.Key;
|
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;
|
private final Key argument;
|
||||||
|
|
||||||
public TooltipStyleModifier(Key argument) {
|
public TooltipStyleModifier(Key argument) {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import net.momirealms.craftengine.core.util.VersionHelper;
|
|||||||
|
|
||||||
import java.util.Map;
|
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 material;
|
||||||
private final String pattern;
|
private final String pattern;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package net.momirealms.craftengine.core.item.modifier;
|
|||||||
import net.momirealms.craftengine.core.item.Item;
|
import net.momirealms.craftengine.core.item.Item;
|
||||||
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
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;
|
private final boolean argument;
|
||||||
|
|
||||||
public UnbreakableModifier(boolean argument) {
|
public UnbreakableModifier(boolean argument) {
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import net.minecraft.world.phys.shapes.VoxelShape;
|
|||||||
import net.momirealms.craftengine.mod.util.NoteBlockUtils;
|
import net.momirealms.craftengine.mod.util.NoteBlockUtils;
|
||||||
import net.momirealms.craftengine.shared.ObjectHolder;
|
import net.momirealms.craftengine.shared.ObjectHolder;
|
||||||
import net.momirealms.craftengine.shared.block.*;
|
import net.momirealms.craftengine.shared.block.*;
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class CraftEngineBlock
|
public class CraftEngineBlock
|
||||||
|
|||||||
Reference in New Issue
Block a user