diff --git a/iclibs/Nukkit-MOT-SNAPSHOT.jar b/iclibs/Nukkit-MOT-SNAPSHOT.jar index 5bc8834a..34d593dd 100644 Binary files a/iclibs/Nukkit-MOT-SNAPSHOT.jar and b/iclibs/Nukkit-MOT-SNAPSHOT.jar differ diff --git a/src/main/java/com/reider745/Main.java b/src/main/java/com/reider745/Main.java index 69cda967..ac128ea9 100644 --- a/src/main/java/com/reider745/Main.java +++ b/src/main/java/com/reider745/Main.java @@ -75,7 +75,7 @@ public class Main { loader.registerHooksInitializationForClass(LevelHooks.class); loader.registerHooksInitializationForClass(ItemUtils.class); loader.registerHooksInitializationForClass(AndroidHooks.class); - loader.registerHooksInitializationForClass(SnowfallEverywhere.class); + //loader.registerHooksInitializationForClass(SnowfallEverywhere.class); //loader.registerHooksInitializationForClass(BiomesHooks.class); loader.registerHooksInitializationForClass(GlobalBanList.class); diff --git a/src/main/java/com/reider745/block/CustomBlock.java b/src/main/java/com/reider745/block/CustomBlock.java index 1eee1d0d..23de5f21 100644 --- a/src/main/java/com/reider745/block/CustomBlock.java +++ b/src/main/java/com/reider745/block/CustomBlock.java @@ -13,6 +13,8 @@ import com.zhekasmirnov.innercore.api.NativeCallback; import com.zhekasmirnov.innercore.api.NativeItem; import org.jetbrains.annotations.NotNull; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; @@ -65,10 +67,15 @@ public class CustomBlock extends BlockSolidMeta implements RandomTick { public static void init(){ blocks.forEach((id, value) -> { - CustomManager manager = getBlockManager(id); - ArrayList variants = getVariants(manager); - for(int data = 0;data < variants.size();data++) - registerBlock(id, data, new CustomBlock(id, data, manager, variants.get(data))); + final CustomManager manager = getBlockManager(id); + final ArrayList variants = getVariants(manager); + try { + final Constructor constructor = manager.getClazz().getDeclaredConstructor(int.class, int.class, CustomManager.class, String.class); + for(int data = 0;data < variants.size();data++) + registerBlock(id, data, (Block) constructor.newInstance(id, data, manager, variants.get(data))); + } catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException(e); + } }); } @@ -121,6 +128,13 @@ public class CustomBlock extends BlockSolidMeta implements RandomTick { return registerBlock(textId, id, name, CustomBlock.class); } + public static CustomManager registerBlock(String textId, int id, String name, int tick_rate, boolean isRenewable){ + CustomManager manager = registerBlock(textId, id, name, CustomBlockLiquid.class); + manager.put("tick_rate", tick_rate); + manager.put("isRenewable", isRenewable); + return manager; + } + private CustomManager manager; private int id; private String name; diff --git a/src/main/java/com/reider745/block/CustomBlockLiquid.java b/src/main/java/com/reider745/block/CustomBlockLiquid.java new file mode 100644 index 00000000..37b5e1a0 --- /dev/null +++ b/src/main/java/com/reider745/block/CustomBlockLiquid.java @@ -0,0 +1,109 @@ +package com.reider745.block; + +import cn.nukkit.block.Block; +import cn.nukkit.block.BlockLiquid; +import cn.nukkit.block.BlockWater; +import cn.nukkit.event.redstone.RedstoneUpdateEvent; +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.innercore.api.NativeCallback; +import org.jetbrains.annotations.NotNull; + +public class CustomBlockLiquid extends BlockLiquid implements RandomTick { + private CustomManager manager; + private int id, tick_rate; + private String name; + + private boolean TickingTile; + private boolean NeighbourChange, isRenewable; + + protected CustomBlockLiquid(int id, int meta){ + this(id, meta, CustomBlock.getBlockManager(id)); + } + + protected CustomBlockLiquid(int id, int meta, CustomManager manager) { + this(id, meta, manager, "blank"); + } + + protected CustomBlockLiquid(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); + NeighbourChange = manager.get("NeighbourChange", false); + tick_rate = manager.get("tick_rate", 5); + isRenewable = manager.get("isRenewable", false); + } + + @Override + public int tickRate() { + return tick_rate; + } + + @Override + public boolean usesWaterLogging() { + return false; + } + + @Override + public int getToolTier() { + return 0; + } + + @Override + public boolean canRandomTickBlocks() { + return TickingTile; + } + + @Override + public String getName() { + return name; + } + + @Override + public int getId() { + return id; + } + + @Override + public int getToolType() { + return ItemTool.TYPE_PICKAXE; + } + + @Override + public Item[] getDrops(Item item) { + return new Item[]{Item.get(id, this.getDamage(), 1)}; + } + + + @Override + public int onUpdate(int type) { + return super.onUpdate(type); + } + + @Override + public int getItemId() { + return id; + } + + @Override + public Block clone() { + CustomBlockLiquid customBlock = (CustomBlockLiquid) super.clone(); + customBlock.id = id; + customBlock.name = name; + customBlock.manager = manager; + customBlock.setDamage(getDamage()); + return customBlock; + } + + @Override + public BlockLiquid getBlock(int meta) { + return (BlockLiquid) Block.get(id, meta); + } +} \ No newline at end of file diff --git a/src/main/java/com/zhekasmirnov/innercore/api/NativeBlock.java b/src/main/java/com/zhekasmirnov/innercore/api/NativeBlock.java index 8d117321..f1734049 100644 --- a/src/main/java/com/zhekasmirnov/innercore/api/NativeBlock.java +++ b/src/main/java/com/zhekasmirnov/innercore/api/NativeBlock.java @@ -4,6 +4,7 @@ import com.reider745.InnerCoreServer; import com.reider745.api.CustomManager; import com.reider745.block.BlockMethods; import com.reider745.block.CustomBlock; +import com.reider745.block.CustomBlockLiquid; import com.zhekasmirnov.apparatus.ecs.ECS; import com.zhekasmirnov.apparatus.ecs.core.ComponentCollection; import com.zhekasmirnov.apparatus.ecs.core.EntityManager; @@ -70,8 +71,8 @@ public class NativeBlock { public static NativeBlock[] createLiquidBlock(int id1, String nameId1, int id2, String nameId2, String name, int materialBase, int tickDelay, boolean isRenewable) { name = NameTranslation.fixUnicodeIfRequired("block." + nameId1, name); - CustomManager liquidStill = CustomBlock.registerBlock(nameId1, id1, name); - CustomManager liquidFlowing = CustomBlock.registerBlock(nameId2, id2, name); + CustomManager liquidStill = CustomBlock.registerBlock(nameId1, id1, name, tickDelay, isRenewable); + CustomManager liquidFlowing = CustomBlock.registerBlock(nameId2, id2, name, tickDelay, isRenewable); return new NativeBlock[] { new NativeBlock(liquidStill, id1, nameId1, name), new NativeBlock(liquidFlowing, id2, nameId2, name) }; }