mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2025-02-16 12:21:25 +01:00
Initial 1.8.8 support
This commit is contained in:
parent
09666bfb8a
commit
4c99dc0e7c
9
dist/pom.xml
vendored
9
dist/pom.xml
vendored
@ -40,7 +40,14 @@
|
||||
<version>${project.version}</version>
|
||||
<type>jar</type>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>citizens-v1_8_R3</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<type>jar</type>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>citizens-v1_10_R1</artifactId>
|
||||
|
@ -307,7 +307,9 @@ public class Citizens extends JavaPlugin implements CitizensPlugin {
|
||||
startMetrics();
|
||||
scheduleSaveTask(Setting.SAVE_TASK_DELAY.asInt());
|
||||
Bukkit.getPluginManager().callEvent(new CitizensEnableEvent());
|
||||
new PlayerUpdateTask().runTaskTimer(Citizens.this, 0, 1);
|
||||
if (!Util.getMinecraftRevision().equals("1_8_R3")) {
|
||||
new PlayerUpdateTask().runTaskTimer(Citizens.this, 0, 1);
|
||||
}
|
||||
}
|
||||
}, 1) == -1) {
|
||||
Messaging.severeTr(Messages.LOAD_TASK_NOT_SCHEDULED);
|
||||
|
@ -10,7 +10,6 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.AbstractHorse;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.FishHook;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
@ -46,7 +45,6 @@ import org.bukkit.event.world.ChunkLoadEvent;
|
||||
import org.bukkit.event.world.ChunkUnloadEvent;
|
||||
import org.bukkit.event.world.WorldLoadEvent;
|
||||
import org.bukkit.event.world.WorldUnloadEvent;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import org.bukkit.inventory.meta.SkullMeta;
|
||||
import org.bukkit.metadata.FixedMetadataValue;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
@ -93,6 +91,7 @@ import net.citizensnpcs.trait.Controllable;
|
||||
import net.citizensnpcs.trait.CurrentLocation;
|
||||
import net.citizensnpcs.util.Messages;
|
||||
import net.citizensnpcs.util.NMS;
|
||||
import net.citizensnpcs.util.Util;
|
||||
|
||||
public class EventListen implements Listener {
|
||||
private final NPCRegistry npcRegistry = CitizensAPI.getNPCRegistry();
|
||||
@ -409,7 +408,7 @@ public class EventListen implements Listener {
|
||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
|
||||
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
|
||||
NPC npc = npcRegistry.getNPC(event.getRightClicked());
|
||||
if (npc == null || event.getHand() == EquipmentSlot.OFF_HAND) {
|
||||
if (npc == null || Util.isOffHand(event)) {
|
||||
return;
|
||||
}
|
||||
Player player = event.getPlayer();
|
||||
@ -519,7 +518,7 @@ public class EventListen implements Listener {
|
||||
if (!npcRegistry.isNPC(event.getVehicle()))
|
||||
return;
|
||||
NPC npc = npcRegistry.getNPC(event.getVehicle());
|
||||
if ((npc.getEntity() instanceof AbstractHorse || npc.getEntity().getType() == EntityType.BOAT
|
||||
if ((Util.isHorse(npc.getEntity()) || npc.getEntity().getType() == EntityType.BOAT
|
||||
|| npc.getEntity().getType() == EntityType.PIG || npc.getEntity() instanceof Minecart)
|
||||
&& (!npc.hasTrait(Controllable.class) || !npc.getTrait(Controllable.class).isEnabled())) {
|
||||
event.setCancelled(true);
|
||||
|
@ -16,8 +16,6 @@ import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.boss.BarColor;
|
||||
import org.bukkit.boss.BarFlag;
|
||||
import org.bukkit.command.BlockCommandSender;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
@ -48,7 +46,6 @@ import net.citizensnpcs.api.command.CommandContext;
|
||||
import net.citizensnpcs.api.command.CommandMessages;
|
||||
import net.citizensnpcs.api.command.Requirements;
|
||||
import net.citizensnpcs.api.command.exception.CommandException;
|
||||
import net.citizensnpcs.api.command.exception.CommandUsageException;
|
||||
import net.citizensnpcs.api.command.exception.NoPermissionsException;
|
||||
import net.citizensnpcs.api.command.exception.ServerCommandException;
|
||||
import net.citizensnpcs.api.event.CommandSenderCreateNPCEvent;
|
||||
@ -72,7 +69,6 @@ import net.citizensnpcs.npc.skin.SkinnableEntity;
|
||||
import net.citizensnpcs.trait.Age;
|
||||
import net.citizensnpcs.trait.Anchors;
|
||||
import net.citizensnpcs.trait.ArmorStandTrait;
|
||||
import net.citizensnpcs.trait.BossBarTrait;
|
||||
import net.citizensnpcs.trait.Controllable;
|
||||
import net.citizensnpcs.trait.CurrentLocation;
|
||||
import net.citizensnpcs.trait.Gravity;
|
||||
@ -84,7 +80,6 @@ import net.citizensnpcs.trait.Powered;
|
||||
import net.citizensnpcs.trait.RabbitType;
|
||||
import net.citizensnpcs.trait.ScriptTrait;
|
||||
import net.citizensnpcs.trait.SheepTrait;
|
||||
import net.citizensnpcs.trait.ShulkerTrait;
|
||||
import net.citizensnpcs.trait.SkinLayers;
|
||||
import net.citizensnpcs.trait.SkinLayers.Layer;
|
||||
import net.citizensnpcs.trait.SlimeSize;
|
||||
@ -254,38 +249,6 @@ public class NPCCommands {
|
||||
}
|
||||
}
|
||||
|
||||
@Command(
|
||||
aliases = { "npc" },
|
||||
usage = "bossbar --color [color] --title [title] --visible [visible] --flags [flags]",
|
||||
desc = "Edit bossbar properties",
|
||||
modifiers = { "bossbar" },
|
||||
min = 1,
|
||||
max = 1)
|
||||
@Requirements(selected = true, ownership = true, types = { EntityType.WITHER, EntityType.ENDER_DRAGON })
|
||||
public void bossbar(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
||||
BossBarTrait trait = npc.getTrait(BossBarTrait.class);
|
||||
if (args.hasValueFlag("color")) {
|
||||
BarColor color = Util.matchEnum(BarColor.values(), args.getFlag("color"));
|
||||
trait.setColor(color);
|
||||
}
|
||||
if (args.hasValueFlag("title")) {
|
||||
trait.setTitle(args.getFlag("title"));
|
||||
}
|
||||
if (args.hasValueFlag("visible")) {
|
||||
trait.setVisible(Boolean.parseBoolean(args.getFlag("visible")));
|
||||
}
|
||||
if (args.hasValueFlag("flags")) {
|
||||
List<BarFlag> flags = Lists.newArrayList();
|
||||
for (String s : Splitter.on(',').omitEmptyStrings().trimResults().split(args.getFlag("flags"))) {
|
||||
BarFlag flag = Util.matchEnum(BarFlag.values(), s);
|
||||
if (flag != null) {
|
||||
flags.add(flag);
|
||||
}
|
||||
}
|
||||
trait.setFlags(flags);
|
||||
}
|
||||
}
|
||||
|
||||
@Command(
|
||||
aliases = { "npc" },
|
||||
usage = "collidable",
|
||||
@ -1494,39 +1457,6 @@ public class NPCCommands {
|
||||
}
|
||||
}
|
||||
|
||||
@Command(
|
||||
aliases = { "npc" },
|
||||
usage = "shulker (--peek [peek] --color [color])",
|
||||
desc = "Sets shulker modifiers.",
|
||||
modifiers = { "shulker" },
|
||||
min = 1,
|
||||
max = 1,
|
||||
permission = "citizens.npc.shulker")
|
||||
@Requirements(selected = true, ownership = true, types = { EntityType.SHULKER })
|
||||
public void shulker(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
||||
ShulkerTrait trait = npc.getTrait(ShulkerTrait.class);
|
||||
boolean hasArg = false;
|
||||
if (args.hasValueFlag("peek")) {
|
||||
int peek = (byte) args.getFlagInteger("peek");
|
||||
trait.setPeek(peek);
|
||||
Messaging.sendTr(sender, Messages.SHULKER_PEEK_SET, npc.getName(), peek);
|
||||
hasArg = true;
|
||||
}
|
||||
if (args.hasValueFlag("color")) {
|
||||
DyeColor color = Util.matchEnum(DyeColor.values(), args.getFlag("color"));
|
||||
if (color == null) {
|
||||
Messaging.sendErrorTr(sender, Messages.INVALID_SHULKER_COLOR, Util.listValuesPretty(DyeColor.values()));
|
||||
return;
|
||||
}
|
||||
trait.setColor(color);
|
||||
Messaging.sendTr(sender, Messages.SHULKER_COLOR_SET, npc.getName(), Util.prettyEnum(color));
|
||||
hasArg = true;
|
||||
}
|
||||
if (!hasArg) {
|
||||
throw new CommandUsageException();
|
||||
}
|
||||
}
|
||||
|
||||
@Command(
|
||||
aliases = { "npc" },
|
||||
usage = "skin (-c -l(atest)) [name]",
|
||||
|
@ -14,7 +14,7 @@ import net.citizensnpcs.util.Messages;
|
||||
public class EndermanEquipper implements Equipper {
|
||||
@Override
|
||||
public void equip(Player equipper, NPC npc) {
|
||||
ItemStack hand = equipper.getInventory().getItemInMainHand();
|
||||
ItemStack hand = equipper.getInventory().getItemInHand();
|
||||
if (!hand.getType().isBlock()) {
|
||||
Messaging.sendErrorTr(equipper, Messages.EQUIPMENT_EDITOR_INVALID_BLOCK);
|
||||
return;
|
||||
@ -35,7 +35,7 @@ public class EndermanEquipper implements Equipper {
|
||||
if (set.getType() != Material.AIR) {
|
||||
set.setAmount(1);
|
||||
hand.setAmount(hand.getAmount() - 1);
|
||||
equipper.getInventory().setItemInMainHand(hand);
|
||||
equipper.getInventory().setItemInHand(hand);
|
||||
}
|
||||
npc.getTrait(Equipment.class).set(0, set);
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ import net.citizensnpcs.api.trait.trait.Equipment;
|
||||
import net.citizensnpcs.api.trait.trait.Equipment.EquipmentSlot;
|
||||
import net.citizensnpcs.api.util.Messaging;
|
||||
import net.citizensnpcs.util.Messages;
|
||||
import net.citizensnpcs.util.Util;
|
||||
|
||||
public class EquipmentEditor extends Editor {
|
||||
private final NPC npc;
|
||||
@ -62,7 +63,7 @@ public class EquipmentEditor extends Editor {
|
||||
public void run() {
|
||||
if (!event.getPlayer().isValid())
|
||||
return;
|
||||
ItemStack hand = event.getPlayer().getInventory().getItemInMainHand();
|
||||
ItemStack hand = event.getPlayer().getInventory().getItemInHand();
|
||||
if (hand.getType() == Material.AIR || hand.getAmount() <= 0) {
|
||||
return;
|
||||
}
|
||||
@ -74,7 +75,7 @@ public class EquipmentEditor extends Editor {
|
||||
newStack.setAmount(1);
|
||||
npc.getTrait(Equipment.class).set(finalSlot, newStack);
|
||||
hand.setAmount(hand.getAmount() - 1);
|
||||
event.getPlayer().getInventory().setItemInMainHand(hand);
|
||||
event.getPlayer().getInventory().setItemInHand(hand);
|
||||
}
|
||||
});
|
||||
event.setCancelled(true);
|
||||
@ -89,8 +90,7 @@ public class EquipmentEditor extends Editor {
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
|
||||
if (!npc.isSpawned() || !event.getPlayer().equals(player)
|
||||
|| event.getHand() != org.bukkit.inventory.EquipmentSlot.HAND
|
||||
if (!npc.isSpawned() || !event.getPlayer().equals(player) || Util.isOffHand(event)
|
||||
|| !npc.equals(CitizensAPI.getNPCRegistry().getNPC(event.getRightClicked())))
|
||||
return;
|
||||
|
||||
|
@ -13,67 +13,70 @@ import net.citizensnpcs.util.Messages;
|
||||
public class GenericEquipper implements Equipper {
|
||||
@Override
|
||||
public void equip(Player equipper, NPC toEquip) {
|
||||
ItemStack hand = equipper.getInventory().getItemInMainHand();
|
||||
ItemStack hand = equipper.getInventory().getItemInHand();
|
||||
Equipment trait = toEquip.getTrait(Equipment.class);
|
||||
EquipmentSlot slot = EquipmentSlot.HAND;
|
||||
Material type = hand == null ? Material.AIR : hand.getType();
|
||||
// First, determine the slot to edit
|
||||
switch (type) {
|
||||
case SKULL_ITEM:
|
||||
case PUMPKIN:
|
||||
case JACK_O_LANTERN:
|
||||
case LEATHER_HELMET:
|
||||
case CHAINMAIL_HELMET:
|
||||
case GOLD_HELMET:
|
||||
case IRON_HELMET:
|
||||
case DIAMOND_HELMET:
|
||||
if (!equipper.isSneaking()) {
|
||||
slot = EquipmentSlot.HELMET;
|
||||
}
|
||||
break;
|
||||
case ELYTRA:
|
||||
case LEATHER_CHESTPLATE:
|
||||
case CHAINMAIL_CHESTPLATE:
|
||||
case GOLD_CHESTPLATE:
|
||||
case IRON_CHESTPLATE:
|
||||
case DIAMOND_CHESTPLATE:
|
||||
if (!equipper.isSneaking()) {
|
||||
slot = EquipmentSlot.CHESTPLATE;
|
||||
}
|
||||
break;
|
||||
case LEATHER_LEGGINGS:
|
||||
case CHAINMAIL_LEGGINGS:
|
||||
case GOLD_LEGGINGS:
|
||||
case IRON_LEGGINGS:
|
||||
case DIAMOND_LEGGINGS:
|
||||
if (!equipper.isSneaking()) {
|
||||
slot = EquipmentSlot.LEGGINGS;
|
||||
}
|
||||
break;
|
||||
case LEATHER_BOOTS:
|
||||
case CHAINMAIL_BOOTS:
|
||||
case GOLD_BOOTS:
|
||||
case IRON_BOOTS:
|
||||
case DIAMOND_BOOTS:
|
||||
if (!equipper.isSneaking()) {
|
||||
slot = EquipmentSlot.BOOTS;
|
||||
}
|
||||
break;
|
||||
case AIR:
|
||||
if (equipper.isSneaking()) {
|
||||
for (int i = 0; i < 6; i++) {
|
||||
if (trait.get(i) != null && trait.get(i).getType() != Material.AIR) {
|
||||
equipper.getWorld().dropItemNaturally(toEquip.getEntity().getLocation(), trait.get(i));
|
||||
trait.set(i, null);
|
||||
}
|
||||
if (type.name().equals("ELYTRA") && !equipper.isSneaking()) {
|
||||
slot = EquipmentSlot.CHESTPLATE;
|
||||
} else {
|
||||
switch (type) {
|
||||
case SKULL_ITEM:
|
||||
case PUMPKIN:
|
||||
case JACK_O_LANTERN:
|
||||
case LEATHER_HELMET:
|
||||
case CHAINMAIL_HELMET:
|
||||
case GOLD_HELMET:
|
||||
case IRON_HELMET:
|
||||
case DIAMOND_HELMET:
|
||||
if (!equipper.isSneaking()) {
|
||||
slot = EquipmentSlot.HELMET;
|
||||
}
|
||||
Messaging.sendTr(equipper, Messages.EQUIPMENT_EDITOR_ALL_ITEMS_REMOVED, toEquip.getName());
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
break;
|
||||
case LEATHER_CHESTPLATE:
|
||||
case CHAINMAIL_CHESTPLATE:
|
||||
case GOLD_CHESTPLATE:
|
||||
case IRON_CHESTPLATE:
|
||||
case DIAMOND_CHESTPLATE:
|
||||
if (!equipper.isSneaking()) {
|
||||
slot = EquipmentSlot.CHESTPLATE;
|
||||
}
|
||||
break;
|
||||
case LEATHER_LEGGINGS:
|
||||
case CHAINMAIL_LEGGINGS:
|
||||
case GOLD_LEGGINGS:
|
||||
case IRON_LEGGINGS:
|
||||
case DIAMOND_LEGGINGS:
|
||||
if (!equipper.isSneaking()) {
|
||||
slot = EquipmentSlot.LEGGINGS;
|
||||
}
|
||||
break;
|
||||
case LEATHER_BOOTS:
|
||||
case CHAINMAIL_BOOTS:
|
||||
case GOLD_BOOTS:
|
||||
case IRON_BOOTS:
|
||||
case DIAMOND_BOOTS:
|
||||
if (!equipper.isSneaking()) {
|
||||
slot = EquipmentSlot.BOOTS;
|
||||
}
|
||||
break;
|
||||
case AIR:
|
||||
if (equipper.isSneaking()) {
|
||||
for (int i = 0; i < 6; i++) {
|
||||
if (trait.get(i) != null && trait.get(i).getType() != Material.AIR) {
|
||||
equipper.getWorld().dropItemNaturally(toEquip.getEntity().getLocation(), trait.get(i));
|
||||
trait.set(i, null);
|
||||
}
|
||||
}
|
||||
Messaging.sendTr(equipper, Messages.EQUIPMENT_EDITOR_ALL_ITEMS_REMOVED, toEquip.getName());
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Drop any previous equipment on the ground
|
||||
ItemStack equippedItem = trait.get(slot);
|
||||
@ -88,7 +91,7 @@ public class GenericEquipper implements Equipper {
|
||||
clone.setAmount(1);
|
||||
trait.set(slot, clone);
|
||||
hand.setAmount(hand.getAmount() - 1);
|
||||
equipper.getInventory().setItemInMainHand(hand);
|
||||
equipper.getInventory().setItemInHand(hand);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ import net.citizensnpcs.util.Messages;
|
||||
public class PigEquipper implements Equipper {
|
||||
@Override
|
||||
public void equip(Player equipper, NPC toEquip) {
|
||||
ItemStack hand = equipper.getInventory().getItemInMainHand();
|
||||
ItemStack hand = equipper.getInventory().getItemInHand();
|
||||
Pig pig = (Pig) toEquip.getEntity();
|
||||
if (hand.getType() == Material.SADDLE) {
|
||||
if (!pig.hasSaddle()) {
|
||||
@ -26,6 +26,6 @@ public class PigEquipper implements Equipper {
|
||||
toEquip.getTrait(Saddle.class).toggle();
|
||||
Messaging.sendTr(equipper, Messages.SADDLED_STOPPED, toEquip.getName());
|
||||
}
|
||||
equipper.getInventory().setItemInMainHand(hand);
|
||||
equipper.getInventory().setItemInHand(hand);
|
||||
}
|
||||
}
|
||||
|
@ -16,7 +16,7 @@ import net.citizensnpcs.util.Messages;
|
||||
public class SheepEquipper implements Equipper {
|
||||
@Override
|
||||
public void equip(Player equipper, NPC toEquip) {
|
||||
ItemStack hand = equipper.getInventory().getItemInMainHand();
|
||||
ItemStack hand = equipper.getInventory().getItemInHand();
|
||||
Sheep sheep = (Sheep) toEquip.getEntity();
|
||||
if (hand.getType() == Material.SHEARS) {
|
||||
Messaging.sendTr(equipper, toEquip.getTrait(SheepTrait.class).toggleSheared() ? Messages.SHEARED_SET
|
||||
@ -35,6 +35,6 @@ public class SheepEquipper implements Equipper {
|
||||
toEquip.getTrait(WoolColor.class).setColor(DyeColor.WHITE);
|
||||
Messaging.sendTr(equipper, Messages.EQUIPMENT_EDITOR_SHEEP_COLOURED, toEquip.getName(), "white");
|
||||
}
|
||||
equipper.getInventory().setItemInMainHand(hand);
|
||||
equipper.getInventory().setItemInHand(hand);
|
||||
}
|
||||
}
|
||||
|
@ -275,17 +275,19 @@ public class CitizensNPC extends AbstractNPC {
|
||||
NMS.trySwim(getEntity());
|
||||
}
|
||||
navigator.run();
|
||||
|
||||
getEntity().setGlowing(data().get(NPC.GLOWING_METADATA, false));
|
||||
try {
|
||||
getEntity().setGlowing(data().get(NPC.GLOWING_METADATA, false));
|
||||
} catch (NoSuchMethodError e) {
|
||||
}
|
||||
if (!getNavigator().isNavigating() && updateCounter++ > Setting.PACKET_UPDATE_DELAY.asInt()) {
|
||||
updateCounter = 0;
|
||||
if (getEntity() instanceof LivingEntity) {
|
||||
OptionStatus nameVisibility = OptionStatus.NEVER;
|
||||
boolean nameVisibility = false;
|
||||
if (!getEntity().isCustomNameVisible()
|
||||
&& !data().<Object> get(NPC.NAMEPLATE_VISIBLE_METADATA, true).toString().equals("hover")) {
|
||||
getEntity().setCustomName("");
|
||||
} else {
|
||||
nameVisibility = OptionStatus.ALWAYS;
|
||||
nameVisibility = true;
|
||||
getEntity().setCustomName(getFullName());
|
||||
}
|
||||
String teamName = data().get(NPC.SCOREBOARD_FAKE_TEAM_NAME_METADATA, "");
|
||||
@ -296,7 +298,12 @@ public class CitizensNPC extends AbstractNPC {
|
||||
team.unregister();
|
||||
data().remove(NPC.SCOREBOARD_FAKE_TEAM_NAME_METADATA);
|
||||
} else {
|
||||
team.setOption(Option.NAME_TAG_VISIBILITY, nameVisibility);
|
||||
try {
|
||||
team.setOption(Option.NAME_TAG_VISIBILITY,
|
||||
nameVisibility ? OptionStatus.NEVER : OptionStatus.ALWAYS);
|
||||
} catch (NoSuchMethodError e) {
|
||||
} catch (NoClassDefFoundError e) {
|
||||
}
|
||||
if (data().has(NPC.GLOWING_COLOR_METADATA)) {
|
||||
if (team.getPrefix() == null || team.getPrefix().length() == 0
|
||||
|| (data().has("previous-glowing-color")
|
||||
@ -328,7 +335,10 @@ public class CitizensNPC extends AbstractNPC {
|
||||
}
|
||||
|
||||
if (data().has(NPC.SILENT_METADATA)) {
|
||||
getEntity().setSilent(Boolean.parseBoolean(data().get(NPC.SILENT_METADATA).toString()));
|
||||
try {
|
||||
getEntity().setSilent(Boolean.parseBoolean(data().get(NPC.SILENT_METADATA).toString()));
|
||||
} catch (NoSuchMethodError e) {
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Throwable error = Throwables.getRootCause(ex);
|
||||
|
@ -25,7 +25,6 @@ import net.citizensnpcs.api.trait.trait.Speech;
|
||||
import net.citizensnpcs.trait.Age;
|
||||
import net.citizensnpcs.trait.Anchors;
|
||||
import net.citizensnpcs.trait.ArmorStandTrait;
|
||||
import net.citizensnpcs.trait.BossBarTrait;
|
||||
import net.citizensnpcs.trait.Controllable;
|
||||
import net.citizensnpcs.trait.CurrentLocation;
|
||||
import net.citizensnpcs.trait.Gravity;
|
||||
@ -39,7 +38,6 @@ import net.citizensnpcs.trait.RabbitType;
|
||||
import net.citizensnpcs.trait.Saddle;
|
||||
import net.citizensnpcs.trait.ScriptTrait;
|
||||
import net.citizensnpcs.trait.SheepTrait;
|
||||
import net.citizensnpcs.trait.ShulkerTrait;
|
||||
import net.citizensnpcs.trait.SkinLayers;
|
||||
import net.citizensnpcs.trait.SlimeSize;
|
||||
import net.citizensnpcs.trait.VillagerProfession;
|
||||
@ -57,7 +55,6 @@ public class CitizensTraitFactory implements TraitFactory {
|
||||
registerTrait(TraitInfo.create(Age.class));
|
||||
registerTrait(TraitInfo.create(ArmorStandTrait.class));
|
||||
registerTrait(TraitInfo.create(Anchors.class));
|
||||
registerTrait(TraitInfo.create(BossBarTrait.class));
|
||||
registerTrait(TraitInfo.create(Controllable.class));
|
||||
registerTrait(TraitInfo.create(Equipment.class));
|
||||
registerTrait(TraitInfo.create(Gravity.class));
|
||||
@ -73,7 +70,6 @@ public class CitizensTraitFactory implements TraitFactory {
|
||||
registerTrait(TraitInfo.create(Saddle.class));
|
||||
registerTrait(TraitInfo.create(ScriptTrait.class));
|
||||
registerTrait(TraitInfo.create(SheepTrait.class));
|
||||
registerTrait(TraitInfo.create(ShulkerTrait.class));
|
||||
registerTrait(TraitInfo.create(SkinLayers.class));
|
||||
registerTrait(TraitInfo.create(MountTrait.class));
|
||||
registerTrait(TraitInfo.create(SlimeSize.class));
|
||||
|
@ -20,7 +20,7 @@ public class VillagerProfession extends Trait {
|
||||
public void load(DataKey key) throws NPCLoadException {
|
||||
try {
|
||||
profession = Profession.valueOf(key.getString(""));
|
||||
if (profession == Profession.NORMAL) {
|
||||
if (profession.name().equals("NORMAL")) {
|
||||
profession = Profession.FARMER;
|
||||
}
|
||||
} catch (IllegalArgumentException ex) {
|
||||
@ -41,7 +41,7 @@ public class VillagerProfession extends Trait {
|
||||
}
|
||||
|
||||
public void setProfession(Profession profession) {
|
||||
if (profession == Profession.NORMAL) {
|
||||
if (profession.name().equals("NORMAL")) {
|
||||
profession = Profession.FARMER;
|
||||
}
|
||||
this.profession = profession;
|
||||
|
@ -13,7 +13,6 @@ import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import org.bukkit.metadata.FixedMetadataValue;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
@ -115,7 +114,7 @@ public class GuidedWaypointProvider implements EnumerableWaypointProvider {
|
||||
public void onPlayerInteract(PlayerInteractEvent event) {
|
||||
if (!event.getPlayer().equals(player) || event.getAction() == Action.PHYSICAL
|
||||
|| event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK
|
||||
|| event.getClickedBlock() == null || event.getHand() == EquipmentSlot.OFF_HAND)
|
||||
|| event.getClickedBlock() == null || Util.isOffHand(event))
|
||||
return;
|
||||
if (event.getPlayer().getWorld() != npc.getEntity().getWorld())
|
||||
return;
|
||||
@ -135,8 +134,7 @@ public class GuidedWaypointProvider implements EnumerableWaypointProvider {
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
|
||||
if (!event.getRightClicked().hasMetadata("citizens.waypointhashcode")
|
||||
|| event.getHand() == EquipmentSlot.OFF_HAND)
|
||||
if (!event.getRightClicked().hasMetadata("citizens.waypointhashcode") || Util.isOffHand(event))
|
||||
return;
|
||||
int hashcode = event.getRightClicked().getMetadata("citizens.waypointhashcode").get(0).asInt();
|
||||
Iterator<Waypoint> itr = Iterables.concat(available, helpers).iterator();
|
||||
|
@ -17,7 +17,6 @@ import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerItemHeldEvent;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
@ -264,8 +263,7 @@ public class LinearWaypointProvider implements EnumerableWaypointProvider {
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onPlayerInteract(PlayerInteractEvent event) {
|
||||
if (!event.getPlayer().equals(player) || event.getAction() == Action.PHYSICAL || !npc.isSpawned()
|
||||
|| event.getPlayer().getWorld() != npc.getEntity().getWorld()
|
||||
|| event.getHand() == EquipmentSlot.OFF_HAND)
|
||||
|| event.getPlayer().getWorld() != npc.getEntity().getWorld() || Util.isOffHand(event))
|
||||
return;
|
||||
if (event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_AIR) {
|
||||
if (event.getClickedBlock() == null)
|
||||
@ -309,7 +307,7 @@ public class LinearWaypointProvider implements EnumerableWaypointProvider {
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
|
||||
if (!player.equals(event.getPlayer()) || !showPath || event.getHand() == EquipmentSlot.OFF_HAND)
|
||||
if (!player.equals(event.getPlayer()) || !showPath || Util.isOffHand(event))
|
||||
return;
|
||||
if (!event.getRightClicked().hasMetadata("waypointindex"))
|
||||
return;
|
||||
|
@ -11,7 +11,6 @@ import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import org.bukkit.metadata.FixedMetadataValue;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
@ -27,6 +26,7 @@ import net.citizensnpcs.api.util.Messaging;
|
||||
import net.citizensnpcs.api.util.cuboid.QuadCuboid;
|
||||
import net.citizensnpcs.api.util.cuboid.QuadTree;
|
||||
import net.citizensnpcs.util.Messages;
|
||||
import net.citizensnpcs.util.Util;
|
||||
|
||||
public class WanderWaypointProvider implements WaypointProvider, Supplier<QuadTree> {
|
||||
private WanderGoal currentGoal;
|
||||
@ -122,8 +122,7 @@ public class WanderWaypointProvider implements WaypointProvider, Supplier<QuadTr
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onPlayerInteract(PlayerInteractEvent event) {
|
||||
if (!event.getPlayer().equals(sender) || event.getAction() == Action.PHYSICAL || !npc.isSpawned()
|
||||
|| event.getPlayer().getWorld() != npc.getEntity().getWorld()
|
||||
|| event.getHand() == EquipmentSlot.OFF_HAND)
|
||||
|| event.getPlayer().getWorld() != npc.getEntity().getWorld() || Util.isOffHand(event))
|
||||
return;
|
||||
if (event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_AIR) {
|
||||
if (event.getClickedBlock() == null)
|
||||
@ -143,7 +142,7 @@ public class WanderWaypointProvider implements WaypointProvider, Supplier<QuadTr
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
|
||||
if (!sender.equals(event.getPlayer()) || !editingRegions || event.getHand() == EquipmentSlot.OFF_HAND)
|
||||
if (!sender.equals(event.getPlayer()) || !editingRegions || Util.isOffHand(event))
|
||||
return;
|
||||
if (!event.getRightClicked().hasMetadata("wandermarker"))
|
||||
return;
|
||||
|
@ -5,15 +5,12 @@ import java.lang.reflect.Modifier;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.boss.BossBar;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.FishHook;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Shulker;
|
||||
import org.bukkit.entity.Tameable;
|
||||
import org.bukkit.entity.Wither;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
||||
@ -64,10 +61,6 @@ public class NMS {
|
||||
return BRIDGE.getBlockBreaker(entity, targetBlock, config);
|
||||
}
|
||||
|
||||
public static BossBar getBossBar(org.bukkit.entity.Entity entity) {
|
||||
return BRIDGE.getBossBar(entity);
|
||||
}
|
||||
|
||||
public static BoundingBox getBoundingBox(org.bukkit.entity.Entity handle) {
|
||||
return BRIDGE.getBoundingBox(handle);
|
||||
}
|
||||
@ -262,14 +255,6 @@ public class NMS {
|
||||
BRIDGE.setShouldJump(entity);
|
||||
}
|
||||
|
||||
public static void setShulkerColor(Shulker entity, DyeColor color) {
|
||||
BRIDGE.setShulkerColor(entity, color);
|
||||
}
|
||||
|
||||
public static void setShulkerPeek(Shulker shulker, int peek) {
|
||||
BRIDGE.setShulkerPeek(shulker, peek);
|
||||
}
|
||||
|
||||
public static void setSitting(Tameable tameable, boolean sitting) {
|
||||
BRIDGE.setSitting(tameable, sitting);
|
||||
}
|
||||
|
@ -3,16 +3,13 @@ package net.citizensnpcs.util;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.boss.BossBar;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.FishHook;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Shulker;
|
||||
import org.bukkit.entity.Tameable;
|
||||
import org.bukkit.entity.Wither;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
||||
@ -44,8 +41,6 @@ public interface NMSBridge {
|
||||
|
||||
public BlockBreaker getBlockBreaker(Entity entity, Block targetBlock, BlockBreakerConfiguration config);
|
||||
|
||||
public BossBar getBossBar(Entity entity);
|
||||
|
||||
public BoundingBox getBoundingBox(Entity handle);
|
||||
|
||||
public GameProfileRepository getGameProfileRepository();
|
||||
@ -126,10 +121,6 @@ public interface NMSBridge {
|
||||
|
||||
public void setShouldJump(Entity entity);
|
||||
|
||||
public void setShulkerColor(Shulker entity, DyeColor color);
|
||||
|
||||
public void setShulkerPeek(Shulker shulker, int peek);
|
||||
|
||||
public void setSitting(Tameable tameable, boolean sitting);
|
||||
|
||||
public void setStepHeight(Entity entity, float height);
|
||||
|
@ -9,6 +9,8 @@ import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import com.google.common.base.Joiner;
|
||||
@ -89,14 +91,14 @@ public class Util {
|
||||
}
|
||||
|
||||
public static boolean isAlwaysFlyable(EntityType type) {
|
||||
if (type.name().toLowerCase().contains("vex")) // 1.11 compatibility
|
||||
if (type.name().toLowerCase().contains("vex") || type.name().toLowerCase().contains("parrot"))
|
||||
// 1.8.8 compatibility
|
||||
return true;
|
||||
switch (type) {
|
||||
case BAT:
|
||||
case BLAZE:
|
||||
case ENDER_DRAGON:
|
||||
case GHAST:
|
||||
case PARROT:
|
||||
case WITHER:
|
||||
return true;
|
||||
default:
|
||||
@ -104,6 +106,12 @@ public class Util {
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isHorse(Entity entity) {
|
||||
String name = entity.getType().name();
|
||||
return entity.getType() == EntityType.HORSE || name.contains("_HORSE") || name.equals("DONKEY")
|
||||
|| name.equals("MULE") || name.equals("LLAMA");
|
||||
}
|
||||
|
||||
public static boolean isLoaded(Location location) {
|
||||
if (location.getWorld() == null)
|
||||
return false;
|
||||
@ -112,6 +120,26 @@ public class Util {
|
||||
return location.getWorld().isChunkLoaded(chunkX, chunkZ);
|
||||
}
|
||||
|
||||
public static boolean isOffHand(PlayerInteractEntityEvent event) {
|
||||
try {
|
||||
return event.getHand() == org.bukkit.inventory.EquipmentSlot.OFF_HAND;
|
||||
} catch (NoSuchMethodError e) {
|
||||
return false;
|
||||
} catch (NoSuchFieldError e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isOffHand(PlayerInteractEvent event) {
|
||||
try {
|
||||
return event.getHand() == org.bukkit.inventory.EquipmentSlot.OFF_HAND;
|
||||
} catch (NoSuchMethodError e) {
|
||||
return false;
|
||||
} catch (NoSuchFieldError e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static String listValuesPretty(Enum<?>[] values) {
|
||||
return "<e>" + Joiner.on("<a>, <e>").join(values).toLowerCase();
|
||||
}
|
||||
@ -150,7 +178,7 @@ public class Util {
|
||||
if (parts.contains("*"))
|
||||
return true;
|
||||
for (String part : Splitter.on(',').split(parts)) {
|
||||
if (Material.matchMaterial(part) == player.getInventory().getItemInMainHand().getType()) {
|
||||
if (Material.matchMaterial(part) == player.getInventory().getItemInHand().getType()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
3
pom.xml
3
pom.xml
@ -9,7 +9,8 @@
|
||||
<artifactId>citizens-parent</artifactId>
|
||||
<version>2.0.22-SNAPSHOT</version>
|
||||
<modules>
|
||||
<module>main</module>
|
||||
<module>main</module>
|
||||
<module>v1_8_R3</module>
|
||||
<module>v1_10_R1</module>
|
||||
<module>v1_11_R1</module>
|
||||
<module>v1_12_R1</module>
|
||||
|
@ -1,4 +1,4 @@
|
||||
package net.citizensnpcs.trait;
|
||||
package net.citizensnpcs.nms.v1_10_R1.trait;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@ -14,7 +14,7 @@ import com.google.common.collect.Lists;
|
||||
import net.citizensnpcs.api.persistence.Persist;
|
||||
import net.citizensnpcs.api.trait.Trait;
|
||||
import net.citizensnpcs.api.trait.TraitName;
|
||||
import net.citizensnpcs.util.NMS;
|
||||
import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl;
|
||||
|
||||
@TraitName("bossbar")
|
||||
public class BossBarTrait extends Trait {
|
||||
@ -40,7 +40,7 @@ public class BossBarTrait extends Trait {
|
||||
public void run() {
|
||||
if (!npc.isSpawned() || !isBoss(npc.getEntity()))
|
||||
return;
|
||||
BossBar bar = NMS.getBossBar(npc.getEntity());
|
||||
BossBar bar = NMSImpl.getBossBar(npc.getEntity());
|
||||
bar.setVisible(visible);
|
||||
if (color != null) {
|
||||
bar.setColor(color);
|
@ -0,0 +1,90 @@
|
||||
package net.citizensnpcs.nms.v1_10_R1.trait;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.boss.BarColor;
|
||||
import org.bukkit.boss.BarFlag;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.EntityType;
|
||||
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import net.citizensnpcs.api.command.Command;
|
||||
import net.citizensnpcs.api.command.CommandContext;
|
||||
import net.citizensnpcs.api.command.Requirements;
|
||||
import net.citizensnpcs.api.command.exception.CommandException;
|
||||
import net.citizensnpcs.api.command.exception.CommandUsageException;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.api.util.Messaging;
|
||||
import net.citizensnpcs.util.Messages;
|
||||
import net.citizensnpcs.util.Util;
|
||||
|
||||
public class Commands {
|
||||
|
||||
@Command(
|
||||
aliases = { "npc" },
|
||||
usage = "bossbar --color [color] --title [title] --visible [visible] --flags [flags]",
|
||||
desc = "Edit bossbar properties",
|
||||
modifiers = { "bossbar" },
|
||||
min = 1,
|
||||
max = 1)
|
||||
@Requirements(selected = true, ownership = true, types = { EntityType.WITHER, EntityType.ENDER_DRAGON })
|
||||
public void bossbar(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
||||
BossBarTrait trait = npc.getTrait(BossBarTrait.class);
|
||||
if (args.hasValueFlag("color")) {
|
||||
BarColor color = Util.matchEnum(BarColor.values(), args.getFlag("color"));
|
||||
trait.setColor(color);
|
||||
}
|
||||
if (args.hasValueFlag("title")) {
|
||||
trait.setTitle(args.getFlag("title"));
|
||||
}
|
||||
if (args.hasValueFlag("visible")) {
|
||||
trait.setVisible(Boolean.parseBoolean(args.getFlag("visible")));
|
||||
}
|
||||
if (args.hasValueFlag("flags")) {
|
||||
List<BarFlag> flags = Lists.newArrayList();
|
||||
for (String s : Splitter.on(',').omitEmptyStrings().trimResults().split(args.getFlag("flags"))) {
|
||||
BarFlag flag = Util.matchEnum(BarFlag.values(), s);
|
||||
if (flag != null) {
|
||||
flags.add(flag);
|
||||
}
|
||||
}
|
||||
trait.setFlags(flags);
|
||||
}
|
||||
}
|
||||
|
||||
@Command(
|
||||
aliases = { "npc" },
|
||||
usage = "shulker (--peek [peek] --color [color])",
|
||||
desc = "Sets shulker modifiers.",
|
||||
modifiers = { "shulker" },
|
||||
min = 1,
|
||||
max = 1,
|
||||
permission = "citizens.npc.shulker")
|
||||
@Requirements(selected = true, ownership = true, types = { EntityType.SHULKER })
|
||||
public void shulker(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
||||
ShulkerTrait trait = npc.getTrait(ShulkerTrait.class);
|
||||
boolean hasArg = false;
|
||||
if (args.hasValueFlag("peek")) {
|
||||
int peek = (byte) args.getFlagInteger("peek");
|
||||
trait.setPeek(peek);
|
||||
Messaging.sendTr(sender, Messages.SHULKER_PEEK_SET, npc.getName(), peek);
|
||||
hasArg = true;
|
||||
}
|
||||
if (args.hasValueFlag("color")) {
|
||||
DyeColor color = Util.matchEnum(DyeColor.values(), args.getFlag("color"));
|
||||
if (color == null) {
|
||||
Messaging.sendErrorTr(sender, Messages.INVALID_SHULKER_COLOR, Util.listValuesPretty(DyeColor.values()));
|
||||
return;
|
||||
}
|
||||
trait.setColor(color);
|
||||
Messaging.sendTr(sender, Messages.SHULKER_COLOR_SET, npc.getName(), Util.prettyEnum(color));
|
||||
hasArg = true;
|
||||
}
|
||||
if (!hasArg) {
|
||||
throw new CommandUsageException();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,50 +1,50 @@
|
||||
package net.citizensnpcs.trait;
|
||||
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.entity.Shulker;
|
||||
|
||||
import net.citizensnpcs.api.persistence.Persist;
|
||||
import net.citizensnpcs.api.trait.Trait;
|
||||
import net.citizensnpcs.api.trait.TraitName;
|
||||
import net.citizensnpcs.util.NMS;
|
||||
|
||||
@TraitName("shulkertrait")
|
||||
public class ShulkerTrait extends Trait {
|
||||
@Persist("color")
|
||||
private DyeColor color = DyeColor.PURPLE;
|
||||
private int lastPeekSet = 0;
|
||||
@Persist("peek")
|
||||
private int peek = 0;
|
||||
|
||||
public ShulkerTrait() {
|
||||
super("shulkertrait");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSpawn() {
|
||||
setPeek(peek);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (color == null) {
|
||||
color = DyeColor.PURPLE;
|
||||
}
|
||||
if (npc.getEntity() instanceof Shulker) {
|
||||
if (peek != lastPeekSet) {
|
||||
NMS.setShulkerPeek((Shulker) npc.getEntity(), peek);
|
||||
lastPeekSet = peek;
|
||||
}
|
||||
NMS.setShulkerColor((Shulker) npc.getEntity(), color);
|
||||
}
|
||||
}
|
||||
|
||||
public void setColor(DyeColor color) {
|
||||
this.color = color;
|
||||
}
|
||||
|
||||
public void setPeek(int peek) {
|
||||
this.peek = peek;
|
||||
lastPeekSet = -1;
|
||||
}
|
||||
}
|
||||
package net.citizensnpcs.nms.v1_10_R1.trait;
|
||||
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.entity.Shulker;
|
||||
|
||||
import net.citizensnpcs.api.persistence.Persist;
|
||||
import net.citizensnpcs.api.trait.Trait;
|
||||
import net.citizensnpcs.api.trait.TraitName;
|
||||
import net.citizensnpcs.nms.v1_10_R1.util.NMSImpl;
|
||||
|
||||
@TraitName("shulkertrait")
|
||||
public class ShulkerTrait extends Trait {
|
||||
@Persist("color")
|
||||
private DyeColor color = DyeColor.PURPLE;
|
||||
private int lastPeekSet = 0;
|
||||
@Persist("peek")
|
||||
private int peek = 0;
|
||||
|
||||
public ShulkerTrait() {
|
||||
super("shulkertrait");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSpawn() {
|
||||
setPeek(peek);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (color == null) {
|
||||
color = DyeColor.PURPLE;
|
||||
}
|
||||
if (npc.getEntity() instanceof Shulker) {
|
||||
if (peek != lastPeekSet) {
|
||||
NMSImpl.setShulkerPeek((Shulker) npc.getEntity(), peek);
|
||||
lastPeekSet = peek;
|
||||
}
|
||||
NMSImpl.setShulkerColor((Shulker) npc.getEntity(), color);
|
||||
}
|
||||
}
|
||||
|
||||
public void setColor(DyeColor color) {
|
||||
this.color = color;
|
||||
}
|
||||
|
||||
public void setPeek(int peek) {
|
||||
this.peek = peek;
|
||||
lastPeekSet = -1;
|
||||
}
|
||||
}
|
@ -57,6 +57,7 @@ import com.mojang.authlib.yggdrasil.response.MinecraftProfilePropertiesResponse;
|
||||
import com.mojang.util.UUIDTypeAdapter;
|
||||
|
||||
import net.citizensnpcs.Settings.Setting;
|
||||
import net.citizensnpcs.api.CitizensAPI;
|
||||
import net.citizensnpcs.api.ai.NavigatorParameters;
|
||||
import net.citizensnpcs.api.ai.event.CancelReason;
|
||||
import net.citizensnpcs.api.command.CommandManager;
|
||||
@ -65,6 +66,7 @@ import net.citizensnpcs.api.npc.BlockBreaker;
|
||||
import net.citizensnpcs.api.npc.BlockBreaker.BlockBreakerConfiguration;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.api.npc.NPCRegistry;
|
||||
import net.citizensnpcs.api.trait.TraitInfo;
|
||||
import net.citizensnpcs.api.util.Messaging;
|
||||
import net.citizensnpcs.nms.v1_10_R1.entity.BatController;
|
||||
import net.citizensnpcs.nms.v1_10_R1.entity.BlazeController;
|
||||
@ -134,6 +136,9 @@ import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.ThrownPotionController;
|
||||
import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.TippedArrowController;
|
||||
import net.citizensnpcs.nms.v1_10_R1.entity.nonliving.WitherSkullController;
|
||||
import net.citizensnpcs.nms.v1_10_R1.network.EmptyChannel;
|
||||
import net.citizensnpcs.nms.v1_10_R1.trait.BossBarTrait;
|
||||
import net.citizensnpcs.nms.v1_10_R1.trait.Commands;
|
||||
import net.citizensnpcs.nms.v1_10_R1.trait.ShulkerTrait;
|
||||
import net.citizensnpcs.npc.EntityControllers;
|
||||
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
||||
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
||||
@ -295,29 +300,6 @@ public class NMSImpl implements NMSBridge {
|
||||
return new CitizensBlockBreaker(entity, targetBlock, config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BossBar getBossBar(org.bukkit.entity.Entity entity) {
|
||||
BossBattleServer bserver = null;
|
||||
try {
|
||||
if (entity.getType() == EntityType.WITHER) {
|
||||
bserver = (BossBattleServer) WITHER_BOSS_BAR_FIELD.get(NMSImpl.getHandle(entity));
|
||||
} else if (entity.getType() == EntityType.ENDER_DRAGON) {
|
||||
bserver = (BossBattleServer) ENDERDRAGON_BATTLE_BAR_FIELD
|
||||
.get(ENDERDRAGON_BATTLE_FIELD.get(NMSImpl.getHandle(entity)));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
if (bserver == null) {
|
||||
return null;
|
||||
}
|
||||
BossBar ret = Bukkit.createBossBar("", BarColor.BLUE, BarStyle.SEGMENTED_10);
|
||||
try {
|
||||
CRAFT_BOSSBAR_HANDLE_FIELD.set(ret, bserver);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BoundingBox getBoundingBox(org.bukkit.entity.Entity handle) {
|
||||
AxisAlignedBB bb = NMSImpl.getHandle(handle).getBoundingBox();
|
||||
@ -528,6 +510,9 @@ public class NMSImpl implements NMSBridge {
|
||||
|
||||
@Override
|
||||
public void load(CommandManager commands) {
|
||||
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(BossBarTrait.class));
|
||||
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class));
|
||||
commands.register(Commands.class);
|
||||
}
|
||||
|
||||
private void loadEntityTypes() {
|
||||
@ -884,15 +869,6 @@ public class NMSImpl implements NMSBridge {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setShulkerColor(Shulker shulker, DyeColor color) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setShulkerPeek(Shulker shulker, int peek) {
|
||||
((EntityShulker) getHandle(shulker)).a((byte) peek);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSitting(Tameable tameable, boolean sitting) {
|
||||
((EntityTameableAnimal) NMSImpl.getHandle((LivingEntity) tameable)).setSitting(sitting);
|
||||
@ -914,7 +890,7 @@ public class NMSImpl implements NMSBridge {
|
||||
@Override
|
||||
public void setWitherCharged(Wither wither, boolean charged) {
|
||||
EntityWither handle = ((CraftWither) wither).getHandle();
|
||||
handle.l(charged ? 20 : 0);
|
||||
handle.g(charged ? 20 : 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -1273,6 +1249,28 @@ public class NMSImpl implements NMSBridge {
|
||||
entity.aI += entity.aH;
|
||||
}
|
||||
|
||||
public static BossBar getBossBar(org.bukkit.entity.Entity entity) {
|
||||
BossBattleServer bserver = null;
|
||||
try {
|
||||
if (entity.getType() == EntityType.WITHER) {
|
||||
bserver = (BossBattleServer) WITHER_BOSS_BAR_FIELD.get(NMSImpl.getHandle(entity));
|
||||
} else if (entity.getType() == EntityType.ENDER_DRAGON) {
|
||||
bserver = (BossBattleServer) ENDERDRAGON_BATTLE_BAR_FIELD
|
||||
.get(ENDERDRAGON_BATTLE_FIELD.get(NMSImpl.getHandle(entity)));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
if (bserver == null) {
|
||||
return null;
|
||||
}
|
||||
BossBar ret = Bukkit.createBossBar("", BarColor.BLUE, BarStyle.SEGMENTED_10);
|
||||
try {
|
||||
CRAFT_BOSSBAR_HANDLE_FIELD.set(ret, bserver);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
private static EntityLiving getHandle(LivingEntity entity) {
|
||||
return (EntityLiving) NMSImpl.getHandle((org.bukkit.entity.Entity) entity);
|
||||
}
|
||||
@ -1381,6 +1379,13 @@ public class NMSImpl implements NMSBridge {
|
||||
NMSImpl.sendPacketsNearby(from, location, Arrays.asList(packets), 64);
|
||||
}
|
||||
|
||||
public static void setShulkerColor(Shulker shulker, DyeColor color) {
|
||||
}
|
||||
|
||||
public static void setShulkerPeek(Shulker shulker, int peek) {
|
||||
((EntityShulker) getHandle(shulker)).a((byte) peek);
|
||||
}
|
||||
|
||||
public static void setSize(Entity entity, float f, float f1, boolean justCreated) {
|
||||
if ((f != entity.width) || (f1 != entity.length)) {
|
||||
float f2 = entity.width;
|
||||
|
@ -105,12 +105,12 @@ public class PlayerAnimationImpl {
|
||||
radius);
|
||||
break;
|
||||
case STOP_USE_ITEM:
|
||||
player.cA();
|
||||
player.clearActiveItem();
|
||||
sendPacketNearby(new PacketPlayOutEntityMetadata(player.getId(), player.getDataWatcher(), true), player,
|
||||
radius);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,74 @@
|
||||
package net.citizensnpcs.nms.v1_11_R1.trait;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.boss.BarColor;
|
||||
import org.bukkit.boss.BarFlag;
|
||||
import org.bukkit.boss.BossBar;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import net.citizensnpcs.api.persistence.Persist;
|
||||
import net.citizensnpcs.api.trait.Trait;
|
||||
import net.citizensnpcs.api.trait.TraitName;
|
||||
import net.citizensnpcs.nms.v1_11_R1.util.NMSImpl;
|
||||
|
||||
@TraitName("bossbar")
|
||||
public class BossBarTrait extends Trait {
|
||||
@Persist("color")
|
||||
private BarColor color = null;
|
||||
@Persist("flags")
|
||||
private List<BarFlag> flags = Lists.newArrayList();
|
||||
@Persist("title")
|
||||
private String title = null;
|
||||
@Persist("visible")
|
||||
private boolean visible = true;
|
||||
|
||||
public BossBarTrait() {
|
||||
super("bossbar");
|
||||
}
|
||||
|
||||
private boolean isBoss(Entity entity) {
|
||||
return entity.getType() == EntityType.ENDER_DRAGON || entity.getType() == EntityType.WITHER
|
||||
|| entity.getType() == EntityType.GUARDIAN;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (!npc.isSpawned() || !isBoss(npc.getEntity()))
|
||||
return;
|
||||
BossBar bar = NMSImpl.getBossBar(npc.getEntity());
|
||||
bar.setVisible(visible);
|
||||
if (color != null) {
|
||||
bar.setColor(color);
|
||||
}
|
||||
if (title != null) {
|
||||
bar.setTitle(title);
|
||||
}
|
||||
for (BarFlag flag : BarFlag.values()) {
|
||||
bar.removeFlag(flag);
|
||||
}
|
||||
for (BarFlag flag : flags) {
|
||||
bar.addFlag(flag);
|
||||
}
|
||||
}
|
||||
|
||||
public void setColor(BarColor color) {
|
||||
this.color = color;
|
||||
}
|
||||
|
||||
public void setFlags(Collection<BarFlag> flags) {
|
||||
this.flags = Lists.newArrayList(flags);
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public void setVisible(boolean visible) {
|
||||
this.visible = visible;
|
||||
}
|
||||
}
|
@ -1,19 +1,60 @@
|
||||
package net.citizensnpcs.nms.v1_11_R1.trait;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.boss.BarColor;
|
||||
import org.bukkit.boss.BarFlag;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Llama.Color;
|
||||
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import net.citizensnpcs.api.command.Command;
|
||||
import net.citizensnpcs.api.command.CommandContext;
|
||||
import net.citizensnpcs.api.command.Requirements;
|
||||
import net.citizensnpcs.api.command.exception.CommandException;
|
||||
import net.citizensnpcs.api.command.exception.CommandUsageException;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.api.util.Messaging;
|
||||
import net.citizensnpcs.util.Messages;
|
||||
import net.citizensnpcs.util.Util;
|
||||
|
||||
public class Commands {
|
||||
@Command(
|
||||
aliases = { "npc" },
|
||||
usage = "bossbar --color [color] --title [title] --visible [visible] --flags [flags]",
|
||||
desc = "Edit bossbar properties",
|
||||
modifiers = { "bossbar" },
|
||||
min = 1,
|
||||
max = 1)
|
||||
@Requirements(selected = true, ownership = true, types = { EntityType.WITHER, EntityType.ENDER_DRAGON })
|
||||
public void bossbar(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
||||
BossBarTrait trait = npc.getTrait(BossBarTrait.class);
|
||||
if (args.hasValueFlag("color")) {
|
||||
BarColor color = Util.matchEnum(BarColor.values(), args.getFlag("color"));
|
||||
trait.setColor(color);
|
||||
}
|
||||
if (args.hasValueFlag("title")) {
|
||||
trait.setTitle(args.getFlag("title"));
|
||||
}
|
||||
if (args.hasValueFlag("visible")) {
|
||||
trait.setVisible(Boolean.parseBoolean(args.getFlag("visible")));
|
||||
}
|
||||
if (args.hasValueFlag("flags")) {
|
||||
List<BarFlag> flags = Lists.newArrayList();
|
||||
for (String s : Splitter.on(',').omitEmptyStrings().trimResults().split(args.getFlag("flags"))) {
|
||||
BarFlag flag = Util.matchEnum(BarFlag.values(), s);
|
||||
if (flag != null) {
|
||||
flags.add(flag);
|
||||
}
|
||||
}
|
||||
trait.setFlags(flags);
|
||||
}
|
||||
}
|
||||
|
||||
@Command(
|
||||
aliases = { "npc" },
|
||||
usage = "llama (--color color) (--strength strength)",
|
||||
@ -44,4 +85,37 @@ public class Commands {
|
||||
Messaging.send(sender, output);
|
||||
}
|
||||
}
|
||||
|
||||
@Command(
|
||||
aliases = { "npc" },
|
||||
usage = "shulker (--peek [peek] --color [color])",
|
||||
desc = "Sets shulker modifiers.",
|
||||
modifiers = { "shulker" },
|
||||
min = 1,
|
||||
max = 1,
|
||||
permission = "citizens.npc.shulker")
|
||||
@Requirements(selected = true, ownership = true, types = { EntityType.SHULKER })
|
||||
public void shulker(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
||||
ShulkerTrait trait = npc.getTrait(ShulkerTrait.class);
|
||||
boolean hasArg = false;
|
||||
if (args.hasValueFlag("peek")) {
|
||||
int peek = (byte) args.getFlagInteger("peek");
|
||||
trait.setPeek(peek);
|
||||
Messaging.sendTr(sender, Messages.SHULKER_PEEK_SET, npc.getName(), peek);
|
||||
hasArg = true;
|
||||
}
|
||||
if (args.hasValueFlag("color")) {
|
||||
DyeColor color = Util.matchEnum(DyeColor.values(), args.getFlag("color"));
|
||||
if (color == null) {
|
||||
Messaging.sendErrorTr(sender, Messages.INVALID_SHULKER_COLOR, Util.listValuesPretty(DyeColor.values()));
|
||||
return;
|
||||
}
|
||||
trait.setColor(color);
|
||||
Messaging.sendTr(sender, Messages.SHULKER_COLOR_SET, npc.getName(), Util.prettyEnum(color));
|
||||
hasArg = true;
|
||||
}
|
||||
if (!hasArg) {
|
||||
throw new CommandUsageException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,50 @@
|
||||
package net.citizensnpcs.nms.v1_11_R1.trait;
|
||||
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.entity.Shulker;
|
||||
|
||||
import net.citizensnpcs.api.persistence.Persist;
|
||||
import net.citizensnpcs.api.trait.Trait;
|
||||
import net.citizensnpcs.api.trait.TraitName;
|
||||
import net.citizensnpcs.nms.v1_11_R1.util.NMSImpl;
|
||||
|
||||
@TraitName("shulkertrait")
|
||||
public class ShulkerTrait extends Trait {
|
||||
@Persist("color")
|
||||
private DyeColor color = DyeColor.PURPLE;
|
||||
private int lastPeekSet = 0;
|
||||
@Persist("peek")
|
||||
private int peek = 0;
|
||||
|
||||
public ShulkerTrait() {
|
||||
super("shulkertrait");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSpawn() {
|
||||
setPeek(peek);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (color == null) {
|
||||
color = DyeColor.PURPLE;
|
||||
}
|
||||
if (npc.getEntity() instanceof Shulker) {
|
||||
if (peek != lastPeekSet) {
|
||||
NMSImpl.setShulkerPeek((Shulker) npc.getEntity(), peek);
|
||||
lastPeekSet = peek;
|
||||
}
|
||||
NMSImpl.setShulkerColor((Shulker) npc.getEntity(), color);
|
||||
}
|
||||
}
|
||||
|
||||
public void setColor(DyeColor color) {
|
||||
this.color = color;
|
||||
}
|
||||
|
||||
public void setPeek(int peek) {
|
||||
this.peek = peek;
|
||||
lastPeekSet = -1;
|
||||
}
|
||||
}
|
@ -152,8 +152,10 @@ import net.citizensnpcs.nms.v1_11_R1.entity.nonliving.ThrownPotionController;
|
||||
import net.citizensnpcs.nms.v1_11_R1.entity.nonliving.TippedArrowController;
|
||||
import net.citizensnpcs.nms.v1_11_R1.entity.nonliving.WitherSkullController;
|
||||
import net.citizensnpcs.nms.v1_11_R1.network.EmptyChannel;
|
||||
import net.citizensnpcs.nms.v1_11_R1.trait.BossBarTrait;
|
||||
import net.citizensnpcs.nms.v1_11_R1.trait.Commands;
|
||||
import net.citizensnpcs.nms.v1_11_R1.trait.LlamaTrait;
|
||||
import net.citizensnpcs.nms.v1_11_R1.trait.ShulkerTrait;
|
||||
import net.citizensnpcs.npc.EntityControllers;
|
||||
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
||||
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
||||
@ -319,29 +321,6 @@ public class NMSImpl implements NMSBridge {
|
||||
return new CitizensBlockBreaker(entity, targetBlock, config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BossBar getBossBar(org.bukkit.entity.Entity entity) {
|
||||
BossBattleServer bserver = null;
|
||||
try {
|
||||
if (entity.getType() == EntityType.WITHER) {
|
||||
bserver = (BossBattleServer) WITHER_BOSS_BAR_FIELD.get(NMSImpl.getHandle(entity));
|
||||
} else if (entity.getType() == EntityType.ENDER_DRAGON) {
|
||||
bserver = (BossBattleServer) ENDERDRAGON_BATTLE_BAR_FIELD
|
||||
.get(ENDERDRAGON_BATTLE_FIELD.get(NMSImpl.getHandle(entity)));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
if (bserver == null) {
|
||||
return null;
|
||||
}
|
||||
BossBar ret = Bukkit.createBossBar("", BarColor.BLUE, BarStyle.SEGMENTED_10);
|
||||
try {
|
||||
CRAFT_BOSSBAR_HANDLE_FIELD.set(ret, bserver);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BoundingBox getBoundingBox(org.bukkit.entity.Entity handle) {
|
||||
AxisAlignedBB bb = NMSImpl.getHandle(handle).getBoundingBox();
|
||||
@ -571,6 +550,8 @@ public class NMSImpl implements NMSBridge {
|
||||
|
||||
@Override
|
||||
public void load(CommandManager manager) {
|
||||
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(BossBarTrait.class));
|
||||
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class));
|
||||
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(LlamaTrait.class));
|
||||
manager.register(Commands.class);
|
||||
}
|
||||
@ -947,16 +928,6 @@ public class NMSImpl implements NMSBridge {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setShulkerColor(Shulker shulker, DyeColor color) {
|
||||
((EntityShulkerNPC) getHandle(shulker)).setColor(color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setShulkerPeek(Shulker shulker, int peek) {
|
||||
((EntityShulker) getHandle(shulker)).a((byte) peek);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSitting(Tameable tameable, boolean sitting) {
|
||||
((EntityTameableAnimal) NMSImpl.getHandle((LivingEntity) tameable)).setSitting(sitting);
|
||||
@ -1346,6 +1317,28 @@ public class NMSImpl implements NMSBridge {
|
||||
entity.aH += entity.aG;
|
||||
}
|
||||
|
||||
public static BossBar getBossBar(org.bukkit.entity.Entity entity) {
|
||||
BossBattleServer bserver = null;
|
||||
try {
|
||||
if (entity.getType() == EntityType.WITHER) {
|
||||
bserver = (BossBattleServer) WITHER_BOSS_BAR_FIELD.get(NMSImpl.getHandle(entity));
|
||||
} else if (entity.getType() == EntityType.ENDER_DRAGON) {
|
||||
bserver = (BossBattleServer) ENDERDRAGON_BATTLE_BAR_FIELD
|
||||
.get(ENDERDRAGON_BATTLE_FIELD.get(NMSImpl.getHandle(entity)));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
if (bserver == null) {
|
||||
return null;
|
||||
}
|
||||
BossBar ret = Bukkit.createBossBar("", BarColor.BLUE, BarStyle.SEGMENTED_10);
|
||||
try {
|
||||
CRAFT_BOSSBAR_HANDLE_FIELD.set(ret, bserver);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
private static EntityLiving getHandle(LivingEntity entity) {
|
||||
return (EntityLiving) NMSImpl.getHandle((org.bukkit.entity.Entity) entity);
|
||||
}
|
||||
@ -1454,6 +1447,14 @@ public class NMSImpl implements NMSBridge {
|
||||
NMSImpl.sendPacketsNearby(from, location, Arrays.asList(packets), 64);
|
||||
}
|
||||
|
||||
public static void setShulkerColor(Shulker shulker, DyeColor color) {
|
||||
((EntityShulkerNPC) getHandle(shulker)).setColor(color);
|
||||
}
|
||||
|
||||
public static void setShulkerPeek(Shulker shulker, int peek) {
|
||||
((EntityShulker) getHandle(shulker)).a((byte) peek);
|
||||
}
|
||||
|
||||
public static void setSize(Entity entity, float f, float f1, boolean justCreated) {
|
||||
if ((f != entity.width) || (f1 != entity.length)) {
|
||||
float f2 = entity.width;
|
||||
|
@ -110,7 +110,7 @@ public class PlayerAnimationImpl {
|
||||
radius);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,74 @@
|
||||
package net.citizensnpcs.nms.v1_12_R1.trait;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.boss.BarColor;
|
||||
import org.bukkit.boss.BarFlag;
|
||||
import org.bukkit.boss.BossBar;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import net.citizensnpcs.api.persistence.Persist;
|
||||
import net.citizensnpcs.api.trait.Trait;
|
||||
import net.citizensnpcs.api.trait.TraitName;
|
||||
import net.citizensnpcs.nms.v1_12_R1.util.NMSImpl;
|
||||
|
||||
@TraitName("bossbar")
|
||||
public class BossBarTrait extends Trait {
|
||||
@Persist("color")
|
||||
private BarColor color = null;
|
||||
@Persist("flags")
|
||||
private List<BarFlag> flags = Lists.newArrayList();
|
||||
@Persist("title")
|
||||
private String title = null;
|
||||
@Persist("visible")
|
||||
private boolean visible = true;
|
||||
|
||||
public BossBarTrait() {
|
||||
super("bossbar");
|
||||
}
|
||||
|
||||
private boolean isBoss(Entity entity) {
|
||||
return entity.getType() == EntityType.ENDER_DRAGON || entity.getType() == EntityType.WITHER
|
||||
|| entity.getType() == EntityType.GUARDIAN;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (!npc.isSpawned() || !isBoss(npc.getEntity()))
|
||||
return;
|
||||
BossBar bar = NMSImpl.getBossBar(npc.getEntity());
|
||||
bar.setVisible(visible);
|
||||
if (color != null) {
|
||||
bar.setColor(color);
|
||||
}
|
||||
if (title != null) {
|
||||
bar.setTitle(title);
|
||||
}
|
||||
for (BarFlag flag : BarFlag.values()) {
|
||||
bar.removeFlag(flag);
|
||||
}
|
||||
for (BarFlag flag : flags) {
|
||||
bar.addFlag(flag);
|
||||
}
|
||||
}
|
||||
|
||||
public void setColor(BarColor color) {
|
||||
this.color = color;
|
||||
}
|
||||
|
||||
public void setFlags(Collection<BarFlag> flags) {
|
||||
this.flags = Lists.newArrayList(flags);
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public void setVisible(boolean visible) {
|
||||
this.visible = visible;
|
||||
}
|
||||
}
|
@ -1,20 +1,61 @@
|
||||
package net.citizensnpcs.nms.v1_12_R1.trait;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.boss.BarColor;
|
||||
import org.bukkit.boss.BarFlag;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Llama.Color;
|
||||
import org.bukkit.entity.Parrot.Variant;
|
||||
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import net.citizensnpcs.api.command.Command;
|
||||
import net.citizensnpcs.api.command.CommandContext;
|
||||
import net.citizensnpcs.api.command.Requirements;
|
||||
import net.citizensnpcs.api.command.exception.CommandException;
|
||||
import net.citizensnpcs.api.command.exception.CommandUsageException;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.api.util.Messaging;
|
||||
import net.citizensnpcs.util.Messages;
|
||||
import net.citizensnpcs.util.Util;
|
||||
|
||||
public class Commands {
|
||||
@Command(
|
||||
aliases = { "npc" },
|
||||
usage = "bossbar --color [color] --title [title] --visible [visible] --flags [flags]",
|
||||
desc = "Edit bossbar properties",
|
||||
modifiers = { "bossbar" },
|
||||
min = 1,
|
||||
max = 1)
|
||||
@Requirements(selected = true, ownership = true, types = { EntityType.WITHER, EntityType.ENDER_DRAGON })
|
||||
public void bossbar(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
||||
BossBarTrait trait = npc.getTrait(BossBarTrait.class);
|
||||
if (args.hasValueFlag("color")) {
|
||||
BarColor color = Util.matchEnum(BarColor.values(), args.getFlag("color"));
|
||||
trait.setColor(color);
|
||||
}
|
||||
if (args.hasValueFlag("title")) {
|
||||
trait.setTitle(args.getFlag("title"));
|
||||
}
|
||||
if (args.hasValueFlag("visible")) {
|
||||
trait.setVisible(Boolean.parseBoolean(args.getFlag("visible")));
|
||||
}
|
||||
if (args.hasValueFlag("flags")) {
|
||||
List<BarFlag> flags = Lists.newArrayList();
|
||||
for (String s : Splitter.on(',').omitEmptyStrings().trimResults().split(args.getFlag("flags"))) {
|
||||
BarFlag flag = Util.matchEnum(BarFlag.values(), s);
|
||||
if (flag != null) {
|
||||
flags.add(flag);
|
||||
}
|
||||
}
|
||||
trait.setFlags(flags);
|
||||
}
|
||||
}
|
||||
|
||||
@Command(
|
||||
aliases = { "npc" },
|
||||
usage = "llama (--color color) (--strength strength)",
|
||||
@ -72,4 +113,37 @@ public class Commands {
|
||||
Messaging.send(sender, output);
|
||||
}
|
||||
}
|
||||
|
||||
@Command(
|
||||
aliases = { "npc" },
|
||||
usage = "shulker (--peek [peek] --color [color])",
|
||||
desc = "Sets shulker modifiers.",
|
||||
modifiers = { "shulker" },
|
||||
min = 1,
|
||||
max = 1,
|
||||
permission = "citizens.npc.shulker")
|
||||
@Requirements(selected = true, ownership = true, types = { EntityType.SHULKER })
|
||||
public void shulker(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
||||
ShulkerTrait trait = npc.getTrait(ShulkerTrait.class);
|
||||
boolean hasArg = false;
|
||||
if (args.hasValueFlag("peek")) {
|
||||
int peek = (byte) args.getFlagInteger("peek");
|
||||
trait.setPeek(peek);
|
||||
Messaging.sendTr(sender, Messages.SHULKER_PEEK_SET, npc.getName(), peek);
|
||||
hasArg = true;
|
||||
}
|
||||
if (args.hasValueFlag("color")) {
|
||||
DyeColor color = Util.matchEnum(DyeColor.values(), args.getFlag("color"));
|
||||
if (color == null) {
|
||||
Messaging.sendErrorTr(sender, Messages.INVALID_SHULKER_COLOR, Util.listValuesPretty(DyeColor.values()));
|
||||
return;
|
||||
}
|
||||
trait.setColor(color);
|
||||
Messaging.sendTr(sender, Messages.SHULKER_COLOR_SET, npc.getName(), Util.prettyEnum(color));
|
||||
hasArg = true;
|
||||
}
|
||||
if (!hasArg) {
|
||||
throw new CommandUsageException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,50 @@
|
||||
package net.citizensnpcs.nms.v1_12_R1.trait;
|
||||
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.entity.Shulker;
|
||||
|
||||
import net.citizensnpcs.api.persistence.Persist;
|
||||
import net.citizensnpcs.api.trait.Trait;
|
||||
import net.citizensnpcs.api.trait.TraitName;
|
||||
import net.citizensnpcs.nms.v1_12_R1.util.NMSImpl;
|
||||
|
||||
@TraitName("shulkertrait")
|
||||
public class ShulkerTrait extends Trait {
|
||||
@Persist("color")
|
||||
private DyeColor color = DyeColor.PURPLE;
|
||||
private int lastPeekSet = 0;
|
||||
@Persist("peek")
|
||||
private int peek = 0;
|
||||
|
||||
public ShulkerTrait() {
|
||||
super("shulkertrait");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSpawn() {
|
||||
setPeek(peek);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (color == null) {
|
||||
color = DyeColor.PURPLE;
|
||||
}
|
||||
if (npc.getEntity() instanceof Shulker) {
|
||||
if (peek != lastPeekSet) {
|
||||
NMSImpl.setShulkerPeek((Shulker) npc.getEntity(), peek);
|
||||
lastPeekSet = peek;
|
||||
}
|
||||
NMSImpl.setShulkerColor((Shulker) npc.getEntity(), color);
|
||||
}
|
||||
}
|
||||
|
||||
public void setColor(DyeColor color) {
|
||||
this.color = color;
|
||||
}
|
||||
|
||||
public void setPeek(int peek) {
|
||||
this.peek = peek;
|
||||
lastPeekSet = -1;
|
||||
}
|
||||
}
|
@ -153,9 +153,11 @@ import net.citizensnpcs.nms.v1_12_R1.entity.nonliving.ThrownPotionController;
|
||||
import net.citizensnpcs.nms.v1_12_R1.entity.nonliving.TippedArrowController;
|
||||
import net.citizensnpcs.nms.v1_12_R1.entity.nonliving.WitherSkullController;
|
||||
import net.citizensnpcs.nms.v1_12_R1.network.EmptyChannel;
|
||||
import net.citizensnpcs.nms.v1_12_R1.trait.BossBarTrait;
|
||||
import net.citizensnpcs.nms.v1_12_R1.trait.Commands;
|
||||
import net.citizensnpcs.nms.v1_12_R1.trait.LlamaTrait;
|
||||
import net.citizensnpcs.nms.v1_12_R1.trait.ParrotTrait;
|
||||
import net.citizensnpcs.nms.v1_12_R1.trait.ShulkerTrait;
|
||||
import net.citizensnpcs.npc.EntityControllers;
|
||||
import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
|
||||
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
|
||||
@ -322,29 +324,6 @@ public class NMSImpl implements NMSBridge {
|
||||
return new CitizensBlockBreaker(entity, targetBlock, config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BossBar getBossBar(org.bukkit.entity.Entity entity) {
|
||||
BossBattleServer bserver = null;
|
||||
try {
|
||||
if (entity.getType() == EntityType.WITHER) {
|
||||
bserver = (BossBattleServer) WITHER_BOSS_BAR_FIELD.get(NMSImpl.getHandle(entity));
|
||||
} else if (entity.getType() == EntityType.ENDER_DRAGON) {
|
||||
bserver = (BossBattleServer) ENDERDRAGON_BATTLE_BAR_FIELD
|
||||
.get(ENDERDRAGON_BATTLE_FIELD.get(NMSImpl.getHandle(entity)));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
if (bserver == null) {
|
||||
return null;
|
||||
}
|
||||
BossBar ret = Bukkit.createBossBar("", BarColor.BLUE, BarStyle.SEGMENTED_10);
|
||||
try {
|
||||
CRAFT_BOSSBAR_HANDLE_FIELD.set(ret, bserver);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BoundingBox getBoundingBox(org.bukkit.entity.Entity handle) {
|
||||
AxisAlignedBB bb = NMSImpl.getHandle(handle).getBoundingBox();
|
||||
@ -576,6 +555,8 @@ public class NMSImpl implements NMSBridge {
|
||||
public void load(CommandManager manager) {
|
||||
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(LlamaTrait.class));
|
||||
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ParrotTrait.class));
|
||||
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(BossBarTrait.class));
|
||||
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(ShulkerTrait.class));
|
||||
manager.register(Commands.class);
|
||||
}
|
||||
|
||||
@ -961,16 +942,6 @@ public class NMSImpl implements NMSBridge {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setShulkerColor(Shulker shulker, DyeColor color) {
|
||||
((EntityShulker) getHandle(shulker)).getDataWatcher().set(EntityShulker.COLOR, color.getWoolData());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setShulkerPeek(Shulker shulker, int peek) {
|
||||
((EntityShulker) getHandle(shulker)).a((byte) peek);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSitting(Tameable tameable, boolean sitting) {
|
||||
((EntityTameableAnimal) NMSImpl.getHandle((LivingEntity) tameable)).setSitting(sitting);
|
||||
@ -1359,6 +1330,28 @@ public class NMSImpl implements NMSBridge {
|
||||
entity.aH += entity.aG;
|
||||
}
|
||||
|
||||
public static BossBar getBossBar(org.bukkit.entity.Entity entity) {
|
||||
BossBattleServer bserver = null;
|
||||
try {
|
||||
if (entity.getType() == EntityType.WITHER) {
|
||||
bserver = (BossBattleServer) WITHER_BOSS_BAR_FIELD.get(NMSImpl.getHandle(entity));
|
||||
} else if (entity.getType() == EntityType.ENDER_DRAGON) {
|
||||
bserver = (BossBattleServer) ENDERDRAGON_BATTLE_BAR_FIELD
|
||||
.get(ENDERDRAGON_BATTLE_FIELD.get(NMSImpl.getHandle(entity)));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
if (bserver == null) {
|
||||
return null;
|
||||
}
|
||||
BossBar ret = Bukkit.createBossBar("", BarColor.BLUE, BarStyle.SEGMENTED_10);
|
||||
try {
|
||||
CRAFT_BOSSBAR_HANDLE_FIELD.set(ret, bserver);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
private static EntityLiving getHandle(LivingEntity entity) {
|
||||
return (EntityLiving) NMSImpl.getHandle((org.bukkit.entity.Entity) entity);
|
||||
}
|
||||
@ -1467,6 +1460,14 @@ public class NMSImpl implements NMSBridge {
|
||||
NMSImpl.sendPacketsNearby(from, location, Arrays.asList(packets), 64);
|
||||
}
|
||||
|
||||
public static void setShulkerColor(Shulker shulker, DyeColor color) {
|
||||
((EntityShulker) getHandle(shulker)).getDataWatcher().set(EntityShulker.COLOR, color.getWoolData());
|
||||
}
|
||||
|
||||
public static void setShulkerPeek(Shulker shulker, int peek) {
|
||||
((EntityShulker) getHandle(shulker)).a((byte) peek);
|
||||
}
|
||||
|
||||
public static void setSize(Entity entity, float f, float f1, boolean justCreated) {
|
||||
if ((f != entity.width) || (f1 != entity.length)) {
|
||||
float f2 = entity.width;
|
||||
|
@ -110,7 +110,7 @@ public class PlayerAnimationImpl {
|
||||
radius);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
||||
|
77
v1_8_R3/pom.xml
Normal file
77
v1_8_R3/pom.xml
Normal file
@ -0,0 +1,77 @@
|
||||
<!-- Citizens build file -->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>net.citizensnpcs</groupId>
|
||||
<artifactId>citizens-parent</artifactId>
|
||||
<version>2.0.22-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>citizens-v1_8_R3</artifactId>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<craftbukkit.version>1.8.7-R0.1-SNAPSHOT</craftbukkit.version>
|
||||
</properties>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>everything</id>
|
||||
<url>http://repo.citizensnpcs.co</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>citizens-main</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<type>jar</type>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.bukkit</groupId>
|
||||
<artifactId>craftbukkit</artifactId>
|
||||
<version>${craftbukkit.version}</version>
|
||||
<type>jar</type>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<defaultGoal>clean package install</defaultGoal>
|
||||
<sourceDirectory>${basedir}/src/main/java</sourceDirectory>
|
||||
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>2.3.2</version>
|
||||
<configuration>
|
||||
<source>1.6</source>
|
||||
<target>1.6</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>2.3.2</version>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-shade-plugin</artifactId>
|
||||
<version>2.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>shade</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
@ -0,0 +1,171 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftBat;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.entity.Bat;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityBat;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class BatController extends MobEntityController {
|
||||
public BatController() {
|
||||
super(EntityBatNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Bat getBukkitEntity() {
|
||||
return (Bat) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class BatNPC extends CraftBat implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public BatNPC(EntityBatNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
|
||||
public static class EntityBatNPC extends EntityBat implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityBatNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityBatNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
setFlying(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null) {
|
||||
return super.cc();
|
||||
}
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
if (npc == null) {
|
||||
super.E();
|
||||
} else {
|
||||
NMSImpl.updateAI(this);
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new BatNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
public void setFlying(boolean flying) {
|
||||
setAsleep(flying);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,162 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftBlaze;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.entity.Blaze;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityBlaze;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class BlazeController extends MobEntityController {
|
||||
public BlazeController() {
|
||||
super(EntityBlazeNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Blaze getBukkitEntity() {
|
||||
return (Blaze) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class BlazeNPC extends CraftBlaze implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public BlazeNPC(EntityBlazeNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
|
||||
public static class EntityBlazeNPC extends EntityBlaze implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityBlazeNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityBlazeNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new BlazeNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,208 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftCaveSpider;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.entity.CaveSpider;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityCaveSpider;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class CaveSpiderController extends MobEntityController {
|
||||
public CaveSpiderController() {
|
||||
super(EntityCaveSpiderNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CaveSpider getBukkitEntity() {
|
||||
return (CaveSpider) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class CaveSpiderNPC extends CraftCaveSpider implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public CaveSpiderNPC(EntityCaveSpiderNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
|
||||
public static class EntityCaveSpiderNPC extends EntityCaveSpider implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityCaveSpiderNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityCaveSpiderNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null) {
|
||||
return super.cc();
|
||||
}
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault)) {
|
||||
return super.cc();
|
||||
}
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new CaveSpiderNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float f, float f1) {
|
||||
if (npc == null) {
|
||||
super.setSize(f, f1);
|
||||
} else {
|
||||
NMSImpl.setSize(this, f, f1, justCreated);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,216 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftChicken;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.entity.Chicken;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityChicken;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class ChickenController extends MobEntityController {
|
||||
public ChickenController() {
|
||||
super(EntityChickenNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Chicken getBukkitEntity() {
|
||||
return (Chicken) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class ChickenNPC extends CraftChicken implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public ChickenNPC(EntityChickenNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
|
||||
public static class EntityChickenNPC extends EntityChicken implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityChickenNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityChickenNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void a(boolean flag) {
|
||||
float oldw = width;
|
||||
float oldl = length;
|
||||
super.a(flag);
|
||||
if (oldw != width || oldl != length) {
|
||||
this.setPosition(locX - 0.01, locY, locZ - 0.01);
|
||||
this.setPosition(locX + 0.01, locY, locZ + 0.01);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new ChickenNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void m() {
|
||||
if (npc != null) {
|
||||
this.bs = 100; // egg timer
|
||||
}
|
||||
super.m();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,209 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftCow;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.entity.Cow;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityCow;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class CowController extends MobEntityController {
|
||||
public CowController() {
|
||||
super(EntityCowNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Cow getBukkitEntity() {
|
||||
return (Cow) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class CowNPC extends CraftCow implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public CowNPC(EntityCowNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
|
||||
public static class EntityCowNPC extends EntityCow implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityCowNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityCowNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void a(boolean flag) {
|
||||
float oldw = width;
|
||||
float oldl = length;
|
||||
super.a(flag);
|
||||
if (oldw != width || oldl != length) {
|
||||
this.setPosition(locX - 0.01, locY, locZ - 0.01);
|
||||
this.setPosition(locX + 0.01, locY, locZ + 0.01);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new CowNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,225 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftCreeper;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.entity.Creeper;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityCreeper;
|
||||
import net.minecraft.server.v1_8_R3.EntityHuman;
|
||||
import net.minecraft.server.v1_8_R3.EntityLightning;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class CreeperController extends MobEntityController {
|
||||
public CreeperController() {
|
||||
super(EntityCreeperNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Creeper getBukkitEntity() {
|
||||
return (Creeper) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class CreeperNPC extends CraftCreeper implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public CreeperNPC(EntityCreeperNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
|
||||
public static class EntityCreeperNPC extends EntityCreeper implements NPCHolder {
|
||||
private boolean allowPowered;
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityCreeperNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityCreeperNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean a(EntityHuman entityhuman) {
|
||||
return npc == null || !npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true) ? super.a(entityhuman) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null)
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true)) {
|
||||
super.g(x, y, z);
|
||||
}
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new CreeperNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLightningStrike(EntityLightning entitylightning) {
|
||||
if (npc == null || allowPowered) {
|
||||
super.onLightningStrike(entitylightning);
|
||||
}
|
||||
}
|
||||
|
||||
public void setAllowPowered(boolean allowPowered) {
|
||||
this.allowPowered = allowPowered;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float f, float f1) {
|
||||
if (npc == null) {
|
||||
super.setSize(f, f1);
|
||||
} else {
|
||||
NMSImpl.setSize(this, f, f1, justCreated);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,179 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEnderDragon;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.entity.EnderDragon;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityEnderDragon;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class EnderDragonController extends MobEntityController {
|
||||
public EnderDragonController() {
|
||||
super(EntityEnderDragonNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnderDragon getBukkitEntity() {
|
||||
return (EnderDragon) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EnderDragonNPC extends CraftEnderDragon implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EnderDragonNPC(EntityEnderDragonNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
|
||||
public static class EntityEnderDragonNPC extends EntityEnderDragon implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityEnderDragonNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityEnderDragonNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null)
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new EnderDragonNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
private float getCorrectYaw(double tX, double tZ) {
|
||||
if (locZ > tZ)
|
||||
return (float) (-Math.toDegrees(Math.atan((locX - tX) / (locZ - tZ))));
|
||||
if (locZ < tZ) {
|
||||
return (float) (-Math.toDegrees(Math.atan((locX - tX) / (locZ - tZ)))) + 180.0F;
|
||||
}
|
||||
return yaw;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void m() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
if (motX != 0 || motY != 0 || motZ != 0) {
|
||||
motX *= 0.98;
|
||||
motY *= 0.98;
|
||||
motZ *= 0.98;
|
||||
yaw = getCorrectYaw(locX + motX, locZ + motZ);
|
||||
setPosition(locX + motX, locY + motY, locZ + motZ);
|
||||
}
|
||||
} else {
|
||||
super.m();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,213 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEnderman;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.entity.Enderman;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityEnderman;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class EndermanController extends MobEntityController {
|
||||
public EndermanController() {
|
||||
super(EntityEndermanNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Enderman getBukkitEntity() {
|
||||
return (Enderman) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EndermanNPC extends CraftEnderman implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EndermanNPC(EntityEndermanNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
|
||||
public static class EntityEndermanNPC extends EntityEnderman implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityEndermanNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityEndermanNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null)
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new EndermanNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k(double d1, double d2, double d3) {
|
||||
if (npc == null) {
|
||||
return super.k(d1, d2, d3);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float f, float f1) {
|
||||
if (npc == null) {
|
||||
super.setSize(f, f1);
|
||||
} else {
|
||||
NMSImpl.setSize(this, f, f1, justCreated);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,204 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEndermite;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.entity.Endermite;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityEndermite;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class EndermiteController extends MobEntityController {
|
||||
public EndermiteController() {
|
||||
super(EntityEndermiteNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Endermite getBukkitEntity() {
|
||||
return (Endermite) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EndermiteNPC extends CraftEndermite implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EndermiteNPC(EntityEndermiteNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
|
||||
public static class EntityEndermiteNPC extends EntityEndermite implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityEndermiteNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityEndermiteNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null)
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null)
|
||||
npc.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new EndermiteNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float f, float f1) {
|
||||
if (npc == null) {
|
||||
super.setSize(f, f1);
|
||||
} else {
|
||||
NMSImpl.setSize(this, f, f1, justCreated);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,497 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.Socket;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.metadata.MetadataValue;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.mojang.authlib.GameProfile;
|
||||
|
||||
import net.citizensnpcs.Settings.Setting;
|
||||
import net.citizensnpcs.api.CitizensAPI;
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.MetadataStore;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.api.trait.trait.Inventory;
|
||||
import net.citizensnpcs.nms.v1_8_R3.network.EmptyNetHandler;
|
||||
import net.citizensnpcs.nms.v1_8_R3.network.EmptyNetworkManager;
|
||||
import net.citizensnpcs.nms.v1_8_R3.network.EmptySocket;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.PlayerControllerJump;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.PlayerControllerLook;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.PlayerControllerMove;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.PlayerNavigation;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.npc.skin.SkinPacketTracker;
|
||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
||||
import net.citizensnpcs.trait.Gravity;
|
||||
import net.citizensnpcs.util.NMS;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.AttributeInstance;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.DamageSource;
|
||||
import net.minecraft.server.v1_8_R3.Entity;
|
||||
import net.minecraft.server.v1_8_R3.EntityPlayer;
|
||||
import net.minecraft.server.v1_8_R3.EnumProtocolDirection;
|
||||
import net.minecraft.server.v1_8_R3.GenericAttributes;
|
||||
import net.minecraft.server.v1_8_R3.MathHelper;
|
||||
import net.minecraft.server.v1_8_R3.MinecraftServer;
|
||||
import net.minecraft.server.v1_8_R3.NavigationAbstract;
|
||||
import net.minecraft.server.v1_8_R3.NetworkManager;
|
||||
import net.minecraft.server.v1_8_R3.Packet;
|
||||
import net.minecraft.server.v1_8_R3.PacketPlayOutEntityEquipment;
|
||||
import net.minecraft.server.v1_8_R3.PacketPlayOutEntityHeadRotation;
|
||||
import net.minecraft.server.v1_8_R3.PlayerInteractManager;
|
||||
import net.minecraft.server.v1_8_R3.WorldServer;
|
||||
import net.minecraft.server.v1_8_R3.WorldSettings;
|
||||
|
||||
public class EntityHumanNPC extends EntityPlayer implements NPCHolder, SkinnableEntity {
|
||||
private PlayerControllerJump controllerJump;
|
||||
private PlayerControllerLook controllerLook;
|
||||
private PlayerControllerMove controllerMove;
|
||||
private int jumpTicks = 0;
|
||||
private PlayerNavigation navigation;
|
||||
private final CitizensNPC npc;
|
||||
private final Location packetLocationCache = new Location(null, 0, 0, 0);
|
||||
private final SkinPacketTracker skinTracker;
|
||||
private int updateCounter = 0;
|
||||
|
||||
public EntityHumanNPC(MinecraftServer minecraftServer, WorldServer world, GameProfile gameProfile,
|
||||
PlayerInteractManager playerInteractManager, NPC npc) {
|
||||
super(minecraftServer, world, gameProfile, playerInteractManager);
|
||||
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
skinTracker = new SkinPacketTracker(this);
|
||||
playerInteractManager.setGameMode(WorldSettings.EnumGamemode.SURVIVAL);
|
||||
initialise(minecraftServer);
|
||||
} else {
|
||||
skinTracker = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean ae() {
|
||||
return npc == null ? super.ae() : npc.data().get(NPC.COLLIDABLE_METADATA, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean damageEntity(DamageSource damagesource, float f) {
|
||||
// knock back velocity is cancelled and sent to client for handling when
|
||||
// the entity is a player. there is no client so make this happen
|
||||
// manually.
|
||||
boolean damaged = super.damageEntity(damagesource, f);
|
||||
if (damaged && velocityChanged) {
|
||||
velocityChanged = false;
|
||||
Bukkit.getScheduler().runTask(CitizensAPI.getPlugin(), new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
EntityHumanNPC.this.velocityChanged = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
return damaged;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void die(DamageSource damagesource) {
|
||||
// players that die are not normally removed from the world. when the
|
||||
// NPC dies, we are done with the instance and it should be removed.
|
||||
if (dead) {
|
||||
return;
|
||||
}
|
||||
super.die(damagesource);
|
||||
Bukkit.getScheduler().runTaskLater(CitizensAPI.getPlugin(), new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
world.removeEntity(EntityHumanNPC.this);
|
||||
}
|
||||
}, 35); // give enough time for death and smoke animation
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true)) {
|
||||
super.g(x, y, z);
|
||||
}
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftPlayer getBukkitEntity() {
|
||||
if (npc != null && bukkitEntity == null) {
|
||||
bukkitEntity = new PlayerNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public PlayerControllerJump getControllerJump() {
|
||||
return controllerJump;
|
||||
}
|
||||
|
||||
public PlayerControllerMove getControllerMove() {
|
||||
return controllerMove;
|
||||
}
|
||||
|
||||
public NavigationAbstract getNavigation() {
|
||||
return navigation;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSkinName() {
|
||||
MetadataStore meta = npc.data();
|
||||
|
||||
String skinName = meta.get(NPC.PLAYER_SKIN_UUID_METADATA);
|
||||
if (skinName == null) {
|
||||
skinName = ChatColor.stripColor(getName());
|
||||
}
|
||||
return skinName.toLowerCase();
|
||||
}
|
||||
|
||||
@Override
|
||||
public SkinPacketTracker getSkinTracker() {
|
||||
return skinTracker;
|
||||
}
|
||||
|
||||
private void initialise(MinecraftServer minecraftServer) {
|
||||
Socket socket = new EmptySocket();
|
||||
NetworkManager conn = null;
|
||||
try {
|
||||
conn = new EmptyNetworkManager(EnumProtocolDirection.CLIENTBOUND);
|
||||
playerConnection = new EmptyNetHandler(minecraftServer, conn, this);
|
||||
conn.a(playerConnection);
|
||||
socket.close();
|
||||
} catch (IOException e) {
|
||||
// swallow
|
||||
}
|
||||
|
||||
AttributeInstance range = getAttributeInstance(GenericAttributes.FOLLOW_RANGE);
|
||||
if (range == null) {
|
||||
range = getAttributeMap().b(GenericAttributes.FOLLOW_RANGE);
|
||||
}
|
||||
range.setValue(Setting.DEFAULT_PATHFINDING_RANGE.asDouble());
|
||||
|
||||
controllerJump = new PlayerControllerJump(this);
|
||||
controllerLook = new PlayerControllerLook(this);
|
||||
controllerMove = new PlayerControllerMove(this);
|
||||
navigation = new PlayerNavigation(this, world);
|
||||
NMS.setStepHeight(getBukkitEntity(), 1); // the default (0) breaks step climbing
|
||||
|
||||
setSkinFlags((byte) 0xFF);
|
||||
}
|
||||
|
||||
public boolean isNavigating() {
|
||||
return npc.getNavigator().isNavigating();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void livingEntityBaseTick() {
|
||||
this.ay = this.az;
|
||||
this.aE = this.aF;
|
||||
if (this.hurtTicks > 0) {
|
||||
this.hurtTicks -= 1;
|
||||
}
|
||||
bi();
|
||||
this.aU = this.aT;
|
||||
this.aJ = this.aI;
|
||||
this.aL = this.aK;
|
||||
this.lastYaw = this.yaw;
|
||||
this.lastPitch = this.pitch;
|
||||
}
|
||||
|
||||
private void moveOnCurrentHeading() {
|
||||
if (aY) {
|
||||
if (onGround && jumpTicks == 0) {
|
||||
bF();
|
||||
jumpTicks = 10;
|
||||
}
|
||||
} else {
|
||||
jumpTicks = 0;
|
||||
}
|
||||
aZ *= 0.98F;
|
||||
ba *= 0.98F;
|
||||
bb *= 0.9F;
|
||||
g(aZ, ba); // movement method
|
||||
NMS.setHeadYaw(getBukkitEntity(), yaw);
|
||||
if (jumpTicks > 0) {
|
||||
jumpTicks--;
|
||||
}
|
||||
}
|
||||
|
||||
public void setMoveDestination(double x, double y, double z, double speed) {
|
||||
controllerMove.a(x, y, z, speed);
|
||||
}
|
||||
|
||||
public void setShouldJump() {
|
||||
controllerJump.a();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSkinFlags(byte flags) {
|
||||
// set skin flag byte
|
||||
getDataWatcher().watch(10, Byte.valueOf(flags));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSkinName(String name) {
|
||||
setSkinName(name, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSkinName(String name, boolean forceUpdate) {
|
||||
Preconditions.checkNotNull(name);
|
||||
|
||||
npc.data().setPersistent(NPC.PLAYER_SKIN_UUID_METADATA, name.toLowerCase());
|
||||
skinTracker.notifySkinChange(forceUpdate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSkinPersistent(String skinName, String signature, String data) {
|
||||
Preconditions.checkNotNull(skinName);
|
||||
Preconditions.checkNotNull(signature);
|
||||
Preconditions.checkNotNull(data);
|
||||
|
||||
npc.data().setPersistent(NPC.PLAYER_SKIN_UUID_METADATA, skinName.toLowerCase());
|
||||
npc.data().setPersistent(NPC.PLAYER_SKIN_TEXTURE_PROPERTIES_SIGN_METADATA, signature);
|
||||
npc.data().setPersistent(NPC.PLAYER_SKIN_TEXTURE_PROPERTIES_METADATA, data);
|
||||
npc.data().setPersistent(NPC.PLAYER_SKIN_USE_LATEST, false);
|
||||
npc.data().setPersistent("cached-skin-uuid-name", skinName.toLowerCase());
|
||||
skinTracker.notifySkinChange(false);
|
||||
}
|
||||
|
||||
public void setTargetLook(Entity target, float yawOffset, float renderOffset) {
|
||||
controllerLook.a(target, yawOffset, renderOffset);
|
||||
}
|
||||
|
||||
public void setTargetLook(Location target) {
|
||||
controllerLook.a(target.getX(), target.getY(), target.getZ(), 10, 40);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
super.t_();
|
||||
if (npc == null)
|
||||
return;
|
||||
if (updateCounter + 1 > Setting.PACKET_UPDATE_DELAY.asInt()) {
|
||||
updateEffects = true;
|
||||
}
|
||||
this.noclip = isSpectator();
|
||||
Bukkit.getServer().getPluginManager().unsubscribeFromPermission("bukkit.broadcast.user", bukkitEntity);
|
||||
livingEntityBaseTick();
|
||||
|
||||
boolean navigating = npc.getNavigator().isNavigating();
|
||||
updatePackets(navigating);
|
||||
if (!navigating && getBukkitEntity() != null && npc.getTrait(Gravity.class).hasGravity()
|
||||
&& Util.isLoaded(getBukkitEntity().getLocation(LOADED_LOCATION))) {
|
||||
g(0, 0);
|
||||
}
|
||||
if (Math.abs(motX) < EPSILON && Math.abs(motY) < EPSILON && Math.abs(motZ) < EPSILON) {
|
||||
motX = motY = motZ = 0;
|
||||
}
|
||||
if (navigating) {
|
||||
if (!NMSImpl.isNavigationFinished(navigation)) {
|
||||
NMSImpl.updateNavigation(navigation);
|
||||
}
|
||||
moveOnCurrentHeading();
|
||||
}
|
||||
NMSImpl.updateAI(this);
|
||||
|
||||
if (noDamageTicks > 0) {
|
||||
--noDamageTicks;
|
||||
}
|
||||
|
||||
npc.update();
|
||||
}
|
||||
|
||||
public void updateAI() {
|
||||
controllerMove.c();
|
||||
controllerLook.a();
|
||||
controllerJump.b();
|
||||
}
|
||||
|
||||
private void updatePackets(boolean navigating) {
|
||||
if (updateCounter++ <= Setting.PACKET_UPDATE_DELAY.asInt())
|
||||
return;
|
||||
updateCounter = 0;
|
||||
Location current = getBukkitEntity().getLocation(packetLocationCache);
|
||||
Packet<?>[] packets = new Packet[navigating ? this.inventory.armor.length : this.inventory.armor.length + 1];
|
||||
if (!navigating) {
|
||||
packets[this.inventory.armor.length] = new PacketPlayOutEntityHeadRotation(this,
|
||||
(byte) MathHelper.d(NMSImpl.getHeadYaw(this) * 256.0F / 360.0F));
|
||||
}
|
||||
for (int i = 0; i < this.inventory.armor.length; i++) {
|
||||
packets[i] = new PacketPlayOutEntityEquipment(getId(), i, getEquipment(i));
|
||||
}
|
||||
NMSImpl.sendPacketsNearby(getBukkitEntity(), current, packets);
|
||||
}
|
||||
|
||||
public void updatePathfindingRange(float pathfindingRange) {
|
||||
this.navigation.setRange(pathfindingRange);
|
||||
}
|
||||
|
||||
public static class PlayerNPC extends CraftPlayer implements NPCHolder, SkinnableEntity {
|
||||
private final CraftServer cserver;
|
||||
private final CitizensNPC npc;
|
||||
|
||||
private PlayerNPC(EntityHumanNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
this.cserver = (CraftServer) Bukkit.getServer();
|
||||
npc.getTrait(Inventory.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Player getBukkitEntity() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityHumanNPC getHandle() {
|
||||
return (EntityHumanNPC) this.entity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MetadataValue> getMetadata(String metadataKey) {
|
||||
return cserver.getEntityMetadata().getMetadata(this, metadataKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSkinName() {
|
||||
return ((SkinnableEntity) this.entity).getSkinName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public SkinPacketTracker getSkinTracker() {
|
||||
return ((SkinnableEntity) this.entity).getSkinTracker();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasMetadata(String metadataKey) {
|
||||
return cserver.getEntityMetadata().hasMetadata(this, metadataKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeMetadata(String metadataKey, Plugin owningPlugin) {
|
||||
cserver.getEntityMetadata().removeMetadata(this, metadataKey, owningPlugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setMetadata(String metadataKey, MetadataValue newMetadataValue) {
|
||||
cserver.getEntityMetadata().setMetadata(this, metadataKey, newMetadataValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSkinFlags(byte flags) {
|
||||
((SkinnableEntity) this.entity).setSkinFlags(flags);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSkinName(String name) {
|
||||
((SkinnableEntity) this.entity).setSkinName(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSkinName(String skinName, boolean forceUpdate) {
|
||||
((SkinnableEntity) this.entity).setSkinName(skinName, forceUpdate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSkinPersistent(String skinName, String signature, String data) {
|
||||
((SkinnableEntity) this.entity).setSkinPersistent(skinName, signature, data);
|
||||
}
|
||||
}
|
||||
|
||||
private static final float EPSILON = 0.005F;
|
||||
|
||||
private static final Location LOADED_LOCATION = new Location(null, 0, 0, 0);
|
||||
}
|
@ -0,0 +1,168 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftGhast;
|
||||
import org.bukkit.entity.Ghast;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityGhast;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class GhastController extends MobEntityController {
|
||||
public GhastController() {
|
||||
super(EntityGhastNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ghast getBukkitEntity() {
|
||||
return (Ghast) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityGhastNPC extends EntityGhast implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityGhastNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityGhastNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean bM() {
|
||||
return npc != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
}
|
||||
super.E();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new GhastNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class GhastNPC extends CraftGhast implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public GhastNPC(EntityGhastNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,205 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftGiant;
|
||||
import org.bukkit.entity.Giant;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityGiantZombie;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class GiantController extends MobEntityController {
|
||||
public GiantController() {
|
||||
super(EntityGiantNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Giant getBukkitEntity() {
|
||||
return (Giant) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityGiantNPC extends EntityGiantZombie implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityGiantNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityGiantNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null)
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new GiantNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float f, float f1) {
|
||||
if (npc == null) {
|
||||
super.setSize(f, f1);
|
||||
} else {
|
||||
NMSImpl.setSize(this, f, f1, justCreated);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class GiantNPC extends CraftGiant implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public GiantNPC(EntityGiantNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,218 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftGuardian;
|
||||
import org.bukkit.entity.Guardian;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityGuardian;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class GuardianController extends MobEntityController {
|
||||
public GuardianController() {
|
||||
super(EntityGuardianNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Guardian getBukkitEntity() {
|
||||
return (Guardian) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityGuardianNPC extends EntityGuardian implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityGuardianNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityGuardianNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new GuardianNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void m() {
|
||||
if (npc == null) {
|
||||
super.m();
|
||||
} else {
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setElder(boolean flag) {
|
||||
float oldw = width;
|
||||
float oldl = length;
|
||||
super.setElder(flag);
|
||||
if (oldw != width || oldl != length) {
|
||||
this.setPosition(locX - 0.01, locY, locZ - 0.01);
|
||||
this.setPosition(locX + 0.01, locY, locZ + 0.01);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float f, float f1) {
|
||||
if (npc == null) {
|
||||
super.setSize(f, f1);
|
||||
} else {
|
||||
NMSImpl.setSize(this, f, f1, justCreated);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class GuardianNPC extends CraftGuardian implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public GuardianNPC(EntityGuardianNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,228 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftHorse;
|
||||
import org.bukkit.entity.Horse;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.trait.HorseModifiers;
|
||||
import net.citizensnpcs.util.NMS;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityHorse;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class HorseController extends MobEntityController {
|
||||
public HorseController() {
|
||||
super(EntityHorseNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Horse getBukkitEntity() {
|
||||
return (Horse) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void spawn(Location at, NPC npc) {
|
||||
npc.getTrait(HorseModifiers.class);
|
||||
super.spawn(at, npc);
|
||||
}
|
||||
|
||||
public static class EntityHorseNPC extends EntityHorse implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityHorseNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityHorseNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
((Horse) getBukkitEntity()).setDomestication(((Horse) getBukkitEntity()).getMaxDomestication());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void a(boolean flag) {
|
||||
float oldw = width;
|
||||
float oldl = length;
|
||||
super.a(flag);
|
||||
if (oldw != width || oldl != length) {
|
||||
this.setPosition(locX - 0.01, locY, locZ - 0.01);
|
||||
this.setPosition(locX + 0.01, locY, locZ + 0.01);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cp() {
|
||||
if (npc == null)
|
||||
return super.cp();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
return super.cp() && !protectedDefault;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
if (npc == null) {
|
||||
super.E();
|
||||
} else {
|
||||
NMS.setStepHeight(getBukkitEntity(), 1);
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new HorseNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class HorseNPC extends CraftHorse implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public HorseNPC(EntityHorseNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,142 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import java.util.UUID;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftWorld;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scoreboard.Scoreboard;
|
||||
import org.bukkit.scoreboard.Team;
|
||||
|
||||
import com.mojang.authlib.GameProfile;
|
||||
|
||||
import net.citizensnpcs.Settings.Setting;
|
||||
import net.citizensnpcs.api.CitizensAPI;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.api.util.Colorizer;
|
||||
import net.citizensnpcs.npc.AbstractEntityController;
|
||||
import net.citizensnpcs.npc.skin.Skin;
|
||||
import net.citizensnpcs.npc.skin.SkinnableEntity;
|
||||
import net.citizensnpcs.util.NMS;
|
||||
import net.minecraft.server.v1_8_R3.PlayerInteractManager;
|
||||
import net.minecraft.server.v1_8_R3.WorldServer;
|
||||
|
||||
public class HumanController extends AbstractEntityController {
|
||||
public HumanController() {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Entity createEntity(final Location at, final NPC npc) {
|
||||
final WorldServer nmsWorld = ((CraftWorld) at.getWorld()).getHandle();
|
||||
String coloredName = Colorizer.parseColors(npc.getFullName());
|
||||
|
||||
String name = coloredName, prefix = null, suffix = null;
|
||||
if (coloredName.length() > 16) {
|
||||
prefix = coloredName.substring(0, 16);
|
||||
if (coloredName.length() > 30) {
|
||||
int len = 30;
|
||||
name = coloredName.substring(16, 30);
|
||||
if (NON_ALPHABET_MATCHER.matcher(name).matches()) {
|
||||
if (coloredName.length() >= 32) {
|
||||
len = 32;
|
||||
name = coloredName.substring(16, 32);
|
||||
} else if (coloredName.length() == 31) {
|
||||
len = 31;
|
||||
name = coloredName.substring(16, 31);
|
||||
}
|
||||
} else {
|
||||
name = ChatColor.RESET + name;
|
||||
}
|
||||
suffix = coloredName.substring(len);
|
||||
} else {
|
||||
name = coloredName.substring(16);
|
||||
if (!NON_ALPHABET_MATCHER.matcher(name).matches()) {
|
||||
name = ChatColor.RESET + name;
|
||||
}
|
||||
if (name.length() > 16) {
|
||||
suffix = name.substring(16);
|
||||
name = name.substring(0, 16);
|
||||
}
|
||||
}
|
||||
coloredName = coloredName.substring(0, 16);
|
||||
}
|
||||
|
||||
final String prefixCapture = prefix, suffixCapture = suffix;
|
||||
|
||||
UUID uuid = npc.getUniqueId();
|
||||
if (uuid.version() == 4) { // clear version
|
||||
long msb = uuid.getMostSignificantBits();
|
||||
msb &= ~0x0000000000004000L;
|
||||
msb |= 0x0000000000002000L;
|
||||
uuid = new UUID(msb, uuid.getLeastSignificantBits());
|
||||
}
|
||||
|
||||
final GameProfile profile = new GameProfile(uuid, name);
|
||||
|
||||
final EntityHumanNPC handle = new EntityHumanNPC(nmsWorld.getServer().getServer(), nmsWorld, profile,
|
||||
new PlayerInteractManager(nmsWorld), npc);
|
||||
|
||||
Skin skin = handle.getSkinTracker().getSkin();
|
||||
if (skin != null) {
|
||||
skin.apply(handle);
|
||||
}
|
||||
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (getBukkitEntity() == null || !getBukkitEntity().isValid())
|
||||
return;
|
||||
boolean removeFromPlayerList = npc.data().get("removefromplayerlist",
|
||||
Setting.REMOVE_PLAYERS_FROM_PLAYER_LIST.asBoolean());
|
||||
NMS.addOrRemoveFromPlayerList(getBukkitEntity(),
|
||||
npc.data().get("removefromplayerlist", removeFromPlayerList));
|
||||
|
||||
if (Setting.USE_SCOREBOARD_TEAMS.asBoolean()) {
|
||||
Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
|
||||
String teamName = profile.getId().toString().substring(0, 16);
|
||||
|
||||
Team team = scoreboard.getTeam(teamName);
|
||||
if (team == null) {
|
||||
team = scoreboard.registerNewTeam(teamName);
|
||||
if (prefixCapture != null) {
|
||||
team.setPrefix(prefixCapture);
|
||||
}
|
||||
if (suffixCapture != null) {
|
||||
team.setSuffix(suffixCapture);
|
||||
}
|
||||
}
|
||||
team.addPlayer(handle.getBukkitEntity());
|
||||
|
||||
handle.getNPC().data().set(NPC.SCOREBOARD_FAKE_TEAM_NAME_METADATA, teamName);
|
||||
}
|
||||
}
|
||||
}, 20);
|
||||
|
||||
handle.getBukkitEntity().setSleepingIgnored(true);
|
||||
|
||||
return handle.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Player getBukkitEntity() {
|
||||
return (Player) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
Player entity = getBukkitEntity();
|
||||
if (entity != null) {
|
||||
NMS.removeFromWorld(entity);
|
||||
SkinnableEntity npc = entity instanceof SkinnableEntity ? (SkinnableEntity) entity : null;
|
||||
npc.getSkinTracker().onRemoveNPC();
|
||||
}
|
||||
super.remove();
|
||||
}
|
||||
|
||||
private static Pattern NON_ALPHABET_MATCHER = Pattern.compile(".*[^A-Za-z0-9_].*");
|
||||
}
|
@ -0,0 +1,205 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftIronGolem;
|
||||
import org.bukkit.entity.IronGolem;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityIronGolem;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class IronGolemController extends MobEntityController {
|
||||
public IronGolemController() {
|
||||
super(EntityIronGolemNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IronGolem getBukkitEntity() {
|
||||
return (IronGolem) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityIronGolemNPC extends EntityIronGolem implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityIronGolemNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityIronGolemNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null)
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new IronGolemNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float f, float f1) {
|
||||
if (npc == null) {
|
||||
super.setSize(f, f1);
|
||||
} else {
|
||||
NMSImpl.setSize(this, f, f1, justCreated);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class IronGolemNPC extends CraftIronGolem implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public IronGolemNPC(EntityIronGolemNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,216 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftMagmaCube;
|
||||
import org.bukkit.entity.MagmaCube;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.PlayerControllerMove;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityHuman;
|
||||
import net.minecraft.server.v1_8_R3.EntityMagmaCube;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class MagmaCubeController extends MobEntityController {
|
||||
public MagmaCubeController() {
|
||||
super(EntityMagmaCubeNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MagmaCube getBukkitEntity() {
|
||||
return (MagmaCube) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityMagmaCubeNPC extends EntityMagmaCube implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityMagmaCubeNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityMagmaCubeNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
setSize(3);
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
this.moveController = new PlayerControllerMove(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null)
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void d(EntityHuman human) {
|
||||
if (npc == null) {
|
||||
super.d(human);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new MagmaCubeNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void m() {
|
||||
super.m();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float f, float f1) {
|
||||
if (npc == null) {
|
||||
super.setSize(f, f1);
|
||||
} else {
|
||||
NMSImpl.setSize(this, f, f1, justCreated);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class MagmaCubeNPC extends CraftMagmaCube implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public MagmaCubeNPC(EntityMagmaCubeNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftWorld;
|
||||
import org.bukkit.entity.Entity;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.npc.AbstractEntityController;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public abstract class MobEntityController extends AbstractEntityController {
|
||||
private final Constructor<?> constructor;
|
||||
|
||||
protected MobEntityController(Class<?> clazz) {
|
||||
super(clazz);
|
||||
this.constructor = getConstructor(clazz);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Entity createEntity(Location at, NPC npc) {
|
||||
net.minecraft.server.v1_8_R3.Entity entity = createEntityFromClass(((CraftWorld) at.getWorld()).getHandle(),
|
||||
npc);
|
||||
entity.setPositionRotation(at.getX(), at.getY(), at.getZ(), at.getYaw(), at.getPitch());
|
||||
|
||||
// entity.onGround isn't updated right away - we approximate here so
|
||||
// that things like pathfinding still work *immediately* after spawn.
|
||||
org.bukkit.Material beneath = at.getBlock().getRelative(BlockFace.DOWN).getType();
|
||||
if (beneath.isBlock()) {
|
||||
entity.onGround = true;
|
||||
}
|
||||
return entity.getBukkitEntity();
|
||||
}
|
||||
|
||||
private net.minecraft.server.v1_8_R3.Entity createEntityFromClass(Object... args) {
|
||||
try {
|
||||
return (net.minecraft.server.v1_8_R3.Entity) constructor.newInstance(args);
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static Constructor<?> getConstructor(Class<?> clazz) {
|
||||
Constructor<?> constructor = CONSTRUCTOR_CACHE.get(clazz);
|
||||
if (constructor != null)
|
||||
return constructor;
|
||||
try {
|
||||
return clazz.getConstructor(World.class, NPC.class);
|
||||
} catch (Exception ex) {
|
||||
throw new IllegalStateException("unable to find an entity constructor");
|
||||
}
|
||||
}
|
||||
|
||||
private static final Map<Class<?>, Constructor<?>> CONSTRUCTOR_CACHE = Maps.newHashMap();
|
||||
}
|
@ -0,0 +1,207 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftMushroomCow;
|
||||
import org.bukkit.entity.MushroomCow;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityMushroomCow;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class MushroomCowController extends MobEntityController {
|
||||
|
||||
public MushroomCowController() {
|
||||
super(EntityMushroomCowNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MushroomCow getBukkitEntity() {
|
||||
return (MushroomCow) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityMushroomCowNPC extends EntityMushroomCow implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityMushroomCowNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityMushroomCowNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void a(boolean flag) {
|
||||
float oldw = width;
|
||||
float oldl = length;
|
||||
super.a(flag);
|
||||
if (oldw != width || oldl != length) {
|
||||
this.setPosition(locX - 0.01, locY, locZ - 0.01);
|
||||
this.setPosition(locX + 0.01, locY, locZ + 0.01);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null)
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null)
|
||||
npc.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new MushroomCowNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class MushroomCowNPC extends CraftMushroomCow implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public MushroomCowNPC(EntityMushroomCowNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,214 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftOcelot;
|
||||
import org.bukkit.entity.Ocelot;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityOcelot;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class OcelotController extends MobEntityController {
|
||||
public OcelotController() {
|
||||
super(EntityOcelotNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ocelot getBukkitEntity() {
|
||||
return (Ocelot) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityOcelotNPC extends EntityOcelot implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityOcelotNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityOcelotNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void a(boolean flag) {
|
||||
float oldw = width;
|
||||
float oldl = length;
|
||||
super.a(flag);
|
||||
if (oldw != width || oldl != length) {
|
||||
this.setPosition(locX - 0.01, locY, locZ - 0.01);
|
||||
this.setPosition(locX + 0.01, locY, locZ + 0.01);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void cm() {
|
||||
if (npc == null) {
|
||||
super.cm();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null)
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null)
|
||||
npc.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new OcelotNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class OcelotNPC extends CraftOcelot implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public OcelotNPC(EntityOcelotNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,224 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPig;
|
||||
import org.bukkit.entity.Pig;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityLightning;
|
||||
import net.minecraft.server.v1_8_R3.EntityPig;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class PigController extends MobEntityController {
|
||||
public PigController() {
|
||||
super(EntityPigNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pig getBukkitEntity() {
|
||||
return (Pig) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityPigNPC extends EntityPig implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityPigNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityPigNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void a(boolean flag) {
|
||||
float oldw = width;
|
||||
float oldl = length;
|
||||
super.a(flag);
|
||||
if (oldw != width || oldl != length) {
|
||||
this.setPosition(locX - 0.01, locY, locZ - 0.01);
|
||||
this.setPosition(locX + 0.01, locY, locZ + 0.01);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean bW() {
|
||||
if (npc == null) {
|
||||
return super.bW();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new PigNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLightningStrike(EntityLightning entitylightning) {
|
||||
if (npc == null) {
|
||||
super.onLightningStrike(entitylightning);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class PigNPC extends CraftPig implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public PigNPC(EntityPigNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,197 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPigZombie;
|
||||
import org.bukkit.entity.PigZombie;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityPigZombie;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class PigZombieController extends MobEntityController {
|
||||
|
||||
public PigZombieController() {
|
||||
super(EntityPigZombieNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PigZombie getBukkitEntity() {
|
||||
return (PigZombie) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityPigZombieNPC extends EntityPigZombie implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityPigZombieNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityPigZombieNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null)
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null)
|
||||
npc.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true)) {
|
||||
super.g(x, y, z);
|
||||
}
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new PigZombieNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class PigZombieNPC extends CraftPigZombie implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public PigZombieNPC(EntityPigZombieNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,226 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftRabbit;
|
||||
import org.bukkit.entity.Rabbit;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityLiving;
|
||||
import net.minecraft.server.v1_8_R3.EntityRabbit;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class RabbitController extends MobEntityController {
|
||||
public RabbitController() {
|
||||
super(EntityRabbitNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Rabbit getBukkitEntity() {
|
||||
return (Rabbit) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityRabbitNPC extends EntityRabbit implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityRabbitNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityRabbitNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void a(boolean flag) {
|
||||
float oldw = width;
|
||||
float oldl = length;
|
||||
super.a(flag);
|
||||
if (oldw != width || oldl != length) {
|
||||
this.setPosition(locX - 0.01, locY, locZ - 0.01);
|
||||
this.setPosition(locX + 0.01, locY, locZ + 0.01);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
if (npc != null) {
|
||||
super.E();
|
||||
this.aY = npc.getNavigator().isNavigating();
|
||||
npc.update();
|
||||
} else {
|
||||
super.E();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new RabbitNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityLiving getGoalTarget() {
|
||||
return npc != null ? null : super.getGoalTarget();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRabbitType(int i) {
|
||||
if (npc != null) {
|
||||
this.datawatcher.watch(18, Byte.valueOf((byte) i));
|
||||
return;
|
||||
}
|
||||
super.setRabbitType(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class RabbitNPC extends CraftRabbit implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public RabbitNPC(EntityRabbitNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,206 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftSheep;
|
||||
import org.bukkit.entity.Sheep;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntitySheep;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class SheepController extends MobEntityController {
|
||||
public SheepController() {
|
||||
super(EntitySheepNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sheep getBukkitEntity() {
|
||||
return (Sheep) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntitySheepNPC extends EntitySheep implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntitySheepNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntitySheepNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void a(boolean flag) {
|
||||
float oldw = width;
|
||||
float oldl = length;
|
||||
super.a(flag);
|
||||
if (oldw != width || oldl != length) {
|
||||
this.setPosition(locX - 0.01, locY, locZ - 0.01);
|
||||
this.setPosition(locX + 0.01, locY, locZ + 0.01);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null)
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null)
|
||||
npc.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new SheepNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class SheepNPC extends CraftSheep implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public SheepNPC(EntitySheepNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,204 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftSilverfish;
|
||||
import org.bukkit.entity.Silverfish;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntitySilverfish;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class SilverfishController extends MobEntityController {
|
||||
public SilverfishController() {
|
||||
super(EntitySilverfishNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Silverfish getBukkitEntity() {
|
||||
return (Silverfish) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntitySilverfishNPC extends EntitySilverfish implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntitySilverfishNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntitySilverfishNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null)
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null)
|
||||
npc.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new SilverfishNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float f, float f1) {
|
||||
if (npc == null) {
|
||||
super.setSize(f, f1);
|
||||
} else {
|
||||
NMSImpl.setSize(this, f, f1, justCreated);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class SilverfishNPC extends CraftSilverfish implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public SilverfishNPC(EntitySilverfishNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,205 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftSkeleton;
|
||||
import org.bukkit.entity.Skeleton;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntitySkeleton;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class SkeletonController extends MobEntityController {
|
||||
public SkeletonController() {
|
||||
super(EntitySkeletonNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Skeleton getBukkitEntity() {
|
||||
return (Skeleton) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntitySkeletonNPC extends EntitySkeleton implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntitySkeletonNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntitySkeletonNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null)
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new SkeletonNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float f, float f1) {
|
||||
if (npc == null) {
|
||||
super.setSize(f, f1);
|
||||
} else {
|
||||
NMSImpl.setSize(this, f, f1, justCreated);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class SkeletonNPC extends CraftSkeleton implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public SkeletonNPC(EntitySkeletonNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,217 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftSlime;
|
||||
import org.bukkit.entity.Slime;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.PlayerControllerMove;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityHuman;
|
||||
import net.minecraft.server.v1_8_R3.EntitySlime;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class SlimeController extends MobEntityController {
|
||||
public SlimeController() {
|
||||
super(EntitySlimeNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Slime getBukkitEntity() {
|
||||
return (Slime) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntitySlimeNPC extends EntitySlime implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntitySlimeNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntitySlimeNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
setSize(3);
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
this.moveController = new PlayerControllerMove(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void d(EntityHuman human) {
|
||||
if (npc == null) {
|
||||
super.d(human);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new SlimeNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void m() {
|
||||
super.m();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float f, float f1) {
|
||||
if (npc == null) {
|
||||
super.setSize(f, f1);
|
||||
} else {
|
||||
NMSImpl.setSize(this, f, f1, justCreated);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class SlimeNPC extends CraftSlime implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public SlimeNPC(EntitySlimeNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,217 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftSnowman;
|
||||
import org.bukkit.entity.Snowman;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntitySnowman;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class SnowmanController extends MobEntityController {
|
||||
public SnowmanController() {
|
||||
super(EntitySnowmanNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Snowman getBukkitEntity() {
|
||||
return (Snowman) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntitySnowmanNPC extends EntitySnowman implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntitySnowmanNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntitySnowmanNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null)
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new SnowmanNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void m() {
|
||||
boolean allowsGriefing = this.world.getGameRules().getBoolean("mobGriefing");
|
||||
if (npc != null) {
|
||||
this.world.getGameRules().set("mobGriefing", "false");
|
||||
}
|
||||
super.m();
|
||||
if (npc != null) {
|
||||
this.world.getGameRules().set("mobGriefing", Boolean.toString(allowsGriefing));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float f, float f1) {
|
||||
if (npc == null) {
|
||||
super.setSize(f, f1);
|
||||
} else {
|
||||
NMSImpl.setSize(this, f, f1, justCreated);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class SnowmanNPC extends CraftSnowman implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public SnowmanNPC(EntitySnowmanNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,205 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftSpider;
|
||||
import org.bukkit.entity.Spider;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntitySpider;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class SpiderController extends MobEntityController {
|
||||
public SpiderController() {
|
||||
super(EntitySpiderNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Spider getBukkitEntity() {
|
||||
return (Spider) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntitySpiderNPC extends EntitySpider implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntitySpiderNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntitySpiderNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null)
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null)
|
||||
npc.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new SpiderNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float f, float f1) {
|
||||
if (npc == null) {
|
||||
super.setSize(f, f1);
|
||||
} else {
|
||||
NMSImpl.setSize(this, f, f1, justCreated);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class SpiderNPC extends CraftSpider implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public SpiderNPC(EntitySpiderNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,197 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftSquid;
|
||||
import org.bukkit.entity.Squid;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntitySquid;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class SquidController extends MobEntityController {
|
||||
public SquidController() {
|
||||
super(EntitySquidNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Squid getBukkitEntity() {
|
||||
return (Squid) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntitySquidNPC extends EntitySquid implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntitySquidNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntitySquidNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null)
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new SquidNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float f, float f1) {
|
||||
if (npc == null) {
|
||||
super.setSize(f, f1);
|
||||
} else {
|
||||
NMSImpl.setSize(this, f, f1, justCreated);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class SquidNPC extends CraftSquid implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public SquidNPC(EntitySquidNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,236 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftVillager;
|
||||
import org.bukkit.entity.Villager;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityHuman;
|
||||
import net.minecraft.server.v1_8_R3.EntityVillager;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class VillagerController extends MobEntityController {
|
||||
public VillagerController() {
|
||||
super(EntityVillagerNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Villager getBukkitEntity() {
|
||||
return (Villager) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityVillagerNPC extends EntityVillager implements NPCHolder {
|
||||
private boolean blockingATrade;
|
||||
private boolean blockTrades = true;
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityVillagerNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityVillagerNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void a(boolean flag) {
|
||||
float oldw = width;
|
||||
float oldl = length;
|
||||
super.a(flag);
|
||||
if (oldw != width || oldl != length) {
|
||||
this.setPosition(locX - 0.01, locY, locZ - 0.01);
|
||||
this.setPosition(locX + 0.01, locY, locZ + 0.01);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean a(EntityHuman entityhuman) {
|
||||
if (npc != null && blockTrades) {
|
||||
blockingATrade = true;
|
||||
}
|
||||
return super.a(entityhuman);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean co() {
|
||||
if (blockingATrade) {
|
||||
blockingATrade = false;
|
||||
return true;
|
||||
}
|
||||
return super.co();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new VillagerNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
public boolean isBlockingTrades() {
|
||||
return blockTrades;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void setBlockTrades(boolean blocked) {
|
||||
this.blockTrades = blocked;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class VillagerNPC extends CraftVillager implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public VillagerNPC(EntityVillagerNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,204 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftWitch;
|
||||
import org.bukkit.entity.Witch;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityWitch;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class WitchController extends MobEntityController {
|
||||
public WitchController() {
|
||||
super(EntityWitchNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Witch getBukkitEntity() {
|
||||
return (Witch) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityWitchNPC extends EntityWitch implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityWitchNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityWitchNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null)
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null)
|
||||
npc.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new WitchNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float f, float f1) {
|
||||
if (npc == null) {
|
||||
super.setSize(f, f1);
|
||||
} else {
|
||||
NMSImpl.setSize(this, f, f1, justCreated);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class WitchNPC extends CraftWitch implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public WitchNPC(EntityWitchNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,168 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftWither;
|
||||
import org.bukkit.entity.Wither;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityWither;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class WitherController extends MobEntityController {
|
||||
public WitherController() {
|
||||
super(EntityWitherNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Wither getBukkitEntity() {
|
||||
return (Wither) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityWitherNPC extends EntityWither implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityWitherNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityWitherNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null)
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void E() {
|
||||
if (npc == null) {
|
||||
super.E();
|
||||
return;
|
||||
}
|
||||
npc.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new WitherNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int s(int i) {
|
||||
return npc == null ? super.s(i) : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class WitherNPC extends CraftWither implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public WitherNPC(EntityWitherNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,223 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftWolf;
|
||||
import org.bukkit.entity.Wolf;
|
||||
import org.bukkit.event.entity.EntityTargetEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityLiving;
|
||||
import net.minecraft.server.v1_8_R3.EntityWolf;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class WolfController extends MobEntityController {
|
||||
public WolfController() {
|
||||
super(EntityWolfNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Wolf getBukkitEntity() {
|
||||
return (Wolf) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityWolfNPC extends EntityWolf implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityWolfNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityWolfNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void a(boolean flag) {
|
||||
float oldw = width;
|
||||
float oldl = length;
|
||||
super.a(flag);
|
||||
if (oldw != width || oldl != length) {
|
||||
this.setPosition(locX - 0.01, locY, locZ - 0.01);
|
||||
this.setPosition(locX + 0.01, locY, locZ + 0.01);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new WolfNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGoalTarget(EntityLiving entityliving, EntityTargetEvent.TargetReason reason, boolean fire) {
|
||||
if (npc == null || this.equals(entityliving)) {
|
||||
super.setGoalTarget(entityliving, reason, fire);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class WolfNPC extends CraftWolf implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public WolfNPC(EntityWolfNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSitting(boolean sitting) {
|
||||
getHandle().setSitting(sitting);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,196 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftZombie;
|
||||
import org.bukkit.entity.Zombie;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCEnderTeleportEvent;
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityZombie;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class ZombieController extends MobEntityController {
|
||||
public ZombieController() {
|
||||
super(EntityZombieNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Zombie getBukkitEntity() {
|
||||
return (Zombie) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityZombieNPC extends EntityZombie implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityZombieNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityZombieNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
NMSImpl.clearGoals(goalSelector, targetSelector);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.a(d0, flag, block, blockposition);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bo() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bo(), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String bp() {
|
||||
return NMSImpl.getSoundEffect(npc, super.bp(), NPC.DEATH_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cc() {
|
||||
if (npc == null)
|
||||
return super.cc();
|
||||
boolean protectedDefault = npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true);
|
||||
if (!protectedDefault || !npc.data().get(NPC.LEASH_PROTECTED_METADATA, protectedDefault))
|
||||
return super.cc();
|
||||
if (super.cc()) {
|
||||
unleash(true, false); // clearLeash with client update
|
||||
}
|
||||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null)
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void D() {
|
||||
if (npc == null) {
|
||||
super.D();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.e(f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void E() {
|
||||
super.E();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enderTeleportTo(double d0, double d1, double d2) {
|
||||
if (npc == null)
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
NPCEnderTeleportEvent event = new NPCEnderTeleportEvent(npc);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) {
|
||||
super.enderTeleportTo(d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
super.g(f, f1);
|
||||
} else {
|
||||
NMSImpl.flyingMoveLogic(this, f, f1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder))
|
||||
bukkitEntity = new ZombieNPC(this);
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean k_() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
return super.k_();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String z() {
|
||||
return NMSImpl.getSoundEffect(npc, super.z(), NPC.AMBIENT_SOUND_METADATA);
|
||||
}
|
||||
}
|
||||
|
||||
public static class ZombieNPC extends CraftZombie implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public ZombieNPC(EntityZombieNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,139 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftArmorStand;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityArmorStand;
|
||||
import net.minecraft.server.v1_8_R3.EntityHuman;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.Vec3D;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class ArmorStandController extends MobEntityController {
|
||||
public ArmorStandController() {
|
||||
super(EntityArmorStandNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArmorStand getBukkitEntity() {
|
||||
return (ArmorStand) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class ArmorStandNPC extends CraftArmorStand implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public ArmorStandNPC(EntityArmorStandNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
|
||||
public static class EntityArmorStandNPC extends EntityArmorStand implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityArmorStandNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityArmorStandNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean a(EntityHuman entityhuman, Vec3D vec3d) {
|
||||
if (npc == null) {
|
||||
return super.a(entityhuman, vec3d);
|
||||
}
|
||||
PlayerInteractEntityEvent event = new PlayerInteractEntityEvent((Player) entityhuman.getBukkitEntity(),
|
||||
getBukkitEntity());
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
return !event.isCancelled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new ArmorStandNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
super.t_();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float f, float f1) {
|
||||
if (npc == null) {
|
||||
super.setSize(f, f1);
|
||||
} else {
|
||||
NMSImpl.setSize(this, f, f1, justCreated);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,125 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftBoat;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.entity.Boat;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityBoat;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class BoatController extends MobEntityController {
|
||||
public BoatController() {
|
||||
super(EntityBoatNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boat getBukkitEntity() {
|
||||
return (Boat) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class BoatNPC extends CraftBoat implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public BoatNPC(EntityBoatNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
|
||||
public static class EntityBoatNPC extends EntityBoat implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityBoatNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityBoatNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new BoatNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float f, float f1) {
|
||||
if (npc == null) {
|
||||
super.setSize(f, f1);
|
||||
} else {
|
||||
NMSImpl.setSize(this, f, f1, justCreated);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
} else {
|
||||
super.t_();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,134 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.npc.AbstractEntityController;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityEgg;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
import net.minecraft.server.v1_8_R3.WorldServer;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftWorld;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEgg;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.entity.Egg;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class EggController extends AbstractEntityController {
|
||||
public EggController() {
|
||||
super(EntityEggNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Entity createEntity(Location at, NPC npc) {
|
||||
WorldServer ws = ((CraftWorld) at.getWorld()).getHandle();
|
||||
final EntityEggNPC handle = new EntityEggNPC(ws, npc, at.getX(), at.getY(), at.getZ());
|
||||
return handle.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Egg getBukkitEntity() {
|
||||
return (Egg) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EggNPC extends CraftEgg implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EggNPC(EntityEggNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
|
||||
public static class EntityEggNPC extends EntityEgg implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityEggNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityEggNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
public EntityEggNPC(World world, NPC npc, double d0, double d1, double d2) {
|
||||
super(world, d0, d1, d2);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new EggNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true)) {
|
||||
super.t_();
|
||||
}
|
||||
} else {
|
||||
super.t_();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,115 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityEnderCrystal;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEnderCrystal;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.entity.EnderCrystal;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class EnderCrystalController extends MobEntityController {
|
||||
public EnderCrystalController() {
|
||||
super(EntityEnderCrystalNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnderCrystal getBukkitEntity() {
|
||||
return (EnderCrystal) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EnderCrystalNPC extends CraftEnderCrystal implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EnderCrystalNPC(EntityEnderCrystalNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
|
||||
public static class EntityEnderCrystalNPC extends EntityEnderCrystal implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityEnderCrystalNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
public EntityEnderCrystalNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new EnderCrystalNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
} else {
|
||||
super.t_();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,118 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEnderPearl;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.entity.EnderPearl;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityEnderPearl;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class EnderPearlController extends MobEntityController {
|
||||
public EnderPearlController() {
|
||||
super(EntityEnderPearlNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnderPearl getBukkitEntity() {
|
||||
return (EnderPearl) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EnderPearlNPC extends CraftEnderPearl implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EnderPearlNPC(EntityEnderPearlNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
|
||||
public static class EntityEnderPearlNPC extends EntityEnderPearl implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityEnderPearlNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityEnderPearlNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new EnderPearlNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true)) {
|
||||
super.t_();
|
||||
}
|
||||
} else {
|
||||
super.t_();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,115 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityEnderSignal;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEnderSignal;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.entity.EnderSignal;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class EnderSignalController extends MobEntityController {
|
||||
public EnderSignalController() {
|
||||
super(EntityEnderSignalNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnderSignal getBukkitEntity() {
|
||||
return (EnderSignal) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EnderSignalNPC extends CraftEnderSignal implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EnderSignalNPC(EntityEnderSignalNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
|
||||
public static class EntityEnderSignalNPC extends EntityEnderSignal implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityEnderSignalNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
public EntityEnderSignalNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new EnderSignalNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
} else {
|
||||
super.t_();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,115 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityExperienceOrb;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftExperienceOrb;
|
||||
import org.bukkit.entity.ExperienceOrb;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class ExperienceOrbController extends MobEntityController {
|
||||
public ExperienceOrbController() {
|
||||
super(EntityExperienceOrbNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExperienceOrb getBukkitEntity() {
|
||||
return (ExperienceOrb) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityExperienceOrbNPC extends EntityExperienceOrb implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityExperienceOrbNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityExperienceOrbNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new ExperienceOrbNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
} else {
|
||||
super.t_();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class ExperienceOrbNPC extends CraftExperienceOrb implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public ExperienceOrbNPC(EntityExperienceOrbNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,170 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftWorld;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftFallingSand;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.util.CraftMagicNumbers;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.FallingBlock;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.AbstractEntityController;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.Block;
|
||||
import net.minecraft.server.v1_8_R3.Blocks;
|
||||
import net.minecraft.server.v1_8_R3.EntityFallingBlock;
|
||||
import net.minecraft.server.v1_8_R3.IBlockData;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
import net.minecraft.server.v1_8_R3.WorldServer;
|
||||
|
||||
public class FallingBlockController extends AbstractEntityController {
|
||||
public FallingBlockController() {
|
||||
super(EntityFallingBlockNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Entity createEntity(Location at, NPC npc) {
|
||||
WorldServer ws = ((CraftWorld) at.getWorld()).getHandle();
|
||||
Block id = Blocks.STONE;
|
||||
int data = npc.data().get(NPC.ITEM_DATA_METADATA, npc.data().get("falling-block-data", 0));
|
||||
if (npc.data().has("falling-block-id") || npc.data().has(NPC.ITEM_ID_METADATA)) {
|
||||
id = CraftMagicNumbers.getBlock(Material.getMaterial(
|
||||
npc.data().<String> get(NPC.ITEM_ID_METADATA, npc.data().<String> get("falling-block-id"))));
|
||||
}
|
||||
final EntityFallingBlockNPC handle = new EntityFallingBlockNPC(ws, npc, at.getX(), at.getY(), at.getZ(),
|
||||
id.fromLegacyData(data));
|
||||
return handle.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public FallingBlock getBukkitEntity() {
|
||||
return (FallingBlock) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityFallingBlockNPC extends EntityFallingBlock implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityFallingBlockNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityFallingBlockNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
public EntityFallingBlockNPC(World world, NPC npc, double d0, double d1, double d2, IBlockData data) {
|
||||
super(world, d0, d1, d2, data);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new FallingBlockNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float f, float f1) {
|
||||
if (npc == null) {
|
||||
super.setSize(f, f1);
|
||||
} else {
|
||||
NMSImpl.setSize(this, f, f1, justCreated);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
if (Math.abs(motX) > EPSILON || Math.abs(motY) > EPSILON || Math.abs(motZ) > EPSILON) {
|
||||
motX *= 0.98;
|
||||
motY *= 0.98;
|
||||
motZ *= 0.98;
|
||||
move(motX, motY, motZ);
|
||||
}
|
||||
} else {
|
||||
super.t_();
|
||||
}
|
||||
}
|
||||
|
||||
private static final double EPSILON = 0.001;
|
||||
}
|
||||
|
||||
public static class FallingBlockNPC extends CraftFallingSand implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public FallingBlockNPC(EntityFallingBlockNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
public void setType(Material material, int data) {
|
||||
npc.data().setPersistent(NPC.ITEM_ID_METADATA, material.name());
|
||||
npc.data().setPersistent(NPC.ITEM_DATA_METADATA, data);
|
||||
if (npc.isSpawned()) {
|
||||
npc.despawn();
|
||||
npc.spawn(npc.getStoredLocation());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,115 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityFireworks;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftFirework;
|
||||
import org.bukkit.entity.Firework;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class FireworkController extends MobEntityController {
|
||||
public FireworkController() {
|
||||
super(EntityFireworkNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Firework getBukkitEntity() {
|
||||
return (Firework) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityFireworkNPC extends EntityFireworks implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityFireworkNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityFireworkNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new FireworkNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
} else {
|
||||
super.t_();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class FireworkNPC extends CraftFirework implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public FireworkNPC(EntityFireworkNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,115 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftFish;
|
||||
import org.bukkit.entity.FishHook;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityFishingHook;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class FishingHookController extends MobEntityController {
|
||||
public FishingHookController() {
|
||||
super(EntityFishingHookNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FishHook getBukkitEntity() {
|
||||
return (FishHook) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityFishingHookNPC extends EntityFishingHook implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityFishingHookNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityFishingHookNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new FishingHookNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
} else {
|
||||
super.t_();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class FishingHookNPC extends CraftFish implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public FishingHookNPC(EntityFishingHookNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,153 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.npc.AbstractEntityController;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityHuman;
|
||||
import net.minecraft.server.v1_8_R3.EntityItem;
|
||||
import net.minecraft.server.v1_8_R3.ItemStack;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
import net.minecraft.server.v1_8_R3.WorldServer;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftWorld;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftItem;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class ItemController extends AbstractEntityController {
|
||||
public ItemController() {
|
||||
super(EntityItemNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Entity createEntity(Location at, NPC npc) {
|
||||
WorldServer ws = ((CraftWorld) at.getWorld()).getHandle();
|
||||
Material id = Material.STONE;
|
||||
int data = npc.data().get(NPC.ITEM_DATA_METADATA, npc.data().get("falling-block-data", 0));
|
||||
if (npc.data().has(NPC.ITEM_ID_METADATA)) {
|
||||
id = Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA));
|
||||
}
|
||||
final EntityItemNPC handle = new EntityItemNPC(ws, npc, at.getX(), at.getY(), at.getZ(),
|
||||
CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(id, 1, (short) data)));
|
||||
return handle.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item getBukkitEntity() {
|
||||
return (Item) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityItemNPC extends EntityItem implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityItemNPC(World world) {
|
||||
super(world);
|
||||
this.npc = null;
|
||||
}
|
||||
|
||||
public EntityItemNPC(World world, NPC npc, double x, double y, double z, ItemStack stack) {
|
||||
super(world, x, y, z, stack);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void d(EntityHuman entityhuman) {
|
||||
if (npc == null) {
|
||||
super.d(entityhuman);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new ItemNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
} else {
|
||||
super.t_();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class ItemNPC extends CraftItem implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public ItemNPC(EntityItemNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
public void setType(Material material, int data) {
|
||||
npc.data().setPersistent(NPC.ITEM_ID_METADATA, material.name());
|
||||
npc.data().setPersistent(NPC.ITEM_DATA_METADATA, data);
|
||||
if (npc.isSpawned()) {
|
||||
npc.despawn();
|
||||
npc.spawn(npc.getStoredLocation());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,150 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftItemFrame;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.ItemFrame;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||
import net.minecraft.server.v1_8_R3.EntityItemFrame;
|
||||
import net.minecraft.server.v1_8_R3.EnumDirection;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class ItemFrameController extends MobEntityController {
|
||||
public ItemFrameController() {
|
||||
super(EntityItemFrameNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Entity createEntity(Location at, NPC npc) {
|
||||
Entity e = super.createEntity(at, npc);
|
||||
EntityItemFrame item = (EntityItemFrame) ((CraftEntity) e).getHandle();
|
||||
item.setDirection(EnumDirection.EAST);
|
||||
item.blockPosition = new BlockPosition(at.getX(), at.getY(), at.getZ());
|
||||
return e;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemFrame getBukkitEntity() {
|
||||
return (ItemFrame) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityItemFrameNPC extends EntityItemFrame implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityItemFrameNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityItemFrameNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new ItemFrameNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean survives() {
|
||||
return npc == null || !npc.isProtected() ? super.survives() : true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
} else {
|
||||
super.t_();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class ItemFrameNPC extends CraftItemFrame implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public ItemFrameNPC(EntityItemFrameNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
Material id = Material.STONE;
|
||||
int data = npc.data().get(NPC.ITEM_DATA_METADATA, npc.data().get("falling-block-data", 0));
|
||||
if (npc.data().has(NPC.ITEM_ID_METADATA)) {
|
||||
id = Material.getMaterial(npc.data().<String> get(NPC.ITEM_ID_METADATA));
|
||||
}
|
||||
getItem().setType(id);
|
||||
getItem().setDurability((short) data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
public void setType(Material material, int data) {
|
||||
npc.data().setPersistent(NPC.ITEM_ID_METADATA, material.name());
|
||||
npc.data().setPersistent(NPC.ITEM_DATA_METADATA, data);
|
||||
if (npc.isSpawned()) {
|
||||
npc.despawn();
|
||||
npc.spawn(npc.getStoredLocation());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,128 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftLargeFireball;
|
||||
import org.bukkit.entity.LargeFireball;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityLargeFireball;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class LargeFireballController extends MobEntityController {
|
||||
public LargeFireballController() {
|
||||
super(EntityLargeFireballNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LargeFireball getBukkitEntity() {
|
||||
return (LargeFireball) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityLargeFireballNPC extends EntityLargeFireball implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityLargeFireballNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityLargeFireballNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new LargeFireballNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSize(float f, float f1) {
|
||||
if (npc == null) {
|
||||
super.setSize(f, f1);
|
||||
} else {
|
||||
NMSImpl.setSize(this, f, f1, justCreated);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true)) {
|
||||
super.t_();
|
||||
}
|
||||
} else {
|
||||
super.t_();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class LargeFireballNPC extends CraftLargeFireball implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public LargeFireballNPC(EntityLargeFireballNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,120 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityLeash;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftLeash;
|
||||
import org.bukkit.entity.LeashHitch;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class LeashController extends MobEntityController {
|
||||
public LeashController() {
|
||||
super(EntityLeashNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LeashHitch getBukkitEntity() {
|
||||
return (LeashHitch) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityLeashNPC extends EntityLeash implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityLeashNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityLeashNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new LeashNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
} else {
|
||||
super.t_();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean survives() {
|
||||
return npc == null || !npc.isProtected() ? super.survives() : true;
|
||||
}
|
||||
}
|
||||
|
||||
public static class LeashNPC extends CraftLeash implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public LeashNPC(EntityLeashNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,124 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftMinecartChest;
|
||||
import org.bukkit.entity.Minecart;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.DamageSource;
|
||||
import net.minecraft.server.v1_8_R3.EntityMinecartChest;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class MinecartChestController extends MobEntityController {
|
||||
public MinecartChestController() {
|
||||
super(EntityMinecartChestNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Minecart getBukkitEntity() {
|
||||
return (Minecart) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityMinecartChestNPC extends EntityMinecartChest implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityMinecartChestNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityMinecartChestNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean damageEntity(DamageSource damagesource, float f) {
|
||||
if (npc == null || !npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
return super.damageEntity(damagesource, f);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new MinecartChestNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
super.t_();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
NMSImpl.minecartItemLogic(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class MinecartChestNPC extends CraftMinecartChest implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public MinecartChestNPC(EntityMinecartChestNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,124 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftMinecartCommand;
|
||||
import org.bukkit.entity.Minecart;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.DamageSource;
|
||||
import net.minecraft.server.v1_8_R3.EntityMinecartCommandBlock;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class MinecartCommandController extends MobEntityController {
|
||||
public MinecartCommandController() {
|
||||
super(EntityMinecartCommandNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Minecart getBukkitEntity() {
|
||||
return (Minecart) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityMinecartCommandNPC extends EntityMinecartCommandBlock implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityMinecartCommandNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityMinecartCommandNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean damageEntity(DamageSource damagesource, float f) {
|
||||
if (npc == null || !npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
return super.damageEntity(damagesource, f);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new MinecartCommandNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
super.t_();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
NMSImpl.minecartItemLogic(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class MinecartCommandNPC extends CraftMinecartCommand implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public MinecartCommandNPC(EntityMinecartCommandNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,124 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftMinecartFurnace;
|
||||
import org.bukkit.entity.Minecart;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.DamageSource;
|
||||
import net.minecraft.server.v1_8_R3.EntityMinecartFurnace;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class MinecartFurnaceController extends MobEntityController {
|
||||
public MinecartFurnaceController() {
|
||||
super(EntityMinecartFurnaceNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Minecart getBukkitEntity() {
|
||||
return (Minecart) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityMinecartFurnaceNPC extends EntityMinecartFurnace implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityMinecartFurnaceNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityMinecartFurnaceNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean damageEntity(DamageSource damagesource, float f) {
|
||||
if (npc == null || !npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
return super.damageEntity(damagesource, f);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new MinecartFurnaceNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
super.t_();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
NMSImpl.minecartItemLogic(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class MinecartFurnaceNPC extends CraftMinecartFurnace implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public MinecartFurnaceNPC(EntityMinecartFurnaceNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,98 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import org.bukkit.entity.Minecart;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.DamageSource;
|
||||
import net.minecraft.server.v1_8_R3.EntityMinecartHopper;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class MinecartHopperController extends MobEntityController {
|
||||
public MinecartHopperController() {
|
||||
super(EntityMinecartHopperNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Minecart getBukkitEntity() {
|
||||
return (Minecart) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityMinecartHopperNPC extends EntityMinecartHopper implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityMinecartHopperNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityMinecartHopperNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean damageEntity(DamageSource damagesource, float f) {
|
||||
if (npc == null || !npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
return super.damageEntity(damagesource, f);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
super.t_();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
NMSImpl.minecartItemLogic(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,124 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftMinecartRideable;
|
||||
import org.bukkit.entity.Minecart;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.DamageSource;
|
||||
import net.minecraft.server.v1_8_R3.EntityMinecartRideable;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class MinecartRideableController extends MobEntityController {
|
||||
public MinecartRideableController() {
|
||||
super(EntityMinecartRideableNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Minecart getBukkitEntity() {
|
||||
return (Minecart) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityMinecartRideableNPC extends EntityMinecartRideable implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityMinecartRideableNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityMinecartRideableNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean damageEntity(DamageSource damagesource, float f) {
|
||||
if (npc == null || !npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
return super.damageEntity(damagesource, f);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new MinecartRideableNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
super.t_();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
NMSImpl.minecartItemLogic(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class MinecartRideableNPC extends CraftMinecartRideable implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public MinecartRideableNPC(EntityMinecartRideableNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,98 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import org.bukkit.entity.Minecart;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.DamageSource;
|
||||
import net.minecraft.server.v1_8_R3.EntityMinecartMobSpawner;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class MinecartSpawnerController extends MobEntityController {
|
||||
public MinecartSpawnerController() {
|
||||
super(EntityMinecartSpawnerNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Minecart getBukkitEntity() {
|
||||
return (Minecart) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityMinecartSpawnerNPC extends EntityMinecartMobSpawner implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityMinecartSpawnerNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityMinecartSpawnerNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean damageEntity(DamageSource damagesource, float f) {
|
||||
if (npc == null || !npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
return super.damageEntity(damagesource, f);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
super.t_();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
NMSImpl.minecartItemLogic(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,98 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import org.bukkit.entity.Minecart;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.DamageSource;
|
||||
import net.minecraft.server.v1_8_R3.EntityMinecartTNT;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class MinecartTNTController extends MobEntityController {
|
||||
public MinecartTNTController() {
|
||||
super(EntityMinecartTNTNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Minecart getBukkitEntity() {
|
||||
return (Minecart) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityMinecartTNTNPC extends EntityMinecartTNT implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityMinecartTNTNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityMinecartTNTNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean damageEntity(DamageSource damagesource, float f) {
|
||||
if (npc == null || !npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
return super.damageEntity(damagesource, f);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
super.t_();
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
NMSImpl.minecartItemLogic(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,120 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityPainting;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPainting;
|
||||
import org.bukkit.entity.Painting;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class PaintingController extends MobEntityController {
|
||||
public PaintingController() {
|
||||
super(EntityPaintingNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Painting getBukkitEntity() {
|
||||
return (Painting) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityPaintingNPC extends EntityPainting implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityPaintingNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityPaintingNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new PaintingNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
} else {
|
||||
super.t_();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean survives() {
|
||||
return npc == null || !npc.isProtected() ? super.survives() : true;
|
||||
}
|
||||
}
|
||||
|
||||
public static class PaintingNPC extends CraftPainting implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public PaintingNPC(EntityPaintingNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,118 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftSmallFireball;
|
||||
import org.bukkit.entity.SmallFireball;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntitySmallFireball;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class SmallFireballController extends MobEntityController {
|
||||
public SmallFireballController() {
|
||||
super(EntitySmallFireballNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SmallFireball getBukkitEntity() {
|
||||
return (SmallFireball) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntitySmallFireballNPC extends EntitySmallFireball implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntitySmallFireballNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntitySmallFireballNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new SmallFireballNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true)) {
|
||||
super.t_();
|
||||
}
|
||||
} else {
|
||||
super.t_();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class SmallFireballNPC extends CraftSmallFireball implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public SmallFireballNPC(EntitySmallFireballNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,115 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntitySnowball;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftSnowball;
|
||||
import org.bukkit.entity.Snowball;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class SnowballController extends MobEntityController {
|
||||
public SnowballController() {
|
||||
super(EntitySnowballNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Snowball getBukkitEntity() {
|
||||
return (Snowball) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class SnowballNPC extends CraftSnowball implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public SnowballNPC(EntitySnowballNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
|
||||
public static class EntitySnowballNPC extends EntitySnowball implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntitySnowballNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
public EntitySnowballNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new SnowballNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
} else {
|
||||
super.t_();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,115 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityTNTPrimed;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftTNTPrimed;
|
||||
import org.bukkit.entity.TNTPrimed;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class TNTPrimedController extends MobEntityController {
|
||||
public TNTPrimedController() {
|
||||
super(EntityTNTPrimedNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TNTPrimed getBukkitEntity() {
|
||||
return (TNTPrimed) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityTNTPrimedNPC extends EntityTNTPrimed implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityTNTPrimedNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
public EntityTNTPrimedNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new TNTPrimedNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
} else {
|
||||
super.t_();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class TNTPrimedNPC extends CraftTNTPrimed implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public TNTPrimedNPC(EntityTNTPrimedNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,118 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftThrownExpBottle;
|
||||
import org.bukkit.entity.ThrownExpBottle;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityThrownExpBottle;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
public class ThrownExpBottleController extends MobEntityController {
|
||||
public ThrownExpBottleController() {
|
||||
super(EntityThrownExpBottleNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ThrownExpBottle getBukkitEntity() {
|
||||
return (ThrownExpBottle) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityThrownExpBottleNPC extends EntityThrownExpBottle implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityThrownExpBottleNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
public EntityThrownExpBottleNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new ThrownExpBottleNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true)) {
|
||||
super.t_();
|
||||
}
|
||||
} else {
|
||||
super.t_();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class ThrownExpBottleNPC extends CraftThrownExpBottle implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public ThrownExpBottleNPC(EntityThrownExpBottleNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,115 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.entity.nonliving;
|
||||
|
||||
import net.citizensnpcs.api.event.NPCPushEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import net.citizensnpcs.nms.v1_8_R3.entity.MobEntityController;
|
||||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_8_R3.EntityWitherSkull;
|
||||
import net.minecraft.server.v1_8_R3.NBTTagCompound;
|
||||
import net.minecraft.server.v1_8_R3.World;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftWitherSkull;
|
||||
import org.bukkit.entity.WitherSkull;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class WitherSkullController extends MobEntityController {
|
||||
public WitherSkullController() {
|
||||
super(EntityWitherSkullNPC.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WitherSkull getBukkitEntity() {
|
||||
return (WitherSkull) super.getBukkitEntity();
|
||||
}
|
||||
|
||||
public static class EntityWitherSkullNPC extends EntityWitherSkull implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public EntityWitherSkullNPC(World world) {
|
||||
this(world, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean d(NBTTagCompound save) {
|
||||
return npc == null ? super.d(save) : false;
|
||||
}
|
||||
|
||||
public EntityWitherSkullNPC(World world, NPC npc) {
|
||||
super(world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collide(net.minecraft.server.v1_8_R3.Entity entity) {
|
||||
// this method is called by both the entities involved - cancelling
|
||||
// it will not stop the NPC from moving.
|
||||
super.collide(entity);
|
||||
if (npc != null) {
|
||||
Util.callCollisionEvent(npc, entity.getBukkitEntity());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void g(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.g(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.g(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
|
||||
bukkitEntity = new WitherSkullNPC(this);
|
||||
}
|
||||
return super.getBukkitEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void t_() {
|
||||
if (npc != null) {
|
||||
npc.update();
|
||||
} else {
|
||||
super.t_();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class WitherSkullNPC extends CraftWitherSkull implements NPCHolder {
|
||||
private final CitizensNPC npc;
|
||||
|
||||
public WitherSkullNPC(EntityWitherSkullNPC entity) {
|
||||
super((CraftServer) Bukkit.getServer(), entity);
|
||||
this.npc = entity.npc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NPC getNPC() {
|
||||
return npc;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.network;
|
||||
|
||||
import io.netty.channel.AbstractChannel;
|
||||
import io.netty.channel.Channel;
|
||||
import io.netty.channel.ChannelConfig;
|
||||
import io.netty.channel.ChannelMetadata;
|
||||
import io.netty.channel.ChannelOutboundBuffer;
|
||||
import io.netty.channel.DefaultChannelConfig;
|
||||
import io.netty.channel.EventLoop;
|
||||
|
||||
import java.net.SocketAddress;
|
||||
|
||||
public class EmptyChannel extends AbstractChannel {
|
||||
private final ChannelConfig config = new DefaultChannelConfig(this);
|
||||
|
||||
public EmptyChannel(Channel parent) {
|
||||
super(parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelConfig config() {
|
||||
config.setAutoRead(true);
|
||||
return config;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doBeginRead() throws Exception {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doBind(SocketAddress arg0) throws Exception {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doClose() throws Exception {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doDisconnect() throws Exception {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doWrite(ChannelOutboundBuffer arg0) throws Exception {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isActive() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isCompatible(EventLoop arg0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOpen() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SocketAddress localAddress0() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelMetadata metadata() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AbstractUnsafe newUnsafe() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SocketAddress remoteAddress0() {
|
||||
return null;
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.network;
|
||||
|
||||
import net.minecraft.server.v1_8_R3.EntityPlayer;
|
||||
import net.minecraft.server.v1_8_R3.MinecraftServer;
|
||||
import net.minecraft.server.v1_8_R3.NetworkManager;
|
||||
import net.minecraft.server.v1_8_R3.Packet;
|
||||
import net.minecraft.server.v1_8_R3.PlayerConnection;
|
||||
|
||||
public class EmptyNetHandler extends PlayerConnection {
|
||||
public EmptyNetHandler(MinecraftServer minecraftServer, NetworkManager networkManager, EntityPlayer entityPlayer) {
|
||||
super(minecraftServer, networkManager, entityPlayer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPacket(Packet packet) {
|
||||
}
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package net.citizensnpcs.nms.v1_8_R3.network;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import net.citizensnpcs.nms.v1_8_R3.util.NMSImpl;
|
||||
import net.minecraft.server.v1_8_R3.EnumProtocolDirection;
|
||||
import net.minecraft.server.v1_8_R3.NetworkManager;
|
||||
|
||||
public class EmptyNetworkManager extends NetworkManager {
|
||||
public EmptyNetworkManager(EnumProtocolDirection flag) throws IOException {
|
||||
super(flag);
|
||||
NMSImpl.initNetworkManager(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean g() {
|
||||
return true;
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user