Almost fix slime pathing?

This almost works, there's no real way to do it gracefully because you can't set where the slime should be travelling to nicely, nor can you set rotation etc. Seems to be a fairly large part of the event capability missing from paper.
This commit is contained in:
dordsor21 2020-05-10 12:18:55 +01:00
parent e6408b35a2
commit 667098268f

View File

@ -25,7 +25,6 @@
*/ */
package com.plotsquared.bukkit.listener; package com.plotsquared.bukkit.listener;
import com.destroystokyo.paper.entity.Pathfinder;
import com.destroystokyo.paper.event.entity.EntityPathfindEvent; import com.destroystokyo.paper.event.entity.EntityPathfindEvent;
import com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent; import com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent;
import com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent; import com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent;
@ -41,10 +40,12 @@ import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.flag.implementations.DoneFlag; import com.plotsquared.core.plot.flag.implementations.DoneFlag;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile; import org.bukkit.entity.Projectile;
import org.bukkit.entity.Slime;
import org.bukkit.entity.ThrownPotion; import org.bukkit.entity.ThrownPotion;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -83,7 +84,7 @@ public class PaperListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (tplot == null || tplot == fplot) { if (tplot == null || tplot.getId().hashCode() == fplot.getId().hashCode()) {
return; return;
} }
if (fplot.isMerged() && fplot.getConnectedPlots().contains(fplot)) { if (fplot.isMerged() && fplot.getConnectedPlots().contains(fplot)) {
@ -96,22 +97,14 @@ public class PaperListener implements Listener {
if (!Settings.Paper_Components.ENTITY_PATHING) { if (!Settings.Paper_Components.ENTITY_PATHING) {
return; return;
} }
Pathfinder.PathResult path = event.getEntity().getPathfinder().getCurrentPath(); Slime slime = event.getEntity();
// Unsure why it would be null, but best to cancel just in case ? Block b = slime.getTargetBlock(4);
if (path == null) { if (b == null) {
event.setCancelled(true);
return;
}
org.bukkit.Location bukkitToLocation = path.getNextPoint();
// Unsure why it would be null, but best to cancel just in case ?
if (bukkitToLocation == null) {
event.setCancelled(true);
return; return;
} }
Location toLoc = BukkitUtil.getLocation(bukkitToLocation); Location toLoc = BukkitUtil.getLocation(b.getLocation());
Location fromLoc = BukkitUtil.getLocation(event.getEntity().getLocation()); Location fromLoc = BukkitUtil.getLocation(event.getEntity().getLocation());
PlotArea tarea = toLoc.getPlotArea(); PlotArea tarea = toLoc.getPlotArea();
if (tarea == null) { if (tarea == null) {
@ -121,6 +114,7 @@ public class PaperListener implements Listener {
if (farea == null) { if (farea == null) {
return; return;
} }
if (tarea != farea) { if (tarea != farea) {
event.setCancelled(true); event.setCancelled(true);
return; return;
@ -131,7 +125,7 @@ public class PaperListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (tplot == null || tplot == fplot) { if (tplot == null || tplot.getId().hashCode() == fplot.getId().hashCode()) {
return; return;
} }
if (fplot.isMerged() && fplot.getConnectedPlots().contains(fplot)) { if (fplot.isMerged() && fplot.getConnectedPlots().contains(fplot)) {