Skip to content

Commit

Permalink
New features requested by mcmonkey
Browse files Browse the repository at this point in the history
  • Loading branch information
fullwall committed Mar 29, 2016
1 parent 49b81d5 commit 33396f0
Show file tree
Hide file tree
Showing 11 changed files with 111 additions and 25 deletions.
5 changes: 5 additions & 0 deletions src/main/java/net/citizensnpcs/EventListen.java
Expand Up @@ -227,6 +227,11 @@ public void onEntityDeath(EntityDeathEvent event) {
if (npc == null) {
return;
}

if (!npc.data().get(NPC.DROPS_ITEMS_METADATA, false)) {
event.getDrops().clear();
}

final Location location = npc.getEntity().getLocation();
Bukkit.getPluginManager().callEvent(new NPCDeathEvent(npc, event));
npc.despawn(DespawnReason.DEATH);
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/net/citizensnpcs/Settings.java
Expand Up @@ -116,7 +116,8 @@ public void loadFromKey(DataKey root) {
TALK_CLOSE_MINIMUM_COOLDOWN("npc.text.min-talk-cooldown", 10),
TALK_ITEM("npc.text.talk-item", "340"),
USE_BOAT_CONTROLS("npc.controllable.use-boat-controls", true),
USE_NEW_PATHFINDER("npc.pathfinding.use-new-finder", false);
USE_NEW_PATHFINDER("npc.pathfinding.use-new-finder", false),
USE_SCOREBOARD_TEAMS("npc.player-scoreboard-teams.enable", true);

protected String path;
protected Object value;
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/net/citizensnpcs/commands/NPCCommands.java
Expand Up @@ -53,6 +53,7 @@
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.api.npc.NPCRegistry;
import net.citizensnpcs.api.trait.Trait;
import net.citizensnpcs.api.trait.trait.Inventory;
import net.citizensnpcs.api.trait.trait.MobType;
import net.citizensnpcs.api.trait.trait.Owner;
import net.citizensnpcs.api.trait.trait.Spawned;
Expand Down Expand Up @@ -675,6 +676,18 @@ public void id(CommandContext args, CommandSender sender, NPC npc) {
Messaging.send(sender, npc.getId());
}

@Command(
aliases = { "npc" },
usage = "inventory",
desc = "Toggles gravity",
modifiers = { "gravity" },
min = 1,
max = 1,
permission = "citizens.npc.inventory")
public void inventory(CommandContext args, CommandSender sender, NPC npc) {
((Player) sender).openInventory(npc.getTrait(Inventory.class).getInventoryView());
}

@Command(
aliases = { "npc" },
usage = "item [item] (data)",
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/net/citizensnpcs/editor/GenericEquipper.java
Expand Up @@ -61,7 +61,7 @@ public void equip(Player equipper, NPC toEquip) {
break;
case AIR:
if (equipper.isSneaking()) {
for (int i = 0; i < 5; i++) {
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);
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java
Expand Up @@ -30,6 +30,7 @@
import net.citizensnpcs.trait.Gravity;
import net.citizensnpcs.trait.HorseModifiers;
import net.citizensnpcs.trait.LookClose;
import net.citizensnpcs.trait.MountTrait;
import net.citizensnpcs.trait.NPCSkeletonType;
import net.citizensnpcs.trait.OcelotModifiers;
import net.citizensnpcs.trait.Poses;
Expand Down Expand Up @@ -72,6 +73,7 @@ public CitizensTraitFactory() {
registerTrait(TraitInfo.create(ScriptTrait.class));
registerTrait(TraitInfo.create(SheepTrait.class));
registerTrait(TraitInfo.create(SkinLayers.class));
registerTrait(TraitInfo.create(MountTrait.class));
registerTrait(TraitInfo.create(NPCSkeletonType.class));
registerTrait(TraitInfo.create(SlimeSize.class));
registerTrait(TraitInfo.create(Spawned.class));
Expand Down
31 changes: 17 additions & 14 deletions src/main/java/net/citizensnpcs/npc/entity/HumanController.java
Expand Up @@ -98,22 +98,25 @@ public void run() {
Setting.REMOVE_PLAYERS_FROM_PLAYER_LIST.asBoolean());
NMS.addOrRemoveFromPlayerList(getBukkitEntity(),
npc.data().get("removefromplayerlist", removeFromPlayerList));
Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
String teamName = UUID.randomUUID().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);

if (Setting.USE_SCOREBOARD_TEAMS.asBoolean()) {
Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
String teamName = UUID.randomUUID().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());
team.addPlayer(handle.getBukkitEntity());

handle.getNPC().data().set(NPC.SCOREBOARD_FAKE_TEAM_NAME_METADATA, teamName);
handle.getNPC().data().set(NPC.SCOREBOARD_FAKE_TEAM_NAME_METADATA, teamName);
}
}
}, 20);

Expand Down
37 changes: 37 additions & 0 deletions src/main/java/net/citizensnpcs/trait/MountTrait.java
@@ -0,0 +1,37 @@
package net.citizensnpcs.trait;

import java.util.UUID;

import net.citizensnpcs.api.CitizensAPI;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.api.persistence.Persist;
import net.citizensnpcs.api.trait.Trait;
import net.citizensnpcs.api.trait.TraitName;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS;

@TraitName("mounttrait")
public class MountTrait extends Trait {
@Persist("mountedon")
private UUID mountedOn;

public MountTrait() {
super("mounttrait");
}

@Override
public void run() {
if (!npc.isSpawned())
return;
if (mountedOn != null) {
NPC other = CitizensAPI.getNPCRegistry().getByUniqueId(mountedOn);
if (other != null && other.isSpawned()) {
NMS.mount(other.getEntity(), npc.getEntity());
}
}

if (NMS.getVehicle(npc.getEntity()) instanceof NPCHolder) {
mountedOn = ((NPCHolder) NMS.getVehicle(npc.getEntity())).getNPC().getUniqueId();
}
}
}
Expand Up @@ -40,10 +40,11 @@
import net.citizensnpcs.api.util.prtree.PRTree;
import net.citizensnpcs.api.util.prtree.Region3D;
import net.citizensnpcs.api.util.prtree.SimplePointND;
import net.citizensnpcs.trait.waypoint.WaypointProvider.EnumerableWaypointProvider;
import net.citizensnpcs.util.Messages;
import net.citizensnpcs.util.Util;

public class GuidedWaypointProvider implements WaypointProvider {
public class GuidedWaypointProvider implements EnumerableWaypointProvider {
private final List<Waypoint> available = Lists.newArrayList();
private GuidedAIGoal currentGoal;
private final List<Waypoint> helpers = Lists.newArrayList();
Expand Down Expand Up @@ -234,6 +235,11 @@ public void setPaused(boolean paused) {
this.paused = paused;
}

@Override
public Iterable<Waypoint> waypoints() {
return Iterables.concat(available, helpers);
}

private class GuidedAIGoal implements Goal {
private GuidedPlan plan;

Expand Down
Expand Up @@ -36,11 +36,12 @@
import net.citizensnpcs.api.util.DataKey;
import net.citizensnpcs.api.util.Messaging;
import net.citizensnpcs.editor.Editor;
import net.citizensnpcs.trait.waypoint.WaypointProvider.EnumerableWaypointProvider;
import net.citizensnpcs.trait.waypoint.triggers.TriggerEditPrompt;
import net.citizensnpcs.util.Messages;
import net.citizensnpcs.util.Util;

public class LinearWaypointProvider implements WaypointProvider {
public class LinearWaypointProvider implements EnumerableWaypointProvider {
private LinearWaypointGoal currentGoal;
private NPC npc;
private final List<Waypoint> waypoints = Lists.newArrayList();
Expand Down Expand Up @@ -84,6 +85,13 @@ public WaypointEditor createEditor(CommandSender sender, CommandContext args) {
return new LinearWaypointEditor((Player) sender);
}

public Waypoint getCurrentWaypoint() {
if (currentGoal != null && currentGoal.currentDestination != null) {
return currentGoal.currentDestination;
}
return null;
}

@Override
public boolean isPaused() {
return currentGoal.isPaused();
Expand Down Expand Up @@ -127,6 +135,11 @@ public void setPaused(boolean paused) {
currentGoal.setPaused(paused);
}

@Override
public Iterable<Waypoint> waypoints() {
return waypoints;
}

private final class LinearWaypointEditor extends WaypointEditor {
Conversation conversation;
boolean editing = true;
Expand Down
@@ -1,11 +1,11 @@
package net.citizensnpcs.trait.waypoint;

import org.bukkit.command.CommandSender;

import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.api.persistence.Persistable;

import org.bukkit.command.CommandSender;

public interface WaypointProvider extends Persistable {
/**
* Creates an {@link WaypointEditor} with the given {@link CommandSender}.
Expand Down Expand Up @@ -44,4 +44,8 @@ public interface WaypointProvider extends Persistable {
* Whether to pause waypoint execution.
*/
public void setPaused(boolean paused);

public static interface EnumerableWaypointProvider extends WaypointProvider {
public Iterable<Waypoint> waypoints();
}
}
12 changes: 7 additions & 5 deletions src/main/java/net/citizensnpcs/util/NMS.java
Expand Up @@ -18,7 +18,6 @@

import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
Expand All @@ -36,7 +35,6 @@
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.inventory.meta.SkullMeta;
import org.bukkit.plugin.PluginLoadOrder;
import org.bukkit.scoreboard.Team;

import com.google.common.base.Preconditions;
import com.mojang.authlib.GameProfile;
Expand Down Expand Up @@ -78,7 +76,6 @@
import net.minecraft.server.v1_9_R1.EntityTracker;
import net.minecraft.server.v1_9_R1.EntityTrackerEntry;
import net.minecraft.server.v1_9_R1.EntityTypes;
import net.minecraft.server.v1_9_R1.EnumChatFormat;
import net.minecraft.server.v1_9_R1.GenericAttributes;
import net.minecraft.server.v1_9_R1.MathHelper;
import net.minecraft.server.v1_9_R1.MobEffects;
Expand All @@ -87,7 +84,6 @@
import net.minecraft.server.v1_9_R1.Packet;
import net.minecraft.server.v1_9_R1.PacketPlayOutPlayerInfo;
import net.minecraft.server.v1_9_R1.PathfinderGoalSelector;
import net.minecraft.server.v1_9_R1.ScoreboardTeam;
import net.minecraft.server.v1_9_R1.Vec3D;
import net.minecraft.server.v1_9_R1.World;
import net.minecraft.server.v1_9_R1.WorldServer;
Expand Down Expand Up @@ -484,6 +480,10 @@ public static float getStepHeight(org.bukkit.entity.Entity entity) {
return NMS.getHandle(entity).P;
}

public static Entity getVehicle(org.bukkit.entity.Entity entity) {
return getHandle(entity).getVehicle();
}

public static void initNetworkManager(NetworkManager network) {
if (NETWORK_ADDRESS == null)
return;
Expand Down Expand Up @@ -724,7 +724,8 @@ public static void setDestination(org.bukkit.entity.Entity entity, double x, dou
} else if (handle instanceof EntityHumanNPC) {
((EntityHumanNPC) handle).setMoveDestination(x, y, z, speed);
}
}
}

public static void setHeadYaw(Entity en, float yaw) {
if (!(en instanceof EntityLiving))
return;
Expand Down Expand Up @@ -908,6 +909,7 @@ public static void updatePathfindingRange(NPC npc, float pathfindingRange) {
private static final Field RABBIT_FIELD = getField(EntityRabbit.class, "bv");
private static final Random RANDOM = Util.getFastRandom();
private static Field SKULL_PROFILE_FIELD;

private static Field TRACKED_ENTITY_SET = NMS.getField(EntityTracker.class, "c");

static {
Expand Down

0 comments on commit 33396f0

Please sign in to comment.