mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-25 09:59:20 +00:00
refactor(bukkit): 添加一些调试的东西
- 准备设计配置格式
This commit is contained in:
@@ -14,14 +14,14 @@ import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Trident;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.persistence.PersistentDataContainer;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
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.BooleanParser;
|
||||
import org.incendo.cloud.parser.standard.IntegerParser;
|
||||
import org.incendo.cloud.parser.standard.*;
|
||||
import org.incendo.cloud.suggestion.Suggestion;
|
||||
import org.incendo.cloud.suggestion.SuggestionProvider;
|
||||
|
||||
@@ -49,14 +49,10 @@ public class TestCommand extends BukkitCommandFeature<CommandSender> {
|
||||
return CompletableFuture.completedFuture(plugin().itemManager().cachedSuggestions());
|
||||
}
|
||||
}))
|
||||
.required("interpolationDelay", IntegerParser.integerParser())
|
||||
.required("transformationInterpolationDuration", IntegerParser.integerParser())
|
||||
.required("positionRotationInterpolationDuration", IntegerParser.integerParser())
|
||||
// .required("displayType", ByteParser.byteParser())
|
||||
// .required("x", FloatParser.floatParser())
|
||||
// .required("y", FloatParser.floatParser())
|
||||
// .required("z", FloatParser.floatParser())
|
||||
// .required("w", FloatParser.floatParser())
|
||||
.required("interpolationDuration", IntegerParser.integerParser())
|
||||
.required("displayType", ByteParser.byteParser((byte) 0, (byte) 8))
|
||||
.required("translation", StringParser.stringParser())
|
||||
.required("rotationLeft", StringParser.stringParser())
|
||||
.handler(context -> {
|
||||
Player player = context.sender();
|
||||
if (context.get("forceUpdate")) {
|
||||
@@ -73,21 +69,13 @@ public class TestCommand extends BukkitCommandFeature<CommandSender> {
|
||||
}
|
||||
NamespacedKey namespacedKey = context.get("id");
|
||||
ItemStack item = new ItemStack(Material.TRIDENT);
|
||||
// NamespacedKey displayTypeKey = Objects.requireNonNull(NamespacedKey.fromString("craftengine:display_type"));
|
||||
// NamespacedKey customTridentX = Objects.requireNonNull(NamespacedKey.fromString("craftengine:custom_trident_x"));
|
||||
// NamespacedKey customTridentY = Objects.requireNonNull(NamespacedKey.fromString("craftengine:custom_trident_y"));
|
||||
// NamespacedKey customTridentZ = Objects.requireNonNull(NamespacedKey.fromString("craftengine:custom_trident_z"));
|
||||
// NamespacedKey customTridentW = Objects.requireNonNull(NamespacedKey.fromString("craftengine:custom_trident_w"));
|
||||
item.editMeta(meta -> {
|
||||
meta.getPersistentDataContainer().set(CustomTridentUtils.customTridentKey, PersistentDataType.STRING, namespacedKey.asString());
|
||||
meta.getPersistentDataContainer().set(CustomTridentUtils.interpolationDelayKey, PersistentDataType.INTEGER, context.get("interpolationDelay"));
|
||||
meta.getPersistentDataContainer().set(CustomTridentUtils.transformationInterpolationDurationaKey, PersistentDataType.INTEGER, context.get("transformationInterpolationDuration"));
|
||||
meta.getPersistentDataContainer().set(CustomTridentUtils.positionRotationInterpolationDurationKey, PersistentDataType.INTEGER, context.get("positionRotationInterpolationDuration"));
|
||||
// container.set(displayTypeKey, PersistentDataType.BYTE, context.get("displayType"));
|
||||
// container.set(customTridentX, PersistentDataType.FLOAT, context.get("x"));
|
||||
// container.set(customTridentY, PersistentDataType.FLOAT, context.get("y"));
|
||||
// container.set(customTridentZ, PersistentDataType.FLOAT, context.get("z"));
|
||||
// container.set(customTridentW, PersistentDataType.FLOAT, context.get("w"));
|
||||
item.editMeta((meta) -> {
|
||||
PersistentDataContainer container = meta.getPersistentDataContainer();
|
||||
container.set(CustomTridentUtils.customTridentKey, PersistentDataType.STRING, namespacedKey.asString());
|
||||
container.set(CustomTridentUtils.interpolationDurationaKey, PersistentDataType.INTEGER, context.get("interpolationDuration"));
|
||||
container.set(CustomTridentUtils.displayTypeKey, PersistentDataType.BYTE, context.get("displayType"));
|
||||
container.set(CustomTridentUtils.translationKey, PersistentDataType.STRING, context.get("translation"));
|
||||
container.set(CustomTridentUtils.rotationLeftKey, PersistentDataType.STRING, context.get("rotationLeft"));
|
||||
Item<ItemStack> ceItem = BukkitItemManager.instance().createWrappedItem(Key.of(namespacedKey.asString()), null);
|
||||
Optional<Integer> customModelData = ceItem.customModelData();
|
||||
customModelData.ifPresent(meta::setCustomModelData);
|
||||
|
||||
@@ -2334,7 +2334,9 @@ public class PacketConsumers {
|
||||
public static final TriConsumer<NetWorkUser, NMSPacketEvent, Object> SET_ENTITY_DATA = (user, event, packet) -> {
|
||||
try {
|
||||
int entityId = Reflections.field$clazz$ClientboundSetEntityDataPacket$id.getInt(packet);
|
||||
CustomTridentUtils.modifyCustomTridentSetEntityData(user, event, entityId);
|
||||
if (user.tridentView().containsKey(entityId)) {
|
||||
CustomTridentUtils.modifyCustomTridentSetEntityData(user, event, entityId);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
CraftEngine.instance().logger().warn("Failed to handle ClientboundSetEntityDataPacket", e);
|
||||
}
|
||||
|
||||
@@ -31,9 +31,10 @@ import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class CustomTridentUtils {
|
||||
public static final NamespacedKey customTridentKey = Objects.requireNonNull(NamespacedKey.fromString("craftengine:custom_trident"));
|
||||
public static final NamespacedKey interpolationDelayKey = Objects.requireNonNull(NamespacedKey.fromString("craftengine:interpolation_delay"));
|
||||
public static final NamespacedKey transformationInterpolationDurationaKey = Objects.requireNonNull(NamespacedKey.fromString("craftengine:transformation_interpolation_duration"));
|
||||
public static final NamespacedKey positionRotationInterpolationDurationKey = Objects.requireNonNull(NamespacedKey.fromString("craftengine:position_rotation_interpolation_duration"));
|
||||
public static final NamespacedKey interpolationDurationaKey = Objects.requireNonNull(NamespacedKey.fromString("craftengine:interpolation_duration"));
|
||||
public static final NamespacedKey displayTypeKey = Objects.requireNonNull(NamespacedKey.fromString("craftengine:display_type"));
|
||||
public static final NamespacedKey translationKey = Objects.requireNonNull(NamespacedKey.fromString("craftengine:translation"));
|
||||
public static final NamespacedKey rotationLeftKey = Objects.requireNonNull(NamespacedKey.fromString("craftengine:rotation_left"));
|
||||
|
||||
public static void handleCustomTrident(NetWorkUser user, NMSPacketEvent event, Object packet) throws IllegalAccessException {
|
||||
int entityId = FastNMS.INSTANCE.field$ClientboundAddEntityPacket$entityId(packet);
|
||||
@@ -47,7 +48,6 @@ public class CustomTridentUtils {
|
||||
serverEntity = null;
|
||||
}
|
||||
if (notCustomTrident(trident)) return;
|
||||
user.tridentView().put(entityId, List.of());
|
||||
modifyCustomTridentPacket(packet);
|
||||
List<Object> itemDisplayValues = buildEntityDataValues(trident);
|
||||
user.tridentView().put(entityId, itemDisplayValues);
|
||||
@@ -94,23 +94,26 @@ public class CustomTridentUtils {
|
||||
List<Object> itemDisplayValues = new ArrayList<>();
|
||||
ItemStack itemStack = trident.getItemStack();
|
||||
PersistentDataContainer container = itemStack.getItemMeta().getPersistentDataContainer();
|
||||
String customTrident = container.get(customTridentKey, PersistentDataType.STRING);
|
||||
String customTrident = container.getOrDefault(customTridentKey, PersistentDataType.STRING, "craftengine:empty");
|
||||
Item<ItemStack> item = BukkitItemManager.instance().createWrappedItem(Key.of(customTrident), null);
|
||||
itemStack.getEnchantments().forEach((enchantment, level) -> item.addEnchantment(new Enchantment(Key.of(enchantment.getKey().toString()), level)));
|
||||
Integer interpolationDelay = container.get(interpolationDelayKey, PersistentDataType.INTEGER);
|
||||
Integer transformationInterpolationDuration = container.get(transformationInterpolationDurationaKey, PersistentDataType.INTEGER);
|
||||
Integer positionRotationInterpolationDuration = container.get(positionRotationInterpolationDurationKey, PersistentDataType.INTEGER);
|
||||
ItemDisplayEntityData.InterpolationDelay.addEntityDataIfNotDefaultValue(interpolationDelay, itemDisplayValues);
|
||||
ItemDisplayEntityData.Translation.addEntityDataIfNotDefaultValue(new Vector3f(0, 0, -2), itemDisplayValues);
|
||||
ItemDisplayEntityData.RotationLeft.addEntityDataIfNotDefaultValue(new Quaternionf(1, 1, 1, 1), itemDisplayValues);
|
||||
Integer interpolationDurationa = container.getOrDefault(interpolationDurationaKey, PersistentDataType.INTEGER, 2);
|
||||
Byte displayType = container.getOrDefault(displayTypeKey, PersistentDataType.BYTE, (byte) 0);
|
||||
String translation = container.getOrDefault(translationKey, PersistentDataType.STRING, "0+0+0");
|
||||
String[] translations = translation.split("\\+");
|
||||
String rotationLeft = container.getOrDefault(rotationLeftKey, PersistentDataType.STRING, "0+0+0+0");
|
||||
String[] rotationLefts = rotationLeft.split("\\+");
|
||||
ItemDisplayEntityData.InterpolationDelay.addEntityDataIfNotDefaultValue(-1, itemDisplayValues);
|
||||
ItemDisplayEntityData.Translation.addEntityDataIfNotDefaultValue(new Vector3f(Float.parseFloat(translations[0]), Float.parseFloat(translations[1]), Float.parseFloat(translations[2])), itemDisplayValues);
|
||||
ItemDisplayEntityData.RotationLeft.addEntityDataIfNotDefaultValue(new Quaternionf(Float.parseFloat(rotationLefts[0]), Float.parseFloat(rotationLefts[1]), Float.parseFloat(rotationLefts[2]), Float.parseFloat(rotationLefts[3])), itemDisplayValues);
|
||||
if (VersionHelper.isOrAbove1_20_2()) {
|
||||
ItemDisplayEntityData.TransformationInterpolationDuration.addEntityDataIfNotDefaultValue(transformationInterpolationDuration, itemDisplayValues);
|
||||
ItemDisplayEntityData.PositionRotationInterpolationDuration.addEntityDataIfNotDefaultValue(positionRotationInterpolationDuration, itemDisplayValues);
|
||||
ItemDisplayEntityData.TransformationInterpolationDuration.addEntityDataIfNotDefaultValue(interpolationDurationa, itemDisplayValues);
|
||||
ItemDisplayEntityData.PositionRotationInterpolationDuration.addEntityDataIfNotDefaultValue(interpolationDurationa, itemDisplayValues);
|
||||
} else {
|
||||
ItemDisplayEntityData.InterpolationDuration.addEntityDataIfNotDefaultValue(transformationInterpolationDuration, itemDisplayValues);
|
||||
ItemDisplayEntityData.InterpolationDuration.addEntityDataIfNotDefaultValue(interpolationDurationa, itemDisplayValues);
|
||||
}
|
||||
ItemDisplayEntityData.DisplayedItem.addEntityDataIfNotDefaultValue(item.getLiteralObject(), itemDisplayValues);
|
||||
ItemDisplayEntityData.DisplayType.addEntityDataIfNotDefaultValue((byte) 0, itemDisplayValues);
|
||||
ItemDisplayEntityData.DisplayType.addEntityDataIfNotDefaultValue(displayType, itemDisplayValues);
|
||||
return itemDisplayValues;
|
||||
}
|
||||
|
||||
@@ -144,17 +147,8 @@ public class CustomTridentUtils {
|
||||
}
|
||||
|
||||
public static void modifyCustomTridentSetEntityData(NetWorkUser user, NMSPacketEvent event, int entityId) {
|
||||
if (user.tridentView().containsKey(entityId)) {
|
||||
Object packet = buildCustomTridentSetEntityDataPacket(user, entityId);
|
||||
if (packet == null) return;
|
||||
event.replacePacket(packet);
|
||||
} else {
|
||||
Trident trident = getTridentById(user, entityId);
|
||||
if (trident == null) return;
|
||||
if (notCustomTrident(trident)) return;
|
||||
Object packet = buildCustomTridentSetEntityDataPacket(user, entityId);
|
||||
if (packet == null) return;
|
||||
event.replacePacket(packet);
|
||||
}
|
||||
Object packet = buildCustomTridentSetEntityDataPacket(user, entityId);
|
||||
if (packet == null) return;
|
||||
event.replacePacket(packet);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user