feat: добавлены новые кеэбеки

- добавлено событие RedstoneSignal, ThrowableHit
This commit is contained in:
Reider745
2023-12-06 11:40:38 +03:00
parent dff03daac6
commit c728330171
3 changed files with 43 additions and 14 deletions
@@ -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;
}
@@ -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
@@ -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<String, Object>("power", signal),
new Pair<String, Object>("signal", signal),
new Pair<String, Object>("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) {