9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-29 03:49:15 +00:00

Merge remote-tracking branch 'upstream/dev' into dev

# Conflicts:
#	bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java
#	gradle.properties
This commit is contained in:
jhqwqmc
2025-06-09 00:30:37 +08:00
13 changed files with 264 additions and 72 deletions

View File

@@ -27,6 +27,7 @@ import net.momirealms.craftengine.core.registry.WritableRegistry;
import net.momirealms.craftengine.core.util.*;
import org.incendo.cloud.suggestion.Suggestion;
import org.incendo.cloud.type.Either;
import org.joml.Vector3f;
import java.nio.file.Path;
import java.util.*;
@@ -459,6 +460,14 @@ public abstract class AbstractItemManager<I> extends AbstractModelGenerator impl
}
return new DynamicLoreModifier<>(dynamicLore);
}, "dynamic-lore");
registerDataFunction((obj) -> {
if (obj instanceof Integer integer) {
return new DyedColorModifier<>(integer);
} else {
Vector3f vector3f = MiscUtils.getAsVector3f(obj, "dyed-color");
return new DyedColorModifier<>(MCUtils.fastFloor(vector3f.x) << 16 + MCUtils.fastFloor(vector3f.y) << 8 + MCUtils.fastFloor(vector3f.z));
}
}, "dyed-color");
registerDataFunction((obj) -> {
Map<String, Object> data = MiscUtils.castToMap(obj, false);
return new TagsModifier<>(data);

View File

@@ -36,6 +36,7 @@ public class ItemSettings {
boolean dyeable = true;
Helmet helmet = null;
FoodData foodData = null;
Key consumeReplacement = null;
private ItemSettings() {}
@@ -72,6 +73,7 @@ public class ItemSettings {
newSettings.dyeable = settings.dyeable;
newSettings.helmet = settings.helmet;
newSettings.foodData = settings.foodData;
newSettings.consumeReplacement = settings.consumeReplacement;
return newSettings;
}
@@ -124,6 +126,11 @@ public class ItemSettings {
return foodData;
}
@Nullable
public Key consumeReplacement() {
return consumeReplacement;
}
@Nullable
public Helmet helmet() {
return helmet;
@@ -139,6 +146,11 @@ public class ItemSettings {
return this;
}
public ItemSettings consumeReplacement(Key key) {
this.consumeReplacement = key;
return this;
}
public ItemSettings canRepair(boolean canRepair) {
this.canRepair = canRepair;
return this;
@@ -228,6 +240,7 @@ public class ItemSettings {
int intValue = ResourceConfigUtils.getAsInt(value, "fuel-time");
return settings -> settings.fuelTime(intValue);
}));
registerFactory("consume-replacement", (value -> settings -> settings.consumeReplacement(Key.of(value.toString()))));
registerFactory("tags", (value -> {
List<String> tags = MiscUtils.getAsStringList(value);
return settings -> settings.tags(tags.stream().map(Key::of).collect(Collectors.toSet()));

View File

@@ -0,0 +1,46 @@
package net.momirealms.craftengine.core.item.modifier;
import net.momirealms.craftengine.core.item.ComponentKeys;
import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.item.ItemBuildContext;
import net.momirealms.craftengine.core.item.NetworkItemHandler;
import net.momirealms.craftengine.core.util.VersionHelper;
import net.momirealms.sparrow.nbt.CompoundTag;
import net.momirealms.sparrow.nbt.Tag;
public class DyedColorModifier<I> implements ItemDataModifier<I> {
private final int color;
public DyedColorModifier(int color) {
this.color = color;
}
@Override
public String name() {
return "dyed-color";
}
@Override
public void apply(Item<I> item, ItemBuildContext context) {
item.dyedColor(this.color);
}
@Override
public void prepareNetworkItem(Item<I> item, ItemBuildContext context, CompoundTag networkData) {
if (VersionHelper.isOrAbove1_20_5()) {
Tag previous = item.getNBTComponent(ComponentKeys.DYED_COLOR);
if (previous != null) {
networkData.put(ComponentKeys.DYED_COLOR.asString(), NetworkItemHandler.pack(NetworkItemHandler.Operation.ADD, previous));
} else {
networkData.put(ComponentKeys.DYED_COLOR.asString(), NetworkItemHandler.pack(NetworkItemHandler.Operation.REMOVE));
}
} else {
Tag previous = item.getNBTTag("display", "color");
if (previous != null) {
networkData.put("display.color", NetworkItemHandler.pack(NetworkItemHandler.Operation.ADD, previous));
} else {
networkData.put("display.color", NetworkItemHandler.pack(NetworkItemHandler.Operation.REMOVE));
}
}
}
}