diff --git a/src/main/java/com/simibubi/create/ScreenResources.java b/src/main/java/com/simibubi/create/ScreenResources.java index 4c83da215..b23056447 100644 --- a/src/main/java/com/simibubi/create/ScreenResources.java +++ b/src/main/java/com/simibubi/create/ScreenResources.java @@ -23,6 +23,7 @@ public enum ScreenResources { SCHEMATICANNON_FUEL("schematicannon.png", 0, 215, 82, 4), FLEXCRATE("flex_crate_and_stockpile_switch.png", 125, 129), + FLEXCRATE_DOUBLE("double_flexcrate.png", 197, 129), FLEXCRATE_LOCKED_SLOT("flex_crate_and_stockpile_switch.png", 138, 0, 18, 18), STOCKSWITCH("flex_crate_and_stockpile_switch.png", 0, 129, 205, 93), diff --git a/src/main/java/com/simibubi/create/foundation/behaviour/filtering/FilteringBehaviour.java b/src/main/java/com/simibubi/create/foundation/behaviour/filtering/FilteringBehaviour.java index ebaaf0c94..1ee10c9f0 100644 --- a/src/main/java/com/simibubi/create/foundation/behaviour/filtering/FilteringBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/behaviour/filtering/FilteringBehaviour.java @@ -39,7 +39,7 @@ public class FilteringBehaviour extends TileEntityBehaviour { callback = stack -> { }; textShift = Vec3d.ZERO; - count = -1; + count = 0; ticksUntilScrollPacket = -1; } diff --git a/src/main/java/com/simibubi/create/foundation/behaviour/inventory/SynchronizedExtraction.java b/src/main/java/com/simibubi/create/foundation/behaviour/inventory/SynchronizedExtraction.java index 34407b2c9..3aaf30fbd 100644 --- a/src/main/java/com/simibubi/create/foundation/behaviour/inventory/SynchronizedExtraction.java +++ b/src/main/java/com/simibubi/create/foundation/behaviour/inventory/SynchronizedExtraction.java @@ -3,7 +3,9 @@ package com.simibubi.create.foundation.behaviour.inventory; import java.util.ArrayList; import java.util.List; +import com.simibubi.create.AllBlocks; import com.simibubi.create.foundation.behaviour.base.TileEntityBehaviour; +import com.simibubi.create.modules.logistics.block.inventories.FlexcrateBlock; import net.minecraft.block.BlockState; import net.minecraft.block.ChestBlock; @@ -45,6 +47,11 @@ public class SynchronizedExtraction { if (blockState.get(ChestBlock.TYPE) != ChestType.SINGLE) inventoryPositions.add(inventoryPos.offset(ChestBlock.getDirectionToAttached(blockState))); + // Sync across flexcrates + if (AllBlocks.FLEXCRATE.typeOf(blockState)) + if (blockState.get(FlexcrateBlock.DOUBLE)) + inventoryPositions.add(inventoryPos.offset(blockState.get(FlexcrateBlock.FACING))); + for (BlockPos pos : inventoryPositions) { for (Direction direction : Direction.values()) { SingleTargetAutoExtractingBehaviour behaviour = TileEntityBehaviour.get(reader, pos.offset(direction), diff --git a/src/main/java/com/simibubi/create/modules/contraptions/components/crusher/CrushingWheelBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/components/crusher/CrushingWheelBlock.java index 80c3c026a..82f41e7e5 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/components/crusher/CrushingWheelBlock.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/components/crusher/CrushingWheelBlock.java @@ -72,7 +72,8 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock { boolean controllerShouldExist = false; boolean controllerShouldBeValid = false; - if (AllBlocks.CRUSHING_WHEEL.typeOf(world.getBlockState(otherWheelPos))) { + BlockState otherState = world.getBlockState(otherWheelPos); + if (AllBlocks.CRUSHING_WHEEL.typeOf(otherState)) { controllerShouldExist = true; KineticTileEntity te = (KineticTileEntity) world.getTileEntity(pos); KineticTileEntity otherTe = (KineticTileEntity) world.getTileEntity(otherWheelPos); @@ -80,6 +81,8 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock { float signum = Math.signum(te.getSpeed()) * (state.get(AXIS) == Axis.X ? -1 : 1); controllerShouldBeValid = facing.getAxisDirection().getOffset() != signum; } + if (otherState.get(AXIS) != state.get(AXIS)) + controllerShouldExist = false; } if (!controllerShouldExist) { diff --git a/src/main/java/com/simibubi/create/modules/logistics/block/inventories/FlexcrateBlock.java b/src/main/java/com/simibubi/create/modules/logistics/block/inventories/FlexcrateBlock.java index b496f3e71..2d376ebff 100644 --- a/src/main/java/com/simibubi/create/modules/logistics/block/inventories/FlexcrateBlock.java +++ b/src/main/java/com/simibubi/create/modules/logistics/block/inventories/FlexcrateBlock.java @@ -1,5 +1,7 @@ package com.simibubi.create.modules.logistics.block.inventories; +import com.simibubi.create.AllBlocks; +import com.simibubi.create.foundation.block.ProperDirectionalBlock; import com.simibubi.create.foundation.utility.AllShapes; import net.minecraft.block.Block; @@ -7,21 +9,30 @@ import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.inventory.InventoryHelper; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.StateContainer.Builder; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; import net.minecraft.world.World; import net.minecraftforge.fml.network.NetworkHooks; -public class FlexcrateBlock extends Block { +public class FlexcrateBlock extends ProperDirectionalBlock { + + public static final BooleanProperty DOUBLE = BooleanProperty.create("double"); public FlexcrateBlock() { super(Properties.from(Blocks.ANDESITE)); + setDefaultState(getDefaultState().with(FACING, Direction.UP).with(DOUBLE, false)); } @Override @@ -29,11 +40,75 @@ public class FlexcrateBlock extends Block { return AllShapes.CRATE_BLOCK_SHAPE; } + @Override + protected void fillStateContainer(Builder builder) { + super.fillStateContainer(builder.add(DOUBLE)); + } + @Override public boolean hasTileEntity(BlockState state) { return true; } + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + BlockPos pos = context.getPos(); + World world = context.getWorld(); + + if (!context.isPlacerSneaking()) { + for (Direction d : Direction.values()) { + BlockState state = world.getBlockState(pos.offset(d)); + if (AllBlocks.FLEXCRATE.typeOf(state) && !state.get(DOUBLE)) + return getDefaultState().with(FACING, d).with(DOUBLE, true); + } + } + + Direction placedOnFace = context.getFace().getOpposite(); + BlockState state = world.getBlockState(pos.offset(placedOnFace)); + if (AllBlocks.FLEXCRATE.typeOf(state) && !state.get(DOUBLE)) + return getDefaultState().with(FACING, placedOnFace).with(DOUBLE, true); + return getDefaultState(); + } + + @Override + public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { + if (oldState.getBlock() != state.getBlock() && state.hasTileEntity() && state.get(DOUBLE) + && state.get(FACING).getAxisDirection() == AxisDirection.POSITIVE) { + FlexcrateTileEntity te = (FlexcrateTileEntity) worldIn.getTileEntity(pos); + FlexcrateTileEntity other = te.getOtherCrate(); + if (other == null) + return; + for (int slot = 0; slot < other.inventory.getSlots(); slot++) { + te.inventory.setStackInSlot(slot, other.inventory.getStackInSlot(slot)); + other.inventory.setStackInSlot(slot, ItemStack.EMPTY); + } + te.allowedAmount = other.allowedAmount; + } + } + + @Override + public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, + BlockPos currentPos, BlockPos facingPos) { + + boolean isDouble = stateIn.get(DOUBLE); + Direction blockFacing = stateIn.get(FACING); + boolean isFacingOther = AllBlocks.FLEXCRATE.typeOf(facingState) && facingState.get(DOUBLE) + && facingState.get(FACING) == facing.getOpposite(); + + if (!isDouble) { + if (!isFacingOther) + return stateIn; + return stateIn.with(DOUBLE, true).with(FACING, facing); + } + + if (facing != blockFacing) + return stateIn; + if (!isFacingOther) + return stateIn.with(DOUBLE, false); + + return stateIn; + } + @Override public boolean onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { @@ -41,9 +116,12 @@ public class FlexcrateBlock extends Block { if (worldIn.isRemote) { return true; } else { - FlexcrateTileEntity te = (FlexcrateTileEntity) worldIn.getTileEntity(pos); - if (te != null) - NetworkHooks.openGui((ServerPlayerEntity) player, te, te::sendToContainer); + TileEntity te = worldIn.getTileEntity(pos); + if (te instanceof FlexcrateTileEntity) { + FlexcrateTileEntity fte = (FlexcrateTileEntity) te; + fte = fte.getMainCrate(); + NetworkHooks.openGui((ServerPlayerEntity) player, fte, fte::sendToContainer); + } return true; } } @@ -58,13 +136,9 @@ public class FlexcrateBlock extends Block { if (worldIn.getTileEntity(pos) == null) return; - FlexcrateTileEntity te = (FlexcrateTileEntity) worldIn.getTileEntity(pos); - for (int slot = 0; slot < te.inventory.getSlots(); slot++) { - InventoryHelper.spawnItemStack(worldIn, pos.getX(), pos.getY(), pos.getZ(), - te.inventory.getStackInSlot(slot)); - } - if (state.hasTileEntity() && state.getBlock() != newState.getBlock()) { + FlexcrateTileEntity te = (FlexcrateTileEntity) worldIn.getTileEntity(pos); + te.onDestroyed(); worldIn.removeTileEntity(pos); } diff --git a/src/main/java/com/simibubi/create/modules/logistics/block/inventories/FlexcrateContainer.java b/src/main/java/com/simibubi/create/modules/logistics/block/inventories/FlexcrateContainer.java index 55fd0d0eb..8c093cd0b 100644 --- a/src/main/java/com/simibubi/create/modules/logistics/block/inventories/FlexcrateContainer.java +++ b/src/main/java/com/simibubi/create/modules/logistics/block/inventories/FlexcrateContainer.java @@ -16,6 +16,7 @@ public class FlexcrateContainer extends Container { public FlexcrateTileEntity te; public PlayerInventory playerInventory; + public boolean doubleCrate; public FlexcrateContainer(int id, PlayerInventory inv, PacketBuffer extraData) { super(AllContainers.FLEXCRATE.type, id); @@ -34,9 +35,12 @@ public class FlexcrateContainer extends Container { } private void init() { + doubleCrate = te.isDoubleCrate(); + int x = doubleCrate ? 52 : 124; + int maxCol = doubleCrate ? 8 : 4; for (int row = 0; row < 4; ++row) { - for (int col = 0; col < 4; ++col) { - this.addSlot(new SlotItemHandler(te.inventory, col + row * 4, 124 + col * 18, 25 + row * 18)); + for (int col = 0; col < maxCol; ++col) { + this.addSlot(new SlotItemHandler(te.inventory, col + row * maxCol, x + col * 18, 25 + row * 18)); } } @@ -55,7 +59,7 @@ public class FlexcrateContainer extends Container { detectAndSendChanges(); } - + @Override public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) { Slot clickedSlot = getSlot(index); @@ -66,8 +70,7 @@ public class FlexcrateContainer extends Container { if (index < 16) { mergeItemStack(stack, 16, inventorySlots.size(), false); te.inventory.onContentsChanged(index); - } - else + } else mergeItemStack(stack, 0, 15, false); return ItemStack.EMPTY; diff --git a/src/main/java/com/simibubi/create/modules/logistics/block/inventories/FlexcrateScreen.java b/src/main/java/com/simibubi/create/modules/logistics/block/inventories/FlexcrateScreen.java index 7a17c3f3c..5ef02e6fe 100644 --- a/src/main/java/com/simibubi/create/modules/logistics/block/inventories/FlexcrateScreen.java +++ b/src/main/java/com/simibubi/create/modules/logistics/block/inventories/FlexcrateScreen.java @@ -1,6 +1,7 @@ package com.simibubi.create.modules.logistics.block.inventories; import static com.simibubi.create.ScreenResources.FLEXCRATE; +import static com.simibubi.create.ScreenResources.FLEXCRATE_DOUBLE; import static com.simibubi.create.ScreenResources.PLAYER_INVENTORY; import java.util.ArrayList; @@ -47,9 +48,9 @@ public class FlexcrateScreen extends AbstractSimiContainerScreen lastModification = 0); + allowedItems = new ScrollInput(guiLeft + 100 + 65, guiTop + 104, 41, 14).titled(storageSpace) + .withRange(1, (container.doubleCrate ? 2049 : 1025)).writingTo(allowedItemsLabel).withShiftStep(64) + .setState(te.allowedAmount).calling(s -> lastModification = 0); allowedItems.onChanged(); widgets.add(allowedItemsLabel); widgets.add(allowedItems); @@ -67,28 +68,35 @@ public class FlexcrateScreen extends AbstractSimiContainerScreen slot * 64) continue; - int x = crateLeft + 23 + (slot % 4) * 18; - int y = crateTop + 24 + (slot / 4) * 18; + int slotsPerRow = (container.doubleCrate ? 8 : 4); + int x = crateLeft + 23 + (slot % slotsPerRow) * 18; + int y = crateTop + 24 + (slot / slotsPerRow) * 18; ScreenResources.FLEXCRATE_LOCKED_SLOT.draw(this, x, y); } ScreenElementRenderer.renderBlock(this::getRenderedBlock); - //to see or debug the bounds of the extra area uncomment the following lines - //Rectangle2d r = extraAreas.get(0); - //fill(r.getX() + r.getWidth(), r.getY() + r.getHeight(), r.getX(), r.getY(), 0xd3d3d3d3); + // to see or debug the bounds of the extra area uncomment the following lines + // Rectangle2d r = extraAreas.get(0); + // fill(r.getX() + r.getWidth(), r.getY() + r.getHeight(), r.getX(), r.getY(), + // 0xd3d3d3d3); } @Override @@ -106,6 +114,9 @@ public class FlexcrateScreen extends AbstractSimiContainerScreen LazyOptional getCapability(Capability capability, Direction facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) - return invHandler.cast(); + return getMainCrate().invHandler.cast(); return super.getCapability(capability, facing); } diff --git a/src/main/resources/assets/create/blockstates/flexcrate.json b/src/main/resources/assets/create/blockstates/flexcrate.json index 6dfa15028..cb94c53e6 100644 --- a/src/main/resources/assets/create/blockstates/flexcrate.json +++ b/src/main/resources/assets/create/blockstates/flexcrate.json @@ -1,5 +1,17 @@ { "variants": { - "": { "model": "create:block/flex_crate" } + "double=true,facing=up": { "model": "create:block/flexcrate/double_bottom" }, + "double=true,facing=down": { "model": "create:block/flexcrate/double_top" }, + "double=true,facing=west": { "model": "create:block/flexcrate/double_left", "y": 90 }, + "double=true,facing=east": { "model": "create:block/flexcrate/double_right", "y": 90 }, + "double=true,facing=north": { "model": "create:block/flexcrate/double_right" }, + "double=true,facing=south": { "model": "create:block/flexcrate/double_left" }, + + "double=false,facing=up": { "model": "create:block/flexcrate/single" }, + "double=false,facing=down": { "model": "create:block/flexcrate/single" }, + "double=false,facing=west": { "model": "create:block/flexcrate/single" }, + "double=false,facing=east": { "model": "create:block/flexcrate/single" }, + "double=false,facing=north": { "model": "create:block/flexcrate/single" }, + "double=false,facing=south": { "model": "create:block/flexcrate/single" } } } \ No newline at end of file diff --git a/src/main/resources/assets/create/lang/en_us.json b/src/main/resources/assets/create/lang/en_us.json index e96312743..c5c539543 100644 --- a/src/main/resources/assets/create/lang/en_us.json +++ b/src/main/resources/assets/create/lang/en_us.json @@ -110,7 +110,7 @@ "block.create.contact": "Redstone Contact", "block.create.redstone_bridge": "Redstone Link", "block.create.stockswitch": "Stockpile Switch", - "block.create.flexcrate": "FlexCrate", + "block.create.flexcrate": "Adjustable Crate", "block.create.extractor": "Extractor", "block.create.belt_funnel": "Funnel", "block.create.linked_extractor": "Linked Extractor", @@ -291,7 +291,7 @@ "create.logistics.firstFrequency": "Freq. #1", "create.logistics.secondFrequency": "Freq. #2", - "create.gui.flexcrate.title": "FlexCrate", + "create.gui.flexcrate.title": "Adjustable Crate", "create.gui.flexcrate.storageSpace": "Storage Space", "create.gui.stockswitch.title": "Stockpile Switch", @@ -737,7 +737,7 @@ "block.create.contact.tooltip.condition2": "When moved by Mechanical Piston", "block.create.contact.tooltip.behaviour2": "Triggers all stationary Contacts passing by", - "block.create.flexcrate.tooltip": "FLEXCRATE", + "block.create.flexcrate.tooltip": "ADJUSTABLE CRATE", "block.create.flexcrate.tooltip.summary": "This _Storage_ _Container_ allows Manual control over its capacity. It can hold up to _16_ _Stacks_ of any Item", "block.create.flexcrate.tooltip.control1": "When R-Clicked", "block.create.flexcrate.tooltip.action1": "Opens the _Interface_", diff --git a/src/main/resources/assets/create/models/block/flexcrate/double_bottom.json b/src/main/resources/assets/create/models/block/flexcrate/double_bottom.json new file mode 100644 index 000000000..3d3ec3d4e --- /dev/null +++ b/src/main/resources/assets/create/models/block/flexcrate/double_bottom.json @@ -0,0 +1,22 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/double_flexcrate_side", + "3": "create:block/brass_casing_14", + "particle": "create:block/flex_crate" + }, + "elements": [ + { + "from": [1, 0, 1], + "to": [15, 16, 15], + "faces": { + "north": {"uv": [8.5, 8, 15.5, 16], "texture": "#0"}, + "east": {"uv": [8.5, 8, 15.5, 16], "texture": "#0"}, + "south": {"uv": [8.5, 8, 15.5, 16], "texture": "#0"}, + "west": {"uv": [8.5, 8, 15.5, 16], "texture": "#0"}, + "down": {"uv": [1, 1, 15, 15], "rotation": 270, "texture": "#3"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/flexcrate/double_left.json b/src/main/resources/assets/create/models/block/flexcrate/double_left.json new file mode 100644 index 000000000..4055d2672 --- /dev/null +++ b/src/main/resources/assets/create/models/block/flexcrate/double_left.json @@ -0,0 +1,23 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/double_flexcrate_side", + "1": "create:block/double_flexcrate_bottom", + "2": "create:block/flex_crate", + "particle": "create:block/flex_crate" + }, + "elements": [ + { + "from": [1, 0, 1], + "to": [15, 14, 16], + "faces": { + "north": {"uv": [1, 1, 15, 15], "texture": "#2"}, + "east": {"uv": [8, 0.5, 15.5, 7.5], "texture": "#0"}, + "west": {"uv": [0.5, 0.5, 8, 7.5], "texture": "#0"}, + "up": {"uv": [0.5, 0.5, 8, 7.5], "rotation": 90, "texture": "#1"}, + "down": {"uv": [0.5, 0.5, 8, 7.5], "rotation": 270, "texture": "#1"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/flexcrate/double_right.json b/src/main/resources/assets/create/models/block/flexcrate/double_right.json new file mode 100644 index 000000000..92b457020 --- /dev/null +++ b/src/main/resources/assets/create/models/block/flexcrate/double_right.json @@ -0,0 +1,23 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/double_flexcrate_side", + "1": "create:block/double_flexcrate_bottom", + "2": "create:block/flex_crate", + "particle": "create:block/flex_crate" + }, + "elements": [ + { + "from": [1, 0, 0], + "to": [15, 14, 15], + "faces": { + "east": {"uv": [0.5, 0.5, 8, 7.5], "texture": "#0"}, + "south": {"uv": [1, 1, 15, 15], "texture": "#2"}, + "west": {"uv": [8, 0.5, 15.5, 7.5], "texture": "#0"}, + "up": {"uv": [8, 0.5, 15.5, 7.5], "rotation": 90, "texture": "#1"}, + "down": {"uv": [8, 0.5, 15.5, 7.5], "rotation": 270, "texture": "#1"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/flexcrate/double_top.json b/src/main/resources/assets/create/models/block/flexcrate/double_top.json new file mode 100644 index 000000000..8defc54ef --- /dev/null +++ b/src/main/resources/assets/create/models/block/flexcrate/double_top.json @@ -0,0 +1,22 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/double_flexcrate_side", + "3": "create:block/brass_casing_14", + "particle": "create:block/flex_crate" + }, + "elements": [ + { + "from": [1, 0, 1], + "to": [15, 14, 15], + "faces": { + "north": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#0"}, + "east": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#0"}, + "south": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#0"}, + "west": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#0"}, + "up": {"uv": [1, 1, 15, 15], "rotation": 90, "texture": "#3"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/flex_crate.json b/src/main/resources/assets/create/models/block/flexcrate/single.json similarity index 100% rename from src/main/resources/assets/create/models/block/flex_crate.json rename to src/main/resources/assets/create/models/block/flexcrate/single.json diff --git a/src/main/resources/assets/create/models/item/flexcrate.json b/src/main/resources/assets/create/models/item/flexcrate.json index 8e844dbae..90610cbde 100644 --- a/src/main/resources/assets/create/models/item/flexcrate.json +++ b/src/main/resources/assets/create/models/item/flexcrate.json @@ -1,3 +1,3 @@ { - "parent": "create:block/flex_crate" + "parent": "create:block/flexcrate/single" } \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/double_flexcrate_bottom.png b/src/main/resources/assets/create/textures/block/double_flexcrate_bottom.png new file mode 100644 index 000000000..9b95e424b Binary files /dev/null and b/src/main/resources/assets/create/textures/block/double_flexcrate_bottom.png differ diff --git a/src/main/resources/assets/create/textures/block/double_flexcrate_side.png b/src/main/resources/assets/create/textures/block/double_flexcrate_side.png new file mode 100644 index 000000000..0a8096235 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/double_flexcrate_side.png differ diff --git a/src/main/resources/assets/create/textures/block/flex_crate.png b/src/main/resources/assets/create/textures/block/flex_crate.png index 44d648bd0..27e78bb33 100644 Binary files a/src/main/resources/assets/create/textures/block/flex_crate.png and b/src/main/resources/assets/create/textures/block/flex_crate.png differ diff --git a/src/main/resources/assets/create/textures/gui/double_flexcrate.png b/src/main/resources/assets/create/textures/gui/double_flexcrate.png new file mode 100644 index 000000000..57df53fe6 Binary files /dev/null and b/src/main/resources/assets/create/textures/gui/double_flexcrate.png differ diff --git a/src/main/resources/assets/create/textures/gui/flex_crate_and_stockpile_switch.png b/src/main/resources/assets/create/textures/gui/flex_crate_and_stockpile_switch.png index e577df074..b6da1409e 100644 Binary files a/src/main/resources/assets/create/textures/gui/flex_crate_and_stockpile_switch.png and b/src/main/resources/assets/create/textures/gui/flex_crate_and_stockpile_switch.png differ