/* * This file is part of Matter Overdrive * Copyright (c) 2015., Simeon Radivoev, All rights reserved. * * Matter Overdrive is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Matter Overdrive is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Matter Overdrive. If not, see <http://www.gnu.org/licenses>. */ package matteroverdrive.network.packet.client; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.MessageContext; import io.netty.buffer.ByteBuf; import matteroverdrive.api.matter.IMatterDatabase; import matteroverdrive.data.BlockPos; import matteroverdrive.data.ItemPattern; import matteroverdrive.network.packet.TileEntityUpdatePacket; import matteroverdrive.tile.TileEntityMachinePatternMonitor; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import java.util.ArrayList; import java.util.HashSet; import java.util.List; /** * Created by Simeon on 4/26/2015. */ public class PacketPatternMonitorSync extends TileEntityUpdatePacket { List<ItemPattern> patterns; public PacketPatternMonitorSync(){super();} public PacketPatternMonitorSync(TileEntityMachinePatternMonitor monitor) { super(monitor); loadPatternsFromDatabases(monitor.getWorldObj(),monitor.getDatabases()); } public void loadPatternsFromDatabases(World world,HashSet<BlockPos> databases) { patterns = new ArrayList<>(); for (BlockPos pos : databases) { TileEntity tileEntity = pos.getTileEntity(world); if (tileEntity instanceof IMatterDatabase) { List<ItemPattern> itemStacks = ((IMatterDatabase) tileEntity).getPatterns(); patterns.addAll(itemStacks); } } } @Override public void fromBytes(ByteBuf buf) { super.fromBytes(buf); int size = buf.readInt(); patterns = new ArrayList<>(); for (int i = 0; i < size;i++) { patterns.add(new ItemPattern(buf)); } } @Override public void toBytes(ByteBuf buf) { super.toBytes(buf); buf.writeInt(patterns.size()); for (ItemPattern pattern : patterns) { pattern.writeToBuffer(buf); } } public static class ClientHandler extends AbstractClientPacketHandler<PacketPatternMonitorSync> { @Override public IMessage handleClientMessage(EntityPlayer player, PacketPatternMonitorSync message, MessageContext ctx) { TileEntity entity = message.getTileEntity(player.worldObj); if (entity != null && entity instanceof TileEntityMachinePatternMonitor) { TileEntityMachinePatternMonitor monitor = (TileEntityMachinePatternMonitor)entity; monitor.setGuiPatterns(message.patterns); monitor.forceSearch(true); } return null; } } }