diff --git a/src/main/java/com/zhekasmirnov/apparatus/api/container/ItemContainer.java b/src/main/java/com/zhekasmirnov/apparatus/api/container/ItemContainer.java index 1742d268..247faa89 100644 --- a/src/main/java/com/zhekasmirnov/apparatus/api/container/ItemContainer.java +++ b/src/main/java/com/zhekasmirnov/apparatus/api/container/ItemContainer.java @@ -1,5 +1,6 @@ package com.zhekasmirnov.apparatus.api.container; +import com.reider745.item.ItemMethod; import com.zhekasmirnov.apparatus.adapter.innercore.game.item.ItemStack; import com.zhekasmirnov.apparatus.mcpe.NativeBlockSource; import com.zhekasmirnov.apparatus.mcpe.NativePlayer; @@ -640,7 +641,7 @@ public class ItemContainer implements WorkbenchField { throw new IllegalStateException(); } - if (amount > 0) { + /*if (amount > 0) { ItemContainerSlot slot = getSlot(slotName); if (slot.id != 0 && slot.count > 0) { NativePlayer player = new NativePlayer(playerUid); @@ -656,6 +657,35 @@ public class ItemContainer implements WorkbenchField { } } } + }*/ + //Фикс максимально стака + if(amount > 0){ + ItemContainerSlot slot = getSlot(slotName); + if (slot.id != 0 && slot.count > 0) { + NativePlayer player = new NativePlayer(playerUid); + if (player.isValid()) { + int id = slot.id; + int data = slot.data; + NativeItemInstanceExtra extra = slot.extra; + amount = getFromSlot(slotName, id, amount, data, extra, playerUid); + int maxStack = ItemMethod.getMaxStackForId(id, data); + + if (amount > 0) { + if(amount <= maxStack){ + synchronized (playerInventoryLock) { + player.addItemToInventory(id, amount, data, extra, true); + } + }else{ + synchronized (playerInventoryLock) { + while (amount > 0) { + player.addItemToInventory(id, Math.min(amount, maxStack), data, extra, true); + amount -= maxStack; + } + } + } + } + } + } } } diff --git a/src/main/java/com/zhekasmirnov/apparatus/mcpe/NativeBlockSource.java b/src/main/java/com/zhekasmirnov/apparatus/mcpe/NativeBlockSource.java index 4fb86629..c8d98a2e 100644 --- a/src/main/java/com/zhekasmirnov/apparatus/mcpe/NativeBlockSource.java +++ b/src/main/java/com/zhekasmirnov/apparatus/mcpe/NativeBlockSource.java @@ -1,5 +1,6 @@ package com.zhekasmirnov.apparatus.mcpe; +import cn.nukkit.Server; import cn.nukkit.blockentity.BlockEntity; import cn.nukkit.entity.Entity; import cn.nukkit.level.Level; @@ -64,6 +65,7 @@ public class NativeBlockSource { public static NativeBlockSource getCurrentWorldGenRegion() { Level level = CallbackHelper.getForCurrentThread(); + if(level == null) Server.getInstance().getDefaultLevel(); return level != null ? new NativeBlockSource(level, false) : null; } diff --git a/src/main/resources/zotecore.yml b/src/main/resources/zotecore.yml index 6c046cf3..0a6bfda2 100644 --- a/src/main/resources/zotecore.yml +++ b/src/main/resources/zotecore.yml @@ -1,8 +1,8 @@ # Change resolution of pack that client should have to log into server. # However, no deprecated or unimplemented methods will be added. pack: Inner Core Test -pack-version: 2.3.0b118 -pack-version-code: 158 +pack-version: 2.3.0b119 +pack-version-code: 159 # Sets the list of mods and configs to load, you can specify # name, folder name of a modpack from /modpacks or a path.