diff --git a/austri3Fix.md b/austri3Fix.md index bfcbd599..b669f8c6 100644 --- a/austri3Fix.md +++ b/austri3Fix.md @@ -1,6 +1,6 @@ - we demultiblocked the transition plane - transition plane doesn't collect items -- legacy controller doesn't correctly render energy bar - legacy blocks aren't colorable -- storage monitor doesn't update when rotated - storage monitor doesn't display if it's upgraded +- BlockLegacyDisplays don't rotate their faces correctly on the top and bottom +- storage monitors all show the same item diff --git a/src/main/java/appeng/block/legacy/BlockStorageMonitor.java b/src/main/java/appeng/block/legacy/BlockStorageMonitor.java index 74ffb715..c2f12370 100644 --- a/src/main/java/appeng/block/legacy/BlockStorageMonitor.java +++ b/src/main/java/appeng/block/legacy/BlockStorageMonitor.java @@ -2,19 +2,30 @@ package appeng.block.legacy; import java.util.EnumSet; +import appeng.api.networking.security.PlayerSource; +import appeng.api.networking.storage.IStorageGrid; +import appeng.api.storage.data.IAEItemStack; import appeng.block.AEBaseBlock; import appeng.client.render.BaseBlockRender; import appeng.client.render.blocks.RenderBlockStorageMonitor; +import appeng.client.texture.ExtraBlockTextures; import appeng.core.Api; import appeng.core.features.AEFeature; +import appeng.me.GridAccessException; import appeng.tile.AEBaseTile; import appeng.tile.legacy.TileStorageMonitor; import appeng.util.Platform; import appeng.util.item.AEItemStack; import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.common.util.FakePlayer; public class BlockStorageMonitor extends BlockLegacyDisplay { public BlockStorageMonitor() { @@ -49,6 +60,7 @@ public class BlockStorageMonitor extends BlockLegacyDisplay { tile.markForUpdate(); return true; } + if (player.getHeldItem().getItem() == Api.INSTANCE.definitions() .materials() @@ -62,7 +74,9 @@ public class BlockStorageMonitor extends BlockLegacyDisplay { tile.markForUpdate(); } return true; - } else if (side == tile.getForward().ordinal() && !tile.isLocked) { + } + + if (side == tile.getForward().ordinal() && !tile.isLocked) { if (!w.isRemote) { tile.myItem = AEItemStack.create(new ItemStack( player.getHeldItem().getItem(), @@ -74,8 +88,107 @@ public class BlockStorageMonitor extends BlockLegacyDisplay { } return true; } + + if (side == tile.getForward().ordinal() && tile.upgraded) { + try { + IStorageGrid storage + = tile.getProxy().getGrid().getCache(IStorageGrid.class); + + IAEItemStack remaining = Api.INSTANCE.storage().poweredInsert( + tile.getProxy().getEnergy(), + storage.getItemInventory(), + AEItemStack.create(player.getHeldItem()), + new PlayerSource(player, tile) + ); + + player.inventory.setInventorySlotContents( + player.inventory.currentItem, + remaining == null ? null : remaining.getItemStack() + ); + + if (!(player instanceof FakePlayer)) { + ((EntityPlayerMP) player) + .sendContainerToPlayer(player.inventoryContainer); + } + } catch (GridAccessException kek) {} + return true; + } + } else if (side == tile.getForward().ordinal() && tile.upgraded) { + if (player.isSneaking()) { + try { + IStorageGrid storage + = tile.getProxy().getGrid().getCache(IStorageGrid.class); + + for (int i = 0; i < player.inventory.getSizeInventory(); i++) { + ItemStack it = player.inventory.getStackInSlot(i); + if (it == null || it.getItem() != tile.myItem.getItem()) + continue; + + IAEItemStack remaining = Api.INSTANCE.storage().poweredInsert( + tile.getProxy().getEnergy(), + storage.getItemInventory(), + AEItemStack.create(it), + new PlayerSource(player, tile) + ); + + player.inventory.setInventorySlotContents( + i, remaining == null ? null : remaining.getItemStack() + ); + } + + if (!(player instanceof FakePlayer)) { + ((EntityPlayerMP) player) + .sendContainerToPlayer(player.inventoryContainer); + } + } catch (GridAccessException kek) {} + } else { + if (tile.myItem.getStackSize() == 0) + return true; + + try { + IStorageGrid storage + = tile.getProxy().getGrid().getCache(IStorageGrid.class); + + IAEItemStack request = tile.myItem.copy(); + request.setStackSize(Math.min( + request.getStackSize(), request.getItemStack().getMaxStackSize() + )); + + IAEItemStack extracted = Api.INSTANCE.storage().poweredExtraction( + tile.getProxy().getEnergy(), + storage.getItemInventory(), + request, + new PlayerSource(player, tile) + ); + + if (extracted == null) + return true; + + Entity itemEntity = new EntityItem( + tile.getWorldObj(), + tile.xCoord + tile.getForward().offsetX + 0.5, + tile.yCoord + tile.getForward().offsetY + 0.5, + tile.zCoord + tile.getForward().offsetZ + 0.5, + extracted.getItemStack() + ); + + tile.getWorldObj().spawnEntityInWorld(itemEntity); + } catch (GridAccessException kek) {} + } + return true; } return super.onBlockActivated(w, x, y, z, player, side, hitX, hitY, hitZ); } + + @Override + public IIcon getIcon(IBlockAccess w, int x, int y, int z, int s) { + TileStorageMonitor te = (TileStorageMonitor) w.getTileEntity(x, y, z); + + if (te != null && te.upgraded && s == te.getForward().ordinal()) { + return ExtraBlockTextures.BlockStorageMonitorFrontMatrix.getIcon(); + } + + return super.getIcon(w, x, y, z, s); + } } diff --git a/src/main/java/appeng/client/texture/ExtraBlockTextures.java b/src/main/java/appeng/client/texture/ExtraBlockTextures.java index 6c1811df..d8445804 100644 --- a/src/main/java/appeng/client/texture/ExtraBlockTextures.java +++ b/src/main/java/appeng/client/texture/ExtraBlockTextures.java @@ -125,7 +125,9 @@ public enum ExtraBlockTextures { Controller3("Controller3"), Controller4("Controller4"), Controller5("BlockLegacyControllerFront"), - ControllerLinked("ControllerLinked"); + ControllerLinked("ControllerLinked"), + + BlockStorageMonitorFrontMatrix("BlockStorageMonitorFront_Matrix"); private final String name; private IIcon IIcon; diff --git a/src/main/java/appeng/tile/legacy/TileStorageMonitor.java b/src/main/java/appeng/tile/legacy/TileStorageMonitor.java index 484f991e..7ff3afc0 100644 --- a/src/main/java/appeng/tile/legacy/TileStorageMonitor.java +++ b/src/main/java/appeng/tile/legacy/TileStorageMonitor.java @@ -48,8 +48,7 @@ public class TileStorageMonitor extends TileLegacyDisplay implements IStackWatch data.writeByte(flags); if (this.myItem != null) - ; - this.myItem.writeToPacket(data); + this.myItem.writeToPacket(data); } catch (IOException kek) { throw new RuntimeException(kek); }