use of logisticspipes.asm.ModDependentMethod in project LogisticsPipes by RS485.
the class LPMicroblockBlock method addDestroyEffects.
@Override
@SideOnly(Side.CLIENT)
@ModDependentMethod(modId = LPConstants.mcmpModID)
public boolean addDestroyEffects(World world, BlockPos pos, ParticleManager manager) {
Pair<Vec3d, Vec3d> vectors = RayTraceHelper.getRayTraceVectors(MCMultiPart.proxy.getPlayer());
RayTraceResult hit = collisionRayTrace(getDefaultState(), world, pos, vectors.getLeft(), vectors.getRight());
if (hit != null && hit.subHit >= 0) {
IPartInfo part = getTile(world, pos).get().get(MCMultiPart.slotRegistry.getValue(hit.subHit)).get();
if (!part.getPart().addDestroyEffects(part, manager)) {
IBlockState state = part.getPart().getActualState(part.getPartWorld(), pos, part);
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 4; ++j) {
for (int k = 0; k < 4; ++k) {
double xOff = (i + 0.5D) / 4.0D;
double yOff = (j + 0.5D) / 4.0D;
double zOff = (k + 0.5D) / 4.0D;
manager.addEffect(new ParticleDigging(world, pos.getX() + xOff, pos.getY() + yOff, pos.getZ() + zOff, xOff - 0.5D, yOff - 0.5D, zOff - 0.5D, state) {
}.setBlockPos(pos));
}
}
}
}
return true;
}
return false;
}
use of logisticspipes.asm.ModDependentMethod in project LogisticsPipes by RS485.
the class LPMicroblockBlock method onBlockClicked.
@Override
@ModDependentMethod(modId = LPConstants.mcmpModID)
public void onBlockClicked(World world, BlockPos pos, EntityPlayer player) {
Pair<Vec3d, Vec3d> vectors = RayTraceHelper.getRayTraceVectors(player);
RayTraceResult hit = collisionRayTrace(getDefaultState(), world, pos, vectors.getLeft(), vectors.getRight());
if (hit != null && hit.subHit >= 0) {
getTile(world, pos).map(t -> t.get(MCMultiPart.slotRegistry.getValue(hit.subHit)).get()).ifPresent(i -> i.getPart().onPartClicked(i, player, (RayTraceResult) hit.hitInfo));
}
}
use of logisticspipes.asm.ModDependentMethod in project LogisticsPipes by RS485.
the class LPMicroblockBlock method removedByPlayer.
@Override
@ModDependentMethod(modId = LPConstants.mcmpModID)
public boolean removedByPlayer(@Nonnull IBlockState state, World world, @Nonnull BlockPos pos, @Nonnull EntityPlayer player, boolean willHarvest) {
Pair<Vec3d, Vec3d> vectors = RayTraceHelper.getRayTraceVectors(player);
RayTraceResult hit = collisionRayTrace(state, world, pos, vectors.getLeft(), vectors.getRight());
Optional<TileMultipartContainer> tile = getTile(world, pos);
if (hit != null && tile.isPresent() && hit.subHit >= 0) {
if (!world.isRemote) {
IPartSlot slot = MCMultiPart.slotRegistry.getValue(hit.subHit);
boolean canRemove = tile.get().get(slot).map(i -> {
if (i.getPart().canPlayerDestroy(i, player)) {
i.getPart().onPartHarvested(i, player);
if (player == null || !player.capabilities.isCreativeMode) {
i.getPart().getDrops(i.getPartWorld(), pos, i, 0).forEach(s -> spawnAsEntity(world, pos, s));
}
return true;
} else {
return false;
}
}).orElse(true);
if (canRemove)
tile.get().removePart(slot);
}
}
if (hit != null && hit.subHit == -1) {
return super.removedByPlayer(state, world, pos, player, willHarvest);
}
return false;
}
Aggregations