use of net.sistr.littlemaidrebirth.entity.iff.HasIFF in project LittleMaidReBirth-Fabric by SistrScarlet.
the class OpenIFFScreenPacket method openIFFScreen.
@Environment(EnvType.CLIENT)
private static void openIFFScreen(int id, CompoundTag tag, PlayerEntity player) {
Entity entity = player.world.getEntityById(id);
if (!(entity instanceof HasIFF)) {
return;
}
ListTag list = tag.getList("IFFs", 10);
List<IFF> iffs = list.stream().map(t -> (CompoundTag) t).map(t -> IFFTypeManager.getINSTANCE().loadIFF(t)).filter(Optional::isPresent).map(Optional::get).collect(Collectors.toList());
MinecraftClient.getInstance().openScreen(new IFFScreen(entity, iffs));
}
use of net.sistr.littlemaidrebirth.entity.iff.HasIFF in project LittleMaidReBirth-Fabric by SistrScarlet.
the class SyncIFFPacket method applyIFFServer.
private static void applyIFFServer(int id, CompoundTag tag, PlayerEntity player) {
Entity entity = player.world.getEntityById(id);
if (!(entity instanceof HasIFF)) {
return;
}
if (entity instanceof TameableEntity && !player.getUuid().equals(((TameableEntity) entity).getOwnerUuid())) {
return;
}
ListTag list = tag.getList("IFFs", 10);
List<IFF> iffs = list.stream().map(t -> (CompoundTag) t).map(t -> IFFTypeManager.getINSTANCE().loadIFF(t)).filter(Optional::isPresent).map(Optional::get).collect(Collectors.toList());
((HasIFF) entity).setIFFs(iffs);
}
use of net.sistr.littlemaidrebirth.entity.iff.HasIFF in project LittleMaidReBirth-Fabric by SistrScarlet.
the class OpenIFFScreenPacket method sendC2SPacket.
public static void sendC2SPacket(Entity entity) {
if (!(entity instanceof HasIFF)) {
return;
}
PacketByteBuf buf = new PacketByteBuf(Unpooled.buffer());
buf.writeVarInt(entity.getEntityId());
ClientPlayNetworking.send(ID, buf);
}
use of net.sistr.littlemaidrebirth.entity.iff.HasIFF in project LittleMaidReBirth-Fabric by SistrScarlet.
the class OpenIFFScreenPacket method openIFFScreen.
private static void openIFFScreen(int id, PlayerEntity player) {
Entity entity = player.world.getEntityById(id);
if (!(entity instanceof HasIFF) || (entity instanceof TameableEntity && !player.getUuid().equals(((TameableEntity) entity).getOwnerUuid()))) {
return;
}
sendS2CPacket(entity, ((HasIFF) entity).getIFFs(), player);
}
use of net.sistr.littlemaidrebirth.entity.iff.HasIFF in project LittleMaidReBirth-Fabric by SistrScarlet.
the class IFFCopyBookItem method use.
@Override
public TypedActionResult<ItemStack> use(World world, PlayerEntity user, Hand hand) {
if (world.isClient) {
return super.use(world, user, hand);
}
ItemStack stack = user.getStackInHand(hand);
Vec3d start = user.getCameraPosVec(1F);
Vec3d end = start.add(user.getRotationVector().multiply(4D));
BlockHitResult bResult = world.raycast(new RaycastContext(start, end, RaycastContext.ShapeType.COLLIDER, RaycastContext.FluidHandling.NONE, user));
if (bResult.getType() != HitResult.Type.MISS) {
end = bResult.getPos();
}
Box box = new Box(start, end).expand(1);
EntityHitResult eResult = ProjectileUtil.getEntityCollision(world, user, start, end, box, entity -> entity instanceof HasIFF);
if (eResult == null || eResult.getType() == HitResult.Type.MISS)
return super.use(world, user, hand);
Entity target = eResult.getEntity();
if (user.isSneaking()) {
ListTag list = new ListTag();
((HasIFF) target).getIFFs().forEach(iff -> list.add(iff.writeTag()));
CompoundTag tag = stack.getOrCreateTag();
tag.put("IFFs", list);
user.sendMessage(new TranslatableText("item.littlemaidrebirth.iff_copy_book.message_written"), true);
} else {
CompoundTag tag = stack.getOrCreateTag();
if (!tag.contains("IFFs")) {
return super.use(world, user, hand);
}
ListTag list = tag.getList("IFFs", 10);
((HasIFF) target).setIFFs(list.stream().map(t -> (CompoundTag) t).map(t -> IFFTypeManager.getINSTANCE().loadIFF(t)).filter(Optional::isPresent).map(Optional::get).collect(Collectors.toList()));
user.sendMessage(new TranslatableText("item.littlemaidrebirth.iff_copy_book.message_apply"), true);
}
user.world.playSound(null, user.getX(), user.getY(), user.getZ(), SoundEvents.BLOCK_NOTE_BLOCK_PLING, SoundCategory.PLAYERS, 1F, 1F);
return TypedActionResult.success(stack);
}
Aggregations