use of buildcraft.core.marker.volume.Lock in project BuildCraft by BuildCraft.
the class TileArchitectTable method onPlacedBy.
@Override
public void onPlacedBy(EntityLivingBase placer, ItemStack stack) {
super.onPlacedBy(placer, stack);
if (placer.world.isRemote) {
return;
}
WorldSavedDataVolumeBoxes volumeBoxes = WorldSavedDataVolumeBoxes.get(world);
IBlockState blockState = world.getBlockState(pos);
BlockPos offsetPos = pos.offset(blockState.getValue(BlockArchitectTable.PROP_FACING).getOpposite());
VolumeBox volumeBox = volumeBoxes.getVolumeBoxAt(offsetPos);
TileEntity tile = world.getTileEntity(offsetPos);
if (volumeBox != null) {
box.reset();
box.setMin(volumeBox.box.min());
box.setMax(volumeBox.box.max());
isValid = true;
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_READ)));
volumeBoxes.markDirty();
sendNetworkUpdate(NET_BOX);
} else if (tile instanceof IAreaProvider) {
IAreaProvider provider = (IAreaProvider) tile;
box.reset();
box.setMin(provider.min());
box.setMax(provider.max());
markerBox = true;
isValid = true;
provider.removeFromWorld();
} else {
isValid = false;
IBlockState state = world.getBlockState(pos);
state = state.withProperty(BlockArchitectTable.PROP_VALID, Boolean.FALSE);
world.setBlockState(pos, state);
}
}
use of buildcraft.core.marker.volume.Lock 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);
}
Aggregations