From 8bb2d382b91126536fdcd6a99673c134569c3d98 Mon Sep 17 00:00:00 2001 From: lars Date: Sat, 14 Dec 2024 14:59:42 +0100 Subject: [PATCH] fixed various bugs --- src/main/java/eu/mhsl/minecraft/pixelblocks/Main.java | 2 +- .../pixelblocks/listeners/ExitPixelWorldListener.java | 9 +++++++++ .../listeners/PreventEntityPlacementListener.java | 6 ++++++ ...stonsListener.java => PreventRedstoneListener.java} | 10 +++++++++- .../pixelblocks/pixelblock/PixelBlockHitbox.java | 4 ++-- .../minecraft/pixelblocks/utils/EventCanceling.java | 9 ++++++--- 6 files changed, 33 insertions(+), 7 deletions(-) rename src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/{PreventPistonsListener.java => PreventRedstoneListener.java} (62%) diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/Main.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/Main.java index f60f0d7..772427e 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/Main.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/Main.java @@ -69,7 +69,7 @@ public final class Main extends JavaPlugin { new PlacePixelListener(), new PreventHopperActionsListener(), new PreventLiquidsFlowListener(), - new PreventPistonsListener(), + new PreventRedstoneListener(), new PreventEntityPlacementListener(), new DiscoverRecipesListener(), new QuitWhileInPixelBlockListener(), diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/ExitPixelWorldListener.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/ExitPixelWorldListener.java index 638f94a..a46b27c 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/ExitPixelWorldListener.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/ExitPixelWorldListener.java @@ -5,6 +5,7 @@ import eu.mhsl.minecraft.pixelblocks.pixelblock.PixelBlockWorld; import org.bukkit.World; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityPortalEvent; import org.bukkit.event.player.PlayerPortalEvent; import java.util.Objects; @@ -20,4 +21,12 @@ public class ExitPixelWorldListener implements Listener { Objects.requireNonNull(pixelBlock); pixelBlock.exitBlock(event.getPlayer()); } + + @EventHandler + public void onEntityPortal(EntityPortalEvent event) { + World pixelBlockWorld = event.getFrom().getWorld(); + if(!PixelBlockWorld.isPixelWorld(pixelBlockWorld)) return; + + event.setCancelled(true); + } } diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/PreventEntityPlacementListener.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/PreventEntityPlacementListener.java index 12e4929..e4f62f0 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/PreventEntityPlacementListener.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/PreventEntityPlacementListener.java @@ -4,10 +4,16 @@ import eu.mhsl.minecraft.pixelblocks.utils.EventCanceling; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityPlaceEvent; +import org.bukkit.event.entity.ProjectileLaunchEvent; public class PreventEntityPlacementListener implements Listener { @EventHandler public void preventPlace(EntityPlaceEvent event) { EventCanceling.cancelIfInPixelWorld(event, event.getBlock().getWorld()); } + + @EventHandler + public void preventProjectile(ProjectileLaunchEvent event) { + EventCanceling.cancelIfInPixelWorld(event, event.getEntity().getWorld()); + } } diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/PreventPistonsListener.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/PreventRedstoneListener.java similarity index 62% rename from src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/PreventPistonsListener.java rename to src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/PreventRedstoneListener.java index 57cc363..c0a5680 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/PreventPistonsListener.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/PreventRedstoneListener.java @@ -1,11 +1,19 @@ package eu.mhsl.minecraft.pixelblocks.listeners; +import eu.mhsl.minecraft.pixelblocks.pixelblock.PixelBlockWorld; import eu.mhsl.minecraft.pixelblocks.utils.EventCanceling; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockPistonExtendEvent; +import org.bukkit.event.block.BlockRedstoneEvent; + +public class PreventRedstoneListener implements Listener { + @EventHandler + public void preventRedstone(BlockRedstoneEvent event) { + boolean isInPixelBlock = PixelBlockWorld.isPixelWorld(event.getBlock().getWorld()); + if(isInPixelBlock) event.setNewCurrent(0); + } -public class PreventPistonsListener implements Listener { @EventHandler public void blockPistons(BlockPistonExtendEvent event) { EventCanceling.shouldCancelInPixelBlock( diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/pixelblock/PixelBlockHitbox.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/pixelblock/PixelBlockHitbox.java index 5d9e522..464a9dd 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/pixelblock/PixelBlockHitbox.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/pixelblock/PixelBlockHitbox.java @@ -44,9 +44,9 @@ public class PixelBlockHitbox { double endingZ = MinMaxUtil.getMaxProperty(pixels, pixel -> pixel.relativeLocation().getZ()); Location spawnLocation = absoluteLocation.clone().add( - ((startingX+endingX)/2)/pixelsPerBlock, + ((startingX+endingX)/2+0.5)/pixelsPerBlock, (startingY/pixelsPerBlock)-0, - ((startingZ+endingZ)/2)/pixelsPerBlock + ((startingZ+endingZ)/2+0.5)/pixelsPerBlock ); float height = (float) (endingY-startingY+1)/pixelsPerBlock; diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/utils/EventCanceling.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/utils/EventCanceling.java index 9f5f975..bdce890 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/utils/EventCanceling.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/utils/EventCanceling.java @@ -4,15 +4,18 @@ import eu.mhsl.minecraft.pixelblocks.pixelblock.PixelBlock; import eu.mhsl.minecraft.pixelblocks.pixelblock.PixelBlockWorld; import org.bukkit.World; import org.bukkit.event.Cancellable; +import org.jetbrains.annotations.Nullable; -import java.util.Objects; import java.util.function.Function; public class EventCanceling { public static void shouldCancelInPixelBlock(Cancellable event, World world, Function callback) { if(!PixelBlockWorld.isPixelWorld(world)) return; - PixelBlock pixelBlock = PixelBlock.getPixelBlockFromBlockWorld(world); - Objects.requireNonNull(pixelBlock); + @Nullable PixelBlock pixelBlock = PixelBlock.getPixelBlockFromBlockWorld(world); + if(pixelBlock == null) { + event.setCancelled(true); + return; + } if(callback.apply(pixelBlock)) event.setCancelled(true); }