From 0af3603354bfa493df9fe6e5e90fb1074aee9e66 Mon Sep 17 00:00:00 2001 From: Business Goose Date: Mon, 2 May 2022 08:38:11 +0100 Subject: [PATCH] Spawn dispenser mobs the same way Bukkit does, closes #18 --- .../dev/plex/listener/impl/SpawnListener.java | 3 ++- .../main/java/dev/plex/util/BlockUtils.java | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 server/src/main/java/dev/plex/util/BlockUtils.java diff --git a/server/src/main/java/dev/plex/listener/impl/SpawnListener.java b/server/src/main/java/dev/plex/listener/impl/SpawnListener.java index 3559d61..97d1471 100644 --- a/server/src/main/java/dev/plex/listener/impl/SpawnListener.java +++ b/server/src/main/java/dev/plex/listener/impl/SpawnListener.java @@ -1,6 +1,7 @@ package dev.plex.listener.impl; import dev.plex.listener.PlexListener; +import dev.plex.util.BlockUtils; import dev.plex.util.PlexUtils; import java.util.Arrays; import java.util.Collection; @@ -55,7 +56,7 @@ public class SpawnListener extends PlexListener if (SPAWN_EGGS.contains(itemType)) { Block block = event.getBlock(); - Location blockLoc = block.getLocation().add(0.5, 0.5, 0.5).add(((Directional)block.getBlockData()).getFacing().getDirection().multiply(0.8)); + Location blockLoc = BlockUtils.relative(block.getLocation(), ((Directional)block.getBlockData()).getFacing()).add(.5, 0, .5); EntityType eggType = spawnEggToEntityType(itemType); if (eggType != null) { diff --git a/server/src/main/java/dev/plex/util/BlockUtils.java b/server/src/main/java/dev/plex/util/BlockUtils.java new file mode 100644 index 0000000..a2e5227 --- /dev/null +++ b/server/src/main/java/dev/plex/util/BlockUtils.java @@ -0,0 +1,21 @@ +package dev.plex.util; + +import org.bukkit.Location; +import org.bukkit.block.BlockFace; + +public class BlockUtils +{ + public static Location relative(Location origin, BlockFace face) + { + return switch (face) + { + case UP -> origin.add(0, 1, 0); + case DOWN -> origin.subtract(0, 1, 0); + case NORTH -> origin.subtract(0, 0, 1); + case SOUTH -> origin.add(0, 0, 1); + case WEST -> origin.subtract(1, 0, 0); + case EAST -> origin.add(1, 0, 0); + default -> origin.add(face.getModX(), face.getModY(), face.getModZ()); + }; + } +}