diff --git a/paper-api/src/main/java/org/bukkit/entity/memory/MemoryKey.java b/paper-api/src/main/java/org/bukkit/entity/memory/MemoryKey.java index a895e6c68bfd..7e3d81232e82 100644 --- a/paper-api/src/main/java/org/bukkit/entity/memory/MemoryKey.java +++ b/paper-api/src/main/java/org/bukkit/entity/memory/MemoryKey.java @@ -125,7 +125,7 @@ public Class getMemoryClass() { public static final MemoryKey SPEAR_FLEEING_TIME = new MemoryKey<>(NamespacedKey.minecraft("spear_fleeing_time"), Integer.class); - // public static final MemoryKey SPEAR_STATUS = new MemoryKey<>(NamespacedKey.minecraft("spear_status"), SpearStatus.class); // TODO - snapshot: SpearStatus API + public static final MemoryKey SPEAR_STATUS = new MemoryKey<>(NamespacedKey.minecraft("spear_status"), SpearAttack.SpearStatus.class); public static final MemoryKey TEMPTATION_COOLDOWN_TICKS = new MemoryKey<>(NamespacedKey.minecraft("temptation_cooldown_ticks"), Integer.class); diff --git a/paper-api/src/main/java/org/bukkit/entity/memory/SpearAttack.java b/paper-api/src/main/java/org/bukkit/entity/memory/SpearAttack.java new file mode 100644 index 000000000000..8a08d8d10d1f --- /dev/null +++ b/paper-api/src/main/java/org/bukkit/entity/memory/SpearAttack.java @@ -0,0 +1,13 @@ +package org.bukkit.entity.memory; + +public interface SpearAttack { + + enum SpearStatus { + + // Start generate - SpearStatus + APPROACH, + CHARGING, + RETREAT; + // End generate - SpearStatus + } +} diff --git a/paper-generator/src/main/java/io/papermc/generator/Rewriters.java b/paper-generator/src/main/java/io/papermc/generator/Rewriters.java index 6a337d533bff..02f6265aec7e 100644 --- a/paper-generator/src/main/java/io/papermc/generator/Rewriters.java +++ b/paper-generator/src/main/java/io/papermc/generator/Rewriters.java @@ -79,6 +79,7 @@ import org.bukkit.entity.Wolf; import org.bukkit.entity.ZombieNautilus; import org.bukkit.entity.memory.MemoryKey; +import org.bukkit.entity.memory.SpearAttack; import org.bukkit.generator.structure.Structure; import org.bukkit.generator.structure.StructureType; import org.bukkit.inventory.ItemRarity; @@ -228,7 +229,8 @@ protected String rewriteFieldType(Holder.Reference(net.minecraft.world.entity.ai.behavior.SpearAttack.SpearStatus.class)); RegistryBootstrapper.bootstrapApi(sourceSet); } diff --git a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MemoryKeyRewriter.java b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MemoryKeyRewriter.java index dad0cefa24b0..4c4fe24be40f 100644 --- a/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MemoryKeyRewriter.java +++ b/paper-generator/src/main/java/io/papermc/generator/rewriter/types/simple/MemoryKeyRewriter.java @@ -23,6 +23,7 @@ import net.minecraft.world.phys.Vec3; import org.bukkit.Location; import org.bukkit.NamespacedKey; +import org.bukkit.entity.memory.SpearAttack; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import static io.papermc.generator.utils.Formatting.quoted; @@ -61,7 +62,8 @@ public MemoryKeyRewriter() { ); private static final Map, Class> API_BRIDGE = Map.of( - GlobalPos.class, Location.class + GlobalPos.class, Location.class, + net.minecraft.world.entity.ai.behavior.SpearAttack.SpearStatus.class, SpearAttack.SpearStatus.class ); private static final Map FIELD_RENAMES = Map.of( @@ -106,11 +108,15 @@ protected String rewriteFieldName(Holder.Reference> referenc @Override protected String rewriteFieldValue(Holder.Reference> reference) { + String apiMemoryTypeClassName = this.apiMemoryType.getSimpleName(); + if (this.apiMemoryType.getEnclosingClass() != null && this.apiMemoryType.isEnum()) { + apiMemoryTypeClassName = this.apiMemoryType.getEnclosingClass().getSimpleName() + "." + this.apiMemoryType.getSimpleName(); + } return "new %s<>(%s.minecraft(%s), %s.class)".formatted( this.registryEntry.apiClass().getSimpleName(), NamespacedKey.class.getSimpleName(), quoted(reference.key().identifier().getPath()), - this.apiMemoryType.getSimpleName() // assume the type is already import (see above in rewriteFieldType) + apiMemoryTypeClassName // assume the type is already import (see above in rewriteFieldType) ); } } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/memory/CraftMemoryMapper.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/memory/CraftMemoryMapper.java index a96a9e46c310..d05fd525e553 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/memory/CraftMemoryMapper.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/memory/CraftMemoryMapper.java @@ -2,6 +2,7 @@ import java.util.UUID; import net.minecraft.core.GlobalPos; +import net.minecraft.world.entity.ai.behavior.SpearAttack; import org.bukkit.Location; import org.bukkit.craftbukkit.util.CraftLocation; @@ -10,16 +11,18 @@ public final class CraftMemoryMapper { private CraftMemoryMapper() {} public static Object fromNms(Object object) { - if (object instanceof GlobalPos) { - return CraftLocation.fromGlobalPos((GlobalPos) object); - } else if (object instanceof Long) { - return (Long) object; - } else if (object instanceof UUID) { - return (UUID) object; - } else if (object instanceof Boolean) { - return (Boolean) object; - } else if (object instanceof Integer) { - return (Integer) object; + if (object instanceof GlobalPos globalPos) { + return CraftLocation.fromGlobalPos(globalPos); + } else if (object instanceof SpearAttack.SpearStatus spearStatus) { + return CraftSpearAttack.fromNms(spearStatus); + } else if (object instanceof Long longValue) { + return longValue; + } else if (object instanceof UUID uuid) { + return uuid; + } else if (object instanceof Boolean booleanValue) { + return booleanValue; + } else if (object instanceof Integer integerValue) { + return integerValue; } throw new UnsupportedOperationException("Do not know how to map " + object); @@ -28,16 +31,18 @@ public static Object fromNms(Object object) { public static Object toNms(Object object) { if (object == null) { return null; - } else if (object instanceof Location) { - return CraftLocation.toGlobalPos((Location) object); - } else if (object instanceof Long) { - return (Long) object; - } else if (object instanceof UUID) { - return (UUID) object; - } else if (object instanceof Boolean) { - return (Boolean) object; - } else if (object instanceof Integer) { - return (Integer) object; + } else if (object instanceof org.bukkit.entity.memory.SpearAttack.SpearStatus spearStatus) { + return CraftSpearAttack.toNms(spearStatus); + } else if (object instanceof Location location) { + return CraftLocation.toGlobalPos(location); + } else if (object instanceof Long longValue) { + return longValue; + } else if (object instanceof UUID uuid) { + return uuid; + } else if (object instanceof Boolean booleanValue) { + return booleanValue; + } else if (object instanceof Integer integerValue) { + return integerValue; } throw new UnsupportedOperationException("Do not know how to map " + object); diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/memory/CraftSpearAttack.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/memory/CraftSpearAttack.java new file mode 100644 index 000000000000..5ddd1fa90187 --- /dev/null +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/memory/CraftSpearAttack.java @@ -0,0 +1,13 @@ +package org.bukkit.craftbukkit.entity.memory; + +import net.minecraft.world.entity.ai.behavior.SpearAttack; + +public class CraftSpearAttack { + public static SpearAttack.SpearStatus toNms(org.bukkit.entity.memory.SpearAttack.SpearStatus bukkit) { + return SpearAttack.SpearStatus.values()[bukkit.ordinal()]; + } + + public static org.bukkit.entity.memory.SpearAttack.SpearStatus fromNms(SpearAttack.SpearStatus nms) { + return org.bukkit.entity.memory.SpearAttack.SpearStatus.values()[nms.ordinal()]; + } +}