9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-25 01:49:30 +00:00

feat(entity): 添加自定义三叉戟

This commit is contained in:
jhqwqmc
2025-05-03 17:12:52 +08:00
parent 340c819f4b
commit 5f1e117311
2 changed files with 15 additions and 7 deletions

View File

@@ -14,6 +14,7 @@ import org.incendo.cloud.Command;
import org.incendo.cloud.bukkit.parser.NamespacedKeyParser;
import org.incendo.cloud.context.CommandContext;
import org.incendo.cloud.context.CommandInput;
import org.incendo.cloud.parser.standard.ByteParser;
import org.incendo.cloud.parser.standard.IntegerParser;
import org.incendo.cloud.suggestion.Suggestion;
import org.incendo.cloud.suggestion.SuggestionProvider;
@@ -40,15 +41,22 @@ public class TestCommand extends BukkitCommandFeature<CommandSender> {
.required("interpolationDelay", IntegerParser.integerParser())
.required("transformationInterpolationDuration", IntegerParser.integerParser())
.required("positionRotationInterpolationDuration", IntegerParser.integerParser())
.required("displayType", ByteParser.byteParser())
.handler(context -> {
Player player = context.sender();
NamespacedKey namespacedKey = context.get("id");
var item = ItemStack.of(Material.TRIDENT);
NamespacedKey customTridentKey = Objects.requireNonNull(NamespacedKey.fromString("craftengine:custom_trident"));
NamespacedKey interpolationDelayKey = Objects.requireNonNull(NamespacedKey.fromString("craftengine:interpolation_delay"));
NamespacedKey transformationInterpolationDurationaKey = Objects.requireNonNull(NamespacedKey.fromString("craftengine:transformation_interpolation_duration"));
NamespacedKey positionRotationInterpolationDurationKey = Objects.requireNonNull(NamespacedKey.fromString("craftengine:position_rotation_interpolation_duration"));
NamespacedKey displayTypeKey = Objects.requireNonNull(NamespacedKey.fromString("craftengine:display_type"));
item.editPersistentDataContainer(container -> {
container.set(Objects.requireNonNull(NamespacedKey.fromString("craftengine:custom_trident")), PersistentDataType.STRING, namespacedKey.asString());
container.set(Objects.requireNonNull(NamespacedKey.fromString("craftengine:interpolation_delay")), PersistentDataType.INTEGER, context.get("interpolationDelay"));
container.set(Objects.requireNonNull(NamespacedKey.fromString("craftengine:transformation_interpolation_duration")), PersistentDataType.INTEGER, context.get("transformationInterpolationDuration"));
container.set(Objects.requireNonNull(NamespacedKey.fromString("craftengine:position_rotation_interpolation_duration")), PersistentDataType.INTEGER, context.get("positionRotationInterpolationDuration"));
container.set(customTridentKey, PersistentDataType.STRING, namespacedKey.asString());
container.set(interpolationDelayKey, PersistentDataType.INTEGER, context.get("interpolationDelay"));
container.set(transformationInterpolationDurationaKey, PersistentDataType.INTEGER, context.get("transformationInterpolationDuration"));
container.set(positionRotationInterpolationDurationKey, PersistentDataType.INTEGER, context.get("positionRotationInterpolationDuration"));
container.set(displayTypeKey, PersistentDataType.BYTE, context.get("displayType"));
});
player.getInventory().addItem(item);
});

View File

@@ -1604,14 +1604,13 @@ public class PacketConsumers {
NamespacedKey interpolationDelayKey = Objects.requireNonNull(NamespacedKey.fromString("craftengine:interpolation_delay"));
NamespacedKey transformationInterpolationDurationaKey = Objects.requireNonNull(NamespacedKey.fromString("craftengine:transformation_interpolation_duration"));
NamespacedKey positionRotationInterpolationDurationKey = Objects.requireNonNull(NamespacedKey.fromString("craftengine:position_rotation_interpolation_duration"));
NamespacedKey displayTypeKey = Objects.requireNonNull(NamespacedKey.fromString("craftengine:display_type"));
String customTrident = container.get(customTridentKey, PersistentDataType.STRING);
Integer interpolationDelay = container.get(interpolationDelayKey, PersistentDataType.INTEGER);
Integer transformationInterpolationDuration = container.get(transformationInterpolationDurationaKey, PersistentDataType.INTEGER);
Integer positionRotationInterpolationDuration = container.get(positionRotationInterpolationDurationKey, PersistentDataType.INTEGER);
Byte displayType = container.get(displayTypeKey, PersistentDataType.BYTE);
if (customTrident == null) return;
if (interpolationDelay == null) return;
if (transformationInterpolationDuration == null) return;
if (positionRotationInterpolationDuration == null) return;
Reflections.field$ClientboundAddEntityPacket$type.set(packet, Reflections.instance$EntityType$ITEM_DISPLAY);
List<Object> itemDisplayValues = new ArrayList<>();
Item<ItemStack> item = BukkitItemManager.instance().createWrappedItem(Key.of(customTrident), null);
@@ -1623,6 +1622,7 @@ public class PacketConsumers {
ItemDisplayEntityData.InterpolationDuration.addEntityDataIfNotDefaultValue(transformationInterpolationDuration, itemDisplayValues);
}
ItemDisplayEntityData.DisplayedItem.addEntityDataIfNotDefaultValue(item.getLiteralObject(), itemDisplayValues);
ItemDisplayEntityData.DisplayType.addEntityDataIfNotDefaultValue(displayType, itemDisplayValues);
user.tridentView().put(entityId, itemDisplayValues);
event.addDelayedTask(() -> {
user.sendPacket(FastNMS.INSTANCE.constructor$ClientboundSetEntityDataPacket(entityId, itemDisplayValues), true);