Initial update to 1.21.2

This commit is contained in:
fullwall 2024-10-24 01:42:07 +08:00
parent 4d1b5a79b7
commit ff2cecf6f2
251 changed files with 4601 additions and 3751 deletions

8
dist/pom.xml vendored
View File

@ -5,7 +5,7 @@
<parent>
<groupId>net.citizensnpcs</groupId>
<artifactId>citizens-parent</artifactId>
<version>2.0.35-SNAPSHOT</version>
<version>2.0.36-SNAPSHOT</version>
</parent>
<artifactId>citizens</artifactId>
<packaging>pom</packaging>
@ -84,7 +84,7 @@
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>citizens-v1_21_R1</artifactId>
<artifactId>citizens-v1_21_R2</artifactId>
<version>${project.version}</version>
<type>jar</type>
<scope>compile</scope>
@ -187,7 +187,7 @@
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>citizens-v1_21_R1</artifactId>
<artifactId>citizens-v1_21_R2</artifactId>
<version>${project.version}</version>
<type>jar</type>
<scope>compile</scope>
@ -206,7 +206,7 @@
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>citizens-v1_21_R1</artifactId>
<artifactId>citizens-v1_21_R2</artifactId>
<version>${project.version}</version>
<type>jar</type>
<scope>compile</scope>

View File

@ -6,12 +6,12 @@
<parent>
<groupId>net.citizensnpcs</groupId>
<artifactId>citizens-parent</artifactId>
<version>2.0.35-SNAPSHOT</version>
<version>2.0.36-SNAPSHOT</version>
</parent>
<artifactId>citizens-main</artifactId>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<craftbukkit.version>1.21.1-R0.1-SNAPSHOT</craftbukkit.version>
<craftbukkit.version>1.21.2-R0.1-SNAPSHOT</craftbukkit.version>
<placeholderapi.version>2.11.5</placeholderapi.version>
<citizensapi.version>${project.version}</citizensapi.version>
<worldguard.version>7.1.0-SNAPSHOT</worldguard.version>

View File

@ -453,7 +453,7 @@ public class EventListen implements Listener {
targetNPCEvent.setCancelled(!npc.data().get(NPC.Metadata.TARGETABLE, !npc.isProtected()));
Bukkit.getPluginManager().callEvent(targetNPCEvent);
if (targetNPCEvent.isCancelled()) {
targetNPCEvent.setCancelled(true);
event.setCancelled(true);
}
}

View File

@ -36,7 +36,6 @@ import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Ageable;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Boat;
import org.bukkit.entity.Damageable;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
@ -123,7 +122,6 @@ import net.citizensnpcs.trait.Anchors;
import net.citizensnpcs.trait.ArmorStandTrait;
import net.citizensnpcs.trait.AttributeTrait;
import net.citizensnpcs.trait.BatTrait;
import net.citizensnpcs.trait.BoatTrait;
import net.citizensnpcs.trait.BoundingBoxTrait;
import net.citizensnpcs.trait.ClickRedirectTrait;
import net.citizensnpcs.trait.CommandTrait;
@ -449,24 +447,6 @@ public class NPCCommands {
Messaging.sendTr(sender, awake ? Messages.BAT_AWAKE_SET : Messages.BAT_AWAKE_UNSET, npc.getName());
}
@Command(
aliases = { "npc" },
usage = "boat --type [type]",
desc = "",
modifiers = { "boat" },
min = 1,
max = 1,
permission = "citizens.npc.boat")
public void boat(CommandContext args, CommandSender sender, NPC npc,
@Flag(value = "type", completionsProvider = OptionalBoatTypeCompletions.class) String stype)
throws CommandException {
if (stype == null)
throw new CommandUsageException();
Boat.Type type = Boat.Type.valueOf(stype);
npc.getOrAddTrait(BoatTrait.class).setType(type);
Messaging.sendTr(sender, Messages.BOAT_TYPE_SET, type);
}
@Command(
aliases = { "npc" },
usage = "breakblock --location [x,y,z] --radius [radius]",
@ -2479,8 +2459,7 @@ public class NPCCommands {
permission = "citizens.npc.playerlist")
@Requirements(selected = true, ownership = true, types = EntityType.PLAYER)
public void playerlist(CommandContext args, CommandSender sender, NPC npc) {
boolean remove = !npc.data().get(NPC.Metadata.REMOVE_FROM_PLAYERLIST,
Setting.REMOVE_PLAYERS_FROM_PLAYER_LIST.asBoolean());
boolean remove = !npc.shouldRemoveFromPlayerList();
if (args.hasFlag('a')) {
remove = false;
} else if (args.hasFlag('r')) {
@ -3415,7 +3394,7 @@ public class NPCCommands {
npc.data().setPersistent(NPC.Metadata.TARGETABLE, targetable);
}
if (targetable && npc.getOrAddTrait(MobType.class).getType() == EntityType.PLAYER
&& npc.data().get(NPC.Metadata.REMOVE_FROM_PLAYERLIST, true)) {
&& npc.shouldRemoveFromPlayerList()) {
Messaging.sendTr(sender, Messages.TARGETABLE_PLAYERLIST_WARNING);
if (args.hasFlag('t')) {
npc.data().set(NPC.Metadata.REMOVE_FROM_PLAYERLIST, false);

View File

@ -15,10 +15,6 @@ public abstract class AbstractEntityController implements EntityController {
public AbstractEntityController() {
}
public AbstractEntityController(Class<?> clazz) {
NMS.registerEntityClass(clazz);
}
@Override
public void create(Location at, NPC npc) {
bukkitEntity = createEntity(at, npc);

View File

@ -25,7 +25,6 @@ import net.citizensnpcs.trait.Anchors;
import net.citizensnpcs.trait.ArmorStandTrait;
import net.citizensnpcs.trait.AttributeTrait;
import net.citizensnpcs.trait.BatTrait;
import net.citizensnpcs.trait.BoatTrait;
import net.citizensnpcs.trait.BoundingBoxTrait;
import net.citizensnpcs.trait.ClickRedirectTrait;
import net.citizensnpcs.trait.CommandTrait;
@ -83,7 +82,6 @@ public class CitizensTraitFactory implements TraitFactory {
registerTrait(TraitInfo.create(AttributeTrait.class));
registerTrait(TraitInfo.create(Anchors.class));
registerTrait(TraitInfo.create(BatTrait.class));
registerTrait(TraitInfo.create(BoatTrait.class));
registerTrait(TraitInfo.create(BoundingBoxTrait.class));
registerTrait(TraitInfo.create(ClickRedirectTrait.class));
registerTrait(TraitInfo.create(CommandTrait.class).optInToStats());

View File

@ -37,5 +37,6 @@ public class EntityControllers {
}
}
private static Map<EntityType, Constructor<? extends EntityController>> TYPES = Maps.newEnumMap(EntityType.class);
private static final Map<EntityType, Constructor<? extends EntityController>> TYPES = Maps
.newEnumMap(EntityType.class);
}

View File

@ -0,0 +1,68 @@
package net.citizensnpcs.trait.versioned;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Boat;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.Flag;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.command.exception.CommandUsageException;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.api.persistence.Persist;
import net.citizensnpcs.api.trait.Trait;
import net.citizensnpcs.api.trait.TraitName;
import net.citizensnpcs.api.util.Messaging;
import net.citizensnpcs.api.util.SpigotUtil;
import net.citizensnpcs.commands.NPCCommands.OptionalBoatTypeCompletions;
import net.citizensnpcs.util.Messages;
@TraitName("boattrait")
public class BoatTrait extends Trait {
@Persist
private Boat.Type type;
public BoatTrait() {
super("boattrait");
}
@Command(
aliases = { "npc" },
usage = "boat --type [type]",
desc = "",
modifiers = { "boat" },
min = 1,
max = 1,
permission = "citizens.npc.boat")
public void boat(CommandContext args, CommandSender sender, NPC npc,
@Flag(value = "type", completionsProvider = OptionalBoatTypeCompletions.class) String stype)
throws CommandException {
if (stype == null)
throw new CommandUsageException();
Boat.Type type = Boat.Type.valueOf(stype);
npc.getOrAddTrait(BoatTrait.class).setType(type);
Messaging.sendTr(sender, Messages.BOAT_TYPE_SET, type);
}
public Boat.Type getType() {
return type;
}
@Override
public void onSpawn() {
int[] version = SpigotUtil.getVersion();
if (version[1] > 21 || (version[1] == 21 && version[2] >= 2))
return;
if (npc.getEntity() instanceof Boat) {
if (type != null) {
((Boat) npc.getEntity()).setBoatType(type);
}
}
}
public void setType(Boat.Type type) {
this.type = type;
onSpawn();
}
}

View File

@ -497,6 +497,15 @@ public class NMS {
return null;
}
public static <T> T getFirstStaticObject(Class<?> clazz, Class<?> type) {
try {
return (T) getFirstStaticGetter(clazz, type).invoke();
} catch (Throwable e) {
e.printStackTrace();
}
return null;
}
public static MethodHandle getGetter(Class<?> clazz, String name) {
return getGetter(clazz, name, true);
}
@ -635,6 +644,15 @@ public class NMS {
return BRIDGE.getSpeedFor(npc);
}
public static <T> T getStaticObject(Class<?> clazz, String name) {
try {
return (T) getGetter(clazz, name).invoke();
} catch (Throwable e) {
e.printStackTrace();
}
return null;
}
public static float getStepHeight(org.bukkit.entity.Entity entity) {
return BRIDGE.getStepHeight(entity);
}
@ -770,8 +788,9 @@ public class NMS {
BRIDGE.positionInteractionText(player, interaction, mount, height);
}
public static void registerEntityClass(Class<?> clazz) {
BRIDGE.registerEntityClass(clazz);
public static void registerEntityClass(Class<?> clazz, Object type) {
// TODO: is this used outside of Citizens? could remove this abstraction
BRIDGE.registerEntityClass(clazz, type);
}
public static void remove(Entity entity) {

View File

@ -179,7 +179,7 @@ public interface NMSBridge {
public default void positionInteractionText(Player player, Entity interaction, Entity mount, double height) {
}
public void registerEntityClass(Class<?> clazz);
public void registerEntityClass(Class<?> clazz, Object type);
public void remove(Entity entity);

10
pom.xml
View File

@ -6,10 +6,10 @@
<packaging>pom</packaging>
<groupId>net.citizensnpcs</groupId>
<artifactId>citizens-parent</artifactId>
<version>2.0.35-SNAPSHOT</version>
<version>2.0.36-SNAPSHOT</version>
<properties>
<BUILD_NUMBER>Unknown</BUILD_NUMBER>
<CITIZENS_VERSION>2.0.35</CITIZENS_VERSION>
<CITIZENS_VERSION>2.0.36</CITIZENS_VERSION>
<maven-javadoc-plugin.version>3.6.3</maven-javadoc-plugin.version>
<maven-assembly-plugin.version>3.7.1</maven-assembly-plugin.version>
<maven-deploy-plugin.version>3.1.1</maven-deploy-plugin.version>
@ -43,7 +43,7 @@
<module>main</module>
<module>v1_19_R3</module>
<module>v1_20_R4</module>
<module>v1_21_R1</module>
<module>v1_21_R2</module>
<module>dist</module>
</modules>
</profile>
@ -63,7 +63,7 @@
<module>v1_18_R2</module>
<module>v1_19_R3</module>
<module>v1_20_R4</module>
<module>v1_21_R1</module>
<module>v1_21_R2</module>
<module>dist</module>
</modules>
</profile>
@ -71,7 +71,7 @@
<id>dev</id>
<modules>
<module>main</module>
<module>v1_21_R1</module>
<module>v1_21_R2</module>
<module>dist</module>
</modules>
</profile>

View File

@ -6,7 +6,7 @@
<parent>
<groupId>net.citizensnpcs</groupId>
<artifactId>citizens-parent</artifactId>
<version>2.0.35-SNAPSHOT</version>
<version>2.0.36-SNAPSHOT</version>
</parent>
<artifactId>citizens-v1_10_R1</artifactId>
<properties>

View File

@ -23,7 +23,7 @@ public abstract class MobEntityController extends AbstractEntityController {
private final Constructor<?> constructor;
protected MobEntityController(Class<?> clazz) {
super(clazz);
NMS.registerEntityClass(clazz, null);
this.constructor = getConstructor(clazz);
}

View File

@ -25,9 +25,7 @@ import net.minecraft.server.v1_10_R1.World;
import net.minecraft.server.v1_10_R1.WorldServer;
public class EggController extends AbstractEntityController {
public EggController() {
super(EntityEggNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {

View File

@ -29,9 +29,7 @@ import net.minecraft.server.v1_10_R1.World;
import net.minecraft.server.v1_10_R1.WorldServer;
public class FallingBlockController extends AbstractEntityController {
public FallingBlockController() {
super(EntityFallingBlockNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {

View File

@ -25,9 +25,6 @@ import net.minecraft.server.v1_10_R1.NBTTagCompound;
import net.minecraft.server.v1_10_R1.World;
public class ItemController extends AbstractEntityController {
public ItemController() {
super(EntityItemNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {

View File

@ -161,6 +161,7 @@ import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.trait.RotationTrait;
import net.citizensnpcs.trait.versioned.AreaEffectCloudTrait;
import net.citizensnpcs.trait.versioned.BoatTrait;
import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.EnderDragonTrait;
import net.citizensnpcs.trait.versioned.PolarBearTrait;
@ -722,6 +723,7 @@ public class NMSImpl implements NMSBridge {
@Override
public void load(CommandManager manager) {
registerTraitWithCommand(manager, BoatTrait.class);
registerTraitWithCommand(manager, AreaEffectCloudTrait.class);
registerTraitWithCommand(manager, EnderDragonTrait.class);
registerTraitWithCommand(manager, BossBarTrait.class);
@ -991,7 +993,7 @@ public class NMSImpl implements NMSBridge {
}
@Override
public void registerEntityClass(Class<?> clazz) {
public void registerEntityClass(Class<?> clazz, Object raw) {
if (ENTITY_CLASS_TO_INT == null || ENTITY_CLASS_TO_INT.containsKey(clazz))
return;
Class<?> search = clazz;

View File

@ -6,7 +6,7 @@
<parent>
<groupId>net.citizensnpcs</groupId>
<artifactId>citizens-parent</artifactId>
<version>2.0.35-SNAPSHOT</version>
<version>2.0.36-SNAPSHOT</version>
</parent>
<artifactId>citizens-v1_11_R1</artifactId>
<properties>

View File

@ -23,7 +23,7 @@ public abstract class MobEntityController extends AbstractEntityController {
private final Constructor<?> constructor;
protected MobEntityController(Class<?> clazz) {
super(clazz);
NMS.registerEntityClass(clazz, null);
this.constructor = getConstructor(clazz);
}

View File

@ -25,9 +25,7 @@ import net.minecraft.server.v1_11_R1.World;
import net.minecraft.server.v1_11_R1.WorldServer;
public class EggController extends AbstractEntityController {
public EggController() {
super(EntityEggNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {

View File

@ -30,9 +30,7 @@ import net.minecraft.server.v1_11_R1.World;
import net.minecraft.server.v1_11_R1.WorldServer;
public class FallingBlockController extends AbstractEntityController {
public FallingBlockController() {
super(EntityFallingBlockNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {

View File

@ -25,9 +25,6 @@ import net.minecraft.server.v1_11_R1.NBTTagCompound;
import net.minecraft.server.v1_11_R1.World;
public class ItemController extends AbstractEntityController {
public ItemController() {
super(EntityItemNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {

View File

@ -26,9 +26,6 @@ import net.minecraft.server.v1_11_R1.World;
import net.minecraft.server.v1_11_R1.WorldServer;
public class LlamaSpitController extends AbstractEntityController {
public LlamaSpitController() {
super(EntityLlamaSpitNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {

View File

@ -176,6 +176,7 @@ import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.trait.RotationTrait;
import net.citizensnpcs.trait.versioned.AreaEffectCloudTrait;
import net.citizensnpcs.trait.versioned.BoatTrait;
import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.EnderDragonTrait;
import net.citizensnpcs.trait.versioned.LlamaTrait;
@ -758,6 +759,7 @@ public class NMSImpl implements NMSBridge {
@Override
public void load(CommandManager manager) {
registerTraitWithCommand(manager, BoatTrait.class);
registerTraitWithCommand(manager, AreaEffectCloudTrait.class);
registerTraitWithCommand(manager, EnderDragonTrait.class);
registerTraitWithCommand(manager, BossBarTrait.class);
@ -1044,15 +1046,14 @@ public class NMSImpl implements NMSBridge {
}
@Override
public void registerEntityClass(Class<?> clazz) {
public void registerEntityClass(Class<?> clazz, Object raw) {
if (ENTITY_REGISTRY == null)
return;
Class<?> search = clazz;
while ((search = search.getSuperclass()) != null && Entity.class.isAssignableFrom(search)) {
MinecraftKey key = ENTITY_REGISTRY.b(search);
if (key == null) {
if (key == null)
continue;
}
int code = ENTITY_REGISTRY.a(search);
ENTITY_REGISTRY.put(code, key, (Class<? extends Entity>) clazz);
return;

View File

@ -6,7 +6,7 @@
<parent>
<groupId>net.citizensnpcs</groupId>
<artifactId>citizens-parent</artifactId>
<version>2.0.35-SNAPSHOT</version>
<version>2.0.36-SNAPSHOT</version>
</parent>
<artifactId>citizens-v1_12_R1</artifactId>
<properties>

View File

@ -23,7 +23,7 @@ public abstract class MobEntityController extends AbstractEntityController {
private final Constructor<?> constructor;
protected MobEntityController(Class<?> clazz) {
super(clazz);
NMS.registerEntityClass(clazz, null);
this.constructor = getConstructor(clazz);
}

View File

@ -26,9 +26,7 @@ import net.minecraft.server.v1_12_R1.World;
import net.minecraft.server.v1_12_R1.WorldServer;
public class EggController extends AbstractEntityController {
public EggController() {
super(EntityEggNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {

View File

@ -31,9 +31,7 @@ import net.minecraft.server.v1_12_R1.World;
import net.minecraft.server.v1_12_R1.WorldServer;
public class FallingBlockController extends AbstractEntityController {
public FallingBlockController() {
super(EntityFallingBlockNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {

View File

@ -26,9 +26,6 @@ import net.minecraft.server.v1_12_R1.NBTTagCompound;
import net.minecraft.server.v1_12_R1.World;
public class ItemController extends AbstractEntityController {
public ItemController() {
super(EntityItemNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {

View File

@ -27,9 +27,6 @@ import net.minecraft.server.v1_12_R1.World;
import net.minecraft.server.v1_12_R1.WorldServer;
public class LlamaSpitController extends AbstractEntityController {
public LlamaSpitController() {
super(EntityLlamaSpitNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {

View File

@ -179,6 +179,7 @@ import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.trait.RotationTrait;
import net.citizensnpcs.trait.versioned.AreaEffectCloudTrait;
import net.citizensnpcs.trait.versioned.BoatTrait;
import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.EnderDragonTrait;
import net.citizensnpcs.trait.versioned.LlamaTrait;
@ -760,6 +761,7 @@ public class NMSImpl implements NMSBridge {
@Override
public void load(CommandManager manager) {
registerTraitWithCommand(manager, BoatTrait.class);
registerTraitWithCommand(manager, AreaEffectCloudTrait.class);
registerTraitWithCommand(manager, EnderDragonTrait.class);
registerTraitWithCommand(manager, BossBarTrait.class);
@ -1052,15 +1054,14 @@ public class NMSImpl implements NMSBridge {
}
@Override
public void registerEntityClass(Class<?> clazz) {
public void registerEntityClass(Class<?> clazz, Object raw) {
if (ENTITY_REGISTRY == null)
return;
Class<?> search = clazz;
while ((search = search.getSuperclass()) != null && Entity.class.isAssignableFrom(search)) {
MinecraftKey key = ENTITY_REGISTRY.b(search);
if (key == null) {
if (key == null)
continue;
}
int code = ENTITY_REGISTRY.a(search);
ENTITY_REGISTRY.put(code, key, (Class<? extends Entity>) clazz);
return;

View File

@ -6,7 +6,7 @@
<parent>
<groupId>net.citizensnpcs</groupId>
<artifactId>citizens-parent</artifactId>
<version>2.0.35-SNAPSHOT</version>
<version>2.0.36-SNAPSHOT</version>
</parent>
<artifactId>citizens-v1_13_R2</artifactId>
<properties>

View File

@ -23,7 +23,7 @@ public abstract class MobEntityController extends AbstractEntityController {
private final Constructor<?> constructor;
protected MobEntityController(Class<?> clazz) {
super(clazz);
NMS.registerEntityClass(clazz, null);
this.constructor = getConstructor(clazz);
}

View File

@ -28,9 +28,7 @@ import net.minecraft.server.v1_13_R2.World;
import net.minecraft.server.v1_13_R2.WorldServer;
public class EggController extends AbstractEntityController {
public EggController() {
super(EntityEggNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {

View File

@ -33,9 +33,7 @@ import net.minecraft.server.v1_13_R2.World;
import net.minecraft.server.v1_13_R2.WorldServer;
public class FallingBlockController extends AbstractEntityController {
public FallingBlockController() {
super(EntityFallingBlockNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {

View File

@ -28,9 +28,6 @@ import net.minecraft.server.v1_13_R2.Tag;
import net.minecraft.server.v1_13_R2.World;
public class ItemController extends AbstractEntityController {
public ItemController() {
super(EntityItemNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {

View File

@ -29,9 +29,6 @@ import net.minecraft.server.v1_13_R2.World;
import net.minecraft.server.v1_13_R2.WorldServer;
public class LlamaSpitController extends AbstractEntityController {
public LlamaSpitController() {
super(EntityLlamaSpitNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {

View File

@ -189,6 +189,7 @@ import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.trait.RotationTrait;
import net.citizensnpcs.trait.versioned.AreaEffectCloudTrait;
import net.citizensnpcs.trait.versioned.BoatTrait;
import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.EnderDragonTrait;
import net.citizensnpcs.trait.versioned.LlamaTrait;
@ -790,6 +791,7 @@ public class NMSImpl implements NMSBridge {
@Override
public void load(CommandManager manager) {
registerTraitWithCommand(manager, BoatTrait.class);
registerTraitWithCommand(manager, AreaEffectCloudTrait.class);
registerTraitWithCommand(manager, EnderDragonTrait.class);
registerTraitWithCommand(manager, BossBarTrait.class);
@ -1094,12 +1096,12 @@ public class NMSImpl implements NMSBridge {
}
@Override
public void registerEntityClass(Class<?> clazz) {
public void registerEntityClass(Class<?> clazz, Object raw) {
if (ENTITY_REGISTRY == null)
return;
EntityTypes<?> type = (EntityTypes<?>) raw;
Class<?> search = clazz;
while ((search = search.getSuperclass()) != null && Entity.class.isAssignableFrom(search)) {
EntityTypes<?> type = ENTITY_REGISTRY.findType(search);
MinecraftKey key = ENTITY_REGISTRY.getKey(type);
if (key == null) {
continue;

View File

@ -6,7 +6,7 @@
<parent>
<groupId>net.citizensnpcs</groupId>
<artifactId>citizens-parent</artifactId>
<version>2.0.35-SNAPSHOT</version>
<version>2.0.36-SNAPSHOT</version>
</parent>
<artifactId>citizens-v1_14_R1</artifactId>
<properties>

View File

@ -25,8 +25,7 @@ import net.minecraft.server.v1_14_R1.World;
public abstract class MobEntityController extends AbstractEntityController {
private final Class<?> clazz;
protected MobEntityController(Class<?> clazz) {
super(clazz);
protected MobEntityController(Class<?> clazz) {NMS.registerEntityClass(clazz, NMSImpl.getEntityType(clazz));
this.clazz = clazz;
}

View File

@ -31,9 +31,7 @@ import net.minecraft.server.v1_14_R1.World;
import net.minecraft.server.v1_14_R1.WorldServer;
public class EggController extends AbstractEntityController {
public EggController() {
super(EntityEggNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {

View File

@ -35,9 +35,7 @@ import net.minecraft.server.v1_14_R1.World;
import net.minecraft.server.v1_14_R1.WorldServer;
public class FallingBlockController extends AbstractEntityController {
public FallingBlockController() {
super(EntityFallingBlockNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {

View File

@ -31,9 +31,6 @@ import net.minecraft.server.v1_14_R1.Vec3D;
import net.minecraft.server.v1_14_R1.World;
public class ItemController extends AbstractEntityController {
public ItemController() {
super(EntityItemNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {

View File

@ -32,15 +32,11 @@ import net.minecraft.server.v1_14_R1.World;
import net.minecraft.server.v1_14_R1.WorldServer;
public class LlamaSpitController extends AbstractEntityController {
public LlamaSpitController() {
super(EntityLlamaSpitNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {
WorldServer ws = ((CraftWorld) at.getWorld()).getHandle();
final EntityLlamaSpitNPC handle = new EntityLlamaSpitNPC(
NMSImpl.<EntityLlamaSpit> getEntityType(EntityLlamaSpitNPC.class), ws, npc);
final EntityLlamaSpitNPC handle = new EntityLlamaSpitNPC(EntityTypes.LLAMA_SPIT, ws, npc);
handle.setPositionRotation(at.getX(), at.getY(), at.getZ(), at.getPitch(), at.getYaw());
return handle.getBukkitEntity();
}

View File

@ -193,6 +193,7 @@ import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.trait.RotationTrait;
import net.citizensnpcs.trait.versioned.AreaEffectCloudTrait;
import net.citizensnpcs.trait.versioned.BoatTrait;
import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.CatTrait;
import net.citizensnpcs.trait.versioned.EnderDragonTrait;
@ -848,6 +849,7 @@ public class NMSImpl implements NMSBridge {
@Override
public void load(CommandManager manager) {
registerTraitWithCommand(manager, BoatTrait.class);
registerTraitWithCommand(manager, AreaEffectCloudTrait.class);
registerTraitWithCommand(manager, EnderDragonTrait.class);
registerTraitWithCommand(manager, BossBarTrait.class);
@ -1137,12 +1139,12 @@ public class NMSImpl implements NMSBridge {
}
@Override
public void registerEntityClass(Class<?> clazz) {
public void registerEntityClass(Class<?> clazz, Object raw) {
if (ENTITY_REGISTRY == null)
return;
EntityTypes<?> type = (EntityTypes<?>) raw;
Class<?> search = clazz;
while ((search = search.getSuperclass()) != null && Entity.class.isAssignableFrom(search)) {
EntityTypes<?> type = ENTITY_REGISTRY.findType(search);
MinecraftKey key = ENTITY_REGISTRY.getKey(type);
if (key == null || type == null) {
continue;

View File

@ -4,7 +4,7 @@
<parent>
<groupId>net.citizensnpcs</groupId>
<artifactId>citizens-parent</artifactId>
<version>2.0.35-SNAPSHOT</version>
<version>2.0.36-SNAPSHOT</version>
</parent>
<artifactId>citizens-v1_15_R1</artifactId>
<properties>

View File

@ -25,8 +25,7 @@ import net.minecraft.server.v1_15_R1.World;
public abstract class MobEntityController extends AbstractEntityController {
private final Class<?> clazz;
protected MobEntityController(Class<?> clazz) {
super(clazz);
protected MobEntityController(Class<?> clazz) {NMS.registerEntityClass(clazz, NMSImpl.getEntityType(clazz));
this.clazz = clazz;
}

View File

@ -32,9 +32,7 @@ import net.minecraft.server.v1_15_R1.World;
import net.minecraft.server.v1_15_R1.WorldServer;
public class EggController extends AbstractEntityController {
public EggController() {
super(EntityEggNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {

View File

@ -35,9 +35,7 @@ import net.minecraft.server.v1_15_R1.World;
import net.minecraft.server.v1_15_R1.WorldServer;
public class FallingBlockController extends AbstractEntityController {
public FallingBlockController() {
super(EntityFallingBlockNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {

View File

@ -31,9 +31,6 @@ import net.minecraft.server.v1_15_R1.Vec3D;
import net.minecraft.server.v1_15_R1.World;
public class ItemController extends AbstractEntityController {
public ItemController() {
super(EntityItemNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {

View File

@ -33,15 +33,11 @@ import net.minecraft.server.v1_15_R1.World;
import net.minecraft.server.v1_15_R1.WorldServer;
public class LlamaSpitController extends AbstractEntityController {
public LlamaSpitController() {
super(EntityLlamaSpitNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {
WorldServer ws = ((CraftWorld) at.getWorld()).getHandle();
final EntityLlamaSpitNPC handle = new EntityLlamaSpitNPC(
NMSImpl.<EntityLlamaSpit> getEntityType(EntityLlamaSpitNPC.class), ws, npc);
final EntityLlamaSpitNPC handle = new EntityLlamaSpitNPC(EntityTypes.LLAMA_SPIT, ws, npc);
handle.setPositionRotation(at.getX(), at.getY(), at.getZ(), at.getPitch(), at.getYaw());
return handle.getBukkitEntity();
}

View File

@ -195,6 +195,7 @@ import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.trait.RotationTrait;
import net.citizensnpcs.trait.versioned.AreaEffectCloudTrait;
import net.citizensnpcs.trait.versioned.BeeTrait;
import net.citizensnpcs.trait.versioned.BoatTrait;
import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.CatTrait;
import net.citizensnpcs.trait.versioned.EnderDragonTrait;
@ -863,6 +864,7 @@ public class NMSImpl implements NMSBridge {
@Override
public void load(CommandManager manager) {
registerTraitWithCommand(manager, BoatTrait.class);
registerTraitWithCommand(manager, AreaEffectCloudTrait.class);
registerTraitWithCommand(manager, EnderDragonTrait.class);
registerTraitWithCommand(manager, BeeTrait.class);
@ -1154,12 +1156,12 @@ public class NMSImpl implements NMSBridge {
}
@Override
public void registerEntityClass(Class<?> clazz) {
public void registerEntityClass(Class<?> clazz, Object raw) {
if (ENTITY_REGISTRY == null)
return;
EntityTypes<?> type = (EntityTypes<?>) raw;
Class<?> search = clazz;
while ((search = search.getSuperclass()) != null && Entity.class.isAssignableFrom(search)) {
EntityTypes<?> type = ENTITY_REGISTRY.findType(search);
MinecraftKey key = ENTITY_REGISTRY.getKey(type);
if (key == null || type == null) {
continue;

View File

@ -4,7 +4,7 @@
<parent>
<groupId>net.citizensnpcs</groupId>
<artifactId>citizens-parent</artifactId>
<version>2.0.35-SNAPSHOT</version>
<version>2.0.36-SNAPSHOT</version>
</parent>
<artifactId>citizens-v1_16_R3</artifactId>
<properties>

View File

@ -25,8 +25,7 @@ import net.minecraft.server.v1_16_R3.World;
public abstract class MobEntityController extends AbstractEntityController {
private final Class<?> clazz;
protected MobEntityController(Class<?> clazz) {
super(clazz);
protected MobEntityController(Class<?> clazz) {NMS.registerEntityClass(clazz, NMSImpl.getEntityType(clazz));
this.clazz = clazz;
}

View File

@ -32,9 +32,7 @@ import net.minecraft.server.v1_16_R3.World;
import net.minecraft.server.v1_16_R3.WorldServer;
public class EggController extends AbstractEntityController {
public EggController() {
super(EntityEggNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {

View File

@ -35,9 +35,7 @@ import net.minecraft.server.v1_16_R3.World;
import net.minecraft.server.v1_16_R3.WorldServer;
public class FallingBlockController extends AbstractEntityController {
public FallingBlockController() {
super(EntityFallingBlockNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {

View File

@ -31,9 +31,6 @@ import net.minecraft.server.v1_16_R3.Vec3D;
import net.minecraft.server.v1_16_R3.World;
public class ItemController extends AbstractEntityController {
public ItemController() {
super(EntityItemNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {

View File

@ -33,15 +33,11 @@ import net.minecraft.server.v1_16_R3.World;
import net.minecraft.server.v1_16_R3.WorldServer;
public class LlamaSpitController extends AbstractEntityController {
public LlamaSpitController() {
super(EntityLlamaSpitNPC.class);
}
@Override
protected Entity createEntity(Location at, NPC npc) {
WorldServer ws = ((CraftWorld) at.getWorld()).getHandle();
final EntityLlamaSpitNPC handle = new EntityLlamaSpitNPC(
NMSImpl.<EntityLlamaSpit> getEntityType(EntityLlamaSpitNPC.class), ws, npc);
final EntityLlamaSpitNPC handle = new EntityLlamaSpitNPC(EntityTypes.LLAMA_SPIT, ws, npc);
handle.setPositionRotation(at.getX(), at.getY(), at.getZ(), at.getPitch(), at.getYaw());
return handle.getBukkitEntity();
}

View File

@ -201,6 +201,7 @@ import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.trait.RotationTrait;
import net.citizensnpcs.trait.versioned.AreaEffectCloudTrait;
import net.citizensnpcs.trait.versioned.BeeTrait;
import net.citizensnpcs.trait.versioned.BoatTrait;
import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.CatTrait;
import net.citizensnpcs.trait.versioned.EnderDragonTrait;
@ -886,6 +887,7 @@ public class NMSImpl implements NMSBridge {
@Override
public void load(CommandManager manager) {
registerTraitWithCommand(manager, BoatTrait.class);
registerTraitWithCommand(manager, AreaEffectCloudTrait.class);
registerTraitWithCommand(manager, EnderDragonTrait.class);
registerTraitWithCommand(manager, BeeTrait.class);
@ -1177,12 +1179,12 @@ public class NMSImpl implements NMSBridge {
}
@Override
public void registerEntityClass(Class<?> clazz) {
public void registerEntityClass(Class<?> clazz, Object raw) {
if (ENTITY_REGISTRY == null)
return;
EntityTypes<?> type = (EntityTypes<?>) raw;
Class<?> search = clazz;
while ((search = search.getSuperclass()) != null && Entity.class.isAssignableFrom(search)) {
EntityTypes<?> type = ENTITY_REGISTRY.findType(search);
MinecraftKey key = ENTITY_REGISTRY.getKey(type);
if (key == null || type == null) {
continue;
@ -2367,7 +2369,8 @@ public class NMSImpl implements NMSBridge {
private static final MethodHandle NAVIGATION_S = NMS.getFinalSetter(NavigationAbstract.class, "s");
private static final MethodHandle NAVIGATION_WORLD_FIELD = NMS.getSetter(NavigationAbstract.class, "b");
public static final Location PACKET_CACHE_LOCATION = new Location(null, 0, 0, 0);
// Player.mobCounts: workaround for an issue which suppresses mobs being spawn near NPC players on Paper. Need to check for every update.
// Player.mobCounts: workaround for an issue which suppresses mobs being spawn near NPC players on Paper. Need to
// check for every update.
public static final MethodHandle PAPER_PLAYER_MOB_COUNTS = NMS.getGetter(EntityPlayer.class, "mobCounts", false);
private static final MethodHandle PLAYER_CHUNK_MAP_VIEW_DISTANCE_GETTER = NMS.getGetter(PlayerChunkMap.class,
"viewDistance");

View File

@ -6,7 +6,7 @@
<parent>
<groupId>net.citizensnpcs</groupId>
<artifactId>citizens-parent</artifactId>
<version>2.0.35-SNAPSHOT</version>
<version>2.0.36-SNAPSHOT</version>
</parent>
<artifactId>citizens-v1_17_R1</artifactId>
<properties>

View File

@ -15,6 +15,7 @@ import net.citizensnpcs.nms.v1_17_R1.util.NMSImpl;
import net.citizensnpcs.nms.v1_17_R1.util.PitchableLookControl;
import net.citizensnpcs.npc.AbstractEntityController;
import net.citizensnpcs.trait.ScoreboardTrait;
import net.citizensnpcs.util.NMS;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.entity.ai.control.LookControl;
@ -24,7 +25,7 @@ public abstract class MobEntityController extends AbstractEntityController {
private final Class<?> clazz;
protected MobEntityController(Class<?> clazz) {
super(clazz);
NMS.registerEntityClass(clazz, NMSImpl.getEntityType(clazz));
this.clazz = clazz;
}

View File

@ -31,9 +31,7 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class EggController extends AbstractEntityController {
public EggController() {
super(EntityEggNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {

View File

@ -35,9 +35,7 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class FallingBlockController extends AbstractEntityController {
public FallingBlockController() {
super(EntityFallingBlockNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {

View File

@ -32,9 +32,6 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class ItemController extends AbstractEntityController {
public ItemController() {
super(EntityItemNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {

View File

@ -32,15 +32,11 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class LlamaSpitController extends AbstractEntityController {
public LlamaSpitController() {
super(EntityLlamaSpitNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {
ServerLevel ws = ((CraftWorld) at.getWorld()).getHandle();
final EntityLlamaSpitNPC handle = new EntityLlamaSpitNPC(
NMSImpl.<LlamaSpit> getEntityType(EntityLlamaSpitNPC.class), ws, npc);
final EntityLlamaSpitNPC handle = new EntityLlamaSpitNPC(EntityType.LLAMA_SPIT, ws, npc);
handle.absMoveTo(at.getX(), at.getY(), at.getZ(), at.getPitch(), at.getYaw());
return handle.getBukkitEntity();
}

View File

@ -203,6 +203,7 @@ import net.citizensnpcs.trait.RotationTrait;
import net.citizensnpcs.trait.versioned.AreaEffectCloudTrait;
import net.citizensnpcs.trait.versioned.AxolotlTrait;
import net.citizensnpcs.trait.versioned.BeeTrait;
import net.citizensnpcs.trait.versioned.BoatTrait;
import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.CatTrait;
import net.citizensnpcs.trait.versioned.EnderDragonTrait;
@ -889,6 +890,7 @@ public class NMSImpl implements NMSBridge {
@Override
public void load(CommandManager manager) {
registerTraitWithCommand(manager, BoatTrait.class);
registerTraitWithCommand(manager, AreaEffectCloudTrait.class);
registerTraitWithCommand(manager, EnderDragonTrait.class);
registerTraitWithCommand(manager, AxolotlTrait.class);
@ -1183,12 +1185,12 @@ public class NMSImpl implements NMSBridge {
}
@Override
public void registerEntityClass(Class<?> clazz) {
public void registerEntityClass(Class<?> clazz, Object raw) {
if (ENTITY_REGISTRY == null)
return;
net.minecraft.world.entity.EntityType<?> type = (net.minecraft.world.entity.EntityType) raw;
Class<?> search = clazz;
while ((search = search.getSuperclass()) != null && Entity.class.isAssignableFrom(search)) {
net.minecraft.world.entity.EntityType<?> type = ENTITY_REGISTRY.findType(search);
ResourceLocation key = ENTITY_REGISTRY.getKey(type);
if (key == null || type == null) {
continue;
@ -2314,11 +2316,11 @@ public class NMSImpl implements NMSBridge {
private static final Map<Class<?>, net.minecraft.world.entity.EntityType<?>> CITIZENS_ENTITY_TYPES = Maps
.newHashMap();
private static final MethodHandle CRAFT_BOSSBAR_HANDLE_FIELD = NMS.getSetter(CraftBossBar.class, "handle");
private static EntityDataAccessor<Pose> DATA_POSE = null;
private static final EntityDataAccessor<Pose> DATA_POSE = NMS.getStaticObject(Entity.class, "ad");
private static final float DEFAULT_SPEED = 1F;
public static MethodHandle ENDERDRAGON_CHECK_WALLS = NMS.getFirstMethodHandleWithReturnType(EnderDragon.class, true,
boolean.class, AABB.class);
private static EntityDataAccessor<Boolean> ENDERMAN_CREEPY = null;
public static final MethodHandle ENDERDRAGON_CHECK_WALLS = NMS.getFirstMethodHandleWithReturnType(EnderDragon.class,
true, boolean.class, AABB.class);
private static final EntityDataAccessor<Boolean> ENDERMAN_CREEPY = NMS.getStaticObject(EnderMan.class, "bV");
private static final MethodHandle ENTITY_FISH_NUM_IN_SCHOOL = NMS.getSetter(AbstractSchoolingFish.class, "c");
private static final MethodHandle ENTITY_GET_SOUND_FALL = NMS.getMethodHandle(LivingEntity.class, "getSoundFall",
true, int.class);
@ -2341,17 +2343,19 @@ public class NMSImpl implements NMSBridge {
private static MethodHandle MOVE_CONTROLLER_MOVING = NMS.getSetter(MoveControl.class, "k");
private static final MethodHandle NAVIGATION_CREATE_PATHFINDER = NMS.getMethodHandle(PathNavigation.class, "a",
true, int.class);
private static MethodHandle NAVIGATION_PATH = NMS.getGetter(PathNavigation.class, "c");
private static final MethodHandle NAVIGATION_PATH = NMS.getGetter(PathNavigation.class, "c");
private static final MethodHandle NAVIGATION_PATHFINDER = NMS.getFinalSetter(PathNavigation.class, "t");
private static final MethodHandle NAVIGATION_WORLD_FIELD = NMS.getFirstSetter(PathNavigation.class, Level.class);
public static final Location PACKET_CACHE_LOCATION = new Location(null, 0, 0, 0);
// Player.mobCounts: workaround for an issue which suppresses mobs being spawn near NPC players on Paper. Need to check for every update.
// Player.mobCounts: workaround for an issue which suppresses mobs being spawn near NPC players on Paper. Need to
// check for every update.
public static final MethodHandle PAPER_PLAYER_MOB_COUNTS = NMS.getGetter(ServerPlayer.class, "mobCounts", false);
private static final MethodHandle PLAYER_CHUNK_MAP_VIEW_DISTANCE_GETTER = NMS.getGetter(ChunkMap.class, "J");
private static final MethodHandle PLAYER_CHUNK_MAP_VIEW_DISTANCE_SETTER = NMS.getSetter(ChunkMap.class, "J");
private static final MethodHandle PUFFERFISH_C = NMS.getSetter(Pufferfish.class, "bU");
private static final MethodHandle PUFFERFISH_D = NMS.getSetter(Pufferfish.class, "bT");
private static EntityDataAccessor<Integer> RABBIT_TYPE_DATAWATCHER = null;
private static final EntityDataAccessor<Integer> RABBIT_TYPE_DATAWATCHER = NMS.getFirstStaticObject(Rabbit.class,
EntityDataAccessor.class);
private static final Random RANDOM = Util.getFastRandom();
private static final MethodHandle SERVER_ENTITY_GETTER = NMS.getFirstGetter(TrackedEntity.class,
ServerEntity.class);
@ -2368,19 +2372,5 @@ public class NMSImpl implements NMSBridge {
} catch (Throwable e) {
Messaging.logTr(Messages.ERROR_GETTING_ID_MAPPING, e.getMessage());
}
try {
ENDERMAN_CREEPY = (EntityDataAccessor<Boolean>) NMS.getField(EnderMan.class, "bV").get(null);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
try {
RABBIT_TYPE_DATAWATCHER = (EntityDataAccessor<Integer>) NMS
.getFirstStaticGetter(Rabbit.class, EntityDataAccessor.class).invoke();
DATA_POSE = (EntityDataAccessor<Pose>) NMS.getGetter(Entity.class, "ad").invoke();
} catch (Throwable e) {
e.printStackTrace();
}
}
}

View File

@ -6,7 +6,7 @@
<parent>
<groupId>net.citizensnpcs</groupId>
<artifactId>citizens-parent</artifactId>
<version>2.0.35-SNAPSHOT</version>
<version>2.0.36-SNAPSHOT</version>
</parent>
<artifactId>citizens-v1_18_R2</artifactId>
<properties>

View File

@ -15,6 +15,7 @@ import net.citizensnpcs.nms.v1_18_R2.util.NMSImpl;
import net.citizensnpcs.nms.v1_18_R2.util.PitchableLookControl;
import net.citizensnpcs.npc.AbstractEntityController;
import net.citizensnpcs.trait.ScoreboardTrait;
import net.citizensnpcs.util.NMS;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.entity.ai.control.LookControl;
@ -24,7 +25,7 @@ public abstract class MobEntityController extends AbstractEntityController {
private final Class<?> clazz;
protected MobEntityController(Class<?> clazz) {
super(clazz);
NMS.registerEntityClass(clazz, NMSImpl.getEntityType(clazz));
this.clazz = clazz;
}

View File

@ -32,9 +32,7 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class EggController extends AbstractEntityController {
public EggController() {
super(EntityEggNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {

View File

@ -36,9 +36,7 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class FallingBlockController extends AbstractEntityController {
public FallingBlockController() {
super(EntityFallingBlockNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {

View File

@ -34,9 +34,6 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class ItemController extends AbstractEntityController {
public ItemController() {
super(EntityItemNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {

View File

@ -33,15 +33,11 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class LlamaSpitController extends AbstractEntityController {
public LlamaSpitController() {
super(EntityLlamaSpitNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {
ServerLevel ws = ((CraftWorld) at.getWorld()).getHandle();
final EntityLlamaSpitNPC handle = new EntityLlamaSpitNPC(
NMSImpl.<LlamaSpit> getEntityType(EntityLlamaSpitNPC.class), ws, npc);
final EntityLlamaSpitNPC handle = new EntityLlamaSpitNPC(EntityType.LLAMA_SPIT, ws, npc);
handle.absMoveTo(at.getX(), at.getY(), at.getZ(), at.getPitch(), at.getYaw());
return handle.getBukkitEntity();
}

View File

@ -204,6 +204,7 @@ import net.citizensnpcs.trait.RotationTrait;
import net.citizensnpcs.trait.versioned.AreaEffectCloudTrait;
import net.citizensnpcs.trait.versioned.AxolotlTrait;
import net.citizensnpcs.trait.versioned.BeeTrait;
import net.citizensnpcs.trait.versioned.BoatTrait;
import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.CatTrait;
import net.citizensnpcs.trait.versioned.EnderDragonTrait;
@ -896,6 +897,7 @@ public class NMSImpl implements NMSBridge {
@Override
public void load(CommandManager manager) {
registerTraitWithCommand(manager, BoatTrait.class);
registerTraitWithCommand(manager, AreaEffectCloudTrait.class);
registerTraitWithCommand(manager, EnderDragonTrait.class);
registerTraitWithCommand(manager, AxolotlTrait.class);
@ -1192,12 +1194,12 @@ public class NMSImpl implements NMSBridge {
}
@Override
public void registerEntityClass(Class<?> clazz) {
public void registerEntityClass(Class<?> clazz, Object raw) {
if (ENTITY_REGISTRY == null)
return;
net.minecraft.world.entity.EntityType<?> type = (net.minecraft.world.entity.EntityType) raw;
Class<?> search = clazz;
while ((search = search.getSuperclass()) != null && Entity.class.isAssignableFrom(search)) {
net.minecraft.world.entity.EntityType<?> type = ENTITY_REGISTRY.findType(search);
ResourceLocation key = ENTITY_REGISTRY.getKey(type);
if (key == null || type == null) {
continue;
@ -2358,11 +2360,11 @@ public class NMSImpl implements NMSBridge {
private static final Map<Class<?>, net.minecraft.world.entity.EntityType<?>> CITIZENS_ENTITY_TYPES = Maps
.newHashMap();
private static final MethodHandle CRAFT_BOSSBAR_HANDLE_FIELD = NMS.getSetter(CraftBossBar.class, "handle");
private static EntityDataAccessor<Pose> DATA_POSE = null;
private static final EntityDataAccessor<Pose> DATA_POSE = NMS.getStaticObject(Entity.class, "ad");
private static final float DEFAULT_SPEED = 1F;
public static MethodHandle ENDERDRAGON_CHECK_WALLS = NMS.getFirstMethodHandleWithReturnType(EnderDragon.class, true,
boolean.class, AABB.class);
private static EntityDataAccessor<Boolean> ENDERMAN_CREEPY = null;
private static final EntityDataAccessor<Boolean> ENDERMAN_CREEPY = NMS.getStaticObject(EnderMan.class, "bX");
private static final MethodHandle ENTITY_FISH_NUM_IN_SCHOOL = NMS.getFirstSetter(AbstractSchoolingFish.class,
int.class);
private static final MethodHandle ENTITY_GET_SOUND_FALL = NMS.getMethodHandle(LivingEntity.class, "c", true,
@ -2394,7 +2396,8 @@ public class NMSImpl implements NMSBridge {
private static final MethodHandle NAVIGATION_PATHFINDER = NMS.getFinalSetter(PathNavigation.class, "t");
private static final MethodHandle NAVIGATION_WORLD_FIELD = NMS.getFirstSetter(PathNavigation.class, Level.class);
public static final Location PACKET_CACHE_LOCATION = new Location(null, 0, 0, 0);
// Player.mobCounts: workaround for an issue which suppresses mobs being spawn near NPC players on Paper. Need to check for every update.
// Player.mobCounts: workaround for an issue which suppresses mobs being spawn near NPC players on Paper. Need to
// check for every update.
public static final MethodHandle PAPER_PLAYER_MOB_COUNTS = NMS.getGetter(ServerPlayer.class, "mobCounts", false);
private static final MethodHandle PLAYER_CHUNK_MAP_VIEW_DISTANCE_GETTER = NMS.getGetter(ChunkMap.class, "N");
private static final MethodHandle PLAYER_CHUNK_MAP_VIEW_DISTANCE_SETTER = NMS.getSetter(ChunkMap.class, "N");
@ -2402,7 +2405,8 @@ public class NMSImpl implements NMSBridge {
private static MethodHandle PORTAL_ENTRANCE_POS_SETTER = NMS.getSetter(Entity.class, "ai");
private static final MethodHandle PUFFERFISH_C = NMS.getSetter(Pufferfish.class, "bV");
private static final MethodHandle PUFFERFISH_D = NMS.getSetter(Pufferfish.class, "bW");
private static EntityDataAccessor<Integer> RABBIT_TYPE_DATAWATCHER = null;
private static final EntityDataAccessor<Integer> RABBIT_TYPE_DATAWATCHER = NMS.getFirstStaticObject(Rabbit.class,
EntityDataAccessor.class);
private static final Random RANDOM = Util.getFastRandom();
private static final MethodHandle SERVER_ENTITY_GETTER = NMS.getFirstGetter(TrackedEntity.class,
ServerEntity.class);
@ -2419,19 +2423,5 @@ public class NMSImpl implements NMSBridge {
} catch (Throwable e) {
Messaging.logTr(Messages.ERROR_GETTING_ID_MAPPING, e.getMessage());
}
try {
ENDERMAN_CREEPY = (EntityDataAccessor<Boolean>) NMS.getField(EnderMan.class, "bX").get(null);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
try {
RABBIT_TYPE_DATAWATCHER = (EntityDataAccessor<Integer>) NMS
.getFirstStaticGetter(Rabbit.class, EntityDataAccessor.class).invoke();
DATA_POSE = (EntityDataAccessor<Pose>) NMS.getGetter(Entity.class, "ad").invoke();
} catch (Throwable e) {
e.printStackTrace();
}
}
}

View File

@ -4,7 +4,7 @@
<parent>
<groupId>net.citizensnpcs</groupId>
<artifactId>citizens-parent</artifactId>
<version>2.0.35-SNAPSHOT</version>
<version>2.0.36-SNAPSHOT</version>
</parent>
<artifactId>citizens-v1_19_R3</artifactId>
<properties>

View File

@ -15,6 +15,7 @@ import net.citizensnpcs.nms.v1_19_R3.util.NMSImpl;
import net.citizensnpcs.nms.v1_19_R3.util.PitchableLookControl;
import net.citizensnpcs.npc.AbstractEntityController;
import net.citizensnpcs.trait.ScoreboardTrait;
import net.citizensnpcs.util.NMS;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.entity.ai.control.LookControl;
@ -24,7 +25,7 @@ public abstract class MobEntityController extends AbstractEntityController {
private final Class<?> clazz;
protected MobEntityController(Class<?> clazz) {
super(clazz);
NMS.registerEntityClass(clazz, NMSImpl.getEntityType(clazz));
this.clazz = clazz;
}

View File

@ -32,9 +32,7 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class EggController extends AbstractEntityController {
public EggController() {
super(EntityEggNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {

View File

@ -35,9 +35,7 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class FallingBlockController extends AbstractEntityController {
public FallingBlockController() {
super(EntityFallingBlockNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {

View File

@ -34,9 +34,6 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class ItemController extends AbstractEntityController {
public ItemController() {
super(EntityItemNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {

View File

@ -33,15 +33,11 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class LlamaSpitController extends AbstractEntityController {
public LlamaSpitController() {
super(EntityLlamaSpitNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {
ServerLevel ws = ((CraftWorld) at.getWorld()).getHandle();
final EntityLlamaSpitNPC handle = new EntityLlamaSpitNPC(
NMSImpl.<LlamaSpit> getEntityType(EntityLlamaSpitNPC.class), ws, npc);
final EntityLlamaSpitNPC handle = new EntityLlamaSpitNPC(EntityType.LLAMA_SPIT, ws, npc);
handle.absMoveTo(at.getX(), at.getY(), at.getZ(), at.getPitch(), at.getYaw());
return handle.getBukkitEntity();
}

View File

@ -224,6 +224,7 @@ import net.citizensnpcs.trait.versioned.AllayTrait;
import net.citizensnpcs.trait.versioned.AreaEffectCloudTrait;
import net.citizensnpcs.trait.versioned.AxolotlTrait;
import net.citizensnpcs.trait.versioned.BeeTrait;
import net.citizensnpcs.trait.versioned.BoatTrait;
import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.CamelTrait;
import net.citizensnpcs.trait.versioned.CamelTrait.CamelPose;
@ -945,6 +946,7 @@ public class NMSImpl implements NMSBridge {
@Override
public void load(CommandManager manager) {
registerTraitWithCommand(manager, BoatTrait.class);
registerTraitWithCommand(manager, AreaEffectCloudTrait.class);
registerTraitWithCommand(manager, EnderDragonTrait.class);
registerTraitWithCommand(manager, AllayTrait.class);
@ -1331,12 +1333,12 @@ public class NMSImpl implements NMSBridge {
}
@Override
public void registerEntityClass(Class<?> clazz) {
public void registerEntityClass(Class<?> clazz, Object raw) {
if (ENTITY_REGISTRY == null)
return;
net.minecraft.world.entity.EntityType<?> type = (net.minecraft.world.entity.EntityType) raw;
Class<?> search = clazz;
while ((search = search.getSuperclass()) != null && Entity.class.isAssignableFrom(search)) {
net.minecraft.world.entity.EntityType<?> type = ENTITY_REGISTRY.findType(search);
ResourceLocation key = ENTITY_REGISTRY.getKey(type);
if (key == null || type == null) {
continue;
@ -2577,7 +2579,6 @@ public class NMSImpl implements NMSBridge {
}
private static final MethodHandle ATTRIBUTE_PROVIDER_MAP = NMS.getFirstGetter(AttributeSupplier.class, Map.class);
private static final MethodHandle ATTRIBUTE_PROVIDER_MAP_SETTER = NMS.getFirstFinalSetter(AttributeSupplier.class,
Map.class);
private static final MethodHandle ATTRIBUTE_SUPPLIER = NMS.getFirstGetter(AttributeMap.class,
@ -2594,15 +2595,15 @@ public class NMSImpl implements NMSBridge {
.newHashMap();
private static final MethodHandle CRAFT_BOSSBAR_HANDLE_FIELD = NMS.getFirstSetter(CraftBossBar.class,
ServerBossEvent.class);
private static EntityDataAccessor<Boolean> DATA_NAME_VISIBLE = null;
private static EntityDataAccessor<Pose> DATA_POSE = null;
private static final EntityDataAccessor<Boolean> DATA_NAME_VISIBLE = NMS.getStaticObject(Entity.class, "aS");
private static final EntityDataAccessor<Pose> DATA_POSE = NMS.getStaticObject(Entity.class, "ar");
private static final float DEFAULT_SPEED = 1F;
public static MethodHandle ENDERDRAGON_CHECK_WALLS = NMS.getFirstMethodHandleWithReturnType(EnderDragon.class, true,
boolean.class, AABB.class);
private static EntityDataAccessor<Boolean> ENDERMAN_CREEPY = null;
public static final MethodHandle ENDERDRAGON_CHECK_WALLS = NMS.getFirstMethodHandleWithReturnType(EnderDragon.class,
true, boolean.class, AABB.class);
private static final EntityDataAccessor<Boolean> ENDERMAN_CREEPY = NMS.getStaticObject(EnderMan.class, "bU");
private static final MethodHandle ENTITY_FISH_NUM_IN_SCHOOL = NMS.getFirstSetter(AbstractSchoolingFish.class,
int.class);
private static MethodHandle ENTITY_NAVIGATION = NMS.getFirstSetter(Mob.class, PathNavigation.class);
private static final MethodHandle ENTITY_NAVIGATION = NMS.getFirstSetter(Mob.class, PathNavigation.class);
private static CustomEntityRegistry ENTITY_REGISTRY;
private static MethodHandle ENTITY_REGISTRY_SETTER;
private static final MethodHandle FALLING_BLOCK_STATE_SETTER = NMS.getFirstSetter(FallingBlockEntity.class,
@ -2619,8 +2620,8 @@ public class NMSImpl implements NMSBridge {
private static final MethodHandle HEAD_HEIGHT = NMS.getSetter(Entity.class, "bf");
private static final MethodHandle HEAD_HEIGHT_METHOD = NMS.getFirstMethodHandle(Entity.class, true, Pose.class,
EntityDimensions.class);
private static EntityDataAccessor<Float> INTERACTION_HEIGHT = null;
private static EntityDataAccessor<Float> INTERACTION_WIDTH = null;
private static final EntityDataAccessor<Float> INTERACTION_HEIGHT = NMS.getStaticObject(Interaction.class, "d");
private static final EntityDataAccessor<Float> INTERACTION_WIDTH = NMS.getStaticObject(Interaction.class, "c");
private static final MethodHandle JUMP_FIELD = NMS.getGetter(LivingEntity.class, "bi");
private static final MethodHandle LOOK_CONTROL_SETTER = NMS.getFirstSetter(Mob.class, LookControl.class);
private static final MethodHandle MAKE_REQUEST = NMS.getMethodHandle(YggdrasilAuthenticationService.class,
@ -2632,7 +2633,8 @@ public class NMSImpl implements NMSBridge {
private static final MethodHandle NAVIGATION_PATHFINDER = NMS.getFirstFinalSetter(PathNavigation.class,
PathFinder.class);
private static final MethodHandle NAVIGATION_WORLD_FIELD = NMS.getFirstSetter(PathNavigation.class, Level.class);
// Player.mobCounts: workaround for an issue which suppresses mobs being spawn near NPC players on Paper. Need to check for every update.
// Player.mobCounts: workaround for an issue which suppresses mobs being spawn near NPC players on Paper. Need to
// check for every update.
public static final MethodHandle PAPER_PLAYER_MOB_COUNTS = NMS.getGetter(ServerPlayer.class, "mobCounts", false);
private static final MethodHandle PLAYER_CHUNK_MAP_VIEW_DISTANCE_GETTER = NMS.getFirstGetter(ChunkMap.class,
int.class);
@ -2641,13 +2643,14 @@ public class NMSImpl implements NMSBridge {
private static final MethodHandle PLAYER_INFO_ENTRIES_LIST = NMS
.getFirstFinalSetter(ClientboundPlayerInfoUpdatePacket.class, List.class);
private static final MethodHandle PLAYERINFO_ENTRIES = PLAYER_INFO_ENTRIES_LIST;
private static MethodHandle PORTAL_ENTRANCE_POS_GETTER = NMS.getGetter(Entity.class, "aw");
private static MethodHandle PORTAL_ENTRANCE_POS_SETTER = NMS.getSetter(Entity.class, "aw");
private static final MethodHandle PORTAL_ENTRANCE_POS_GETTER = NMS.getGetter(Entity.class, "aw");
private static final MethodHandle PORTAL_ENTRANCE_POS_SETTER = NMS.getSetter(Entity.class, "aw");
private static final MethodHandle POSITION_CODEC_GETTER = NMS.getFirstGetter(ServerEntity.class,
VecDeltaCodec.class);
private static final MethodHandle PUFFERFISH_C = NMS.getSetter(Pufferfish.class, "bS");
private static final MethodHandle PUFFERFISH_D = NMS.getSetter(Pufferfish.class, "bT");
private static EntityDataAccessor<Integer> RABBIT_TYPE_DATAWATCHER = null;
private static final EntityDataAccessor<Integer> RABBIT_TYPE_DATAWATCHER = NMS.getFirstStaticObject(Rabbit.class,
EntityDataAccessor.class);
private static final Random RANDOM = Util.getFastRandom();
private static final MethodHandle SERVER_ENTITY_GETTER = NMS.getFirstGetter(TrackedEntity.class,
ServerEntity.class);
@ -2665,33 +2668,5 @@ public class NMSImpl implements NMSBridge {
Messaging.logTr(Messages.ERROR_GETTING_ID_MAPPING, e.getMessage());
e.printStackTrace();
}
try {
// Middle one
ENDERMAN_CREEPY = (EntityDataAccessor<Boolean>) NMS.getField(EnderMan.class, "bU").get(null);
} catch (Exception e) {
e.printStackTrace();
}
try {
RABBIT_TYPE_DATAWATCHER = (EntityDataAccessor<Integer>) NMS
.getFirstStaticGetter(Rabbit.class, EntityDataAccessor.class).invoke();
} catch (Throwable e) {
e.printStackTrace();
}
try {
INTERACTION_HEIGHT = (EntityDataAccessor<Float>) NMS.getGetter(Interaction.class, "d").invoke();
} catch (Throwable e) {
e.printStackTrace();
}
try {
INTERACTION_WIDTH = (EntityDataAccessor<Float>) NMS.getGetter(Interaction.class, "c").invoke();
} catch (Throwable e) {
e.printStackTrace();
}
try {
DATA_POSE = (EntityDataAccessor<Pose>) NMS.getGetter(Entity.class, "ar").invoke();
DATA_NAME_VISIBLE = (EntityDataAccessor<Boolean>) NMS.getGetter(Entity.class, "aS").invoke();
} catch (Throwable e) {
e.printStackTrace();
}
}
}

View File

@ -4,7 +4,7 @@
<parent>
<groupId>net.citizensnpcs</groupId>
<artifactId>citizens-parent</artifactId>
<version>2.0.35-SNAPSHOT</version>
<version>2.0.36-SNAPSHOT</version>
</parent>
<artifactId>citizens-v1_20_R4</artifactId>
<properties>

View File

@ -15,6 +15,7 @@ import net.citizensnpcs.nms.v1_20_R4.util.NMSImpl;
import net.citizensnpcs.nms.v1_20_R4.util.PitchableLookControl;
import net.citizensnpcs.npc.AbstractEntityController;
import net.citizensnpcs.trait.ScoreboardTrait;
import net.citizensnpcs.util.NMS;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.entity.ai.control.LookControl;
@ -24,7 +25,7 @@ public abstract class MobEntityController extends AbstractEntityController {
private final Class<?> clazz;
protected MobEntityController(Class<?> clazz) {
super(clazz);
NMS.registerEntityClass(clazz, NMSImpl.getEntityType(clazz));
this.clazz = clazz;
}

View File

@ -30,10 +30,6 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class EggController extends AbstractEntityController {
public EggController() {
super(EntityEggNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {
ServerLevel ws = ((CraftWorld) at.getWorld()).getHandle();

View File

@ -33,9 +33,7 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class FallingBlockController extends AbstractEntityController {
public FallingBlockController() {
super(EntityFallingBlockNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {

View File

@ -32,9 +32,6 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class ItemController extends AbstractEntityController {
public ItemController() {
super(EntityItemNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {

View File

@ -31,15 +31,10 @@ import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class LlamaSpitController extends AbstractEntityController {
public LlamaSpitController() {
super(EntityLlamaSpitNPC.class);
}
@Override
protected org.bukkit.entity.Entity createEntity(Location at, NPC npc) {
ServerLevel ws = ((CraftWorld) at.getWorld()).getHandle();
final EntityLlamaSpitNPC handle = new EntityLlamaSpitNPC(
NMSImpl.<LlamaSpit> getEntityType(EntityLlamaSpitNPC.class), ws, npc);
final EntityLlamaSpitNPC handle = new EntityLlamaSpitNPC(EntityType.LLAMA_SPIT, ws, npc);
handle.absMoveTo(at.getX(), at.getY(), at.getZ(), at.getPitch(), at.getYaw());
return handle.getBukkitEntity();
}

View File

@ -228,6 +228,7 @@ import net.citizensnpcs.trait.versioned.ArmadilloTrait;
import net.citizensnpcs.trait.versioned.ArmadilloTrait.ArmadilloState;
import net.citizensnpcs.trait.versioned.AxolotlTrait;
import net.citizensnpcs.trait.versioned.BeeTrait;
import net.citizensnpcs.trait.versioned.BoatTrait;
import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.CamelTrait;
import net.citizensnpcs.trait.versioned.CamelTrait.CamelPose;
@ -968,6 +969,7 @@ public class NMSImpl implements NMSBridge {
@Override
public void load(CommandManager manager) {
registerTraitWithCommand(manager, BoatTrait.class);
registerTraitWithCommand(manager, AreaEffectCloudTrait.class);
registerTraitWithCommand(manager, EnderDragonTrait.class);
registerTraitWithCommand(manager, AllayTrait.class);
@ -1363,16 +1365,16 @@ public class NMSImpl implements NMSBridge {
}
@Override
public void registerEntityClass(Class<?> clazz) {
public void registerEntityClass(Class<?> clazz, Object raw) {
if (ENTITY_REGISTRY == null)
return;
net.minecraft.world.entity.EntityType<?> type = (net.minecraft.world.entity.EntityType) raw;
Class<?> search = clazz;
while ((search = search.getSuperclass()) != null && Entity.class.isAssignableFrom(search)) {
net.minecraft.world.entity.EntityType<?> type = ENTITY_REGISTRY.findType(search);
ResourceLocation key = ENTITY_REGISTRY.getKey(type);
if (key == null || type == null) {
if (key == null || type == null)
continue;
}
CITIZENS_ENTITY_TYPES.put(clazz, type);
int code = ENTITY_REGISTRY.getId(type);
ENTITY_REGISTRY.put(code, key, type);
@ -2661,12 +2663,9 @@ public class NMSImpl implements NMSBridge {
}
private static final MethodHandle ARMADILLO_SCUTE_TIME = NMS.getSetter(Armadillo.class, "cj");
private static final MethodHandle ATTRIBUTE_PROVIDER_MAP = NMS.getFirstGetter(AttributeSupplier.class, Map.class);
private static final MethodHandle ATTRIBUTE_PROVIDER_MAP_SETTER = NMS.getFirstFinalSetter(AttributeSupplier.class,
Map.class);
private static final MethodHandle ATTRIBUTE_SUPPLIER = NMS.getFirstGetter(AttributeMap.class,
AttributeSupplier.class);
private static final MethodHandle AVAILABLE_BEHAVIORS_BY_PRIORITY = NMS.getGetter(Brain.class, "f");
@ -2683,15 +2682,15 @@ public class NMSImpl implements NMSBridge {
public static final MethodHandle CONNECTION_PACKET_LISTENER = NMS.getSetter(Connection.class, "q");
private static final MethodHandle CRAFT_BOSSBAR_HANDLE_FIELD = NMS.getFirstSetter(CraftBossBar.class,
ServerBossEvent.class);
private static EntityDataAccessor<Boolean> DATA_NAME_VISIBLE = null;
private static EntityDataAccessor<Pose> DATA_POSE = null;
private static final EntityDataAccessor<Boolean> DATA_NAME_VISIBLE = NMS.getStaticObject(Entity.class, "aT");
private static final EntityDataAccessor<Pose> DATA_POSE = NMS.getStaticObject(Entity.class, "at");
private static final float DEFAULT_SPEED = 1F;
public static final MethodHandle ENDERDRAGON_CHECK_WALLS = NMS.getFirstMethodHandleWithReturnType(EnderDragon.class,
true, boolean.class, AABB.class);
public static final MethodHandle ENDERDRAGON_HURT = NMS.getMethodHandle(EnderDragon.class, "c", true, List.class);
public static final MethodHandle ENDERDRAGON_KNOCKBACK = NMS.getMethodHandle(EnderDragon.class, "b", true,
List.class);
private static EntityDataAccessor<Boolean> ENDERMAN_CREEPY = null;
private static final EntityDataAccessor<Boolean> ENDERMAN_CREEPY = NMS.getStaticObject(EnderMan.class, "ca");
private static final MethodHandle ENTITY_FISH_NUM_IN_SCHOOL = NMS.getFirstSetter(AbstractSchoolingFish.class,
int.class);
private static MethodHandle ENTITY_NAVIGATION = NMS.getFirstSetter(Mob.class, PathNavigation.class);
@ -2709,8 +2708,8 @@ public class NMSImpl implements NMSBridge {
boolean.class);
private static final Location FROM_LOCATION = new Location(null, 0, 0, 0);
private static final MethodHandle HEAD_HEIGHT = NMS.getSetter(Entity.class, "bg");
private static EntityDataAccessor<Float> INTERACTION_HEIGHT = null;
private static EntityDataAccessor<Float> INTERACTION_WIDTH = null;
private static final EntityDataAccessor<Float> INTERACTION_HEIGHT = NMS.getStaticObject(Interaction.class, "d");
private static final EntityDataAccessor<Float> INTERACTION_WIDTH = NMS.getStaticObject(Interaction.class, "c");
private static final MethodHandle JUMP_FIELD = NMS.getGetter(LivingEntity.class, "bn");
private static final MethodHandle LOOK_CONTROL_SETTER = NMS.getFirstSetter(Mob.class, LookControl.class);
private static MethodHandle META_COMPOUND_TAG;
@ -2723,7 +2722,8 @@ public class NMSImpl implements NMSBridge {
private static final MethodHandle NAVIGATION_PATHFINDER = NMS.getFirstFinalSetter(PathNavigation.class,
PathFinder.class);
private static final MethodHandle NAVIGATION_WORLD_FIELD = NMS.getFirstSetter(PathNavigation.class, Level.class);
// Player.mobCounts: workaround for an issue which suppresses mobs being spawn near NPC players on Paper. Need to check for every update.
// Player.mobCounts: workaround for an issue which suppresses mobs being spawn near NPC players on Paper. Need to
// check for every update.
public static final MethodHandle PAPER_PLAYER_MOB_COUNTS = NMS.getGetter(ServerPlayer.class, "mobCounts", false);
private static final MethodHandle PLAYER_INFO_ENTRIES_LIST = NMS
@ -2735,7 +2735,8 @@ public class NMSImpl implements NMSBridge {
VecDeltaCodec.class);
private static final MethodHandle PUFFERFISH_DEFLATE = NMS.getSetter(Pufferfish.class, "bZ");
private static final MethodHandle PUFFERFISH_INFLATE = NMS.getSetter(Pufferfish.class, "bY");
public static EntityDataAccessor<Integer> RABBIT_TYPE_DATAWATCHER = null;
public static EntityDataAccessor<Integer> RABBIT_TYPE_DATAWATCHER = NMS.getFirstStaticObject(Rabbit.class,
EntityDataAccessor.class);
private static final Random RANDOM = Util.getFastRandom();
private static final MethodHandle SERVER_ENTITY_GETTER = NMS.getFirstGetter(TrackedEntity.class,
ServerEntity.class);
@ -2753,28 +2754,5 @@ public class NMSImpl implements NMSBridge {
} catch (Throwable e) {
Messaging.logTr(Messages.ERROR_GETTING_ID_MAPPING, e.getMessage());
}
try {
// Middle one
ENDERMAN_CREEPY = (EntityDataAccessor<Boolean>) NMS.getField(EnderMan.class, "ca").get(null);
} catch (Exception e) {
}
try {
RABBIT_TYPE_DATAWATCHER = (EntityDataAccessor<Integer>) NMS
.getFirstStaticGetter(Rabbit.class, EntityDataAccessor.class).invoke();
} catch (Throwable e) {
}
try {
INTERACTION_HEIGHT = (EntityDataAccessor<Float>) NMS.getGetter(Interaction.class, "d").invoke();
} catch (Throwable e) {
}
try {
INTERACTION_WIDTH = (EntityDataAccessor<Float>) NMS.getGetter(Interaction.class, "c").invoke();
} catch (Throwable e) {
}
try {
DATA_POSE = (EntityDataAccessor<Pose>) NMS.getGetter(Entity.class, "at").invoke();
DATA_NAME_VISIBLE = (EntityDataAccessor<Boolean>) NMS.getGetter(Entity.class, "aT").invoke();
} catch (Throwable e) {
}
}
}

View File

@ -1,481 +0,0 @@
package net.citizensnpcs.nms.v1_21_R1.util;
import java.lang.invoke.MethodHandle;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.Set;
import java.util.function.Supplier;
import java.util.stream.Stream;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.Maps;
import com.mojang.datafixers.util.Pair;
import com.mojang.serialization.Lifecycle;
import net.citizensnpcs.util.NMS;
import net.minecraft.core.DefaultedMappedRegistry;
import net.minecraft.core.DefaultedRegistry;
import net.minecraft.core.Holder;
import net.minecraft.core.Holder.Reference;
import net.minecraft.core.HolderGetter;
import net.minecraft.core.HolderLookup.RegistryLookup;
import net.minecraft.core.HolderOwner;
import net.minecraft.core.HolderSet.Named;
import net.minecraft.core.MappedRegistry;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey;
import net.minecraft.util.RandomSource;
import net.minecraft.world.entity.AreaEffectCloud;
import net.minecraft.world.entity.Display;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.ExperienceOrb;
import net.minecraft.world.entity.GlowSquid;
import net.minecraft.world.entity.Interaction;
import net.minecraft.world.entity.LightningBolt;
import net.minecraft.world.entity.Marker;
import net.minecraft.world.entity.OminousItemSpawner;
import net.minecraft.world.entity.ambient.Bat;
import net.minecraft.world.entity.animal.Bee;
import net.minecraft.world.entity.animal.Cat;
import net.minecraft.world.entity.animal.Chicken;
import net.minecraft.world.entity.animal.Cod;
import net.minecraft.world.entity.animal.Cow;
import net.minecraft.world.entity.animal.Dolphin;
import net.minecraft.world.entity.animal.Fox;
import net.minecraft.world.entity.animal.IronGolem;
import net.minecraft.world.entity.animal.MushroomCow;
import net.minecraft.world.entity.animal.Ocelot;
import net.minecraft.world.entity.animal.Panda;
import net.minecraft.world.entity.animal.Parrot;
import net.minecraft.world.entity.animal.Pig;
import net.minecraft.world.entity.animal.PolarBear;
import net.minecraft.world.entity.animal.Pufferfish;
import net.minecraft.world.entity.animal.Rabbit;
import net.minecraft.world.entity.animal.Salmon;
import net.minecraft.world.entity.animal.Sheep;
import net.minecraft.world.entity.animal.SnowGolem;
import net.minecraft.world.entity.animal.Squid;
import net.minecraft.world.entity.animal.TropicalFish;
import net.minecraft.world.entity.animal.Turtle;
import net.minecraft.world.entity.animal.Wolf;
import net.minecraft.world.entity.animal.allay.Allay;
import net.minecraft.world.entity.animal.armadillo.Armadillo;
import net.minecraft.world.entity.animal.axolotl.Axolotl;
import net.minecraft.world.entity.animal.camel.Camel;
import net.minecraft.world.entity.animal.frog.Frog;
import net.minecraft.world.entity.animal.frog.Tadpole;
import net.minecraft.world.entity.animal.goat.Goat;
import net.minecraft.world.entity.animal.horse.Donkey;
import net.minecraft.world.entity.animal.horse.Horse;
import net.minecraft.world.entity.animal.horse.Llama;
import net.minecraft.world.entity.animal.horse.Mule;
import net.minecraft.world.entity.animal.horse.SkeletonHorse;
import net.minecraft.world.entity.animal.horse.TraderLlama;
import net.minecraft.world.entity.animal.horse.ZombieHorse;
import net.minecraft.world.entity.animal.sniffer.Sniffer;
import net.minecraft.world.entity.boss.enderdragon.EndCrystal;
import net.minecraft.world.entity.boss.enderdragon.EnderDragon;
import net.minecraft.world.entity.boss.wither.WitherBoss;
import net.minecraft.world.entity.decoration.ArmorStand;
import net.minecraft.world.entity.decoration.GlowItemFrame;
import net.minecraft.world.entity.decoration.ItemFrame;
import net.minecraft.world.entity.decoration.LeashFenceKnotEntity;
import net.minecraft.world.entity.decoration.Painting;
import net.minecraft.world.entity.item.FallingBlockEntity;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.entity.item.PrimedTnt;
import net.minecraft.world.entity.monster.Blaze;
import net.minecraft.world.entity.monster.Bogged;
import net.minecraft.world.entity.monster.CaveSpider;
import net.minecraft.world.entity.monster.Creeper;
import net.minecraft.world.entity.monster.Drowned;
import net.minecraft.world.entity.monster.ElderGuardian;
import net.minecraft.world.entity.monster.EnderMan;
import net.minecraft.world.entity.monster.Endermite;
import net.minecraft.world.entity.monster.Evoker;
import net.minecraft.world.entity.monster.Ghast;
import net.minecraft.world.entity.monster.Giant;
import net.minecraft.world.entity.monster.Guardian;
import net.minecraft.world.entity.monster.Husk;
import net.minecraft.world.entity.monster.Illusioner;
import net.minecraft.world.entity.monster.MagmaCube;
import net.minecraft.world.entity.monster.Phantom;
import net.minecraft.world.entity.monster.Pillager;
import net.minecraft.world.entity.monster.Ravager;
import net.minecraft.world.entity.monster.Shulker;
import net.minecraft.world.entity.monster.Silverfish;
import net.minecraft.world.entity.monster.Skeleton;
import net.minecraft.world.entity.monster.Slime;
import net.minecraft.world.entity.monster.Spider;
import net.minecraft.world.entity.monster.Stray;
import net.minecraft.world.entity.monster.Strider;
import net.minecraft.world.entity.monster.Vex;
import net.minecraft.world.entity.monster.Vindicator;
import net.minecraft.world.entity.monster.Witch;
import net.minecraft.world.entity.monster.WitherSkeleton;
import net.minecraft.world.entity.monster.Zoglin;
import net.minecraft.world.entity.monster.Zombie;
import net.minecraft.world.entity.monster.ZombieVillager;
import net.minecraft.world.entity.monster.ZombifiedPiglin;
import net.minecraft.world.entity.monster.breeze.Breeze;
import net.minecraft.world.entity.monster.hoglin.Hoglin;
import net.minecraft.world.entity.monster.piglin.Piglin;
import net.minecraft.world.entity.monster.piglin.PiglinBrute;
import net.minecraft.world.entity.monster.warden.Warden;
import net.minecraft.world.entity.npc.Villager;
import net.minecraft.world.entity.npc.WanderingTrader;
import net.minecraft.world.entity.projectile.Arrow;
import net.minecraft.world.entity.projectile.DragonFireball;
import net.minecraft.world.entity.projectile.EvokerFangs;
import net.minecraft.world.entity.projectile.EyeOfEnder;
import net.minecraft.world.entity.projectile.FireworkRocketEntity;
import net.minecraft.world.entity.projectile.FishingHook;
import net.minecraft.world.entity.projectile.LargeFireball;
import net.minecraft.world.entity.projectile.LlamaSpit;
import net.minecraft.world.entity.projectile.ShulkerBullet;
import net.minecraft.world.entity.projectile.SmallFireball;
import net.minecraft.world.entity.projectile.Snowball;
import net.minecraft.world.entity.projectile.SpectralArrow;
import net.minecraft.world.entity.projectile.ThrownEgg;
import net.minecraft.world.entity.projectile.ThrownEnderpearl;
import net.minecraft.world.entity.projectile.ThrownExperienceBottle;
import net.minecraft.world.entity.projectile.ThrownPotion;
import net.minecraft.world.entity.projectile.ThrownTrident;
import net.minecraft.world.entity.projectile.WitherSkull;
import net.minecraft.world.entity.projectile.windcharge.BreezeWindCharge;
import net.minecraft.world.entity.projectile.windcharge.WindCharge;
import net.minecraft.world.entity.vehicle.Boat;
import net.minecraft.world.entity.vehicle.ChestBoat;
import net.minecraft.world.entity.vehicle.Minecart;
import net.minecraft.world.entity.vehicle.MinecartChest;
import net.minecraft.world.entity.vehicle.MinecartCommandBlock;
import net.minecraft.world.entity.vehicle.MinecartFurnace;
import net.minecraft.world.entity.vehicle.MinecartHopper;
import net.minecraft.world.entity.vehicle.MinecartSpawner;
import net.minecraft.world.entity.vehicle.MinecartTNT;
@SuppressWarnings("rawtypes")
public class CustomEntityRegistry extends DefaultedMappedRegistry<EntityType<?>>
implements Supplier<MappedRegistry<EntityType<?>>> {
private final BiMap<ResourceLocation, EntityType> entities = HashBiMap.create();
private final BiMap<EntityType, ResourceLocation> entityClasses = this.entities.inverse();
private final Map<EntityType, Integer> entityIds = Maps.newHashMap();
private final MappedRegistry<EntityType<?>> wrapped;
public CustomEntityRegistry(DefaultedRegistry<EntityType<?>> original) throws Throwable {
super(original.getDefaultKey().getNamespace(),
(ResourceKey<? extends Registry<EntityType<?>>>) IREGISTRY_RESOURCE_KEY.invoke(original),
(Lifecycle) IREGISTRY_LIFECYCLE.invoke(original), true);
this.wrapped = (MappedRegistry<EntityType<?>>) original;
}
@Override
public RegistryLookup<EntityType<?>> asLookup() {
return wrapped.asLookup();
}
@Override
public void bindTags(Map<TagKey<EntityType<?>>, List<Holder<EntityType<?>>>> map) {
wrapped.bindTags(map);
}
@Override
public EntityType byId(int var0) {
return this.wrapped.byId(var0);
}
@Override
public EntityType byIdOrThrow(int var0) {
return this.wrapped.byIdOrThrow(var0);
}
@Override
public boolean containsKey(ResourceKey<EntityType<?>> var0) {
return this.wrapped.containsKey(var0);
}
@Override
public boolean containsKey(ResourceLocation var0) {
return this.wrapped.containsKey(var0);
}
@Override
public HolderGetter<EntityType<?>> createRegistrationLookup() {
return wrapped.createRegistrationLookup();
}
@Override
public Set<Entry<ResourceKey<EntityType<?>>, EntityType<?>>> entrySet() {
return wrapped.entrySet();
}
public EntityType findType(Class<?> search) {
return minecraftClassMap.inverse().get(search);
}
@Override
public MappedRegistry<EntityType<?>> get() {
return wrapped;
}
@Override
public EntityType get(ResourceKey<EntityType<?>> key) {
return wrapped.get(key);
}
@Override
public EntityType get(ResourceLocation key) {
if (entities.containsKey(key))
return entities.get(key);
return wrapped.get(key);
}
@Override
public Optional<Reference<EntityType<?>>> getHolder(int var0) {
return this.wrapped.getHolder(var0);
}
@Override
public Optional<Reference<EntityType<?>>> getHolder(ResourceKey<EntityType<?>> var0) {
return this.wrapped.getHolder(var0);
}
@Override
public int getId(EntityType key) {
if (entityIds.containsKey(key))
return entityIds.get(key);
return wrapped.getId(key);
}
@Override
public ResourceLocation getKey(EntityType value) {
if (entityClasses.containsKey(value))
return entityClasses.get(value);
return wrapped.getKey(value);
}
@Override
public Optional<EntityType<?>> getOptional(ResourceKey<EntityType<?>> var0) {
return this.wrapped.getOptional(var0);
}
@Override
public Optional<EntityType<?>> getOptional(ResourceLocation var0) {
if (entities.containsKey(var0))
return Optional.of(entities.get(var0));
return this.wrapped.getOptional(var0);
}
@Override
public Optional<Reference<EntityType<?>>> getRandom(RandomSource paramRandom) {
return wrapped.getRandom(paramRandom);
}
@Override
public Optional<ResourceKey<EntityType<?>>> getResourceKey(EntityType<?> var0) {
return wrapped.getResourceKey(var0);
}
@Override
public Optional<Named<EntityType<?>>> getTag(TagKey<EntityType<?>> var0) {
return this.wrapped.getTag(var0);
}
@Override
public Stream<TagKey<EntityType<?>>> getTagNames() {
return wrapped.getTagNames();
}
@Override
public Stream<Pair<TagKey<EntityType<?>>, Named<EntityType<?>>>> getTags() {
return wrapped.getTags();
}
@Override
public HolderOwner<EntityType<?>> holderOwner() {
return wrapped.holderOwner();
}
@Override
public Stream<Reference<EntityType<?>>> holders() {
return wrapped.holders();
}
@Override
public boolean isEmpty() {
return wrapped.isEmpty();
}
@Override
public Iterator<EntityType<?>> iterator() {
return wrapped.iterator();
}
@Override
public Set<ResourceLocation> keySet() {
return wrapped.keySet();
}
public void put(int entityId, ResourceLocation key, EntityType entityClass) {
entities.put(key, entityClass);
entityIds.put(entityClass, entityId);
}
@Override
public Set<ResourceKey<EntityType<?>>> registryKeySet() {
return wrapped.registryKeySet();
}
@Override
public void resetTags() {
wrapped.resetTags();
}
@Override
public int size() {
return wrapped.size();
}
private static final MethodHandle IREGISTRY_LIFECYCLE = NMS.getFirstGetter(MappedRegistry.class, Lifecycle.class);
// replace regex ([A-Z_]+) =.*?of\((.*?)::new.*?$ minecraftClassMap.put(EntityType.\1, \2.class);
private static final MethodHandle IREGISTRY_RESOURCE_KEY = NMS.getFirstGetter(MappedRegistry.class,
ResourceKey.class);
private static final BiMap<EntityType, Class<?>> minecraftClassMap = HashBiMap.create();
static {
minecraftClassMap.put(EntityType.ALLAY, Allay.class);
minecraftClassMap.put(EntityType.AREA_EFFECT_CLOUD, AreaEffectCloud.class);
minecraftClassMap.put(EntityType.ARMADILLO, Armadillo.class);
minecraftClassMap.put(EntityType.ARMOR_STAND, ArmorStand.class);
minecraftClassMap.put(EntityType.ARROW, Arrow.class);
minecraftClassMap.put(EntityType.AXOLOTL, Axolotl.class);
minecraftClassMap.put(EntityType.BAT, Bat.class);
minecraftClassMap.put(EntityType.BEE, Bee.class);
minecraftClassMap.put(EntityType.BLAZE, Blaze.class);
minecraftClassMap.put(EntityType.BLOCK_DISPLAY, Display.BlockDisplay.class);
minecraftClassMap.put(EntityType.BOAT, Boat.class);
minecraftClassMap.put(EntityType.BOGGED, Bogged.class);
minecraftClassMap.put(EntityType.BREEZE, Breeze.class);
minecraftClassMap.put(EntityType.BREEZE_WIND_CHARGE, BreezeWindCharge.class);
minecraftClassMap.put(EntityType.CAMEL, Camel.class);
minecraftClassMap.put(EntityType.CAT, Cat.class);
minecraftClassMap.put(EntityType.CAVE_SPIDER, CaveSpider.class);
minecraftClassMap.put(EntityType.CHEST_BOAT, ChestBoat.class);
minecraftClassMap.put(EntityType.CHEST_MINECART, MinecartChest.class);
minecraftClassMap.put(EntityType.CHICKEN, Chicken.class);
minecraftClassMap.put(EntityType.COD, Cod.class);
minecraftClassMap.put(EntityType.COMMAND_BLOCK_MINECART, MinecartCommandBlock.class);
minecraftClassMap.put(EntityType.COW, Cow.class);
minecraftClassMap.put(EntityType.CREEPER, Creeper.class);
minecraftClassMap.put(EntityType.DOLPHIN, Dolphin.class);
minecraftClassMap.put(EntityType.DONKEY, Donkey.class);
minecraftClassMap.put(EntityType.DRAGON_FIREBALL, DragonFireball.class);
minecraftClassMap.put(EntityType.DROWNED, Drowned.class);
minecraftClassMap.put(EntityType.EGG, ThrownEgg.class);
minecraftClassMap.put(EntityType.ELDER_GUARDIAN, ElderGuardian.class);
minecraftClassMap.put(EntityType.END_CRYSTAL, EndCrystal.class);
minecraftClassMap.put(EntityType.ENDER_DRAGON, EnderDragon.class);
minecraftClassMap.put(EntityType.ENDER_PEARL, ThrownEnderpearl.class);
minecraftClassMap.put(EntityType.ENDERMAN, EnderMan.class);
minecraftClassMap.put(EntityType.ENDERMITE, Endermite.class);
minecraftClassMap.put(EntityType.EVOKER, Evoker.class);
minecraftClassMap.put(EntityType.EVOKER_FANGS, EvokerFangs.class);
minecraftClassMap.put(EntityType.EXPERIENCE_BOTTLE, ThrownExperienceBottle.class);
minecraftClassMap.put(EntityType.EXPERIENCE_ORB, ExperienceOrb.class);
minecraftClassMap.put(EntityType.EYE_OF_ENDER, EyeOfEnder.class);
minecraftClassMap.put(EntityType.FALLING_BLOCK, FallingBlockEntity.class);
minecraftClassMap.put(EntityType.FIREWORK_ROCKET, FireworkRocketEntity.class);
minecraftClassMap.put(EntityType.FOX, Fox.class);
minecraftClassMap.put(EntityType.FROG, Frog.class);
minecraftClassMap.put(EntityType.FURNACE_MINECART, MinecartFurnace.class);
minecraftClassMap.put(EntityType.GHAST, Ghast.class);
minecraftClassMap.put(EntityType.GIANT, Giant.class);
minecraftClassMap.put(EntityType.GLOW_ITEM_FRAME, GlowItemFrame.class);
minecraftClassMap.put(EntityType.GLOW_SQUID, GlowSquid.class);
minecraftClassMap.put(EntityType.GOAT, Goat.class);
minecraftClassMap.put(EntityType.GUARDIAN, Guardian.class);
minecraftClassMap.put(EntityType.HOGLIN, Hoglin.class);
minecraftClassMap.put(EntityType.HOPPER_MINECART, MinecartHopper.class);
minecraftClassMap.put(EntityType.HORSE, Horse.class);
minecraftClassMap.put(EntityType.HUSK, Husk.class);
minecraftClassMap.put(EntityType.ILLUSIONER, Illusioner.class);
minecraftClassMap.put(EntityType.INTERACTION, Interaction.class);
minecraftClassMap.put(EntityType.IRON_GOLEM, IronGolem.class);
minecraftClassMap.put(EntityType.ITEM, ItemEntity.class);
minecraftClassMap.put(EntityType.ITEM_DISPLAY, Display.ItemDisplay.class);
minecraftClassMap.put(EntityType.ITEM_FRAME, ItemFrame.class);
minecraftClassMap.put(EntityType.OMINOUS_ITEM_SPAWNER, OminousItemSpawner.class);
minecraftClassMap.put(EntityType.FIREBALL, LargeFireball.class);
minecraftClassMap.put(EntityType.LEASH_KNOT, LeashFenceKnotEntity.class);
minecraftClassMap.put(EntityType.LIGHTNING_BOLT, LightningBolt.class);
minecraftClassMap.put(EntityType.LLAMA, Llama.class);
minecraftClassMap.put(EntityType.LLAMA_SPIT, LlamaSpit.class);
minecraftClassMap.put(EntityType.MAGMA_CUBE, MagmaCube.class);
minecraftClassMap.put(EntityType.MARKER, Marker.class);
minecraftClassMap.put(EntityType.MINECART, Minecart.class);
minecraftClassMap.put(EntityType.MOOSHROOM, MushroomCow.class);
minecraftClassMap.put(EntityType.MULE, Mule.class);
minecraftClassMap.put(EntityType.OCELOT, Ocelot.class);
minecraftClassMap.put(EntityType.PAINTING, Painting.class);
minecraftClassMap.put(EntityType.PANDA, Panda.class);
minecraftClassMap.put(EntityType.PARROT, Parrot.class);
minecraftClassMap.put(EntityType.PHANTOM, Phantom.class);
minecraftClassMap.put(EntityType.PIG, Pig.class);
minecraftClassMap.put(EntityType.PIGLIN, Piglin.class);
minecraftClassMap.put(EntityType.PIGLIN_BRUTE, PiglinBrute.class);
minecraftClassMap.put(EntityType.PILLAGER, Pillager.class);
minecraftClassMap.put(EntityType.POLAR_BEAR, PolarBear.class);
minecraftClassMap.put(EntityType.POTION, ThrownPotion.class);
minecraftClassMap.put(EntityType.PUFFERFISH, Pufferfish.class);
minecraftClassMap.put(EntityType.RABBIT, Rabbit.class);
minecraftClassMap.put(EntityType.RAVAGER, Ravager.class);
minecraftClassMap.put(EntityType.SALMON, Salmon.class);
minecraftClassMap.put(EntityType.SHEEP, Sheep.class);
minecraftClassMap.put(EntityType.SHULKER, Shulker.class);
minecraftClassMap.put(EntityType.SHULKER_BULLET, ShulkerBullet.class);
minecraftClassMap.put(EntityType.SILVERFISH, Silverfish.class);
minecraftClassMap.put(EntityType.SKELETON, Skeleton.class);
minecraftClassMap.put(EntityType.SKELETON_HORSE, SkeletonHorse.class);
minecraftClassMap.put(EntityType.SLIME, Slime.class);
minecraftClassMap.put(EntityType.SMALL_FIREBALL, SmallFireball.class);
minecraftClassMap.put(EntityType.SNIFFER, Sniffer.class);
minecraftClassMap.put(EntityType.SNOW_GOLEM, SnowGolem.class);
minecraftClassMap.put(EntityType.SNOWBALL, Snowball.class);
minecraftClassMap.put(EntityType.SPAWNER_MINECART, MinecartSpawner.class);
minecraftClassMap.put(EntityType.SPECTRAL_ARROW, SpectralArrow.class);
minecraftClassMap.put(EntityType.SPIDER, Spider.class);
minecraftClassMap.put(EntityType.SQUID, Squid.class);
minecraftClassMap.put(EntityType.STRAY, Stray.class);
minecraftClassMap.put(EntityType.STRIDER, Strider.class);
minecraftClassMap.put(EntityType.TADPOLE, Tadpole.class);
minecraftClassMap.put(EntityType.TEXT_DISPLAY, Display.TextDisplay.class);
minecraftClassMap.put(EntityType.TNT, PrimedTnt.class);
minecraftClassMap.put(EntityType.TNT_MINECART, MinecartTNT.class);
minecraftClassMap.put(EntityType.TRADER_LLAMA, TraderLlama.class);
minecraftClassMap.put(EntityType.TRIDENT, ThrownTrident.class);
minecraftClassMap.put(EntityType.TROPICAL_FISH, TropicalFish.class);
minecraftClassMap.put(EntityType.TURTLE, Turtle.class);
minecraftClassMap.put(EntityType.VEX, Vex.class);
minecraftClassMap.put(EntityType.VILLAGER, Villager.class);
minecraftClassMap.put(EntityType.VINDICATOR, Vindicator.class);
minecraftClassMap.put(EntityType.WANDERING_TRADER, WanderingTrader.class);
minecraftClassMap.put(EntityType.WARDEN, Warden.class);
minecraftClassMap.put(EntityType.WIND_CHARGE, WindCharge.class);
minecraftClassMap.put(EntityType.WITCH, Witch.class);
minecraftClassMap.put(EntityType.WITHER, WitherBoss.class);
minecraftClassMap.put(EntityType.WITHER_SKELETON, WitherSkeleton.class);
minecraftClassMap.put(EntityType.WITHER_SKULL, WitherSkull.class);
minecraftClassMap.put(EntityType.WOLF, Wolf.class);
minecraftClassMap.put(EntityType.ZOGLIN, Zoglin.class);
minecraftClassMap.put(EntityType.ZOMBIE, Zombie.class);
minecraftClassMap.put(EntityType.ZOMBIE_HORSE, ZombieHorse.class);
minecraftClassMap.put(EntityType.ZOMBIE_VILLAGER, ZombieVillager.class);
minecraftClassMap.put(EntityType.ZOMBIFIED_PIGLIN, ZombifiedPiglin.class);
minecraftClassMap.put(EntityType.FISHING_BOBBER, FishingHook.class);
}
}

View File

@ -4,12 +4,12 @@
<parent>
<groupId>net.citizensnpcs</groupId>
<artifactId>citizens-parent</artifactId>
<version>2.0.35-SNAPSHOT</version>
<version>2.0.36-SNAPSHOT</version>
</parent>
<artifactId>citizens-v1_21_R1</artifactId>
<artifactId>citizens-v1_21_R2</artifactId>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<craftbukkit.version>1.21.1-R0.1-SNAPSHOT</craftbukkit.version>
<craftbukkit.version>1.21.2-R0.1-SNAPSHOT</craftbukkit.version>
</properties>
<dependencies>

View File

@ -1,18 +1,18 @@
package net.citizensnpcs.nms.v1_21_R1.entity;
package net.citizensnpcs.nms.v1_21_R2.entity;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_21_R1.CraftServer;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftAllay;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_21_R2.CraftServer;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftAllay;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftEntity;
import com.google.common.collect.Lists;
import com.mojang.datafixers.util.Pair;
import net.citizensnpcs.api.CitizensAPI;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.nms.v1_21_R1.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R1.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R1.util.NMSImpl;
import net.citizensnpcs.nms.v1_21_R2.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R2.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R2.util.NMSImpl;
import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS;
@ -20,6 +20,7 @@ import net.citizensnpcs.util.Util;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.tags.TagKey;
@ -37,13 +38,13 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.PushReaction;
import net.minecraft.world.level.portal.DimensionTransition;
import net.minecraft.world.level.portal.TeleportTransition;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class AllayController extends MobEntityController {
public AllayController() {
super(EntityAllayNPC.class);
super(EntityAllayNPC.class, EntityType.ALLAY);
}
@Override
@ -61,6 +62,7 @@ public class AllayController extends MobEntityController {
private final CitizensNPC npc;
private int taskId = -1;
public EntityAllayNPC(EntityType<? extends Allay> types, Level level) {
this(types, level, null);
}
@ -89,13 +91,6 @@ public class AllayController extends MobEntityController {
return false;
}
@Override
public Entity changeDimension(DimensionTransition transition) {
if (npc == null)
return super.changeDimension(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public void checkDespawn() {
if (npc == null) {
@ -111,8 +106,8 @@ public class AllayController extends MobEntityController {
}
@Override
public void customServerAiStep() {
super.customServerAiStep();
public void customServerAiStep(ServerLevel level) {
super.customServerAiStep(level);
if (npc != null) {
NMSImpl.updateMinecraftAIState(npc, this);
npc.update();
@ -229,12 +224,19 @@ public class AllayController extends MobEntityController {
return npc == null ? super.save(save) : false;
}
@Override
public Entity teleport(TeleportTransition transition) {
if (npc == null)
return super.teleport(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public void travel(Vec3 vec3d) {
if (npc == null || !npc.isFlyable()) {
super.travel(vec3d);
} else {
NMSImpl.flyingMoveLogic(this, vec3d);
NMSImpl.moveLogic(this, vec3d);
}
}

View File

@ -1,14 +1,14 @@
package net.citizensnpcs.nms.v1_21_R1.entity;
package net.citizensnpcs.nms.v1_21_R2.entity;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_21_R1.CraftServer;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftArmadillo;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_21_R2.CraftServer;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftArmadillo;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftEntity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.nms.v1_21_R1.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R1.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R1.util.NMSImpl;
import net.citizensnpcs.nms.v1_21_R2.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R2.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R2.util.NMSImpl;
import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS;
@ -16,6 +16,7 @@ import net.citizensnpcs.util.Util;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.tags.TagKey;
@ -34,13 +35,13 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.PushReaction;
import net.minecraft.world.level.portal.DimensionTransition;
import net.minecraft.world.level.portal.TeleportTransition;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class ArmadilloController extends MobEntityController {
public ArmadilloController() {
super(EntityArmadilloNPC.class);
super(EntityArmadilloNPC.class, EntityType.ARMADILLO);
}
@Override
@ -85,13 +86,6 @@ public class ArmadilloController extends MobEntityController {
return false;
}
@Override
public Entity changeDimension(DimensionTransition transition) {
if (npc == null)
return super.changeDimension(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public void checkDespawn() {
if (npc == null) {
@ -107,8 +101,8 @@ public class ArmadilloController extends MobEntityController {
}
@Override
public void customServerAiStep() {
super.customServerAiStep();
public void customServerAiStep(ServerLevel level) {
super.customServerAiStep(level);
if (npc != null) {
NMSImpl.updateMinecraftAIState(npc, this);
npc.update();
@ -225,12 +219,19 @@ public class ArmadilloController extends MobEntityController {
return npc == null ? super.save(save) : false;
}
@Override
public Entity teleport(TeleportTransition transition) {
if (npc == null)
return super.teleport(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public void travel(Vec3 vec3d) {
if (npc == null || !npc.isFlyable()) {
super.travel(vec3d);
} else {
NMSImpl.flyingMoveLogic(this, vec3d);
NMSImpl.moveLogic(this, vec3d);
}
}

View File

@ -1,17 +1,17 @@
package net.citizensnpcs.nms.v1_21_R1.entity;
package net.citizensnpcs.nms.v1_21_R2.entity;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_21_R1.CraftServer;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftArmorStand;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_21_R2.CraftServer;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftArmorStand;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftEntity;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.nms.v1_21_R1.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R1.util.MobAI;
import net.citizensnpcs.nms.v1_21_R1.util.MobAI.ForwardingMobAI;
import net.citizensnpcs.nms.v1_21_R1.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R1.util.NMSImpl;
import net.citizensnpcs.nms.v1_21_R2.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R2.util.MobAI;
import net.citizensnpcs.nms.v1_21_R2.util.MobAI.ForwardingMobAI;
import net.citizensnpcs.nms.v1_21_R2.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R2.util.NMSImpl;
import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS;
@ -27,13 +27,13 @@ import net.minecraft.world.entity.decoration.ArmorStand;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.portal.DimensionTransition;
import net.minecraft.world.level.portal.TeleportTransition;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class ArmorStandController extends MobEntityController {
public ArmorStandController() {
super(EntityArmorStandNPC.class);
super(EntityArmorStandNPC.class, EntityType.ARMOR_STAND);
}
@Override
@ -69,13 +69,6 @@ public class ArmorStandController extends MobEntityController {
return NMS.shouldBroadcastToPlayer(npc, () -> super.broadcastToPlayer(player));
}
@Override
public Entity changeDimension(DimensionTransition transition) {
if (npc == null)
return super.changeDimension(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public MobAI getAI() {
return ai;
@ -130,6 +123,13 @@ public class ArmorStandController extends MobEntityController {
return npc == null ? super.save(save) : false;
}
@Override
public Entity teleport(TeleportTransition transition) {
if (npc == null)
return super.teleport(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public void tick() {
super.tick();

View File

@ -1,14 +1,14 @@
package net.citizensnpcs.nms.v1_21_R1.entity;
package net.citizensnpcs.nms.v1_21_R2.entity;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_21_R1.CraftServer;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftAxolotl;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_21_R2.CraftServer;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftAxolotl;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftEntity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.nms.v1_21_R1.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R1.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R1.util.NMSImpl;
import net.citizensnpcs.nms.v1_21_R2.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R2.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R2.util.NMSImpl;
import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS;
@ -35,13 +35,13 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.PushReaction;
import net.minecraft.world.level.portal.DimensionTransition;
import net.minecraft.world.level.portal.TeleportTransition;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class AxolotlController extends MobEntityController {
public AxolotlController() {
super(EntityAxolotlNPC.class);
super(EntityAxolotlNPC.class, EntityType.AXOLOTL);
}
@Override
@ -59,6 +59,7 @@ public class AxolotlController extends MobEntityController {
private final CitizensNPC npc;
private MoveControl oldMoveController;
public EntityAxolotlNPC(EntityType<? extends Axolotl> types, Level level) {
this(types, level, null);
}
@ -93,13 +94,6 @@ public class AxolotlController extends MobEntityController {
return false;
}
@Override
public Entity changeDimension(DimensionTransition transition) {
if (npc == null)
return super.changeDimension(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public void checkDespawn() {
if (npc == null) {
@ -212,6 +206,13 @@ public class AxolotlController extends MobEntityController {
return npc == null ? super.save(save) : false;
}
@Override
public Entity teleport(TeleportTransition transition) {
if (npc == null)
return super.teleport(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public void tick() {
super.tick();
@ -238,7 +239,7 @@ public class AxolotlController extends MobEntityController {
super.travel(vec3d);
}
} else {
NMSImpl.flyingMoveLogic(this, vec3d);
NMSImpl.moveLogic(this, vec3d);
}
}

View File

@ -1,19 +1,20 @@
package net.citizensnpcs.nms.v1_21_R1.entity;
package net.citizensnpcs.nms.v1_21_R2.entity;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_21_R1.CraftServer;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftBat;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_21_R2.CraftServer;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftBat;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftEntity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.nms.v1_21_R1.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R1.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R1.util.NMSImpl;
import net.citizensnpcs.nms.v1_21_R2.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R2.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R2.util.NMSImpl;
import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.tags.TagKey;
@ -26,13 +27,13 @@ import net.minecraft.world.entity.vehicle.Boat;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.PushReaction;
import net.minecraft.world.level.portal.DimensionTransition;
import net.minecraft.world.level.portal.TeleportTransition;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class BatController extends MobEntityController {
public BatController() {
super(EntityBatNPC.class);
super(EntityBatNPC.class, EntityType.BAT);
}
@Override
@ -73,13 +74,6 @@ public class BatController extends MobEntityController {
return super.canRide(entity);
}
@Override
public Entity changeDimension(DimensionTransition transition) {
if (npc == null)
return super.changeDimension(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public void checkDespawn() {
if (npc == null) {
@ -88,13 +82,13 @@ public class BatController extends MobEntityController {
}
@Override
public void customServerAiStep() {
public void customServerAiStep(ServerLevel level) {
if (npc == null) {
super.customServerAiStep();
super.customServerAiStep(level);
} else {
NMSImpl.updateMinecraftAIState(npc, this);
if (npc.useMinecraftAI()) {
super.customServerAiStep();
super.customServerAiStep(level);
}
npc.update();
}
@ -180,6 +174,13 @@ public class BatController extends MobEntityController {
return npc == null ? super.save(save) : false;
}
@Override
public Entity teleport(TeleportTransition transition) {
if (npc == null)
return super.teleport(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public boolean updateFluidHeightAndDoFluidPushing(TagKey<Fluid> tagkey, double d0) {
if (npc == null)

View File

@ -1,19 +1,20 @@
package net.citizensnpcs.nms.v1_21_R1.entity;
package net.citizensnpcs.nms.v1_21_R2.entity;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_21_R1.CraftServer;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftBee;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_21_R2.CraftServer;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftBee;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftEntity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.nms.v1_21_R1.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R1.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R1.util.NMSImpl;
import net.citizensnpcs.nms.v1_21_R2.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R2.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R2.util.NMSImpl;
import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.tags.TagKey;
@ -26,13 +27,13 @@ import net.minecraft.world.entity.vehicle.Boat;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.PushReaction;
import net.minecraft.world.level.portal.DimensionTransition;
import net.minecraft.world.level.portal.TeleportTransition;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class BeeController extends MobEntityController {
public BeeController() {
super(EntityBeeNPC.class);
super(EntityBeeNPC.class, EntityType.BEE);
}
@Override
@ -70,13 +71,6 @@ public class BeeController extends MobEntityController {
return super.canRide(entity);
}
@Override
public Entity changeDimension(DimensionTransition transition) {
if (npc == null)
return super.changeDimension(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public void checkDespawn() {
if (npc == null) {
@ -85,13 +79,13 @@ public class BeeController extends MobEntityController {
}
@Override
public void customServerAiStep() {
public void customServerAiStep(ServerLevel level) {
if (npc == null) {
super.customServerAiStep();
super.customServerAiStep(level);
} else {
NMSImpl.updateMinecraftAIState(npc, this);
if (npc.useMinecraftAI()) {
super.customServerAiStep();
super.customServerAiStep(level);
}
npc.update();
}
@ -177,6 +171,13 @@ public class BeeController extends MobEntityController {
return npc == null ? super.save(save) : false;
}
@Override
public Entity teleport(TeleportTransition transition) {
if (npc == null)
return super.teleport(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public boolean updateFluidHeightAndDoFluidPushing(TagKey<Fluid> tagkey, double d0) {
if (npc == null)

View File

@ -1,19 +1,20 @@
package net.citizensnpcs.nms.v1_21_R1.entity;
package net.citizensnpcs.nms.v1_21_R2.entity;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_21_R1.CraftServer;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftBlaze;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_21_R2.CraftServer;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftBlaze;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftEntity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.nms.v1_21_R1.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R1.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R1.util.NMSImpl;
import net.citizensnpcs.nms.v1_21_R2.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R2.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R2.util.NMSImpl;
import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.tags.TagKey;
@ -26,13 +27,13 @@ import net.minecraft.world.entity.vehicle.Boat;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.PushReaction;
import net.minecraft.world.level.portal.DimensionTransition;
import net.minecraft.world.level.portal.TeleportTransition;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class BlazeController extends MobEntityController {
public BlazeController() {
super(EntityBlazeNPC.class);
super(EntityBlazeNPC.class, EntityType.BLAZE);
}
@Override
@ -70,13 +71,6 @@ public class BlazeController extends MobEntityController {
return super.canRide(entity);
}
@Override
public Entity changeDimension(DimensionTransition transition) {
if (npc == null)
return super.changeDimension(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public void checkDespawn() {
if (npc == null) {
@ -85,7 +79,7 @@ public class BlazeController extends MobEntityController {
}
@Override
public void customServerAiStep() {
public void customServerAiStep(ServerLevel level) {
if (npc != null) {
NMSImpl.updateMinecraftAIState(npc, this);
npc.update();
@ -172,6 +166,13 @@ public class BlazeController extends MobEntityController {
return npc == null ? super.save(save) : false;
}
@Override
public Entity teleport(TeleportTransition transition) {
if (npc == null)
return super.teleport(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public boolean updateFluidHeightAndDoFluidPushing(TagKey<Fluid> tagkey, double d0) {
if (npc == null)

View File

@ -1,14 +1,14 @@
package net.citizensnpcs.nms.v1_21_R1.entity;
package net.citizensnpcs.nms.v1_21_R2.entity;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_21_R1.CraftServer;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftBogged;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_21_R2.CraftServer;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftBogged;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftEntity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.nms.v1_21_R1.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R1.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R1.util.NMSImpl;
import net.citizensnpcs.nms.v1_21_R2.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R2.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R2.util.NMSImpl;
import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS;
@ -16,6 +16,7 @@ import net.citizensnpcs.util.Util;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.tags.TagKey;
@ -29,13 +30,13 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.PushReaction;
import net.minecraft.world.level.portal.DimensionTransition;
import net.minecraft.world.level.portal.TeleportTransition;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class BoggedController extends MobEntityController {
public BoggedController() {
super(EntityBoggedNPC.class);
super(EntityBoggedNPC.class, EntityType.BOGGED);
}
@Override
@ -80,13 +81,6 @@ public class BoggedController extends MobEntityController {
return false;
}
@Override
public Entity changeDimension(DimensionTransition transition) {
if (npc == null)
return super.changeDimension(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public void checkDespawn() {
if (npc == null) {
@ -102,8 +96,8 @@ public class BoggedController extends MobEntityController {
}
@Override
public void customServerAiStep() {
super.customServerAiStep();
public void customServerAiStep(ServerLevel level) {
super.customServerAiStep(level);
if (npc != null) {
NMSImpl.updateMinecraftAIState(npc, this);
npc.update();
@ -207,12 +201,19 @@ public class BoggedController extends MobEntityController {
return npc == null ? super.save(save) : false;
}
@Override
public Entity teleport(TeleportTransition transition) {
if (npc == null)
return super.teleport(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public void travel(Vec3 vec3d) {
if (npc == null || !npc.isFlyable()) {
super.travel(vec3d);
} else {
NMSImpl.flyingMoveLogic(this, vec3d);
NMSImpl.moveLogic(this, vec3d);
}
}

View File

@ -1,14 +1,14 @@
package net.citizensnpcs.nms.v1_21_R1.entity;
package net.citizensnpcs.nms.v1_21_R2.entity;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_21_R1.CraftServer;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftBreeze;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_21_R2.CraftServer;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftBreeze;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftEntity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.nms.v1_21_R1.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R1.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R1.util.NMSImpl;
import net.citizensnpcs.nms.v1_21_R2.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R2.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R2.util.NMSImpl;
import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS;
@ -16,6 +16,7 @@ import net.citizensnpcs.util.Util;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.tags.TagKey;
@ -29,13 +30,13 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.PushReaction;
import net.minecraft.world.level.portal.DimensionTransition;
import net.minecraft.world.level.portal.TeleportTransition;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class BreezeController extends MobEntityController {
public BreezeController() {
super(EntityBreezeNPC.class);
super(EntityBreezeNPC.class, EntityType.BREEZE);
}
@Override
@ -80,13 +81,6 @@ public class BreezeController extends MobEntityController {
return false;
}
@Override
public Entity changeDimension(DimensionTransition transition) {
if (npc == null)
return super.changeDimension(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public void checkDespawn() {
if (npc == null) {
@ -102,8 +96,8 @@ public class BreezeController extends MobEntityController {
}
@Override
public void customServerAiStep() {
super.customServerAiStep();
public void customServerAiStep(ServerLevel level) {
super.customServerAiStep(level);
if (npc != null) {
NMSImpl.updateMinecraftAIState(npc, this);
npc.update();
@ -207,12 +201,19 @@ public class BreezeController extends MobEntityController {
return npc == null ? super.save(save) : false;
}
@Override
public Entity teleport(TeleportTransition transition) {
if (npc == null)
return super.teleport(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public void travel(Vec3 vec3d) {
if (npc == null || !npc.isFlyable()) {
super.travel(vec3d);
} else {
NMSImpl.flyingMoveLogic(this, vec3d);
NMSImpl.moveLogic(this, vec3d);
}
}

View File

@ -1,15 +1,15 @@
package net.citizensnpcs.nms.v1_21_R1.entity;
package net.citizensnpcs.nms.v1_21_R2.entity;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_21_R1.CraftServer;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftCamel;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_21_R2.CraftServer;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftCamel;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftEntity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.nms.v1_21_R1.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R1.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R1.util.NMSImpl;
import net.citizensnpcs.nms.v1_21_R2.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R2.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R2.util.NMSImpl;
import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.trait.Controllable;
@ -19,6 +19,7 @@ import net.citizensnpcs.util.Util;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.tags.TagKey;
@ -33,13 +34,13 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.PushReaction;
import net.minecraft.world.level.portal.DimensionTransition;
import net.minecraft.world.level.portal.TeleportTransition;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class CamelController extends MobEntityController {
public CamelController() {
super(EntityCamelNPC.class);
super(EntityCamelNPC.class, EntityType.CAMEL);
}
@Override
@ -64,6 +65,7 @@ public class CamelController extends MobEntityController {
private final CitizensNPC npc;
private boolean riding;
public EntityCamelNPC(EntityType<? extends Camel> types, Level level) {
this(types, level, null);
}
@ -97,13 +99,6 @@ public class CamelController extends MobEntityController {
return false;
}
@Override
public Entity changeDimension(DimensionTransition transition) {
if (npc == null)
return super.changeDimension(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public void checkDespawn() {
if (npc == null) {
@ -119,8 +114,8 @@ public class CamelController extends MobEntityController {
}
@Override
public void customServerAiStep() {
super.customServerAiStep();
public void customServerAiStep(ServerLevel level) {
super.customServerAiStep(level);
if (npc != null) {
NMSImpl.updateMinecraftAIState(npc, this);
if (npc.hasTrait(Controllable.class) && npc.getOrAddTrait(Controllable.class).isEnabled()) {
@ -251,12 +246,19 @@ public class CamelController extends MobEntityController {
return npc == null ? super.save(save) : false;
}
@Override
public Entity teleport(TeleportTransition transition) {
if (npc == null)
return super.teleport(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public void travel(Vec3 vec3d) {
if (npc == null || !npc.isFlyable()) {
super.travel(vec3d);
} else {
NMSImpl.flyingMoveLogic(this, vec3d);
NMSImpl.moveLogic(this, vec3d);
}
}

View File

@ -1,14 +1,14 @@
package net.citizensnpcs.nms.v1_21_R1.entity;
package net.citizensnpcs.nms.v1_21_R2.entity;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_21_R1.CraftServer;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftCat;
import org.bukkit.craftbukkit.v1_21_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_21_R2.CraftServer;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftCat;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftEntity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.nms.v1_21_R1.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R1.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R1.util.NMSImpl;
import net.citizensnpcs.nms.v1_21_R2.util.ForwardingNPCHolder;
import net.citizensnpcs.nms.v1_21_R2.util.NMSBoundingBox;
import net.citizensnpcs.nms.v1_21_R2.util.NMSImpl;
import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS;
@ -16,6 +16,7 @@ import net.citizensnpcs.util.Util;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.tags.TagKey;
@ -29,13 +30,13 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.PushReaction;
import net.minecraft.world.level.portal.DimensionTransition;
import net.minecraft.world.level.portal.TeleportTransition;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
public class CatController extends MobEntityController {
public CatController() {
super(EntityCatNPC.class);
super(EntityCatNPC.class, EntityType.CAT);
}
@Override
@ -80,13 +81,6 @@ public class CatController extends MobEntityController {
return false;
}
@Override
public Entity changeDimension(DimensionTransition transition) {
if (npc == null)
return super.changeDimension(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public void checkDespawn() {
if (npc == null) {
@ -102,8 +96,8 @@ public class CatController extends MobEntityController {
}
@Override
public void customServerAiStep() {
super.customServerAiStep();
public void customServerAiStep(ServerLevel level) {
super.customServerAiStep(level);
if (npc != null) {
NMSImpl.updateMinecraftAIState(npc, this);
npc.update();
@ -207,12 +201,19 @@ public class CatController extends MobEntityController {
return npc == null ? super.save(save) : false;
}
@Override
public Entity teleport(TeleportTransition transition) {
if (npc == null)
return super.teleport(transition);
return NMSImpl.teleportAcrossWorld(this, transition);
}
@Override
public void travel(Vec3 vec3d) {
if (npc == null || !npc.isFlyable()) {
super.travel(vec3d);
} else {
NMSImpl.flyingMoveLogic(this, vec3d);
NMSImpl.moveLogic(this, vec3d);
}
}

Some files were not shown because too many files have changed in this diff Show More