From e44f8cb267037c34e2d236dcc1da3e396a7426a6 Mon Sep 17 00:00:00 2001 From: Reider745 <70357814+Reider745@users.noreply.github.com> Date: Sun, 4 Jun 2023 13:01:03 +0300 Subject: [PATCH] ZotCore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - добавлена возможность вешать onRandomTick на кастум блоки - добавлена возможность создавать рецепты(надеюсь работатет) - на NativeBlock.setShape,NativeItem.addToCreativeGroup, NativeItem.setGlint поставлена заглушка --- .../java/com/reider745/block/CustomBlock.java | 19 +++++++ .../com/zhekasmirnov/apparatus/Apparatus.java | 3 ++ .../apparatus/mcpe/NativeWorkbench.java | 52 ++++++++++++++++++- .../innercore/api/NativeBlock.java | 8 ++- .../innercore/api/NativeItem.java | 6 ++- 5 files changed, 82 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/reider745/block/CustomBlock.java b/src/main/java/com/reider745/block/CustomBlock.java index c4922f7f..b905f78a 100644 --- a/src/main/java/com/reider745/block/CustomBlock.java +++ b/src/main/java/com/reider745/block/CustomBlock.java @@ -6,9 +6,12 @@ import cn.nukkit.api.BlockStorage; import cn.nukkit.block.*; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; +import cn.nukkit.level.Level; import cn.nukkit.math.BlockFace; import com.reider745.api.CustomManager; import com.zhekasmirnov.horizon.runtime.logger.Logger; +import com.zhekasmirnov.innercore.api.NativeBlock; +import com.zhekasmirnov.innercore.api.mod.adaptedscript.AdaptedScriptAPI; import java.util.ArrayList; import java.util.HashMap; @@ -69,14 +72,22 @@ public class CustomBlock extends BlockSolidMeta { private int id; private String name; + private boolean TickingTile; + protected CustomBlock(int id, int meta, CustomManager manager, String name) { super(meta); this.manager = manager; this.id = id; this.name = name; + + TickingTile = manager.get("TickingTile:"+meta, false); } + @Override + public boolean canRandomTickBlocks() { + return TickingTile; + } @Override public String getName() { @@ -98,6 +109,14 @@ public class CustomBlock extends BlockSolidMeta { return new Item[]{Item.get(id, this.getDamage(), 1)}; } + @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)); + } + return 0; + } + @Override public Block clone() { CustomBlock customBlock = (CustomBlock) super.clone(); diff --git a/src/main/java/com/zhekasmirnov/apparatus/Apparatus.java b/src/main/java/com/zhekasmirnov/apparatus/Apparatus.java index 2ea94ee3..14b7e658 100644 --- a/src/main/java/com/zhekasmirnov/apparatus/Apparatus.java +++ b/src/main/java/com/zhekasmirnov/apparatus/Apparatus.java @@ -11,6 +11,7 @@ import com.reider745.InnerCoreServer; import com.reider745.block.CustomBlock; import com.reider745.item.CustomItem; import com.zhekasmirnov.apparatus.api.player.NetworkPlayerRegistry; +import com.zhekasmirnov.apparatus.mcpe.NativeWorkbench; import com.zhekasmirnov.apparatus.multiplayer.Network; import com.zhekasmirnov.apparatus.multiplayer.NetworkJsAdapter; import com.zhekasmirnov.apparatus.multiplayer.mod.IdConversionMap; @@ -97,6 +98,8 @@ public class Apparatus { CustomItem.init(); CustomItem.creative.forEach(item -> Item.addCreativeItem(Item.get(item[0], item[2], item[1]))); + + NativeWorkbench.init(); } public static int getVersionCode() { diff --git a/src/main/java/com/zhekasmirnov/apparatus/mcpe/NativeWorkbench.java b/src/main/java/com/zhekasmirnov/apparatus/mcpe/NativeWorkbench.java index 5beb3114..ddd41086 100644 --- a/src/main/java/com/zhekasmirnov/apparatus/mcpe/NativeWorkbench.java +++ b/src/main/java/com/zhekasmirnov/apparatus/mcpe/NativeWorkbench.java @@ -1,19 +1,67 @@ package com.zhekasmirnov.apparatus.mcpe; +import cn.nukkit.Server; +import cn.nukkit.inventory.CraftingManager; +import cn.nukkit.inventory.Recipe; +import cn.nukkit.inventory.ShapedRecipe; +import cn.nukkit.inventory.ShapelessRecipe; +import cn.nukkit.item.Item; import com.zhekasmirnov.apparatus.adapter.innercore.game.item.ItemStack; +import com.zhekasmirnov.horizon.runtime.logger.Logger; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; public class NativeWorkbench { - private static native void addShapedRecipe(int resultId, int resultCount, int resultData, long resultExtraPtr, String[] pattern, int[] ingredients); + private static ArrayList recipes = new ArrayList<>(); + private static void addShapedRecipe(int resultId, int resultCount, int resultData, long resultExtraPtr, String[] pattern, int[] ingredients){ + if(resultId == 0){ + Logger.error("Recipe result id 0"); + return; + } + if(ingredients.length % 3 != 0){ + Logger.error("error ingredients"); + return; + } + + final HashMap ingredients_ = new HashMap<>(); + for(int i = 0;i < ingredients.length;i+=3) + ingredients_.put((char) ingredients[i], Item.get(ingredients[i+1], ingredients[i+2])); + + recipes.add(new ShapedRecipe(Item.get(resultId, resultData, resultCount), pattern, ingredients_, new ArrayList<>())); + } public static void addShapedRecipe(ItemStack result, String[] pattern, int[] ingredients) { addShapedRecipe(result.id, result.count, result.data, result.getExtraPtr(), pattern, ingredients); } - private static native void addShapelessRecipe(int resultId, int resultCount, int resultData, long resultExtraPtr, int[] ingredients); + private static void addShapelessRecipe(int resultId, int resultCount, int resultData, long resultExtraPtr, int[] ingredients){ + if(resultId == 0){ + Logger.error("Recipe result id 0"); + return; + } + if(ingredients.length % 3 != 0){ + Logger.error("error ingredients"); + return; + } + + final Collection ingredients_ = new ArrayList<>(); + for(int i = 0;i < ingredients.length;i+=3) + ingredients_.add(Item.get(ingredients[i+1], ingredients[i+2])); + recipes.add(new ShapelessRecipe(Item.get(resultId, resultData, resultCount), ingredients_)); + } public static void addShapelessRecipe(ItemStack result, int[] ingredients) { addShapelessRecipe(result.id, result.count, result.data, result.getExtraPtr(), ingredients); } public static native void removeRecipeByResult(int resultId, int resultCount, int resultData); + + public static void init(){ + CraftingManager craftingManager = Server.getInstance().getCraftingManager(); + for(Recipe recipe : recipes) + craftingManager.registerRecipe(recipe); + } } diff --git a/src/main/java/com/zhekasmirnov/innercore/api/NativeBlock.java b/src/main/java/com/zhekasmirnov/innercore/api/NativeBlock.java index c4506fd8..54dd12b9 100644 --- a/src/main/java/com/zhekasmirnov/innercore/api/NativeBlock.java +++ b/src/main/java/com/zhekasmirnov/innercore/api/NativeBlock.java @@ -103,7 +103,9 @@ public class NativeBlock { public static native void setRedstoneTileNative(int id, int data, boolean redstone); public static native void setRedstoneConnectorNative(int id, int data, boolean redstone); public static native void setRedstoneEmitterNative(int id, int data, boolean redstone); - public static native void setTickingTile(int id, int data, boolean ticking); + public static void setTickingTile(int id, int data, boolean ticking){ + CustomBlock.getBlockManager(id).put("TickingTile:"+data, ticking); + } public static native void setAnimatedTile(int id, int data, boolean ticking); public static native void setReceivingEntityInsideEvent(int id, boolean value); public static native void setReceivingEntityStepOnEvent(int id, boolean value); @@ -120,7 +122,9 @@ public class NativeBlock { public static native void setMapColor(int id, int mapColor); public static native void setCanContainLiquid(int id, boolean canContainLiquid); public static native void setCanBeExtraBlock(int id, boolean canBeExtraBlock); - public static native void setShape(int id, int data, float x1, float y1, float z1, float x2, float y2, float z2); + public static void setShape(int id, int data, float x1, float y1, float z1, float x2, float y2, float z2){ + + } private static HashMap blockDestroyTimes = new HashMap<>(); diff --git a/src/main/java/com/zhekasmirnov/innercore/api/NativeItem.java b/src/main/java/com/zhekasmirnov/innercore/api/NativeItem.java index a3d54551..65e73388 100644 --- a/src/main/java/com/zhekasmirnov/innercore/api/NativeItem.java +++ b/src/main/java/com/zhekasmirnov/innercore/api/NativeItem.java @@ -217,7 +217,9 @@ public class NativeItem { - public static native void setGlint(CustomManager ptr, boolean val); + public static void setGlint(CustomManager ptr, boolean val){ + + } public static native void setHandEquipped(CustomManager ptr, boolean val); @@ -275,7 +277,7 @@ public class NativeItem { } @JSStaticFunction - public static native void addToCreativeGroup(String groupName, String displayName, int id); + public static void addToCreativeGroup(String groupName, String displayName, int id){} @JSStaticFunction public static void addToCreative(int id, int count, int data, Object extra) {