From 90c3570a905f863689ad3485357a2b16a5d36364 Mon Sep 17 00:00:00 2001 From: Reider745 <70357814+Reider745@users.noreply.github.com> Date: Sun, 5 May 2024 07:15:47 +0300 Subject: [PATCH] =?UTF-8?q?Fixed:=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D1=81=D1=82=D0=B0=D0=BA=20=D0=B1=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D1=88=D0=B5=20=D0=BC=D0=B0=D0=BA=D1=81=D0=B8=D0=BC?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Более стабильная реализация getCurrentWorldGenRegion --- .../api/container/ItemContainer.java | 32 ++++++++++++++++++- .../apparatus/mcpe/NativeBlockSource.java | 2 ++ src/main/resources/zotecore.yml | 4 +-- 3 files changed, 35 insertions(+), 3 deletions(-) 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.