From c728330171bdd351c4cf52b01703ef9dbd30f8a4 Mon Sep 17 00:00:00 2001 From: Reider745 <70357814+Reider745@users.noreply.github.com> Date: Wed, 6 Dec 2023 11:40:38 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20=D0=BA?= =?UTF-8?q?=D0=B5=D1=8D=D0=B1=D0=B5=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - добавлено событие RedstoneSignal, ThrowableHit --- .../java/com/reider745/block/CustomBlock.java | 11 +++++- .../com/reider745/event/EventListener.java | 39 +++++++++++++------ .../innercore/api/NativeCallback.java | 7 +++- 3 files changed, 43 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/reider745/block/CustomBlock.java b/src/main/java/com/reider745/block/CustomBlock.java index 70ace9a3..c3b9a652 100644 --- a/src/main/java/com/reider745/block/CustomBlock.java +++ b/src/main/java/com/reider745/block/CustomBlock.java @@ -2,12 +2,14 @@ package com.reider745.block; //import cn.nukkit.blockstate.BlockStorage; import cn.nukkit.block.*; +import cn.nukkit.event.redstone.RedstoneUpdateEvent; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import com.reider745.api.CustomManager; import com.reider745.api.ReflectHelper; import com.zhekasmirnov.innercore.api.NativeBlock; +import com.zhekasmirnov.innercore.api.NativeCallback; import com.zhekasmirnov.innercore.api.mod.adaptedscript.AdaptedScriptAPI; import java.util.ArrayList; @@ -171,7 +173,14 @@ public class CustomBlock extends BlockSolidMeta implements RandomTick { @Override public int onUpdate(int type) { if (type == Level.BLOCK_UPDATE_RANDOM) { - NativeBlock.onRandomTickCallback((int) this.x, (int) this.y, (int) this.z, id, this.getDamage(), AdaptedScriptAPI.BlockSource.getFromCallbackPointer(this.level)); + NativeCallback.onRandomBlockTick((int) this.x, (int) this.y, (int) this.z, id, this.getDamage(), this.level); + return 1; + }else if(type == Level.BLOCK_UPDATE_REDSTONE){ + RedstoneUpdateEvent ev = new RedstoneUpdateEvent(this); + getLevel().getServer().getPluginManager().callEvent(ev); + if (ev.isCancelled()) + return 0; + return 1; } return 0; } diff --git a/src/main/java/com/reider745/event/EventListener.java b/src/main/java/com/reider745/event/EventListener.java index 7cd0339b..5dec61bb 100644 --- a/src/main/java/com/reider745/event/EventListener.java +++ b/src/main/java/com/reider745/event/EventListener.java @@ -3,6 +3,8 @@ package com.reider745.event; import cn.nukkit.Player; import cn.nukkit.block.Block; import cn.nukkit.entity.Entity; +import cn.nukkit.entity.projectile.EntityProjectile; +import cn.nukkit.entity.projectile.EntitySnowball; import cn.nukkit.event.Event; import cn.nukkit.event.EventHandler; import cn.nukkit.event.EventPriority; @@ -13,12 +15,18 @@ import cn.nukkit.event.entity.*; 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.item.Item; import cn.nukkit.item.food.Food; import cn.nukkit.level.Level; import cn.nukkit.level.format.FullChunk; import cn.nukkit.math.Vector3; +import cn.nukkit.nbt.NBTIO; import com.reider745.api.CallbackHelper; +import com.reider745.entity.EntityMethod; +import com.reider745.hooks.ItemUtils; import com.zhekasmirnov.innercore.api.NativeCallback; +import com.zhekasmirnov.innercore.api.NativeItemInstanceExtra; public class EventListener implements Listener { public static void preventedCallback(Event event, CallbackHelper.ICallbackApply apply) { @@ -65,21 +73,28 @@ public class EventListener implements Listener { 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 redstoneUpdate(RedstoneUpdateEvent event){ + Block block = event.getBlock(); + Level level = event.getBlock().getLevel(); + + NativeCallback.onRedstoneSignalChange((int) block.x, (int) block.y, (int) + block.z, level.getStrongPower(block), true, level); + } @EventHandler public void projectileHit(ProjectileHitEvent event) { - /* - * Vector3 pos = event. - * NativeCallback.onThrowableHit(event.getEntity().getId(), ); - */ + Entity entity = event.getEntity(); + if(entity instanceof EntitySnowball){ + Vector3 pos = entity.getPosition(); + Block block = entity.getLevelBlock(); + Item item = EntityMethod.getItemFromProjectile(entity.getId()); + NativeItemInstanceExtra extra = ItemUtils.getItemInstanceExtra(item); + + NativeCallback.onThrowableHit(event.getEntity().getId(), (float) pos.x, (float) pos.y, (float) pos.z, + entity.getId(), (int) block.x, (int) block.y, (int) block.z, 0, + item.getId(), item.count, item.getDamage(), extra != null ? extra.getPtr() : 0); + } } @EventHandler diff --git a/src/main/java/com/zhekasmirnov/innercore/api/NativeCallback.java b/src/main/java/com/zhekasmirnov/innercore/api/NativeCallback.java index d1b3d628..a4f3eb6b 100644 --- a/src/main/java/com/zhekasmirnov/innercore/api/NativeCallback.java +++ b/src/main/java/com/zhekasmirnov/innercore/api/NativeCallback.java @@ -1,6 +1,7 @@ package com.zhekasmirnov.innercore.api; import android.util.Pair; +import cn.nukkit.block.Block; import cn.nukkit.level.Level; import com.reider745.InnerCoreServer; import com.zhekasmirnov.apparatus.adapter.innercore.EngineConfig; @@ -806,11 +807,15 @@ public class NativeCallback { } public static void onRedstoneSignalChange(int x, int y, int z, int signal, boolean isLoadingChange, Level region) { + Block block = region.getBlock(x, y, z); Callback.invokeAPICallback("RedstoneSignal", new Coords(x, y, z), new ScriptableParams( new Pair("power", signal), new Pair("signal", signal), new Pair("onLoad", isLoadingChange) - ), new FullBlock(NativeAPI.getTileAndData(x, y, z)), NativeBlockSource.getFromServerCallbackPointer(region)); + ), new FullBlock( + block.getId(), + block.getDamage() + ), NativeBlockSource.getFromServerCallbackPointer(region)); } public static void onRandomBlockTick(int x, int y, int z, int id, int data, Level region) {