mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2024-06-20 11:34:55 +02:00
Implement new API and fix an error from Paper
This commit is contained in:
parent
d7aab0acbd
commit
3682faebec
|
@ -10,16 +10,20 @@ import org.bstats.bukkit.Metrics;
|
|||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.inventory.meta.SkullMeta;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import com.mojang.authlib.properties.Property;
|
||||
|
||||
import net.citizensnpcs.Settings.Setting;
|
||||
import net.citizensnpcs.api.CitizensAPI;
|
||||
import net.citizensnpcs.api.CitizensPlugin;
|
||||
import net.citizensnpcs.api.SkullMetaProvider;
|
||||
import net.citizensnpcs.api.ai.speech.SpeechFactory;
|
||||
import net.citizensnpcs.api.command.CommandContext;
|
||||
import net.citizensnpcs.api.command.CommandManager;
|
||||
|
@ -72,6 +76,18 @@ public class Citizens extends JavaPlugin implements CitizensPlugin {
|
|||
private CitizensNPCRegistry npcRegistry;
|
||||
private NPCDataStore saves;
|
||||
private NPCSelector selector;
|
||||
private final SkullMetaProvider skullMetaProvider = new SkullMetaProvider() {
|
||||
@Override
|
||||
public String getTexture(SkullMeta meta) {
|
||||
return Iterables.getFirst(NMS.getProfile(meta).getProperties().get("textures"), new Property("", ""))
|
||||
.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTexture(String string, SkullMeta meta) {
|
||||
NMS.setProfile(meta, new GameProfile(meta.getOwningPlayer().getUniqueId(), string));
|
||||
}
|
||||
};
|
||||
private CitizensSpeechFactory speechFactory;
|
||||
private final Map<String, NPCRegistry> storedRegistries = Maps.newHashMap();
|
||||
private CitizensTraitFactory traitFactory;
|
||||
|
@ -212,6 +228,11 @@ public class Citizens extends JavaPlugin implements CitizensPlugin {
|
|||
return new File(getDataFolder(), "scripts");
|
||||
}
|
||||
|
||||
@Override
|
||||
public SkullMetaProvider getSkullMetaProvider() {
|
||||
return skullMetaProvider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SpeechFactory getSpeechFactory() {
|
||||
return speechFactory;
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
package net.citizensnpcs.npc;
|
||||
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.util.NMS;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Entity;
|
||||
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.util.NMS;
|
||||
|
||||
public abstract class AbstractEntityController implements EntityController {
|
||||
private Entity bukkitEntity;
|
||||
|
||||
|
@ -23,11 +23,6 @@ public abstract class AbstractEntityController implements EntityController {
|
|||
return bukkitEntity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEntity(Entity entity) {
|
||||
this.bukkitEntity = entity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
if (bukkitEntity == null)
|
||||
|
@ -36,6 +31,11 @@ public abstract class AbstractEntityController implements EntityController {
|
|||
bukkitEntity = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEntity(Entity entity) {
|
||||
this.bukkitEntity = entity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void spawn(Location at, NPC npc) {
|
||||
bukkitEntity = createEntity(at, npc);
|
||||
|
|
|
@ -137,8 +137,9 @@ public class SkinUpdateTracker {
|
|||
if (tracker.fovVisibleSkins.contains(skinnable))
|
||||
continue;
|
||||
|
||||
if (canSee(player, skinnable, true))
|
||||
if (canSee(player, skinnable, true)) {
|
||||
output.add(skinnable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -222,6 +222,10 @@ public class NMS {
|
|||
BRIDGE.registerEntityClass(clazz);
|
||||
}
|
||||
|
||||
public static void remove(Entity entity) {
|
||||
BRIDGE.remove(entity);
|
||||
}
|
||||
|
||||
public static void removeFromServerPlayerList(Player player) {
|
||||
BRIDGE.removeFromServerPlayerList(player);
|
||||
}
|
||||
|
|
|
@ -91,6 +91,8 @@ public interface NMSBridge {
|
|||
|
||||
public void registerEntityClass(Class<?> clazz);
|
||||
|
||||
public void remove(Entity entity);
|
||||
|
||||
public void removeFromServerPlayerList(Player player);
|
||||
|
||||
public void removeFromWorld(org.bukkit.entity.Entity entity);
|
||||
|
|
|
@ -709,6 +709,11 @@ public class NMSImpl implements NMSBridge {
|
|||
throw new IllegalArgumentException("unable to find valid entity superclass for class " + clazz.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove(org.bukkit.entity.Entity entity) {
|
||||
NMSImpl.getHandle(entity).die();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeFromServerPlayerList(Player player) {
|
||||
EntityPlayer handle = (EntityPlayer) NMSImpl.getHandle(player);
|
||||
|
|
|
@ -767,6 +767,11 @@ public class NMSImpl implements NMSBridge {
|
|||
throw new IllegalArgumentException("unable to find valid entity superclass for class " + clazz.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove(org.bukkit.entity.Entity entity) {
|
||||
NMSImpl.getHandle(entity).die();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeFromServerPlayerList(Player player) {
|
||||
EntityPlayer handle = (EntityPlayer) NMSImpl.getHandle(player);
|
||||
|
|
|
@ -774,6 +774,11 @@ public class NMSImpl implements NMSBridge {
|
|||
throw new IllegalArgumentException("unable to find valid entity superclass for class " + clazz.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove(org.bukkit.entity.Entity entity) {
|
||||
NMSImpl.getHandle(entity).die();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeFromServerPlayerList(Player player) {
|
||||
EntityPlayer handle = (EntityPlayer) NMSImpl.getHandle(player);
|
||||
|
|
|
@ -2,7 +2,6 @@ package net.citizensnpcs.nms.v1_13_R2.entity;
|
|||
|
||||
import java.util.UUID;
|
||||
|
||||
import net.citizensnpcs.util.Util;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.craftbukkit.v1_13_R2.CraftWorld;
|
||||
|
@ -21,6 +20,7 @@ import net.citizensnpcs.npc.AbstractEntityController;
|
|||
import net.citizensnpcs.npc.skin.Skin;
|
||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
||||
import net.citizensnpcs.util.NMS;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_13_R2.PlayerInteractManager;
|
||||
import net.minecraft.server.v1_13_R2.WorldServer;
|
||||
|
||||
|
@ -117,6 +117,8 @@ public class HumanController extends AbstractEntityController {
|
|||
SkinnableEntity npc = entity instanceof SkinnableEntity ? (SkinnableEntity) entity : null;
|
||||
npc.getSkinTracker().onRemoveNPC();
|
||||
}
|
||||
super.remove();
|
||||
NMS.remove(entity);
|
||||
// Paper decided to break Spigot compatibility.
|
||||
// super.remove();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,6 @@ import java.util.List;
|
|||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
|
||||
import net.minecraft.server.v1_13_R2.*;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Location;
|
||||
|
@ -183,6 +182,59 @@ import net.citizensnpcs.util.NMSBridge;
|
|||
import net.citizensnpcs.util.PlayerAnimation;
|
||||
import net.citizensnpcs.util.PlayerUpdateTask;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_13_R2.AttributeInstance;
|
||||
import net.minecraft.server.v1_13_R2.AxisAlignedBB;
|
||||
import net.minecraft.server.v1_13_R2.Block;
|
||||
import net.minecraft.server.v1_13_R2.BlockPosition;
|
||||
import net.minecraft.server.v1_13_R2.BossBattleServer;
|
||||
import net.minecraft.server.v1_13_R2.ControllerJump;
|
||||
import net.minecraft.server.v1_13_R2.CrashReport;
|
||||
import net.minecraft.server.v1_13_R2.CrashReportSystemDetails;
|
||||
import net.minecraft.server.v1_13_R2.DamageSource;
|
||||
import net.minecraft.server.v1_13_R2.DataWatcherObject;
|
||||
import net.minecraft.server.v1_13_R2.EnchantmentManager;
|
||||
import net.minecraft.server.v1_13_R2.Enchantments;
|
||||
import net.minecraft.server.v1_13_R2.EnderDragonBattle;
|
||||
import net.minecraft.server.v1_13_R2.Entity;
|
||||
import net.minecraft.server.v1_13_R2.EntityBird;
|
||||
import net.minecraft.server.v1_13_R2.EntityEnderDragon;
|
||||
import net.minecraft.server.v1_13_R2.EntityFish;
|
||||
import net.minecraft.server.v1_13_R2.EntityFishingHook;
|
||||
import net.minecraft.server.v1_13_R2.EntityHorse;
|
||||
import net.minecraft.server.v1_13_R2.EntityHorseAbstract;
|
||||
import net.minecraft.server.v1_13_R2.EntityHuman;
|
||||
import net.minecraft.server.v1_13_R2.EntityInsentient;
|
||||
import net.minecraft.server.v1_13_R2.EntityLiving;
|
||||
import net.minecraft.server.v1_13_R2.EntityMinecartAbstract;
|
||||
import net.minecraft.server.v1_13_R2.EntityPlayer;
|
||||
import net.minecraft.server.v1_13_R2.EntityPolarBear;
|
||||
import net.minecraft.server.v1_13_R2.EntityRabbit;
|
||||
import net.minecraft.server.v1_13_R2.EntityShulker;
|
||||
import net.minecraft.server.v1_13_R2.EntityTameableAnimal;
|
||||
import net.minecraft.server.v1_13_R2.EntityTracker;
|
||||
import net.minecraft.server.v1_13_R2.EntityTrackerEntry;
|
||||
import net.minecraft.server.v1_13_R2.EntityTypes;
|
||||
import net.minecraft.server.v1_13_R2.EntityWither;
|
||||
import net.minecraft.server.v1_13_R2.EnumMoveType;
|
||||
import net.minecraft.server.v1_13_R2.GenericAttributes;
|
||||
import net.minecraft.server.v1_13_R2.IRegistry;
|
||||
import net.minecraft.server.v1_13_R2.MathHelper;
|
||||
import net.minecraft.server.v1_13_R2.MinecraftKey;
|
||||
import net.minecraft.server.v1_13_R2.MobEffects;
|
||||
import net.minecraft.server.v1_13_R2.NavigationAbstract;
|
||||
import net.minecraft.server.v1_13_R2.NetworkManager;
|
||||
import net.minecraft.server.v1_13_R2.Packet;
|
||||
import net.minecraft.server.v1_13_R2.PacketPlayOutEntityTeleport;
|
||||
import net.minecraft.server.v1_13_R2.PacketPlayOutPlayerInfo;
|
||||
import net.minecraft.server.v1_13_R2.PathEntity;
|
||||
import net.minecraft.server.v1_13_R2.PathPoint;
|
||||
import net.minecraft.server.v1_13_R2.PathfinderGoalSelector;
|
||||
import net.minecraft.server.v1_13_R2.RegistryMaterials;
|
||||
import net.minecraft.server.v1_13_R2.ReportedException;
|
||||
import net.minecraft.server.v1_13_R2.SoundEffect;
|
||||
import net.minecraft.server.v1_13_R2.SoundEffects;
|
||||
import net.minecraft.server.v1_13_R2.Vec3D;
|
||||
import net.minecraft.server.v1_13_R2.WorldServer;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public class NMSImpl implements NMSBridge {
|
||||
|
@ -748,6 +800,11 @@ public class NMSImpl implements NMSBridge {
|
|||
throw new IllegalArgumentException("unable to find valid entity superclass for class " + clazz.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove(org.bukkit.entity.Entity entity) {
|
||||
NMSImpl.getHandle(entity).die();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeFromServerPlayerList(Player player) {
|
||||
EntityPlayer handle = (EntityPlayer) NMSImpl.getHandle(player);
|
||||
|
@ -1280,7 +1337,8 @@ public class NMSImpl implements NMSBridge {
|
|||
entity.a(f, f1, f2, f3);
|
||||
f9 = 0.91F;
|
||||
if (entity.onGround) {
|
||||
f9 = entity.world.getType(getBlockPositionBE(blockposition_b, entity.locX, bb.minY - 1.0D, entity.locZ))
|
||||
f9 = entity.world
|
||||
.getType(getBlockPositionBE(blockposition_b, entity.locX, bb.minY - 1.0D, entity.locZ))
|
||||
.getBlock().n() * 0.91F;
|
||||
}
|
||||
if (entity.z_()) {
|
||||
|
@ -1352,35 +1410,29 @@ public class NMSImpl implements NMSBridge {
|
|||
private static BlockPosition.b getBlockPositionBE(BlockPosition.b blockPos, double x, double y, double z) {
|
||||
try {
|
||||
return blockPos.c(x, y, z);
|
||||
}
|
||||
catch (NoSuchMethodError ex) {
|
||||
} catch (NoSuchMethodError ex) {
|
||||
try {
|
||||
return (BlockPosition.b) BLOCK_POSITION_B_D.invoke(blockPos, x, y, z);
|
||||
}
|
||||
catch (Throwable ex2) {
|
||||
} catch (Throwable ex2) {
|
||||
ex2.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static final Method BLOCK_POSITION_B_D = NMS.getMethod(BlockPosition.b.class, "e", false, double.class, double.class, double.class);
|
||||
|
||||
public static BossBar getBossBar(org.bukkit.entity.Entity entity) {
|
||||
BossBattleServer bserver = null;
|
||||
try {
|
||||
if (entity.getType() == EntityType.WITHER) {
|
||||
try {
|
||||
bserver = ((EntityWither) NMSImpl.getHandle(entity)).bossBattle;
|
||||
}
|
||||
catch (NoSuchFieldError ex) {
|
||||
} catch (NoSuchFieldError ex) {
|
||||
bserver = (BossBattleServer) WITHER_BOSS_BAR_FIELD.get(NMSImpl.getHandle(entity));
|
||||
}
|
||||
} else if (entity.getType() == EntityType.ENDER_DRAGON) {
|
||||
try {
|
||||
bserver = ((EnderDragonBattle) ENDERDRAGON_BATTLE_FIELD.get(NMSImpl.getHandle(entity))).bossBattle;
|
||||
}
|
||||
catch (NoSuchFieldError ex) {
|
||||
} catch (NoSuchFieldError ex) {
|
||||
bserver = (BossBattleServer) ENDERDRAGON_BATTLE_BAR_FIELD
|
||||
.get(ENDERDRAGON_BATTLE_FIELD.get(NMSImpl.getHandle(entity)));
|
||||
}
|
||||
|
@ -1443,18 +1495,15 @@ public class NMSImpl implements NMSBridge {
|
|||
};
|
||||
try {
|
||||
network.socketAddress = socketAddress;
|
||||
}
|
||||
catch (NoSuchFieldError ex) {
|
||||
} catch (NoSuchFieldError ex) {
|
||||
if (NETWORK_ADDRESS == null) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
NETWORK_ADDRESS.set(network, socketAddress);
|
||||
}
|
||||
catch (IllegalArgumentException e) {
|
||||
} catch (IllegalArgumentException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
catch (IllegalAccessException e) {
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
@ -1570,6 +1619,8 @@ public class NMSImpl implements NMSBridge {
|
|||
private static final Set<EntityType> BAD_CONTROLLER_LOOK = EnumSet.of(EntityType.POLAR_BEAR, EntityType.SILVERFISH,
|
||||
EntityType.SHULKER, EntityType.ENDERMITE, EntityType.ENDER_DRAGON, EntityType.BAT, EntityType.SLIME,
|
||||
EntityType.MAGMA_CUBE, EntityType.HORSE, EntityType.GHAST);
|
||||
private static final Method BLOCK_POSITION_B_D = NMS.getMethod(BlockPosition.b.class, "e", false, double.class,
|
||||
double.class, double.class);
|
||||
private static final Field CRAFT_BOSSBAR_HANDLE_FIELD = NMS.getField(CraftBossBar.class, "handle");
|
||||
private static final float DEFAULT_SPEED = 1F;
|
||||
private static final Field ENDERDRAGON_BATTLE_BAR_FIELD = NMS.getField(EnderDragonBattle.class, "c", false);
|
||||
|
|
|
@ -664,6 +664,11 @@ public class NMSImpl implements NMSBridge {
|
|||
throw new IllegalArgumentException("unable to find valid entity superclass for class " + clazz.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove(org.bukkit.entity.Entity entity) {
|
||||
NMSImpl.getHandle(entity).die();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeFromServerPlayerList(Player player) {
|
||||
EntityPlayer handle = (EntityPlayer) NMSImpl.getHandle(player);
|
||||
|
|
Loading…
Reference in New Issue
Block a user