diff --git a/src/main/java/com/reider745/InnerCoreServer.java b/src/main/java/com/reider745/InnerCoreServer.java index 72514e58..4c060bf3 100644 --- a/src/main/java/com/reider745/InnerCoreServer.java +++ b/src/main/java/com/reider745/InnerCoreServer.java @@ -189,10 +189,6 @@ public class InnerCoreServer { server.getPluginManager().registerEvents(new EventListener(), plugin); } - public void onPlayerEat(int food, float radio, long player){ - NativeCallback.onPlayerEat(food, radio, player); - } - public void tick(){ NativeCallback.onTick(); } diff --git a/src/main/java/com/reider745/event/EventListener.java b/src/main/java/com/reider745/event/EventListener.java index c6dafa9c..963ca490 100644 --- a/src/main/java/com/reider745/event/EventListener.java +++ b/src/main/java/com/reider745/event/EventListener.java @@ -2,38 +2,79 @@ package com.reider745.event; import cn.nukkit.Player; import cn.nukkit.block.Block; +import cn.nukkit.event.Event; import cn.nukkit.event.EventHandler; import cn.nukkit.event.Listener; import cn.nukkit.event.block.BlockBreakEvent; import cn.nukkit.event.block.BlockPlaceEvent; +import cn.nukkit.event.entity.ProjectileHitEvent; import cn.nukkit.event.level.ChunkPopulateEvent; +import cn.nukkit.event.player.PlayerEatFoodEvent; import cn.nukkit.event.player.PlayerInteractEvent; +import cn.nukkit.event.redstone.RedstoneUpdateEvent; import cn.nukkit.event.server.ServerStopEvent; +import cn.nukkit.item.food.Food; import cn.nukkit.level.format.FullChunk; import cn.nukkit.math.Vector3; import com.zhekasmirnov.apparatus.mcpe.NativeBlockSource; +import com.zhekasmirnov.innercore.api.NativeAPI; import com.zhekasmirnov.innercore.api.NativeCallback; public class EventListener implements Listener { + public interface ICallbackApply { + void apply(); + } + + public static void preventedCallback(Event event, ICallbackApply apply){ + NativeAPI.reloadPrevent(); + apply.apply(); + if(NativeAPI.isDefaultPrevented()) + event.setCancelled(true); + } + @EventHandler public void use(PlayerInteractEvent event) { Vector3 pos = event.getTouchVector(); Block block = event.getBlock(); Player player = event.getPlayer(); + PlayerInteractEvent.Action action = event.getAction(); + + if(event.getAction() == PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) + preventedCallback(event, () -> NativeCallback.onItemUsed((int) block.x, (int) block.y, (int) block.z, event.getFace().getIndex(), (float) pos.x, (float) pos.y, (float) pos.z, true, player.getHealth() > 0, player.getId())); + else if(action == PlayerInteractEvent.Action.LEFT_CLICK_BLOCK) + preventedCallback(event, () -> NativeCallback._onBlockDestroyStarted((int) block.x, (int) block.y, (int) block.z, event.getFace().getIndex(), player.getId())); + - NativeCallback.onItemUsed((int) block.x, (int) block.y, (int) block.z, event.getFace().getIndex(), (float) pos.x, (float) pos.y, (float) pos.z, true, player.getHealth() > 0, player.getId()); } @EventHandler public void breakBlock(BlockBreakEvent event){ Block block = event.getBlock(); - NativeCallback.onBlockDestroyed((int) block.x, (int) block.y, (int) block.z, event.getFace().getIndex(), event.getPlayer().getId()); + preventedCallback(event, () -> NativeCallback.onBlockDestroyed((int) block.x, (int) block.y, (int) block.z, event.getFace().getIndex(), event.getPlayer().getId())); + } + + @EventHandler + public void playerEat(PlayerEatFoodEvent event){ + Food food = event.getFood(); + preventedCallback(event, () -> NativeCallback.onPlayerEat(food.getRestoreFood(), food.getRestoreSaturation(), event.getPlayer().getId())); } @EventHandler public void placeBlock(BlockPlaceEvent event){ Block block = event.getBlock(); - NativeCallback.onBlockBuild((int) block.x, (int) block.y, (int) block.z, 0, event.getPlayer().getId()); + preventedCallback(event, () -> NativeCallback.onBlockBuild((int) block.x, (int) block.y, (int) block.z, 0, event.getPlayer().getId())); + } + + @EventHandler + public void restoneUpdate(RedstoneUpdateEvent event){ + Block block = event.getBlock(); + NativeCallback.onRedstoneSignalChange((int) block.x, (int) block.y, (int) block.z, 0, false, event.getBlock().getLevel()); + } + + @EventHandler + public void projectileHit(ProjectileHitEvent event){ + /*Vector3 pos = event. + NativeCallback.onThrowableHit(event.getEntity().getId(), );*/ } @EventHandler diff --git a/src/main/java/com/zhekasmirnov/innercore/api/NativeAPI.java b/src/main/java/com/zhekasmirnov/innercore/api/NativeAPI.java index ffbabcd9..a536ff8a 100644 --- a/src/main/java/com/zhekasmirnov/innercore/api/NativeAPI.java +++ b/src/main/java/com/zhekasmirnov/innercore/api/NativeAPI.java @@ -81,8 +81,10 @@ public class NativeAPI { } + private static boolean status_prevent = false; + public static boolean isDefaultPrevented(){ - return false; + return status_prevent; } public static int getTile(int x, int y, int z){ @@ -128,6 +130,11 @@ public class NativeAPI { } public static void preventDefault() { + status_prevent = true; + } + + public static void reloadPrevent() { + status_prevent = false; } public static void explode(float x, float y, float z, float power, boolean onFire) {