mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2025-02-18 13:21:45 +01:00
Fix <item> hologram, cancel EntityTameEvent for protected NPCs
This commit is contained in:
parent
9082f6ac3f
commit
5003f0c367
@ -301,7 +301,7 @@ public class Citizens extends JavaPlugin implements CitizensPlugin {
|
|||||||
lib.addMavenCentral();
|
lib.addMavenCentral();
|
||||||
lib.setLogLevel(LogLevel.WARN);
|
lib.setLogLevel(LogLevel.WARN);
|
||||||
// Unfortunately, transitive dependency management is not supported in this library.
|
// Unfortunately, transitive dependency management is not supported in this library.
|
||||||
lib.loadLibrary(Library.builder().groupId("ch{}ethz{}globis{}phtree").artifactId("phtree").version("2.5.0")
|
lib.loadLibrary(Library.builder().groupId("ch{}ethz{}globis{}phtree").artifactId("phtree").version("2.6.2")
|
||||||
.relocate("ch{}ethz{}globis{}phtree", "clib{}phtree").build());
|
.relocate("ch{}ethz{}globis{}phtree", "clib{}phtree").build());
|
||||||
lib.loadLibrary(Library.builder().groupId("net{}sf{}trove4j").artifactId("trove4j").version("3.0.3")
|
lib.loadLibrary(Library.builder().groupId("net{}sf{}trove4j").artifactId("trove4j").version("3.0.3")
|
||||||
.relocate("gnu{}trove", "clib{}trove").build());
|
.relocate("gnu{}trove", "clib{}trove").build());
|
||||||
|
@ -32,6 +32,7 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
|||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
import org.bukkit.event.entity.EntityDeathEvent;
|
import org.bukkit.event.entity.EntityDeathEvent;
|
||||||
import org.bukkit.event.entity.EntityPortalEvent;
|
import org.bukkit.event.entity.EntityPortalEvent;
|
||||||
|
import org.bukkit.event.entity.EntityTameEvent;
|
||||||
import org.bukkit.event.entity.EntityTargetEvent;
|
import org.bukkit.event.entity.EntityTargetEvent;
|
||||||
import org.bukkit.event.entity.EntityTransformEvent;
|
import org.bukkit.event.entity.EntityTransformEvent;
|
||||||
import org.bukkit.event.entity.ItemDespawnEvent;
|
import org.bukkit.event.entity.ItemDespawnEvent;
|
||||||
@ -361,6 +362,14 @@ public class EventListen implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(ignoreCancelled = true)
|
||||||
|
public void onEntityTame(EntityTameEvent event) {
|
||||||
|
NPC npc = CitizensAPI.getNPCRegistry().getNPC(event.getEntity());
|
||||||
|
if (npc == null || !npc.isProtected())
|
||||||
|
return;
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onEntityTarget(EntityTargetEvent event) {
|
public void onEntityTarget(EntityTargetEvent event) {
|
||||||
NPC npc = CitizensAPI.getNPCRegistry().getNPC(event.getTarget());
|
NPC npc = CitizensAPI.getNPCRegistry().getNPC(event.getTarget());
|
||||||
|
@ -1477,8 +1477,8 @@ public class NPCCommands {
|
|||||||
.enablePageSwitcher('/' + args.getRawCommand() + " --page $page");
|
.enablePageSwitcher('/' + args.getRawCommand() + " --page $page");
|
||||||
for (int i = 0; i < npcs.size(); i++) {
|
for (int i = 0; i < npcs.size(); i++) {
|
||||||
String id = npcs.get(i).getUniqueId().toString();
|
String id = npcs.get(i).getUniqueId().toString();
|
||||||
String line = StringHelper.wrap(id) + " " + npcs.get(i).getName() + " (<click:run_command:/npc tp --uuid "
|
String line = StringHelper.wrap(npcs.get(i).getId()) + " " + npcs.get(i).getName()
|
||||||
+ id
|
+ " (<click:run_command:/npc tp --uuid " + id
|
||||||
+ "><hover:show_text:Teleport to this NPC>[[tp]]</hover></click>) (<click:run_command:/npc tph --uuid "
|
+ "><hover:show_text:Teleport to this NPC>[[tp]]</hover></click>) (<click:run_command:/npc tph --uuid "
|
||||||
+ id
|
+ id
|
||||||
+ "><hover:show_text:Teleport NPC to me>[[summon]]</hover></click>) (<click:run_command:/npc remove "
|
+ "><hover:show_text:Teleport NPC to me>[[summon]]</hover></click>) (<click:run_command:/npc remove "
|
||||||
|
@ -24,7 +24,6 @@ import org.bukkit.inventory.Inventory;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.permissions.PermissionAttachment;
|
import org.bukkit.permissions.PermissionAttachment;
|
||||||
|
|
||||||
import com.google.common.base.Splitter;
|
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
@ -329,14 +328,18 @@ public class CommandTrait extends Trait {
|
|||||||
charge.run();
|
charge.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
PermissionAttachment attachment = player.addAttachment(CitizensAPI.getPlugin());
|
|
||||||
if (temporaryPermissions.size() > 0) {
|
if (temporaryPermissions.size() > 0) {
|
||||||
|
PermissionAttachment attachment = player.addAttachment(CitizensAPI.getPlugin());
|
||||||
|
if (attachment != null) {
|
||||||
for (String permission : temporaryPermissions) {
|
for (String permission : temporaryPermissions) {
|
||||||
attachment.setPermission(permission, true);
|
attachment.setPermission(permission, true);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
command.run(npc, player);
|
command.run(npc, player);
|
||||||
attachment.remove();
|
attachment.remove();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
command.run(npc, player);
|
||||||
};
|
};
|
||||||
if (command.delay <= 0) {
|
if (command.delay <= 0) {
|
||||||
runnable.run();
|
runnable.run();
|
||||||
@ -582,7 +585,6 @@ public class CommandTrait extends Trait {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static class NPCCommand {
|
private static class NPCCommand {
|
||||||
String bungeeServer;
|
|
||||||
String command;
|
String command;
|
||||||
int cooldown;
|
int cooldown;
|
||||||
double cost;
|
double cost;
|
||||||
@ -611,8 +613,6 @@ public class CommandTrait extends Trait {
|
|||||||
this.n = n;
|
this.n = n;
|
||||||
this.delay = delay;
|
this.delay = delay;
|
||||||
this.globalCooldown = globalCooldown;
|
this.globalCooldown = globalCooldown;
|
||||||
List<String> split = Splitter.on(' ').omitEmptyStrings().trimResults().limit(2).splitToList(command);
|
|
||||||
this.bungeeServer = split.size() == 2 && split.get(0).equalsIgnoreCase("server") ? split.get(1) : null;
|
|
||||||
this.cost = cost;
|
this.cost = cost;
|
||||||
this.experienceCost = experienceCost;
|
this.experienceCost = experienceCost;
|
||||||
this.itemCost = itemCost;
|
this.itemCost = itemCost;
|
||||||
|
@ -8,6 +8,7 @@ import java.util.regex.Matcher;
|
|||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -95,6 +96,7 @@ public class HologramTrait extends Trait {
|
|||||||
lines.clear();
|
lines.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
private NPC createHologram(String line, double heightOffset) {
|
private NPC createHologram(String line, double heightOffset) {
|
||||||
NPC hologramNPC = null;
|
NPC hologramNPC = null;
|
||||||
if (useTextDisplay) {
|
if (useTextDisplay) {
|
||||||
@ -123,16 +125,23 @@ public class HologramTrait extends Trait {
|
|||||||
if (itemMatcher.matches()) {
|
if (itemMatcher.matches()) {
|
||||||
Material item = SpigotUtil.isUsing1_13API() ? Material.matchMaterial(itemMatcher.group(1), false)
|
Material item = SpigotUtil.isUsing1_13API() ? Material.matchMaterial(itemMatcher.group(1), false)
|
||||||
: Material.matchMaterial(itemMatcher.group(1));
|
: Material.matchMaterial(itemMatcher.group(1));
|
||||||
final NPC itemNPC = registry.createNPCUsingItem(EntityType.DROPPED_ITEM, "", new ItemStack(item, 1));
|
ItemStack itemStack = new ItemStack(item, 1);
|
||||||
|
final NPC itemNPC = registry.createNPCUsingItem(EntityType.DROPPED_ITEM, "", itemStack);
|
||||||
itemNPC.data().setPersistent(NPC.Metadata.NAMEPLATE_VISIBLE, false);
|
itemNPC.data().setPersistent(NPC.Metadata.NAMEPLATE_VISIBLE, false);
|
||||||
if (itemMatcher.group(2) != null) {
|
if (itemMatcher.group(2) != null) {
|
||||||
|
if (itemMatcher.group(2).charAt(1) == '{') {
|
||||||
|
Bukkit.getUnsafe().modifyItemStack(itemStack, itemMatcher.group(2).substring(1));
|
||||||
|
itemNPC.setItemProvider(() -> itemStack);
|
||||||
|
} else {
|
||||||
itemNPC.getOrAddTrait(ScoreboardTrait.class)
|
itemNPC.getOrAddTrait(ScoreboardTrait.class)
|
||||||
.setColor(Util.matchEnum(ChatColor.values(), itemMatcher.group(2).substring(1)));
|
.setColor(Util.matchEnum(ChatColor.values(), itemMatcher.group(2).substring(1)));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
itemNPC.getOrAddTrait(MountTrait.class).setMountedOn(hologramNPC.getUniqueId());
|
itemNPC.getOrAddTrait(MountTrait.class).setMountedOn(hologramNPC.getUniqueId());
|
||||||
itemNPC.spawn(currentLoc);
|
itemNPC.spawn(currentLoc);
|
||||||
|
final NPC hn = hologramNPC;
|
||||||
itemNPC.addRunnable(() -> {
|
itemNPC.addRunnable(() -> {
|
||||||
if (!itemNPC.isSpawned() || !itemNPC.getEntity().isInsideVehicle()) {
|
if (!itemNPC.isSpawned() || !hn.isSpawned()) {
|
||||||
itemNPC.destroy();
|
itemNPC.destroy();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -28,7 +28,7 @@ public class MountTrait extends Trait {
|
|||||||
public void checkMounted() {
|
public void checkMounted() {
|
||||||
if (uuid == null || uuid.equals(currentMount))
|
if (uuid == null || uuid.equals(currentMount))
|
||||||
return;
|
return;
|
||||||
NPC other = CitizensAPI.getNPCRegistry().getByUniqueId(uuid);
|
NPC other = CitizensAPI.getNPCRegistry().getByUniqueIdGlobal(uuid);
|
||||||
if (other != null && other.isSpawned()) {
|
if (other != null && other.isSpawned()) {
|
||||||
NMS.mount(other.getEntity(), npc.getEntity());
|
NMS.mount(other.getEntity(), npc.getEntity());
|
||||||
currentMount = uuid;
|
currentMount = uuid;
|
||||||
|
@ -27,6 +27,10 @@ public class SpellcasterTrait extends Trait {
|
|||||||
super("spellcastertrait");
|
super("spellcastertrait");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Spell getSpell() {
|
||||||
|
return spell;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (!npc.isSpawned() || !(npc.getEntity() instanceof Spellcaster))
|
if (!npc.isSpawned() || !(npc.getEntity() instanceof Spellcaster))
|
||||||
|
@ -387,7 +387,7 @@ public class GuidedWaypointProvider implements EnumerableWaypointProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Plan buildPlan() {
|
public Plan buildPlan() {
|
||||||
return new GuidedPlan(this.<GuidedNode> getParents());
|
return new GuidedPlan(this.<GuidedNode> orderedPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
public double distance(Waypoint dest) {
|
public double distance(Waypoint dest) {
|
||||||
|
Loading…
Reference in New Issue
Block a user