From 3fa9b5c1eed935b811caba3e44229b114ad02366 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Fri, 28 Dec 2018 13:13:51 -0500 Subject: [PATCH] Destroy containers that are created unnecessarily --- .../container/AbstractContainerBlockEntity.java | 5 +++++ .../container/MultipartContainer.java | 5 +++++ .../simplemultipart/item/ItemMultipart.java | 13 +++++++++++-- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/shadowfacts/simplemultipart/container/AbstractContainerBlockEntity.java b/src/main/java/net/shadowfacts/simplemultipart/container/AbstractContainerBlockEntity.java index 0fba8de..b44f4ef 100644 --- a/src/main/java/net/shadowfacts/simplemultipart/container/AbstractContainerBlockEntity.java +++ b/src/main/java/net/shadowfacts/simplemultipart/container/AbstractContainerBlockEntity.java @@ -45,6 +45,11 @@ public abstract class AbstractContainerBlockEntity extends BlockEntity implement return ImmutableSet.copyOf(parts); } + @Override + public boolean hasParts() { + return !parts.isEmpty(); + } + @Override public boolean canInsert(MultipartState partState) { VoxelShape newShape = partState.getBoundingShape(null); diff --git a/src/main/java/net/shadowfacts/simplemultipart/container/MultipartContainer.java b/src/main/java/net/shadowfacts/simplemultipart/container/MultipartContainer.java index 68d1cba..29a0a73 100644 --- a/src/main/java/net/shadowfacts/simplemultipart/container/MultipartContainer.java +++ b/src/main/java/net/shadowfacts/simplemultipart/container/MultipartContainer.java @@ -22,6 +22,11 @@ public interface MultipartContainer { */ Set getParts(); + /** + * @return If this container has any parts in it. + */ + boolean hasParts(); + /** * Determines whether the given multipart state can be inserted into this container. * Checks that the bounding box of the new part does not intersect with any existing ones. diff --git a/src/main/java/net/shadowfacts/simplemultipart/item/ItemMultipart.java b/src/main/java/net/shadowfacts/simplemultipart/item/ItemMultipart.java index e590bf9..25ccda4 100644 --- a/src/main/java/net/shadowfacts/simplemultipart/item/ItemMultipart.java +++ b/src/main/java/net/shadowfacts/simplemultipart/item/ItemMultipart.java @@ -1,10 +1,12 @@ package net.shadowfacts.simplemultipart.item; import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemUsageContext; import net.minecraft.util.ActionResult; import net.shadowfacts.simplemultipart.SimpleMultipart; +import net.shadowfacts.simplemultipart.container.AbstractContainerBlockEntity; import net.shadowfacts.simplemultipart.container.MultipartContainer; import net.shadowfacts.simplemultipart.multipart.Multipart; import net.shadowfacts.simplemultipart.multipart.MultipartState; @@ -52,8 +54,15 @@ public class ItemMultipart extends Item { // Otherwise, get or create a new container and try inserting into that ItemUsageContext offsetContext = new ItemUsageContext(context.getPlayer(), context.getItemStack(), context.getPos().offset(context.getFacing()), context.getFacing(), context.getHitX(), context.getHitY(), context.getHitZ()); MultipartContainer offsetContainer = getOrCreateContainer(offsetContext); - if (offsetContainer != null && tryPlace(new MultipartPlacementContext(offsetContainer, offsetContext))) { - return ActionResult.SUCCESS; + if (offsetContainer != null) { + if (tryPlace(new MultipartPlacementContext(offsetContainer, offsetContext))) { + return ActionResult.SUCCESS; + } else { + // if the a new container was created, and no part was inserted, remove the empty container + if (!offsetContainer.hasParts()) { + context.getWorld().setBlockState(offsetContext.getPos(), Blocks.AIR.getDefaultState()); + } + } } return ActionResult.FAILURE;