9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-31 12:56:28 +00:00
This commit is contained in:
jhqwqmc
2025-12-28 20:10:54 +08:00
parent 0d3eb6ea84
commit 668afcb754
50 changed files with 308 additions and 94 deletions

View File

@@ -20,8 +20,8 @@ public abstract class AbstractCustomItem<I> implements CustomItem<I> {
protected final UniqueKey id;
protected final Key material;
protected final Key clientBoundMaterial;
protected final ItemProcessor<I>[] modifiers;
protected final ItemProcessor<I>[] clientBoundModifiers;
protected final ItemProcessor[] modifiers;
protected final ItemProcessor[] clientBoundModifiers;
protected final List<ItemBehavior> behaviors;
protected final ItemSettings settings;
protected final Map<EventTrigger, List<Function<Context>>> events;
@@ -30,8 +30,8 @@ public abstract class AbstractCustomItem<I> implements CustomItem<I> {
@SuppressWarnings("unchecked")
public AbstractCustomItem(boolean isVanillaItem, UniqueKey id, Key material, Key clientBoundMaterial,
List<ItemBehavior> behaviors,
List<ItemProcessor<I>> modifiers,
List<ItemProcessor<I>> clientBoundModifiers,
List<ItemProcessor> modifiers,
List<ItemProcessor> clientBoundModifiers,
ItemSettings settings,
Map<EventTrigger, List<Function<Context>>> events,
ItemUpdateConfig updater) {
@@ -82,7 +82,7 @@ public abstract class AbstractCustomItem<I> implements CustomItem<I> {
}
@Override
public ItemProcessor<I>[] dataModifiers() {
public ItemProcessor[] dataModifiers() {
return this.modifiers;
}
@@ -97,7 +97,7 @@ public abstract class AbstractCustomItem<I> implements CustomItem<I> {
}
@Override
public ItemProcessor<I>[] clientBoundDataModifiers() {
public ItemProcessor[] clientBoundDataModifiers() {
return this.clientBoundModifiers;
}

View File

@@ -35,11 +35,11 @@ public interface CustomItem<I> extends BuildableItem<I> {
Key clientBoundMaterial();
ItemProcessor<I>[] dataModifiers();
ItemProcessor[] dataModifiers();
boolean hasClientBoundDataModifier();
ItemProcessor<I>[] clientBoundDataModifiers();
ItemProcessor[] clientBoundDataModifiers();
ItemSettings settings();
@@ -63,13 +63,13 @@ public interface CustomItem<I> extends BuildableItem<I> {
Builder<I> material(Key material);
Builder<I> dataModifier(ItemProcessor<I> modifier);
Builder<I> dataModifier(ItemProcessor modifier);
Builder<I> dataModifiers(List<ItemProcessor<I>> modifiers);
Builder<I> dataModifiers(List<ItemProcessor> modifiers);
Builder<I> clientBoundDataModifier(ItemProcessor<I> modifier);
Builder<I> clientBoundDataModifier(ItemProcessor modifier);
Builder<I> clientBoundDataModifiers(List<ItemProcessor<I>> modifiers);
Builder<I> clientBoundDataModifiers(List<ItemProcessor> modifiers);
Builder<I> behavior(ItemBehavior behavior);

View File

@@ -228,7 +228,7 @@ public interface Item<I> {
void merge(Item<I> another);
default Item<I> apply(ItemProcessor<I> modifier, ItemBuildContext context) {
default Item<I> apply(ItemProcessor modifier, ItemBuildContext context) {
return modifier.apply(this, context);
}

View File

@@ -58,8 +58,8 @@ public class ItemSettings {
private ItemSettings() {}
public <I> List<ItemProcessor<I>> modifiers() {
ArrayList<ItemProcessor<I>> modifiers = new ArrayList<>();
public <I> List<ItemProcessor> modifiers() {
ArrayList<ItemProcessor> modifiers = new ArrayList<>();
if (this.equipment != null) {
EquipmentData data = this.equipment.equipmentData();
if (data != null) {
@@ -75,8 +75,8 @@ public class ItemSettings {
return modifiers;
}
public <I> List<ItemProcessor<I>> clientBoundModifiers() {
ArrayList<ItemProcessor<I>> modifiers = new ArrayList<>();
public <I> List<ItemProcessor> clientBoundModifiers() {
ArrayList<ItemProcessor> modifiers = new ArrayList<>();
if (this.equipment != null) {
if (this.equipment.clientBoundModel().asBoolean(Config.globalClientboundModel())) {
modifiers.addAll(this.equipment.equipment().modifiers());

View File

@@ -26,7 +26,7 @@ public final class ComponentBasedEquipment extends AbstractEquipment implements
}
@Override
public <I> List<ItemProcessor<I>> modifiers() {
public <I> List<ItemProcessor> modifiers() {
return List.of(new EquippableAssetIdProcessor<>(this.assetId));
}

View File

@@ -9,5 +9,5 @@ public interface Equipment {
Key assetId();
<I> List<ItemProcessor<I>> modifiers();
<I> List<ItemProcessor> modifiers();
}

View File

@@ -34,7 +34,7 @@ public final class TrimBasedEquipment extends AbstractEquipment {
}
@Override
public <I> List<ItemProcessor<I>> modifiers() {
public <I> List<ItemProcessor> modifiers() {
return List.of(
new TrimProcessor<>(Key.of(AbstractPackManager.NEW_TRIM_MATERIAL), this.assetId),
new HideTooltipProcessor<>(List.of(DataComponentKeys.TRIM))

View File

@@ -15,7 +15,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
public class ArgumentsProcessor<I> implements ItemProcessor<I> {
public class ArgumentsProcessor<I> implements ItemProcessor {
public static final ItemProcessorFactory<?> FACTORY = new Factory<>();
public static final String ARGUMENTS_TAG = "craftengine:arguments";
private final Map<String, TextProvider> arguments;
@@ -51,7 +51,7 @@ public class ArgumentsProcessor<I> implements ItemProcessor<I> {
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
Map<String, Object> data = ResourceConfigUtils.getAsMap(arg, "arguments");
Map<String, TextProvider> arguments = new HashMap<>();
for (Map.Entry<String, Object> entry : data.entrySet()) {

View File

@@ -155,7 +155,7 @@ public class AttributeModifiersProcessor<I> implements SimpleNetworkItemProcesso
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
List<PreModifier> attributeModifiers = ResourceConfigUtils.parseConfigAsList(arg, (map) -> {
String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("type"), "warning.config.item.data.attribute_modifiers.missing_type");
Key nativeType = AttributeModifiersProcessor.getNativeAttributeName(Key.of(type));

View File

@@ -48,7 +48,7 @@ public class BlockStateProcessor<I> implements SimpleNetworkItemProcessor<I> {
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
if (arg instanceof Map<?, ?> map) {
Map<String, String> properties = new HashMap<>();
for (Map.Entry<?, ?> entry : map.entrySet()) {

View File

@@ -12,7 +12,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class ComponentsProcessor<I> implements ItemProcessor<I> {
public class ComponentsProcessor<I> implements ItemProcessor {
public static final ItemProcessorFactory<?> FACTORY = new Factory<>();
private final List<Pair<Key, Tag>> arguments;
private CompoundTag customData = null;
@@ -85,7 +85,7 @@ public class ComponentsProcessor<I> implements ItemProcessor<I> {
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
Map<String, Object> data = ResourceConfigUtils.getAsMap(arg, "components");
return new ComponentsProcessor<>(data);
}

View File

@@ -15,12 +15,12 @@ import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
public class ConditionalProcessor<I> implements ItemProcessor<I> {
public class ConditionalProcessor<I> implements ItemProcessor {
public static final ItemProcessorFactory<?> FACTORY = new Factory<>();
private final Predicate<Context> condition;
private final ItemProcessor<I>[] modifiers;
private final ItemProcessor[] modifiers;
public ConditionalProcessor(Predicate<Context> condition, ItemProcessor<I>[] modifiers) {
public ConditionalProcessor(Predicate<Context> condition, ItemProcessor[] modifiers) {
this.modifiers = modifiers;
this.condition = condition;
}
@@ -28,7 +28,7 @@ public class ConditionalProcessor<I> implements ItemProcessor<I> {
@Override
public Item<I> apply(Item<I> item, ItemBuildContext context) {
if (this.condition.test(context)) {
for (ItemProcessor<I> m : this.modifiers) {
for (ItemProcessor m : this.modifiers) {
item = item.apply(m, context);
}
}
@@ -38,7 +38,7 @@ public class ConditionalProcessor<I> implements ItemProcessor<I> {
@Override
public Item<I> prepareNetworkItem(Item<I> item, ItemBuildContext context, CompoundTag networkData) {
if (this.condition.test(context)) {
for (ItemProcessor<I> m : this.modifiers) {
for (ItemProcessor m : this.modifiers) {
item = m.prepareNetworkItem(item, context, networkData);
}
}
@@ -49,11 +49,11 @@ public class ConditionalProcessor<I> implements ItemProcessor<I> {
@SuppressWarnings("unchecked")
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
Map<String, Object> conditionalData = ResourceConfigUtils.getAsMap(arg, "conditional");
List<Condition<Context>> conditions = ResourceConfigUtils.parseConfigAsList(conditionalData.get("conditions"), CommonConditions::fromMap);
List<ItemProcessor<I>> modifiers = new ArrayList<>();
ItemProcessors.applyDataModifiers(ResourceConfigUtils.getAsMap(conditionalData.get("data"), "conditional.data"), m -> modifiers.add((ItemProcessor<I>) m));
List<ItemProcessor> modifiers = new ArrayList<>();
ItemProcessors.applyDataModifiers(ResourceConfigUtils.getAsMap(conditionalData.get("data"), "conditional.data"), m -> modifiers.add((ItemProcessor) m));
return new ConditionalProcessor<>(MiscUtils.allOf(conditions), modifiers.toArray(new ItemProcessor[0]));
}
}

View File

@@ -44,7 +44,7 @@ public class CustomModelDataProcessor<I> implements SimpleNetworkItemProcessor<I
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
int customModelData = ResourceConfigUtils.getAsInt(arg, "custom-model-data");
return new CustomModelDataProcessor<>(customModelData);
}

View File

@@ -56,7 +56,7 @@ public class CustomNameProcessor<I> implements SimpleNetworkItemProcessor<I> {
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
String name = arg.toString();
return new CustomNameProcessor<>(name);
}

View File

@@ -46,7 +46,7 @@ public class DyedColorProcessor<I> implements SimpleNetworkItemProcessor<I> {
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
if (arg instanceof Integer integer) {
return new DyedColorProcessor<>(Color.fromDecimal(integer));
} else {

View File

@@ -90,7 +90,7 @@ public class EnchantmentsProcessor<I> implements SimpleNetworkItemProcessor<I> {
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
Map<String, Object> enchantData = ResourceConfigUtils.getAsMap(arg, "enchantments");
List<Enchantment> enchantments = new ArrayList<>();
boolean merge = false;

View File

@@ -45,7 +45,7 @@ public class EquippableAssetIdProcessor<I> implements SimpleNetworkItemProcessor
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
String id = arg.toString();
return new EquippableAssetIdProcessor<>(Key.of(id));
}

View File

@@ -36,7 +36,7 @@ public class EquippableProcessor<I> implements SimpleNetworkItemProcessor<I> {
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
Map<String, Object> data = ResourceConfigUtils.getAsMap(arg, "equippable");
return new EquippableProcessor<>(EquipmentData.fromMap(data));
}

View File

@@ -11,7 +11,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.*;
public class ExternalSourceProcessor<I> implements ItemProcessor<I> {
public class ExternalSourceProcessor<I> implements ItemProcessor {
public static final ItemProcessorFactory<?> FACTORY = new Factory<>();
private static final ThreadLocal<Set<Dependency>> BUILD_STACK = ThreadLocal.withInitial(LinkedHashSet::new);
private final String id;
@@ -68,7 +68,7 @@ public class ExternalSourceProcessor<I> implements ItemProcessor<I> {
@SuppressWarnings("unchecked")
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
Map<String, Object> data = ResourceConfigUtils.getAsMap(arg, "external");
String plugin = ResourceConfigUtils.requireNonEmptyStringOrThrow(ResourceConfigUtils.get(data, "plugin", "source"), "warning.config.item.data.external.missing_source");
String id = ResourceConfigUtils.requireNonEmptyStringOrThrow(data.get("id"), "warning.config.item.data.external.missing_id");

View File

@@ -52,7 +52,7 @@ public class FoodProcessor<I> implements SimpleNetworkItemProcessor<I> {
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
Map<String, Object> data = ResourceConfigUtils.getAsMap(arg, "food");
int nutrition = ResourceConfigUtils.getAsInt(data.get("nutrition"), "nutrition");
float saturation = ResourceConfigUtils.getAsFloat(data.get("saturation"), "saturation");

View File

@@ -15,7 +15,7 @@ import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class HideTooltipProcessor<I> implements ItemProcessor<I> {
public class HideTooltipProcessor<I> implements ItemProcessor {
public static final ItemProcessorFactory<?> FACTORY = new Factory<>();
public static final Map<Key, Integer> TO_LEGACY;
public static final List<Key> COMPONENTS = List.of(
@@ -230,7 +230,7 @@ public class HideTooltipProcessor<I> implements ItemProcessor<I> {
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
List<Key> components = MiscUtils.getAsStringList(arg).stream().map(Key::of).toList();
return new HideTooltipProcessor<>(components);
}

View File

@@ -32,7 +32,7 @@ public class ItemModelProcessor<I> implements SimpleNetworkItemProcessor<I> {
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
String id = arg.toString();
return new ItemModelProcessor<>(Key.of(id));
}

View File

@@ -47,7 +47,7 @@ public class ItemNameProcessor<I> implements SimpleNetworkItemProcessor<I> {
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
String name = arg.toString();
return new ItemNameProcessor<>(name);
}

View File

@@ -71,7 +71,7 @@ public final class ItemProcessors {
}
@SuppressWarnings("unchecked")
public static <I> void applyDataModifiers(Map<String, Object> dataSection, Consumer<ItemProcessor<I>> callback) {
public static <I> void applyDataModifiers(Map<String, Object> dataSection, Consumer<ItemProcessor> callback) {
ExceptionCollector<LocalizedResourceConfigException> errorCollector = new ExceptionCollector<>();
if (dataSection != null) {
for (Map.Entry<String, Object> dataEntry : dataSection.entrySet()) {
@@ -82,7 +82,7 @@ public final class ItemProcessors {
try {
ItemProcessorFactory<?> factory = processorType.factory();
if (factory != null) {
callback.accept((ItemProcessor<I>) factory.create(value));
callback.accept((ItemProcessor) factory.create(value));
}
} catch (LocalizedResourceConfigException e) {
errorCollector.add(e);

View File

@@ -8,7 +8,7 @@ import net.momirealms.sparrow.nbt.CompoundTag;
import java.util.Optional;
public class ItemVersionProcessor<I> implements ItemProcessor<I> {
public class ItemVersionProcessor<I> implements ItemProcessor {
public static final String VERSION_TAG = "craftengine:version";
private final int version;

View File

@@ -5,7 +5,7 @@ import net.momirealms.craftengine.core.item.ItemBuildContext;
import net.momirealms.craftengine.core.item.ItemProcessorFactory;
import net.momirealms.craftengine.core.item.data.JukeboxPlayable;
public class JukeboxSongProcessor<I> implements ItemProcessor<I> {
public class JukeboxSongProcessor<I> implements ItemProcessor {
public static final ItemProcessorFactory<?> FACTORY = new Factory<>();
private final JukeboxPlayable song;
@@ -26,7 +26,7 @@ public class JukeboxSongProcessor<I> implements ItemProcessor<I> {
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
String song = arg.toString();
return new JukeboxSongProcessor<>(new JukeboxPlayable(song, true));
}

View File

@@ -31,7 +31,7 @@ public class MaxDamageProcessor<I> implements SimpleNetworkItemProcessor<I> {
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
NumberProvider numberProvider = NumberProviders.fromObject(arg);
return new MaxDamageProcessor<>(numberProvider);
}

View File

@@ -45,7 +45,7 @@ public class OverwritableCustomModelDataProcessor<I> implements SimpleNetworkIte
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
int customModelData = ResourceConfigUtils.getAsInt(arg, "custom-model-data");
return new OverwritableCustomModelDataProcessor<>(customModelData);
}

View File

@@ -33,7 +33,7 @@ public class OverwritableItemModelProcessor<I> implements SimpleNetworkItemProce
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
String id = arg.toString();
return new OverwritableItemModelProcessor<>(Key.of(id));
}

View File

@@ -48,7 +48,7 @@ public class OverwritableItemNameProcessor<I> implements SimpleNetworkItemProces
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
return new OverwritableItemNameProcessor<>(arg.toString());
}
}

View File

@@ -12,7 +12,7 @@ import net.momirealms.sparrow.nbt.CompoundTag;
import java.util.Map;
import java.util.Optional;
public class PDCProcessor<I> implements ItemProcessor<I> {
public class PDCProcessor<I> implements ItemProcessor {
public static final String BUKKIT_PDC = "PublicBukkitValues";
public static final ItemProcessorFactory<?> FACTORY = new Factory<>();
private final CompoundTag data;
@@ -36,7 +36,7 @@ public class PDCProcessor<I> implements ItemProcessor<I> {
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
Map<String, Object> data = ResourceConfigUtils.getAsMap(arg, "pdc");
CompoundTag tag = (CompoundTag) CraftEngine.instance().platform().javaToSparrowNBT(data);
return new PDCProcessor<>(tag);

View File

@@ -11,7 +11,7 @@ import net.momirealms.sparrow.nbt.Tag;
import java.util.Collections;
import java.util.List;
public class RemoveComponentProcessor<I> implements ItemProcessor<I> {
public class RemoveComponentProcessor<I> implements ItemProcessor {
public static final ItemProcessorFactory<?> FACTORY = new Factory<>();
private final List<String> arguments;
@@ -45,7 +45,7 @@ public class RemoveComponentProcessor<I> implements ItemProcessor<I> {
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
List<String> data = MiscUtils.getAsStringList(arg);
return new RemoveComponentProcessor<>(data);
}

View File

@@ -9,7 +9,7 @@ import net.momirealms.sparrow.nbt.CompoundTag;
import net.momirealms.sparrow.nbt.Tag;
import org.jetbrains.annotations.Nullable;
public interface SimpleNetworkItemProcessor<I> extends ItemProcessor<I> {
public interface SimpleNetworkItemProcessor<I> extends ItemProcessor {
@Override
default Item<I> prepareNetworkItem(Item<I> item, ItemBuildContext context, CompoundTag networkData) {

View File

@@ -11,7 +11,7 @@ import net.momirealms.sparrow.nbt.Tag;
import java.util.LinkedHashMap;
import java.util.Map;
public class TagsProcessor<I> implements ItemProcessor<I> {
public class TagsProcessor<I> implements ItemProcessor {
public static final ItemProcessorFactory<?> FACTORY = new Factory<>();
private final Map<String, Object> arguments;
@@ -132,7 +132,7 @@ public class TagsProcessor<I> implements ItemProcessor<I> {
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
Map<String, Object> data = ResourceConfigUtils.getAsMap(arg, "nbt");
return new TagsProcessor<>(data);
}

View File

@@ -33,7 +33,7 @@ public class TooltipStyleProcessor<I> implements SimpleNetworkItemProcessor<I> {
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
String id = arg.toString();
return new TooltipStyleProcessor<>(Key.of(id));
}

View File

@@ -54,7 +54,7 @@ public class TrimProcessor<I> implements SimpleNetworkItemProcessor<I> {
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
Map<String, Object> data = ResourceConfigUtils.getAsMap(arg, "trim");
String material = data.get("material").toString().toLowerCase(Locale.ENGLISH);
String pattern = data.get("pattern").toString().toLowerCase(Locale.ENGLISH);

View File

@@ -45,7 +45,7 @@ public class UnbreakableProcessor<I> implements SimpleNetworkItemProcessor<I> {
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
boolean value = ResourceConfigUtils.getAsBoolean(arg, "unbreakable");
return new UnbreakableProcessor<>(value);
}

View File

@@ -54,7 +54,7 @@ public final class DynamicLoreProcessor<I> implements SimpleNetworkItemProcessor
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
Map<String, LoreProcessor<I>> dynamicLore = new LinkedHashMap<>();
if (arg instanceof Map<?, ?> map) {
for (Map.Entry<?, ?> entry : map.entrySet()) {

View File

@@ -5,7 +5,7 @@ import net.momirealms.craftengine.core.item.processor.ItemProcessor;
class LoreFactory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
return LoreProcessor.createLoreModifier(arg);
}
}

View File

@@ -49,7 +49,7 @@ public final class OverwritableLoreProcessor<I> implements SimpleNetworkItemProc
private static class Factory<I> implements ItemProcessorFactory<I> {
@Override
public ItemProcessor<I> create(Object arg) {
public ItemProcessor create(Object arg) {
LoreProcessor<I> lore = LoreProcessor.createLoreModifier(arg);
return new OverwritableLoreProcessor<>(lore);
}

View File

@@ -12,15 +12,15 @@ import java.util.Map;
public class ApplyItemDataPostProcessor<T> implements PostProcessor<T> {
public static final PostProcessorFactory<?> FACTORY = new Factory<>();
private final ItemProcessor<T>[] modifiers;
private final ItemProcessor[] modifiers;
public ApplyItemDataPostProcessor(ItemProcessor<T>[] modifiers) {
public ApplyItemDataPostProcessor(ItemProcessor[] modifiers) {
this.modifiers = modifiers;
}
@Override
public Item<T> process(Item<T> item, ItemBuildContext context) {
for (ItemProcessor<T> modifier : this.modifiers) {
for (ItemProcessor modifier : this.modifiers) {
item.apply(modifier, context);
}
return item;
@@ -31,7 +31,7 @@ public class ApplyItemDataPostProcessor<T> implements PostProcessor<T> {
@SuppressWarnings("unchecked")
@Override
public PostProcessor<A> create(Map<String, Object> args) {
List<ItemProcessor<?>> modifiers = new ArrayList<>();
List<ItemProcessor> modifiers = new ArrayList<>();
Map<String, Object> data = ResourceConfigUtils.getAsMap(args.get("data"), "data");
ItemProcessors.applyDataModifiers(data, modifiers::add);
return new ApplyItemDataPostProcessor<>(modifiers.toArray(new ItemProcessor[0]));

View File

@@ -15,16 +15,16 @@ import java.util.Map;
public final class ApplyDataOperation<I> implements ItemUpdater<I> {
public static final ItemUpdaterFactory<?> FACTORY = new Factory<>();
private final List<ItemProcessor<I>> modifiers;
private final List<ItemProcessor> modifiers;
public ApplyDataOperation(List<ItemProcessor<I>> modifiers) {
public ApplyDataOperation(List<ItemProcessor> modifiers) {
this.modifiers = modifiers;
}
@Override
public Item<I> update(Item<I> item, ItemBuildContext context) {
if (this.modifiers != null) {
for (ItemProcessor<I> modifier : this.modifiers) {
for (ItemProcessor modifier : this.modifiers) {
modifier.apply(item, context);
}
}
@@ -36,10 +36,10 @@ public final class ApplyDataOperation<I> implements ItemUpdater<I> {
@SuppressWarnings("unchecked")
@Override
public ItemUpdater<I> create(Key item, Map<String, Object> args) {
List<ItemProcessor<I>> modifiers = new ArrayList<>();
List<ItemProcessor> modifiers = new ArrayList<>();
Map<String, Object> data = ResourceConfigUtils.getAsMap(args.get("data"), "data");
ItemProcessors.applyDataModifiers(data, m -> {
modifiers.add((ItemProcessor<I>) m);
modifiers.add((ItemProcessor) m);
});
return new ApplyDataOperation<>(modifiers);
}

View File

@@ -15,9 +15,9 @@ import java.util.Map;
public final class ApplyDataFunction<T> extends AbstractLootConditionalFunction<T> {
public static final LootFunctionFactory<?> FACTORY = new Factory<>();
private final ItemProcessor<?>[] modifiers;
private final ItemProcessor[] modifiers;
public ApplyDataFunction(List<Condition<LootContext>> conditions, ItemProcessor<?>[] modifiers) {
public ApplyDataFunction(List<Condition<LootContext>> conditions, ItemProcessor[] modifiers) {
super(conditions);
this.modifiers = modifiers;
}
@@ -36,7 +36,7 @@ public final class ApplyDataFunction<T> extends AbstractLootConditionalFunction<
@Override
public LootFunction<A> create(Map<String, Object> arguments) {
List<ItemProcessor<?>> modifiers = new ArrayList<>();
List<ItemProcessor> modifiers = new ArrayList<>();
Map<String, Object> data = ResourceConfigUtils.getAsMap(ResourceConfigUtils.requireNonNullOrThrow(arguments.get("data"), "warning.config.loot_table.function.apply_data.missing_data"), "data");
ItemProcessors.applyDataModifiers(data, modifiers::add);
List<Condition<LootContext>> conditions = ResourceConfigUtils.parseConfigAsList(arguments.get("conditions"), CommonConditions::fromMap);

View File

@@ -44,6 +44,10 @@ public class CooldownData {
this.cooldownMap.clear();
}
public Long getCooldown(String key) {
return this.cooldownMap.get(key);
}
public static byte[] toBytes(CooldownData data) throws IOException {
CompoundTag tag = new CompoundTag();
long currentTime = System.currentTimeMillis();

View File

@@ -0,0 +1,125 @@
package net.momirealms.craftengine.core.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public final class CountdownFormatter {
private static final Pattern YEAR_PATTERN = Pattern.compile("[Yy]+");
private static final Pattern MONTH_PATTERN = Pattern.compile("M+");
private static final Pattern DAY_PATTERN = Pattern.compile("[Dd]+");
private static final Pattern HOUR_PATTERN = Pattern.compile("[Hh]+");
private static final Pattern MINUTE_PATTERN = Pattern.compile("m+");
private static final Pattern SECOND_PATTERN = Pattern.compile("s+");
private static final Pattern MILLIS_PATTERN = Pattern.compile("S+");
private final String pattern;
private final Matcher yearMatcher;
private final Matcher monthMatcher;
private final Matcher dayMatcher;
private final Matcher hourMatcher;
private final Matcher minuteMatcher;
private final Matcher secondMatcher;
private final Matcher millisMatcher;
private final boolean hasYear;
private final boolean hasMonth;
private final boolean hasDay;
private final boolean hasHour;
private final boolean hasMinute;
private final boolean hasSecond;
private final boolean hasMillis;
private CountdownFormatter(String pattern) {
this.pattern = pattern;
this.yearMatcher = YEAR_PATTERN.matcher(pattern);
this.monthMatcher = MONTH_PATTERN.matcher(pattern);
this.dayMatcher = DAY_PATTERN.matcher(pattern);
this.hourMatcher = HOUR_PATTERN.matcher(pattern);
this.minuteMatcher = MINUTE_PATTERN.matcher(pattern);
this.secondMatcher = SECOND_PATTERN.matcher(pattern);
this.millisMatcher = MILLIS_PATTERN.matcher(pattern);
this.hasYear = yearMatcher.find();
this.hasMonth = monthMatcher.find();
this.hasDay = dayMatcher.find();
this.hasHour = hourMatcher.find();
this.hasMinute = minuteMatcher.find();
this.hasSecond = secondMatcher.find();
this.hasMillis = millisMatcher.find();
}
public static CountdownFormatter of(String pattern) {
return new CountdownFormatter(pattern);
}
public String format(long millis) {
long years = 0, months = 0, days = 0, hours = 0, minutes = 0, seconds = 0;
if (!hasMillis) {
seconds = millis / 1000;
millis = 0;
}
if (!hasSecond) {
minutes = seconds / 60;
seconds = 0;
}
if (!hasMinute) {
hours = minutes / 60;
minutes = 0;
}
if (!hasHour) {
days = hours / 24;
hours = 0;
}
if (!hasDay) {
months = days / 30;
days = 0;
}
if (!hasMonth) {
years = months / 12;
months = 0;
}
if (hasMillis && hasSecond) {
seconds = millis / 1000;
millis %= 1000;
}
if (hasSecond && hasMinute) {
minutes = seconds / 60;
seconds %= 60;
}
if (hasMinute && hasHour) {
hours = minutes / 60;
minutes %= 60;
}
if (hasHour && hasDay) {
days = hours / 24;
hours %= 24;
}
if (hasDay && hasMonth) {
months = days / 30;
days %= 30;
}
if (hasMonth && hasYear) {
years = months / 12;
months %= 12;
}
StringBuilder result = new StringBuilder(pattern);
replaceUnit(result, yearMatcher, years);
replaceUnit(result, monthMatcher, months);
replaceUnit(result, dayMatcher, days);
replaceUnit(result, hourMatcher, hours);
replaceUnit(result, minuteMatcher, minutes);
replaceUnit(result, secondMatcher, seconds);
replaceUnit(result, millisMatcher, millis);
return result.toString();
}
private void replaceUnit(StringBuilder text, Matcher matcher, long value) {
matcher.reset(text);
if (matcher.find()) {
int length = matcher.group().length();
String formatted = String.format("%0" + length + "d", value);
text.replace(matcher.start(), matcher.end(), formatted);
}
}
}