mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2025-02-03 05:51:42 +01:00
Enforce collidability even if not explicitly set
This commit is contained in:
parent
9d0028541e
commit
bfbc2415a5
@ -99,6 +99,7 @@ public class Citizens extends JavaPlugin implements CitizensPlugin {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
private CitizensNPCRegistry npcRegistry;
|
private CitizensNPCRegistry npcRegistry;
|
||||||
|
private ProtocolLibListener protocolListener;
|
||||||
private boolean saveOnDisable = true;
|
private boolean saveOnDisable = true;
|
||||||
private NPCDataStore saves;
|
private NPCDataStore saves;
|
||||||
private NPCSelector selector;
|
private NPCSelector selector;
|
||||||
@ -393,6 +394,9 @@ public class Citizens extends JavaPlugin implements CitizensPlugin {
|
|||||||
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
|
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
|
||||||
new CitizensPlaceholders(selector).register();
|
new CitizensPlaceholders(selector).register();
|
||||||
}
|
}
|
||||||
|
if (Bukkit.getPluginManager().getPlugin("ProtocolLib") != null) {
|
||||||
|
protocolListener = new ProtocolLibListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
setupEconomy();
|
setupEconomy();
|
||||||
|
|
||||||
|
49
main/src/main/java/net/citizensnpcs/ProtocolLibListener.java
Normal file
49
main/src/main/java/net/citizensnpcs/ProtocolLibListener.java
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package net.citizensnpcs;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
|
||||||
|
import com.comphenix.protocol.PacketType.Play.Server;
|
||||||
|
import com.comphenix.protocol.ProtocolLibrary;
|
||||||
|
import com.comphenix.protocol.ProtocolManager;
|
||||||
|
import com.comphenix.protocol.events.ListenerPriority;
|
||||||
|
import com.comphenix.protocol.events.PacketAdapter;
|
||||||
|
import com.comphenix.protocol.events.PacketEvent;
|
||||||
|
|
||||||
|
import net.citizensnpcs.api.npc.NPC;
|
||||||
|
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||||
|
import net.citizensnpcs.trait.SmoothRotationTrait;
|
||||||
|
|
||||||
|
public class ProtocolLibListener {
|
||||||
|
private final ProtocolManager manager;
|
||||||
|
private final Citizens plugin;
|
||||||
|
|
||||||
|
public ProtocolLibListener(Citizens plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.manager = ProtocolLibrary.getProtocolManager();
|
||||||
|
manager.addPacketListener(
|
||||||
|
new PacketAdapter(plugin, ListenerPriority.MONITOR, Server.ENTITY_HEAD_ROTATION, Server.ENTITY_LOOK) {
|
||||||
|
@Override
|
||||||
|
public void onPacketSending(PacketEvent event) {
|
||||||
|
Entity entity = manager.getEntityFromID(event.getPlayer().getWorld(),
|
||||||
|
event.getPacket().getIntegers().getValues().get(0));
|
||||||
|
if (!(entity instanceof NPCHolder))
|
||||||
|
return;
|
||||||
|
NPC npc = ((NPCHolder) entity).getNPC();
|
||||||
|
SmoothRotationTrait trait = npc.getTraitNullable(SmoothRotationTrait.class);
|
||||||
|
if (trait == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (event.getPacketType() == Server.ENTITY_HEAD_ROTATION) {
|
||||||
|
byte headYaw = event.getPacket().getBytes().read(0);
|
||||||
|
} else if (event.getPacketType() == Server.ENTITY_LOOK) {
|
||||||
|
byte yaw = event.getPacket().getBytes().read(0);
|
||||||
|
byte pitch = event.getPacket().getBytes().read(1);
|
||||||
|
} else if (event.getPacketType() == Server.ENTITY_MOVE_LOOK
|
||||||
|
|| event.getPacketType() == Server.REL_ENTITY_MOVE_LOOK) {
|
||||||
|
byte yaw = event.getPacket().getBytes().read(0);
|
||||||
|
byte pitch = event.getPacket().getBytes().read(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -394,9 +394,9 @@ public class NPCCommands {
|
|||||||
permission = "citizens.npc.collidable")
|
permission = "citizens.npc.collidable")
|
||||||
@Requirements(ownership = true, selected = true)
|
@Requirements(ownership = true, selected = true)
|
||||||
public void collidable(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
public void collidable(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
||||||
npc.data().setPersistent(NPC.COLLIDABLE_METADATA, !npc.data().get(NPC.COLLIDABLE_METADATA, false));
|
npc.data().setPersistent(NPC.Metadata.COLLIDABLE, !npc.data().get(NPC.Metadata.COLLIDABLE, false));
|
||||||
Messaging.sendTr(sender,
|
Messaging.sendTr(sender,
|
||||||
npc.data().<Boolean> get(NPC.COLLIDABLE_METADATA) ? Messages.COLLIDABLE_SET : Messages.COLLIDABLE_UNSET,
|
npc.data().<Boolean> get(NPC.Metadata.COLLIDABLE) ? Messages.COLLIDABLE_SET : Messages.COLLIDABLE_UNSET,
|
||||||
npc.getName());
|
npc.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,9 +158,10 @@ public class ScoreboardTrait extends Trait {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SUPPORT_COLLIDABLE_SETOPTION && npc.data().has(NPC.COLLIDABLE_METADATA)) {
|
if (SUPPORT_COLLIDABLE_SETOPTION) {
|
||||||
try {
|
try {
|
||||||
OptionStatus collide = npc.data().<Boolean> get(NPC.COLLIDABLE_METADATA) ? OptionStatus.ALWAYS
|
OptionStatus collide = npc.data().<Boolean> get(NPC.COLLIDABLE_METADATA, !npc.isProtected())
|
||||||
|
? OptionStatus.ALWAYS
|
||||||
: OptionStatus.NEVER;
|
: OptionStatus.NEVER;
|
||||||
if (collide != team.getOption(Option.COLLISION_RULE)) {
|
if (collide != team.getOption(Option.COLLISION_RULE)) {
|
||||||
changed = true;
|
changed = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user