From 986a96de8e6cb3525843ea183aeaa12c34ee8dde Mon Sep 17 00:00:00 2001 From: MGlolenstine Date: Thu, 18 Jul 2019 17:08:09 +0200 Subject: [PATCH] - Fixed NPC push in SpongeForge --- .../npcs/listeners/WorldListener.java | 96 ++++++++++--------- 1 file changed, 51 insertions(+), 45 deletions(-) diff --git a/src/main/java/me/mrdaniel/npcs/listeners/WorldListener.java b/src/main/java/me/mrdaniel/npcs/listeners/WorldListener.java index f535d6a..130c2b5 100644 --- a/src/main/java/me/mrdaniel/npcs/listeners/WorldListener.java +++ b/src/main/java/me/mrdaniel/npcs/listeners/WorldListener.java @@ -2,6 +2,7 @@ import javax.annotation.Nonnull; +import com.flowpowered.math.vector.Vector3d; import org.spongepowered.api.data.key.Keys; import org.spongepowered.api.entity.living.Living; import org.spongepowered.api.entity.living.player.Player; @@ -27,56 +28,61 @@ public class WorldListener extends NPCObject { - public WorldListener(@Nonnull final NPCs npcs) { - super(npcs); - } + public WorldListener(@Nonnull final NPCs npcs) { + super(npcs); + } - @Listener(order = Order.LATE) - public void onLoadWorld(final LoadWorldEvent e) { - World w = e.getTargetWorld(); - Task.builder().delayTicks(100).execute(() -> super.getNPCs().getNPCManager().load(w)).submit(super.getNPCs()); - } + @Listener(order = Order.LATE) + public void onLoadWorld(final LoadWorldEvent e) { + World w = e.getTargetWorld(); + Task.builder().delayTicks(100).execute(() -> super.getNPCs().getNPCManager().load(w)).submit(super.getNPCs()); + } - @Listener(order = Order.EARLY) - public void onEntitySpawn(final SpawnEntityEvent e) { - e.getEntities().forEach(ent -> ent.get(NPCData.class).ifPresent(data -> data.ifOld(super.getNPCs().getStartup(), () -> ent.remove()))); - } + @Listener(order = Order.EARLY) + public void onEntitySpawn(final SpawnEntityEvent e) { + e.getEntities().forEach(ent -> ent.get(NPCData.class).ifPresent(data -> data.ifOld(super.getNPCs().getStartup(), () -> ent.remove()))); + } - @Listener(order = Order.EARLY) - public void onCollide(final CollideEntityEvent e) { - e.getEntities().forEach(ent -> ent.get(NPCData.class).ifPresent(data -> e.setCancelled(true))); - } + @Listener(order = Order.EARLY) + public void onCollide(final CollideEntityEvent e) { + e.getEntities().forEach(ent -> ent.get(NPCData.class).ifPresent(data -> { + ent.setVelocity(Vector3d.ZERO); + e.setCancelled(true); + })); + } - @Listener(order = Order.EARLY) - public void onDamage(final DamageEntityEvent e) { - e.getTargetEntity().get(NPCData.class).ifPresent(data -> e.setCancelled(true)); - } + @Listener(order = Order.EARLY) + public void onDamage(final DamageEntityEvent e) { + e.getTargetEntity().get(NPCData.class).ifPresent(data -> e.setCancelled(true)); + } - @Listener(order = Order.EARLY) - public void onClick(final InteractEntityEvent e, @Root final Player p) { - e.getTargetEntity().get(NPCData.class).ifPresent(data -> { - Living npc = (Living) e.getTargetEntity(); - e.setCancelled(!data.canInteract()); + @Listener(order = Order.EARLY) + public void onClick(final InteractEntityEvent e, @Root final Player p) { + e.getTargetEntity().get(NPCData.class).ifPresent(data -> { + Living npc = (Living) e.getTargetEntity(); + e.setCancelled(!data.canInteract()); - if (e instanceof InteractEntityEvent.Secondary.MainHand) { - super.getNPCs().getNPCManager().getFile(data.getId()).ifPresent(file -> { - if (p.get(Keys.IS_SNEAKING).orElse(false) && p.hasPermission("npc.edit.select")) { - super.getNPCs().getMenuManager().select(p, npc, file); - } - else { - if (!super.getGame().getEventManager().post(new NPCEvent.Interact(super.getContainer(), p, npc, file))) { - try { super.getNPCs().getActionManager().execute(p.getUniqueId(), file); } - catch (final NPCException exc) { p.sendMessage(Text.of(TextColors.RED, "Failed to perform NPC actions: " + exc.getMessage())); } - } - } - }); - } - }); - } + if (e instanceof InteractEntityEvent.Secondary.MainHand) { + super.getNPCs().getNPCManager().getFile(data.getId()).ifPresent(file -> { + if (p.get(Keys.IS_SNEAKING).orElse(false) && p.hasPermission("npc.edit.select")) { + super.getNPCs().getMenuManager().select(p, npc, file); + } else { + if (!super.getGame().getEventManager().post(new NPCEvent.Interact(super.getContainer(), p, npc, file))) { + try { + super.getNPCs().getActionManager().execute(p.getUniqueId(), file); + } catch (final NPCException exc) { + p.sendMessage(Text.of(TextColors.RED, "Failed to perform NPC actions: " + exc.getMessage())); + } + } + } + }); + } + }); + } - @Listener(order = Order.LATE) - public void onQuit(final ClientConnectionEvent.Disconnect e) { - super.getNPCs().getMenuManager().deselect(e.getTargetEntity().getUniqueId()); - super.getNPCs().getActionManager().removeChoosing(e.getTargetEntity().getUniqueId()); - } + @Listener(order = Order.LATE) + public void onQuit(final ClientConnectionEvent.Disconnect e) { + super.getNPCs().getMenuManager().deselect(e.getTargetEntity().getUniqueId()); + super.getNPCs().getActionManager().removeChoosing(e.getTargetEntity().getUniqueId()); + } } \ No newline at end of file