Skip to content

Commit

Permalink
Fixed incorrectly returning left-overs from adding items to chests us…
Browse files Browse the repository at this point in the history
…ing the API, causing issues with chunk collectors as well (#172)
  • Loading branch information
OmerBenGera committed Apr 12, 2023
1 parent 79d18d4 commit a935683
Show file tree
Hide file tree
Showing 13 changed files with 111 additions and 57 deletions.
Expand Up @@ -10,6 +10,7 @@
import com.bgsoftware.wildchests.objects.containers.TileEntityContainer;
import com.bgsoftware.wildchests.objects.inventory.WildContainerItem;
import com.bgsoftware.wildchests.utils.ChestUtils;
import com.bgsoftware.wildchests.utils.Counter;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.NonNullList;
Expand Down Expand Up @@ -43,6 +44,7 @@
import org.bukkit.entity.Item;

import java.util.List;
import java.util.Map;

public class WildChestBlockEntity extends ChestBlockEntity implements WorldlyContainer, TileEntityContainer,
BlockEntityTicker<WildChestBlockEntity> {
Expand Down Expand Up @@ -213,15 +215,17 @@ public void tick(Level level, BlockPos blockPos, BlockState blockState, WildChes
org.bukkit.inventory.ItemStack[] itemsToAdd = ChestUtils.fixItemStackAmount(
itemStack, plugin.getProviders().getItemAmount(item));

org.bukkit.inventory.ItemStack remainingItem = ChestUtils.getRemainingItem(chest.addItems(itemsToAdd));
Map<Integer, org.bukkit.inventory.ItemStack> leftOvers = chest.addItems(itemsToAdd);

if (remainingItem == null) {
if (leftOvers.isEmpty()) {
this.serverLevel.sendParticles(null, CraftParticle.toNMS(Particle.CLOUD),
itemEntity.getX(), itemEntity.getY(), itemEntity.getZ(),
0, 0.0, 0.0, 0.0, 1.0, false);
itemEntity.discard();
} else {
plugin.getProviders().setItemAmount(item, remainingItem.getAmount());
} else if (leftOvers.size() != itemsToAdd.length) {
Counter leftOverCount = new Counter();
leftOvers.values().forEach(leftOver -> leftOverCount.increase(leftOver.getAmount()));
plugin.getProviders().setItemAmount(item, leftOverCount.get());
}
}
}
Expand Down
Expand Up @@ -11,6 +11,7 @@
import com.bgsoftware.wildchests.objects.containers.TileEntityContainer;
import com.bgsoftware.wildchests.objects.inventory.WildContainerItem;
import com.bgsoftware.wildchests.utils.ChestUtils;
import com.bgsoftware.wildchests.utils.Counter;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.NonNullList;
Expand Down Expand Up @@ -45,6 +46,7 @@
import org.bukkit.entity.Item;

import java.util.List;
import java.util.Map;

public class WildChestBlockEntity extends ChestBlockEntity implements WorldlyContainer, TileEntityContainer,
BlockEntityTicker<WildChestBlockEntity> {
Expand Down Expand Up @@ -218,15 +220,17 @@ public void tick(Level level, BlockPos blockPos, BlockState blockState, WildChes
org.bukkit.inventory.ItemStack[] itemsToAdd = ChestUtils.fixItemStackAmount(
itemStack, plugin.getProviders().getItemAmount(item));

org.bukkit.inventory.ItemStack remainingItem = ChestUtils.getRemainingItem(chest.addItems(itemsToAdd));
Map<Integer, org.bukkit.inventory.ItemStack> leftOvers = chest.addItems(itemsToAdd);

if (remainingItem == null) {
if (leftOvers.isEmpty()) {
this.serverLevel.sendParticles(null, CraftParticle.toNMS(Particle.CLOUD),
itemEntity.getX(), itemEntity.getY(), itemEntity.getZ(),
0, 0.0, 0.0, 0.0, 1.0, false);
itemEntity.discard();
} else {
plugin.getProviders().setItemAmount(item, remainingItem.getAmount());
} else if (leftOvers.size() != itemsToAdd.length) {
Counter leftOverCount = new Counter();
leftOvers.values().forEach(leftOver -> leftOverCount.increase(leftOver.getAmount()));
plugin.getProviders().setItemAmount(item, leftOverCount.get());
}
}
}
Expand Down
Expand Up @@ -11,6 +11,7 @@
import com.bgsoftware.wildchests.objects.containers.TileEntityContainer;
import com.bgsoftware.wildchests.objects.inventory.WildContainerItem;
import com.bgsoftware.wildchests.utils.ChestUtils;
import com.bgsoftware.wildchests.utils.Counter;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.NonNullList;
Expand Down Expand Up @@ -45,6 +46,7 @@
import org.bukkit.entity.Item;

import java.util.List;
import java.util.Map;

public class WildChestBlockEntity extends ChestBlockEntity implements WorldlyContainer, TileEntityContainer,
BlockEntityTicker<WildChestBlockEntity> {
Expand Down Expand Up @@ -218,15 +220,17 @@ public void tick(Level level, BlockPos blockPos, BlockState blockState, WildChes
org.bukkit.inventory.ItemStack[] itemsToAdd = ChestUtils.fixItemStackAmount(
itemStack, plugin.getProviders().getItemAmount(item));

org.bukkit.inventory.ItemStack remainingItem = ChestUtils.getRemainingItem(chest.addItems(itemsToAdd));
Map<Integer, org.bukkit.inventory.ItemStack> leftOvers = chest.addItems(itemsToAdd);

if (remainingItem == null) {
if (leftOvers.isEmpty()) {
this.serverLevel.sendParticles(null, CraftParticle.toNMS(Particle.CLOUD),
itemEntity.getX(), itemEntity.getY(), itemEntity.getZ(),
0, 0.0, 0.0, 0.0, 1.0, false);
itemEntity.discard();
} else {
plugin.getProviders().setItemAmount(item, remainingItem.getAmount());
} else if (leftOvers.size() != itemsToAdd.length) {
Counter leftOverCount = new Counter();
leftOvers.values().forEach(leftOver -> leftOverCount.increase(leftOver.getAmount()));
plugin.getProviders().setItemAmount(item, leftOverCount.get());
}
}
}
Expand Down
Expand Up @@ -11,6 +11,7 @@
import com.bgsoftware.wildchests.objects.containers.TileEntityContainer;
import com.bgsoftware.wildchests.objects.inventory.WildContainerItem;
import com.bgsoftware.wildchests.utils.ChestUtils;
import com.bgsoftware.wildchests.utils.Counter;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.NonNullList;
Expand Down Expand Up @@ -45,6 +46,7 @@
import org.bukkit.entity.Item;

import java.util.List;
import java.util.Map;

public class WildChestBlockEntity extends ChestBlockEntity implements WorldlyContainer, TileEntityContainer,
BlockEntityTicker<WildChestBlockEntity> {
Expand Down Expand Up @@ -218,15 +220,17 @@ public void tick(Level level, BlockPos blockPos, BlockState blockState, WildChes
org.bukkit.inventory.ItemStack[] itemsToAdd = ChestUtils.fixItemStackAmount(
itemStack, plugin.getProviders().getItemAmount(item));

org.bukkit.inventory.ItemStack remainingItem = ChestUtils.getRemainingItem(chest.addItems(itemsToAdd));
Map<Integer, org.bukkit.inventory.ItemStack> leftOvers = chest.addItems(itemsToAdd);

if (remainingItem == null) {
if (leftOvers.isEmpty()) {
this.serverLevel.sendParticles(null, CraftParticle.toNMS(Particle.CLOUD),
itemEntity.getX(), itemEntity.getY(), itemEntity.getZ(),
0, 0.0, 0.0, 0.0, 1.0, false);
itemEntity.discard();
} else {
plugin.getProviders().setItemAmount(item, remainingItem.getAmount());
} else if (leftOvers.size() != itemsToAdd.length) {
Counter leftOverCount = new Counter();
leftOvers.values().forEach(leftOver -> leftOverCount.increase(leftOver.getAmount()));
plugin.getProviders().setItemAmount(item, leftOverCount.get());
}
}
}
Expand Down
Expand Up @@ -11,6 +11,7 @@
import com.bgsoftware.wildchests.objects.containers.TileEntityContainer;
import com.bgsoftware.wildchests.objects.inventory.WildContainerItem;
import com.bgsoftware.wildchests.utils.ChestUtils;
import com.bgsoftware.wildchests.utils.Counter;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.NonNullList;
Expand Down Expand Up @@ -45,6 +46,7 @@
import org.bukkit.entity.Item;

import java.util.List;
import java.util.Map;

public class WildChestBlockEntity extends ChestBlockEntity implements WorldlyContainer, TileEntityContainer,
BlockEntityTicker<WildChestBlockEntity> {
Expand Down Expand Up @@ -218,15 +220,17 @@ public void tick(Level level, BlockPos blockPos, BlockState blockState, WildChes
org.bukkit.inventory.ItemStack[] itemsToAdd = ChestUtils.fixItemStackAmount(
itemStack, plugin.getProviders().getItemAmount(item));

org.bukkit.inventory.ItemStack remainingItem = ChestUtils.getRemainingItem(chest.addItems(itemsToAdd));
Map<Integer, org.bukkit.inventory.ItemStack> leftOvers = chest.addItems(itemsToAdd);

if (remainingItem == null) {
if (leftOvers.isEmpty()) {
this.serverLevel.sendParticles(null, CraftParticle.toNMS(Particle.CLOUD),
itemEntity.getX(), itemEntity.getY(), itemEntity.getZ(),
0, 0.0, 0.0, 0.0, 1.0, false);
itemEntity.discard();
} else {
plugin.getProviders().setItemAmount(item, remainingItem.getAmount());
} else if (leftOvers.size() != itemsToAdd.length) {
Counter leftOverCount = new Counter();
leftOvers.values().forEach(leftOver -> leftOverCount.increase(leftOver.getAmount()));
plugin.getProviders().setItemAmount(item, leftOverCount.get());
}
}
}
Expand Down
Expand Up @@ -11,6 +11,7 @@
import com.bgsoftware.wildchests.objects.containers.TileEntityContainer;
import com.bgsoftware.wildchests.objects.inventory.WildContainerItem;
import com.bgsoftware.wildchests.utils.ChestUtils;
import com.bgsoftware.wildchests.utils.Counter;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.NonNullList;
Expand Down Expand Up @@ -45,6 +46,7 @@
import org.bukkit.entity.Item;

import java.util.List;
import java.util.Map;

public class WildChestBlockEntity extends ChestBlockEntity implements WorldlyContainer, TileEntityContainer,
BlockEntityTicker<WildChestBlockEntity> {
Expand Down Expand Up @@ -218,15 +220,17 @@ public void tick(Level level, BlockPos blockPos, BlockState blockState, WildChes
org.bukkit.inventory.ItemStack[] itemsToAdd = ChestUtils.fixItemStackAmount(
itemStack, plugin.getProviders().getItemAmount(item));

org.bukkit.inventory.ItemStack remainingItem = ChestUtils.getRemainingItem(chest.addItems(itemsToAdd));
Map<Integer, org.bukkit.inventory.ItemStack> leftOvers = chest.addItems(itemsToAdd);

if (remainingItem == null) {
if (leftOvers.isEmpty()) {
this.serverLevel.sendParticles(null, CraftParticle.toNMS(Particle.CLOUD),
itemEntity.getX(), itemEntity.getY(), itemEntity.getZ(),
0, 0.0, 0.0, 0.0, 1.0, false);
itemEntity.discard();
} else {
plugin.getProviders().setItemAmount(item, remainingItem.getAmount());
} else if (leftOvers.size() != itemsToAdd.length) {
Counter leftOverCount = new Counter();
leftOvers.values().forEach(leftOver -> leftOverCount.increase(leftOver.getAmount()));
plugin.getProviders().setItemAmount(item, leftOverCount.get());
}
}
}
Expand Down
Expand Up @@ -11,6 +11,7 @@
import com.bgsoftware.wildchests.objects.containers.TileEntityContainer;
import com.bgsoftware.wildchests.objects.inventory.WildContainerItem;
import com.bgsoftware.wildchests.utils.ChestUtils;
import com.bgsoftware.wildchests.utils.Counter;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.NonNullList;
Expand Down Expand Up @@ -45,6 +46,7 @@
import org.bukkit.entity.Item;

import java.util.List;
import java.util.Map;

public class WildChestBlockEntity extends ChestBlockEntity implements WorldlyContainer, TileEntityContainer,
BlockEntityTicker<WildChestBlockEntity> {
Expand Down Expand Up @@ -218,15 +220,17 @@ public void tick(Level level, BlockPos blockPos, BlockState blockState, WildChes
org.bukkit.inventory.ItemStack[] itemsToAdd = ChestUtils.fixItemStackAmount(
itemStack, plugin.getProviders().getItemAmount(item));

org.bukkit.inventory.ItemStack remainingItem = ChestUtils.getRemainingItem(chest.addItems(itemsToAdd));
Map<Integer, org.bukkit.inventory.ItemStack> leftOvers = chest.addItems(itemsToAdd);

if (remainingItem == null) {
if (leftOvers.isEmpty()) {
this.serverLevel.sendParticles(null, CraftParticle.toNMS(Particle.CLOUD),
itemEntity.getX(), itemEntity.getY(), itemEntity.getZ(),
0, 0.0, 0.0, 0.0, 1.0, false);
itemEntity.discard();
} else {
plugin.getProviders().setItemAmount(item, remainingItem.getAmount());
} else if (leftOvers.size() != itemsToAdd.length) {
Counter leftOverCount = new Counter();
leftOvers.values().forEach(leftOver -> leftOverCount.increase(leftOver.getAmount()));
plugin.getProviders().setItemAmount(item, leftOverCount.get());
}
}
}
Expand Down
Expand Up @@ -10,6 +10,7 @@
import com.bgsoftware.wildchests.objects.containers.TileEntityContainer;
import com.bgsoftware.wildchests.objects.inventory.WildContainerItem;
import com.bgsoftware.wildchests.utils.ChestUtils;
import com.bgsoftware.wildchests.utils.Counter;
import com.google.common.base.Predicate;
import net.minecraft.server.v1_12_R1.AxisAlignedBB;
import net.minecraft.server.v1_12_R1.Block;
Expand Down Expand Up @@ -47,6 +48,7 @@
import org.bukkit.entity.Item;

import java.util.List;
import java.util.Map;

public class TileEntityWildChest extends TileEntityChest implements IWorldInventory, TileEntityContainer, ITickable {

Expand Down Expand Up @@ -237,14 +239,16 @@ public void e() {
org.bukkit.inventory.ItemStack[] itemsToAdd = ChestUtils.fixItemStackAmount(
itemStack, plugin.getProviders().getItemAmount(item));

org.bukkit.inventory.ItemStack remainingItem = ChestUtils.getRemainingItem(chest.addItems(itemsToAdd));
Map<Integer, org.bukkit.inventory.ItemStack> leftOvers = chest.addItems(itemsToAdd);

if (remainingItem == null) {
if (leftOvers.isEmpty()) {
((WorldServer) world).sendParticles(null, CraftParticle.toNMS(Particle.CLOUD), false,
entityItem.locX, entityItem.locY, entityItem.locZ, 0, 0.0, 0.0, 0.0, 1.0);
entityItem.die();
} else {
plugin.getProviders().setItemAmount(item, remainingItem.getAmount());
} else if (leftOvers.size() != itemsToAdd.length) {
Counter leftOverCount = new Counter();
leftOvers.values().forEach(leftOver -> leftOverCount.increase(leftOver.getAmount()));
plugin.getProviders().setItemAmount(item, leftOverCount.get());
}
}
}
Expand Down
Expand Up @@ -10,6 +10,7 @@
import com.bgsoftware.wildchests.objects.containers.TileEntityContainer;
import com.bgsoftware.wildchests.objects.inventory.WildContainerItem;
import com.bgsoftware.wildchests.utils.ChestUtils;
import com.bgsoftware.wildchests.utils.Counter;
import net.minecraft.server.v1_16_R3.AxisAlignedBB;
import net.minecraft.server.v1_16_R3.Block;
import net.minecraft.server.v1_16_R3.BlockPosition;
Expand Down Expand Up @@ -41,6 +42,7 @@
import org.bukkit.entity.Item;

import java.util.List;
import java.util.Map;

public class TileEntityWildChest extends TileEntityChest implements IWorldInventory, TileEntityContainer, ITickable {

Expand Down Expand Up @@ -217,14 +219,16 @@ public void tick() {
org.bukkit.inventory.ItemStack[] itemsToAdd = ChestUtils.fixItemStackAmount(
itemStack, plugin.getProviders().getItemAmount(item));

org.bukkit.inventory.ItemStack remainingItem = ChestUtils.getRemainingItem(chest.addItems(itemsToAdd));
Map<Integer, org.bukkit.inventory.ItemStack> leftOvers = chest.addItems(itemsToAdd);

if (remainingItem == null) {
if (leftOvers.isEmpty()) {
((WorldServer) world).sendParticles(null, CraftParticle.toNMS(Particle.CLOUD), entityItem.locX(), entityItem.locY(),
entityItem.locZ(), 0, 0.0, 0.0, 0.0, 1.0, false);
entityItem.die();
} else {
plugin.getProviders().setItemAmount(item, remainingItem.getAmount());
} else if (leftOvers.size() != itemsToAdd.length) {
Counter leftOverCount = new Counter();
leftOvers.values().forEach(leftOver -> leftOverCount.increase(leftOver.getAmount()));
plugin.getProviders().setItemAmount(item, leftOverCount.get());
}
}
}
Expand Down
Expand Up @@ -10,6 +10,7 @@
import com.bgsoftware.wildchests.objects.containers.TileEntityContainer;
import com.bgsoftware.wildchests.objects.inventory.WildContainerItem;
import com.bgsoftware.wildchests.utils.ChestUtils;
import com.bgsoftware.wildchests.utils.Counter;
import com.google.common.base.Predicate;
import net.minecraft.server.v1_8_R3.AxisAlignedBB;
import net.minecraft.server.v1_8_R3.Block;
Expand Down Expand Up @@ -42,6 +43,7 @@
import org.bukkit.inventory.Inventory;

import java.util.List;
import java.util.Map;

public class TileEntityWildChest extends TileEntityChest implements IWorldInventory, TileEntityContainer, IUpdatePlayerListBox {

Expand Down Expand Up @@ -223,14 +225,16 @@ public void c() {
org.bukkit.inventory.ItemStack[] itemsToAdd = ChestUtils.fixItemStackAmount(
itemStack, plugin.getProviders().getItemAmount(item));

org.bukkit.inventory.ItemStack remainingItem = ChestUtils.getRemainingItem(chest.addItems(itemsToAdd));
Map<Integer, org.bukkit.inventory.ItemStack> leftOvers = chest.addItems(itemsToAdd);

if (remainingItem == null) {
if (leftOvers.isEmpty()) {
((WorldServer) world).sendParticles(null, EnumParticle.CLOUD, false,
entityItem.locX, entityItem.locY, entityItem.locZ, 0, 0.0, 0.0, 0.0, 1.0);
entityItem.die();
} else {
plugin.getProviders().setItemAmount(item, remainingItem.getAmount());
} else if (leftOvers.size() != itemsToAdd.length) {
Counter leftOverCount = new Counter();
leftOvers.values().forEach(leftOver -> leftOverCount.increase(leftOver.getAmount()));
plugin.getProviders().setItemAmount(item, leftOverCount.get());
}
}
}
Expand Down

0 comments on commit a935683

Please sign in to comment.