Fix phantom bugs
This commit is contained in:
parent
2a64529bb1
commit
ba04e4b05f
|
@ -34,7 +34,7 @@ public class CitizensPlaceholders extends PlaceholderExpansion {
|
|||
return null;
|
||||
|
||||
if (params.equalsIgnoreCase("citizens_selected_npc_name")) {
|
||||
return selector.getSelected((CommandSender) player).getName();
|
||||
return selector.getSelected((CommandSender) player).getFullName();
|
||||
}
|
||||
|
||||
if (params.equalsIgnoreCase("citizens_selected_npc_id")) {
|
||||
|
|
|
@ -446,7 +446,7 @@ public class CitizensNPC extends AbstractNPC {
|
|||
@Override
|
||||
public String toString() {
|
||||
EntityType mobType = hasTrait(MobType.class) ? getTraitNullable(MobType.class).getType() : null;
|
||||
return getId() + "{" + getName() + ", " + mobType + "}";
|
||||
return getId() + "{" + getFullName() + ", " + mobType + "}";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -39,9 +39,9 @@ public class Chat implements VocalChord {
|
|||
String text = Setting.CHAT_FORMAT_TO_TARGET.asString().replace("<text>", context.getMessage());
|
||||
String targetName = "";
|
||||
// For each recipient
|
||||
for (Talkable entity : context) {
|
||||
entity.talkTo(context, text, this);
|
||||
targetName = entity.getName();
|
||||
for (Talkable talkable : context) {
|
||||
talkable.talkTo(context, text, this);
|
||||
targetName = talkable.getName();
|
||||
}
|
||||
// Check if bystanders hear targeted chat
|
||||
if (!Setting.CHAT_BYSTANDERS_HEAR_TARGETED_CHAT.asBoolean())
|
||||
|
@ -57,9 +57,9 @@ public class Chat implements VocalChord {
|
|||
String text = Setting.CHAT_FORMAT_TO_TARGET.asString().replace("<text>", context.getMessage());
|
||||
List<String> targetNames = new ArrayList<String>();
|
||||
// Talk to each recipient
|
||||
for (Talkable entity : context) {
|
||||
entity.talkTo(context, text, this);
|
||||
targetNames.add(entity.getName());
|
||||
for (Talkable talkable : context) {
|
||||
talkable.talkTo(context, text, this);
|
||||
targetNames.add(talkable.getName());
|
||||
}
|
||||
|
||||
if (!Setting.CHAT_BYSTANDERS_HEAR_TARGETED_CHAT.asBoolean())
|
||||
|
|
|
@ -158,19 +158,23 @@ public class Controllable extends Trait implements Toggleable, CommandConfigurab
|
|||
return true;
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
private void onPlayerInteract(PlayerInteractEvent event) {
|
||||
if (!npc.isSpawned() || !enabled)
|
||||
return;
|
||||
Action performed = event.getAction();
|
||||
if (NMS.getPassengers(npc.getEntity()).contains(npc.getEntity()))
|
||||
if (!NMS.getPassengers(npc.getEntity()).contains(event.getPlayer()))
|
||||
return;
|
||||
switch (performed) {
|
||||
case RIGHT_CLICK_BLOCK:
|
||||
if (event.isCancelled())
|
||||
return;
|
||||
case RIGHT_CLICK_AIR:
|
||||
controller.rightClick(event);
|
||||
break;
|
||||
case LEFT_CLICK_BLOCK:
|
||||
if (event.isCancelled())
|
||||
return;
|
||||
case LEFT_CLICK_AIR:
|
||||
controller.leftClick(event);
|
||||
break;
|
||||
|
@ -393,7 +397,7 @@ public class Controllable extends Trait implements Toggleable, CommandConfigurab
|
|||
|
||||
@Override
|
||||
public void rightClick(PlayerInteractEvent event) {
|
||||
npc.getEntity().setVelocity(npc.getEntity().getVelocity().setY(-0.3F));
|
||||
npc.getEntity().setVelocity(npc.getEntity().getVelocity().setY(-0.25F));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -411,9 +415,10 @@ public class Controllable extends Trait implements Toggleable, CommandConfigurab
|
|||
speed = updateHorizontalSpeed(npc.getEntity(), rider, speed, 1F);
|
||||
boolean shouldJump = NMS.shouldJump(rider);
|
||||
if (shouldJump) {
|
||||
npc.getEntity().setVelocity(npc.getEntity().getVelocity().setY(0.3F));
|
||||
npc.getEntity().setVelocity(npc.getEntity().getVelocity().setY(0.25F));
|
||||
}
|
||||
npc.getEntity().setVelocity(npc.getEntity().getVelocity().multiply(new Vector(1, 0.98, 1)));
|
||||
setMountedYaw(npc.getEntity());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -458,6 +463,10 @@ public class Controllable extends Trait implements Toggleable, CommandConfigurab
|
|||
registerControllerType(EntityType.valueOf("PARROT"), PlayerInputAirController.class);
|
||||
} catch (IllegalArgumentException ex) {
|
||||
}
|
||||
try {
|
||||
registerControllerType(EntityType.valueOf("PHANTOM"), PlayerInputAirController.class);
|
||||
} catch (IllegalArgumentException ex) {
|
||||
}
|
||||
registerControllerType(EntityType.UNKNOWN, LookAirController.class);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -73,6 +73,7 @@ public class EntityMarkers<T> {
|
|||
*/
|
||||
public Entity spawnMarker(World world, Location at) {
|
||||
NPC npc = registry.createNPC(type, "");
|
||||
npc.data().set(NPC.Metadata.NAMEPLATE_VISIBLE, false);
|
||||
npc.spawn(at.clone().add(0.5, 0, 0.5), SpawnReason.CREATE);
|
||||
return npc.getEntity();
|
||||
}
|
||||
|
|
|
@ -53,7 +53,6 @@ public class PhantomController extends MobEntityController {
|
|||
super(types, world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
setNoAI(true);
|
||||
this.moveController = new ControllerMove(this);
|
||||
this.lookController = new ControllerLook(this);
|
||||
// TODO: phantom pitch reversed
|
||||
|
|
|
@ -25,7 +25,6 @@ import net.minecraft.server.v1_15_R1.EntityBoat;
|
|||
import net.minecraft.server.v1_15_R1.EntityMinecartAbstract;
|
||||
import net.minecraft.server.v1_15_R1.EntityPhantom;
|
||||
import net.minecraft.server.v1_15_R1.EntityTypes;
|
||||
import net.minecraft.server.v1_15_R1.EnumDifficulty;
|
||||
import net.minecraft.server.v1_15_R1.FluidType;
|
||||
import net.minecraft.server.v1_15_R1.IBlockData;
|
||||
import net.minecraft.server.v1_15_R1.NBTTagCompound;
|
||||
|
@ -59,7 +58,6 @@ public class PhantomController extends MobEntityController {
|
|||
super(types, world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
setNoAI(true);
|
||||
this.oldMoveController = this.moveController;
|
||||
this.oldLookController = this.lookController;
|
||||
this.moveController = new ControllerMove(this);
|
||||
|
@ -211,6 +209,11 @@ public class PhantomController extends MobEntityController {
|
|||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean J() {
|
||||
return npc != null ? false : super.J();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void movementTick() {
|
||||
super.movementTick();
|
||||
|
@ -219,12 +222,10 @@ public class PhantomController extends MobEntityController {
|
|||
if (npc.useMinecraftAI() && this.moveController != this.oldMoveController) {
|
||||
this.moveController = this.oldMoveController;
|
||||
this.lookController = this.oldLookController;
|
||||
setNoAI(false);
|
||||
}
|
||||
if (!npc.useMinecraftAI() && this.moveController == this.oldMoveController) {
|
||||
this.moveController = new PlayerControllerMove(this);
|
||||
this.lookController = new ControllerLook(this);
|
||||
setNoAI(true);
|
||||
}
|
||||
if (npc.isProtected()) {
|
||||
this.setOnFire(0);
|
||||
|
@ -240,19 +241,6 @@ public class PhantomController extends MobEntityController {
|
|||
}
|
||||
return super.n(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
// avoid suicide
|
||||
boolean resetDifficulty = this.world.getDifficulty() == EnumDifficulty.PEACEFUL;
|
||||
if (npc != null && resetDifficulty) {
|
||||
this.world.getWorldData().setDifficulty(EnumDifficulty.NORMAL);
|
||||
}
|
||||
super.tick();
|
||||
if (npc != null && resetDifficulty) {
|
||||
this.world.getWorldData().setDifficulty(EnumDifficulty.PEACEFUL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class PhantomNPC extends CraftPhantom implements ForwardingNPCHolder {
|
||||
|
|
|
@ -26,7 +26,6 @@ import net.minecraft.server.v1_16_R3.EntityBoat;
|
|||
import net.minecraft.server.v1_16_R3.EntityMinecartAbstract;
|
||||
import net.minecraft.server.v1_16_R3.EntityPhantom;
|
||||
import net.minecraft.server.v1_16_R3.EntityTypes;
|
||||
import net.minecraft.server.v1_16_R3.EnumDifficulty;
|
||||
import net.minecraft.server.v1_16_R3.FluidType;
|
||||
import net.minecraft.server.v1_16_R3.IBlockData;
|
||||
import net.minecraft.server.v1_16_R3.NBTTagCompound;
|
||||
|
@ -34,7 +33,6 @@ import net.minecraft.server.v1_16_R3.SoundEffect;
|
|||
import net.minecraft.server.v1_16_R3.Tag;
|
||||
import net.minecraft.server.v1_16_R3.Vec3D;
|
||||
import net.minecraft.server.v1_16_R3.World;
|
||||
import net.minecraft.server.v1_16_R3.WorldDataServer;
|
||||
|
||||
public class PhantomController extends MobEntityController {
|
||||
public PhantomController() {
|
||||
|
@ -63,7 +61,6 @@ public class PhantomController extends MobEntityController {
|
|||
super(types, world);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
setNoAI(true);
|
||||
this.oldMoveController = this.moveController;
|
||||
this.oldLookController = this.lookController;
|
||||
this.moveController = new ControllerMove(this);
|
||||
|
@ -226,6 +223,11 @@ public class PhantomController extends MobEntityController {
|
|||
return false; // shouldLeash
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean L() {
|
||||
return npc != null ? false : super.L();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void movementTick() {
|
||||
super.movementTick();
|
||||
|
@ -234,15 +236,13 @@ public class PhantomController extends MobEntityController {
|
|||
if (npc.useMinecraftAI() && this.moveController != this.oldMoveController) {
|
||||
this.moveController = this.oldMoveController;
|
||||
this.lookController = this.oldLookController;
|
||||
setNoAI(false);
|
||||
}
|
||||
if (!npc.useMinecraftAI() && this.moveController == this.oldMoveController) {
|
||||
this.moveController = new PlayerControllerMove(this);
|
||||
this.lookController = new ControllerLook(this);
|
||||
setNoAI(true);
|
||||
}
|
||||
if (npc.isProtected()) {
|
||||
this.setOnFire(0);
|
||||
setOnFire(0);
|
||||
}
|
||||
npc.update();
|
||||
}
|
||||
|
@ -255,19 +255,6 @@ public class PhantomController extends MobEntityController {
|
|||
}
|
||||
return super.n(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
// avoid suicide
|
||||
boolean resetDifficulty = this.world.getDifficulty() == EnumDifficulty.PEACEFUL;
|
||||
if (npc != null && resetDifficulty) {
|
||||
((WorldDataServer) this.world.getWorldData()).setDifficulty(EnumDifficulty.NORMAL);
|
||||
}
|
||||
super.tick();
|
||||
if (npc != null && resetDifficulty) {
|
||||
((WorldDataServer) this.world.getWorldData()).setDifficulty(EnumDifficulty.PEACEFUL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class PhantomNPC extends CraftPhantom implements ForwardingNPCHolder {
|
||||
|
|
|
@ -20,7 +20,6 @@ import net.minecraft.nbt.CompoundTag;
|
|||
import net.minecraft.network.syncher.EntityDataAccessor;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.tags.Tag;
|
||||
import net.minecraft.world.Difficulty;
|
||||
import net.minecraft.world.damagesource.DamageSource;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
|
@ -32,7 +31,6 @@ import net.minecraft.world.entity.vehicle.Boat;
|
|||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.material.Fluid;
|
||||
import net.minecraft.world.level.storage.WorldData;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class PhantomController extends MobEntityController {
|
||||
|
@ -61,7 +59,6 @@ public class PhantomController extends MobEntityController {
|
|||
super(types, level);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
setNoAi(true);
|
||||
this.oldMoveController = this.moveControl;
|
||||
this.oldLookController = this.lookControl;
|
||||
this.moveControl = new MoveControl(this);
|
||||
|
@ -78,12 +75,10 @@ public class PhantomController extends MobEntityController {
|
|||
if (npc.useMinecraftAI() && this.moveControl != this.oldMoveController) {
|
||||
this.moveControl = this.oldMoveController;
|
||||
this.lookControl = this.oldLookController;
|
||||
setNoAi(false);
|
||||
}
|
||||
if (!npc.useMinecraftAI() && this.moveControl == this.oldMoveController) {
|
||||
this.moveControl = new PlayerMoveControl(this);
|
||||
this.lookControl = new LookControl(this);
|
||||
setNoAi(true);
|
||||
}
|
||||
if (npc.isProtected()) {
|
||||
this.setSecondsOnFire(0);
|
||||
|
@ -237,16 +232,8 @@ public class PhantomController extends MobEntityController {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
// avoid suicide
|
||||
boolean resetDifficulty = npc != null && this.level.getDifficulty() == Difficulty.PEACEFUL;
|
||||
if (resetDifficulty) {
|
||||
((WorldData) this.level.getLevelData()).setDifficulty(Difficulty.NORMAL);
|
||||
}
|
||||
super.tick();
|
||||
if (resetDifficulty) {
|
||||
((WorldData) this.level.getLevelData()).setDifficulty(Difficulty.PEACEFUL);
|
||||
}
|
||||
protected boolean shouldDespawnInPeaceful() {
|
||||
return npc != null ? false : super.shouldDespawnInPeaceful();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -21,7 +21,6 @@ import net.minecraft.network.syncher.EntityDataAccessor;
|
|||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.tags.TagKey;
|
||||
import net.minecraft.world.Difficulty;
|
||||
import net.minecraft.world.damagesource.DamageSource;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
|
@ -33,7 +32,6 @@ import net.minecraft.world.entity.vehicle.Boat;
|
|||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.material.Fluid;
|
||||
import net.minecraft.world.level.storage.WorldData;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class PhantomController extends MobEntityController {
|
||||
|
@ -62,7 +60,6 @@ public class PhantomController extends MobEntityController {
|
|||
super(types, level);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
setNoAi(true);
|
||||
this.oldMoveController = this.moveControl;
|
||||
this.oldLookController = this.lookControl;
|
||||
this.moveControl = new MoveControl(this);
|
||||
|
@ -79,12 +76,10 @@ public class PhantomController extends MobEntityController {
|
|||
if (npc.useMinecraftAI() && this.moveControl != this.oldMoveController) {
|
||||
this.moveControl = this.oldMoveController;
|
||||
this.lookControl = this.oldLookController;
|
||||
setNoAi(false);
|
||||
}
|
||||
if (!npc.useMinecraftAI() && this.moveControl == this.oldMoveController) {
|
||||
this.moveControl = new PlayerMoveControl(this);
|
||||
this.lookControl = new LookControl(this);
|
||||
setNoAi(true);
|
||||
}
|
||||
if (npc.isProtected()) {
|
||||
this.setSecondsOnFire(0);
|
||||
|
@ -237,6 +232,11 @@ public class PhantomController extends MobEntityController {
|
|||
return npc == null ? super.save(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean shouldDespawnInPeaceful() {
|
||||
return npc != null ? false : super.shouldDespawnInPeaceful();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Entity teleportTo(ServerLevel worldserver, BlockPos location) {
|
||||
if (npc == null)
|
||||
|
@ -244,19 +244,6 @@ public class PhantomController extends MobEntityController {
|
|||
return NMSImpl.teleportAcrossWorld(this, worldserver, location);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
// avoid suicide
|
||||
boolean resetDifficulty = npc != null && this.level.getDifficulty() == Difficulty.PEACEFUL;
|
||||
if (resetDifficulty) {
|
||||
((WorldData) this.level.getLevelData()).setDifficulty(Difficulty.NORMAL);
|
||||
}
|
||||
super.tick();
|
||||
if (resetDifficulty) {
|
||||
((WorldData) this.level.getLevelData()).setDifficulty(Difficulty.PEACEFUL);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void travel(Vec3 vec3d) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
|
|
|
@ -22,7 +22,6 @@ import net.minecraft.network.syncher.EntityDataAccessor;
|
|||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.tags.TagKey;
|
||||
import net.minecraft.world.Difficulty;
|
||||
import net.minecraft.world.damagesource.DamageSource;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
|
@ -34,7 +33,6 @@ import net.minecraft.world.entity.vehicle.Boat;
|
|||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.material.Fluid;
|
||||
import net.minecraft.world.level.storage.WorldData;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class PhantomController extends MobEntityController {
|
||||
|
@ -49,7 +47,6 @@ public class PhantomController extends MobEntityController {
|
|||
|
||||
public static class EntityPhantomNPC extends Phantom implements NPCHolder {
|
||||
boolean calledNMSHeight = false;
|
||||
|
||||
private final CitizensNPC npc;
|
||||
private LookControl oldLookController;
|
||||
private MoveControl oldMoveController;
|
||||
|
@ -62,7 +59,6 @@ public class PhantomController extends MobEntityController {
|
|||
super(types, level);
|
||||
this.npc = (CitizensNPC) npc;
|
||||
if (npc != null) {
|
||||
setNoAi(true);
|
||||
this.oldMoveController = this.moveControl;
|
||||
this.oldLookController = this.lookControl;
|
||||
this.moveControl = new MoveControl(this);
|
||||
|
@ -79,15 +75,13 @@ public class PhantomController extends MobEntityController {
|
|||
if (npc.useMinecraftAI() && this.moveControl != this.oldMoveController) {
|
||||
this.moveControl = this.oldMoveController;
|
||||
this.lookControl = this.oldLookController;
|
||||
setNoAi(false);
|
||||
}
|
||||
if (!npc.useMinecraftAI() && this.moveControl == this.oldMoveController) {
|
||||
this.moveControl = new PlayerMoveControl(this);
|
||||
this.lookControl = new LookControl(this);
|
||||
setNoAi(true);
|
||||
}
|
||||
if (npc.isProtected()) {
|
||||
this.setSecondsOnFire(0);
|
||||
setSecondsOnFire(0);
|
||||
}
|
||||
npc.update();
|
||||
}
|
||||
|
@ -229,6 +223,11 @@ public class PhantomController extends MobEntityController {
|
|||
return npc == null ? super.save(save) : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean shouldDespawnInPeaceful() {
|
||||
return npc != null ? false : super.shouldDespawnInPeaceful();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Entity teleportTo(ServerLevel worldserver, PositionImpl location) {
|
||||
if (npc == null)
|
||||
|
@ -236,19 +235,6 @@ public class PhantomController extends MobEntityController {
|
|||
return NMSImpl.teleportAcrossWorld(this, worldserver, location);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
// avoid suicide
|
||||
boolean resetDifficulty = npc != null && this.level.getDifficulty() == Difficulty.PEACEFUL;
|
||||
if (resetDifficulty) {
|
||||
((WorldData) this.level.getLevelData()).setDifficulty(Difficulty.NORMAL);
|
||||
}
|
||||
super.tick();
|
||||
if (resetDifficulty) {
|
||||
((WorldData) this.level.getLevelData()).setDifficulty(Difficulty.PEACEFUL);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void travel(Vec3 vec3d) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
|
|
Loading…
Reference in New Issue