Search in sources :

Example 1 with AddonFillerPlanner

use of buildcraft.builders.addon.AddonFillerPlanner in project BuildCraft by BuildCraft.

the class TileFiller method readPayload.

@Override
public void readPayload(int id, PacketBufferBC buffer, Side side, MessageContext ctx) throws IOException {
    super.readPayload(id, buffer, side, ctx);
    if (side == Side.CLIENT) {
        if (id == NET_RENDER_DATA) {
            builder.readFromByteBuf(buffer);
            readPayload(NET_BOX, buffer, side, ctx);
        } else if (id == NET_GUI_DATA || id == NET_GUI_TICK) {
            readPayload(NET_CAN_EXCAVATE, buffer, side, ctx);
            readPayload(NET_INVERT, buffer, side, ctx);
            readPayload(NET_PATTERN, buffer, side, ctx);
            builder.readFromByteBuf(buffer);
            finished = buffer.readBoolean();
            lockedTicks = buffer.readBoolean() ? (byte) 1 : (byte) 0;
            mode = buffer.readEnumValue(Mode.class);
        } else if (id == NET_BOX) {
            box.readData(buffer);
            markerBox = buffer.readBoolean();
            if (buffer.readBoolean()) {
                UUID volumeBoxId = buffer.readUniqueId();
                VolumeBox volumeBox = world.isRemote ? ClientVolumeBoxes.INSTANCE.volumeBoxes.stream().filter(localVolumeBox -> localVolumeBox.id.equals(volumeBoxId)).findFirst().orElseThrow(NullPointerException::new) : WorldSavedDataVolumeBoxes.get(world).getVolumeBoxFromId(volumeBoxId);
                addon = (AddonFillerPlanner) volumeBox.addons.get(buffer.readEnumValue(EnumAddonSlot.class));
            }
        } else if (id == NET_CAN_EXCAVATE) {
            canExcavate = buffer.readBoolean();
        } else if (id == NET_INVERT) {
            inverted = buffer.readBoolean();
        } else if (id == NET_PATTERN) {
            patternStatement.readFromBuffer(buffer);
        }
    }
    if (side == Side.SERVER) {
        if (id == NET_CAN_EXCAVATE) {
            canExcavate = buffer.readBoolean();
            sendNetworkGuiUpdate(NET_CAN_EXCAVATE);
        }
    }
}
Also used : EnumAccess(buildcraft.lib.tile.item.ItemHandlerManager.EnumAccess) IFillerPattern(buildcraft.api.filler.IFillerPattern) ItemHandlerSimple(buildcraft.lib.tile.item.ItemHandlerSimple) FillerType(buildcraft.builders.filler.FillerType) Side(net.minecraftforge.fml.relauncher.Side) TilesAPI(buildcraft.api.tiles.TilesAPI) EnumAddonSlot(buildcraft.core.marker.volume.EnumAddonSlot) IItemHandlerModifiable(net.minecraftforge.items.IItemHandlerModifiable) Template(buildcraft.builders.snapshot.Template) IBox(buildcraft.api.core.IBox) NBTTagCompound(net.minecraft.nbt.NBTTagCompound) AddonFillerPlanner(buildcraft.builders.addon.AddonFillerPlanner) PacketBufferBC(buildcraft.lib.net.PacketBufferBC) VolumeBox(buildcraft.core.marker.volume.VolumeBox) TileBC_Neptune(buildcraft.lib.tile.TileBC_Neptune) UUID(java.util.UUID) List(java.util.List) BlockBCBase_Neptune(buildcraft.lib.block.BlockBCBase_Neptune) MessageContext(net.minecraftforge.fml.common.network.simpleimpl.MessageContext) MjBattery(buildcraft.api.mj.MjBattery) Optional(java.util.Optional) ItemBlocks(buildcraft.builders.snapshot.ItemBlocks) IFillerStatementContainer(buildcraft.api.statements.containers.IFillerStatementContainer) MjAPI(buildcraft.api.mj.MjAPI) EnumPipePart(buildcraft.api.core.EnumPipePart) IntStream(java.util.stream.IntStream) Box(buildcraft.lib.misc.data.Box) TemplateBuilder(buildcraft.builders.snapshot.TemplateBuilder) IAreaProvider(buildcraft.api.core.IAreaProvider) AxisAlignedBB(net.minecraft.util.math.AxisAlignedBB) ITileForTemplateBuilder(buildcraft.builders.snapshot.ITileForTemplateBuilder) WorldSavedDataVolumeBoxes(buildcraft.core.marker.volume.WorldSavedDataVolumeBoxes) ItemStack(net.minecraft.item.ItemStack) NBTUtilBC(buildcraft.lib.misc.NBTUtilBC) MjBatteryReceiver(buildcraft.lib.mj.MjBatteryReceiver) BoundingBoxUtil(buildcraft.lib.misc.BoundingBoxUtil) IStatementParameter(buildcraft.api.statements.IStatementParameter) ITickable(net.minecraft.util.ITickable) BuildingInfo(buildcraft.builders.snapshot.Template.BuildingInfo) MessageManager(buildcraft.lib.net.MessageManager) SideOnly(net.minecraftforge.fml.relauncher.SideOnly) Nonnull(javax.annotation.Nonnull) FullStatement(buildcraft.lib.statement.FullStatement) FillerUtil(buildcraft.builders.filler.FillerUtil) IdAllocator(buildcraft.lib.misc.data.IdAllocator) World(net.minecraft.world.World) IDebuggable(buildcraft.api.tiles.IDebuggable) EnumFacing(net.minecraft.util.EnumFacing) MjCapabilityHelper(buildcraft.api.mj.MjCapabilityHelper) IOException(java.io.IOException) BlockPos(net.minecraft.util.math.BlockPos) ClientVolumeBoxes(buildcraft.core.marker.volume.ClientVolumeBoxes) IBlockState(net.minecraft.block.state.IBlockState) IControllable(buildcraft.api.tiles.IControllable) EntityLivingBase(net.minecraft.entity.EntityLivingBase) Lock(buildcraft.core.marker.volume.Lock) TileEntity(net.minecraft.tileentity.TileEntity) SnapshotBuilder(buildcraft.builders.snapshot.SnapshotBuilder) IItemTransactor(buildcraft.api.inventory.IItemTransactor) VolumeBox(buildcraft.core.marker.volume.VolumeBox) EnumAddonSlot(buildcraft.core.marker.volume.EnumAddonSlot) UUID(java.util.UUID)

Example 2 with AddonFillerPlanner

use of buildcraft.builders.addon.AddonFillerPlanner in project BuildCraft by BuildCraft.

the class TileFiller method onPlacedBy.

@Override
public void onPlacedBy(EntityLivingBase placer, ItemStack stack) {
    super.onPlacedBy(placer, stack);
    if (world.isRemote) {
        return;
    }
    IBlockState blockState = world.getBlockState(pos);
    WorldSavedDataVolumeBoxes volumeBoxes = WorldSavedDataVolumeBoxes.get(world);
    BlockPos offsetPos = pos.offset(blockState.getValue(BlockBCBase_Neptune.PROP_FACING).getOpposite());
    VolumeBox volumeBox = volumeBoxes.getVolumeBoxAt(offsetPos);
    TileEntity tile = world.getTileEntity(offsetPos);
    if (volumeBox != null) {
        addon = (AddonFillerPlanner) volumeBox.addons.values().stream().filter(AddonFillerPlanner.class::isInstance).findFirst().orElse(null);
        if (addon != null) {
            volumeBox.locks.add(new Lock(new Lock.Cause.CauseBlock(pos, blockState.getBlock()), new Lock.Target.TargetAddon(addon.getSlot()), new Lock.Target.TargetRemove(), new Lock.Target.TargetResize(), new Lock.Target.TargetUsedByMachine(Lock.Target.TargetUsedByMachine.EnumType.STRIPES_WRITE)));
            volumeBoxes.markDirty();
            addon.updateBuildingInfo();
            markerBox = false;
        } else {
            box.reset();
            box.setMin(volumeBox.box.min());
            box.setMax(volumeBox.box.max());
            volumeBox.locks.add(new Lock(new Lock.Cause.CauseBlock(pos, blockState.getBlock()), new Lock.Target.TargetRemove(), new Lock.Target.TargetResize(), new Lock.Target.TargetUsedByMachine(Lock.Target.TargetUsedByMachine.EnumType.STRIPES_WRITE)));
            volumeBoxes.markDirty();
            markerBox = false;
        }
    } else if (tile instanceof IAreaProvider) {
        IAreaProvider provider = (IAreaProvider) tile;
        box.reset();
        box.setMin(provider.min());
        box.setMax(provider.max());
        provider.removeFromWorld();
    }
    updateBuildingInfo();
    sendNetworkUpdate(NET_RENDER_DATA);
}
Also used : IBlockState(net.minecraft.block.state.IBlockState) VolumeBox(buildcraft.core.marker.volume.VolumeBox) AddonFillerPlanner(buildcraft.builders.addon.AddonFillerPlanner) WorldSavedDataVolumeBoxes(buildcraft.core.marker.volume.WorldSavedDataVolumeBoxes) Lock(buildcraft.core.marker.volume.Lock) TileEntity(net.minecraft.tileentity.TileEntity) IAreaProvider(buildcraft.api.core.IAreaProvider) BlockPos(net.minecraft.util.math.BlockPos)

Aggregations

IAreaProvider (buildcraft.api.core.IAreaProvider)2 AddonFillerPlanner (buildcraft.builders.addon.AddonFillerPlanner)2 Lock (buildcraft.core.marker.volume.Lock)2 VolumeBox (buildcraft.core.marker.volume.VolumeBox)2 WorldSavedDataVolumeBoxes (buildcraft.core.marker.volume.WorldSavedDataVolumeBoxes)2 EnumPipePart (buildcraft.api.core.EnumPipePart)1 IBox (buildcraft.api.core.IBox)1 IFillerPattern (buildcraft.api.filler.IFillerPattern)1 IItemTransactor (buildcraft.api.inventory.IItemTransactor)1 MjAPI (buildcraft.api.mj.MjAPI)1 MjBattery (buildcraft.api.mj.MjBattery)1 MjCapabilityHelper (buildcraft.api.mj.MjCapabilityHelper)1 IStatementParameter (buildcraft.api.statements.IStatementParameter)1 IFillerStatementContainer (buildcraft.api.statements.containers.IFillerStatementContainer)1 IControllable (buildcraft.api.tiles.IControllable)1 IDebuggable (buildcraft.api.tiles.IDebuggable)1 TilesAPI (buildcraft.api.tiles.TilesAPI)1 FillerType (buildcraft.builders.filler.FillerType)1 FillerUtil (buildcraft.builders.filler.FillerUtil)1 ITileForTemplateBuilder (buildcraft.builders.snapshot.ITileForTemplateBuilder)1