Java Code Examples for com.nukkitx.nbt.CompoundTagBuilder#tag()

The following examples show how to use com.nukkitx.nbt.CompoundTagBuilder#tag() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: FlowerPotBlockEntityTranslator.java    From Geyser with MIT License 6 votes vote down vote up
/**
 * Get the Nukkit CompoundTag of the flower pot.
 * @param blockState Java BlockState of flower pot.
 * @param position Bedrock position of flower pot.
 * @return Bedrock tag of flower pot.
 */
public static CompoundTag getTag(BlockState blockState, Vector3i position) {
    CompoundTagBuilder tagBuilder = CompoundTagBuilder.builder()
            .intTag("x", position.getX())
            .intTag("y", position.getY())
            .intTag("z", position.getZ())
            .byteTag("isMovable", (byte) 1)
            .stringTag("id", "FlowerPot");
    // Get the Java name of the plant inside. e.g. minecraft:oak_sapling
    String name = BlockStateValues.getFlowerPotValues().get(blockState.getId());
    if (name != null) {
        // Get the Bedrock CompoundTag of the block.
        // This is where we need to store the *Java* name because Bedrock has six minecraft:sapling blocks with different block states.
        CompoundTag plant = BlockStateValues.getFlowerPotBlocks().get(name);
        if (plant != null) {
            tagBuilder.tag(plant.toBuilder().build("PlantBlock"));
        }
    }
    return tagBuilder.buildRootTag();
}
 
Example 2
Source File: BannerTranslator.java    From Geyser with MIT License 6 votes vote down vote up
@Override
public ItemData translateToBedrock(ItemStack itemStack, ItemEntry itemEntry) {
    if (itemStack.getNbt() == null) return super.translateToBedrock(itemStack, itemEntry);

    ItemData itemData = super.translateToBedrock(itemStack, itemEntry);

    CompoundTag blockEntityTag = itemStack.getNbt().get("BlockEntityTag");
    if (blockEntityTag.contains("Patterns")) {
        ListTag patterns = blockEntityTag.get("Patterns");

        CompoundTagBuilder builder = itemData.getTag().toBuilder();
        builder.tag(convertBannerPattern(patterns));

        itemData = ItemData.of(itemData.getId(), itemData.getDamage(), itemData.getCount(), builder.buildRootTag());
    }

    return itemData;
}
 
Example 3
Source File: ItemFrameEntity.java    From Geyser with MIT License 5 votes vote down vote up
public ItemFrameEntity(long entityId, long geyserId, EntityType entityType, Vector3f position, Vector3f motion, Vector3f rotation, HangingDirection direction) {
    super(entityId, geyserId, entityType, position, motion, rotation);
    CompoundTagBuilder builder = CompoundTag.builder();
    builder.tag(CompoundTag.builder()
            .stringTag("name", "minecraft:frame")
            .intTag("version", BlockTranslator.getBlockStateVersion())
            .tag(CompoundTag.builder()
                    .intTag("facing_direction", direction.ordinal())
                    .byteTag("item_frame_map_bit", (byte) 0)
                    .build("states"))
            .build("block"));
    builder.shortTag("id", (short) 199);
    bedrockRuntimeId = BlockTranslator.getItemFrame(builder.buildRootTag());
    bedrockPosition = Vector3i.from(position.getFloorX(), position.getFloorY(), position.getFloorZ());
}
 
Example 4
Source File: CampfireBlockEntityTranslator.java    From Geyser with MIT License 5 votes vote down vote up
@Override
public com.nukkitx.nbt.tag.CompoundTag getDefaultBedrockTag(String bedrockId, int x, int y, int z) {
    CompoundTagBuilder tagBuilder = getConstantBedrockTag(bedrockId, x, y, z).toBuilder();
    tagBuilder.tag(new com.nukkitx.nbt.tag.CompoundTag("Item1", new HashMap<>()));
    tagBuilder.tag(new com.nukkitx.nbt.tag.CompoundTag("Item2", new HashMap<>()));
    tagBuilder.tag(new com.nukkitx.nbt.tag.CompoundTag("Item3", new HashMap<>()));
    tagBuilder.tag(new com.nukkitx.nbt.tag.CompoundTag("Item4", new HashMap<>()));
    return tagBuilder.buildRootTag();
}
 
Example 5
Source File: JavaTradeListTranslator.java    From Geyser with MIT License 5 votes vote down vote up
private CompoundTag getItemTag(GeyserSession session, ItemStack stack, String name, int specialPrice) {
    ItemData itemData = ItemTranslator.translateToBedrock(session, stack);
    ItemEntry itemEntry = ItemRegistry.getItem(stack);
    CompoundTagBuilder builder = CompoundTagBuilder.builder();
    builder.byteTag("Count", (byte) (Math.max(itemData.getCount() + specialPrice, 1)));
    builder.shortTag("Damage", itemData.getDamage());
    builder.shortTag("id", (short) itemEntry.getBedrockId());
    if (itemData.getTag() != null) {
        CompoundTag tag = itemData.getTag().toBuilder().build("tag");
        builder.tag(tag);
    }
    return builder.build(name);
}
 
Example 6
Source File: InventoryUtils.java    From Geyser with MIT License 5 votes vote down vote up
/**
 * Returns a barrier block with custom name and lore to explain why
 * part of the inventory is unusable.
 */
public static ItemData createUnusableSpaceBlock(String description) {
    CompoundTagBuilder root = CompoundTagBuilder.builder();
    CompoundTagBuilder display = CompoundTagBuilder.builder();

    display.stringTag("Name", ChatColor.RESET + "Unusable inventory space");
    display.listTag("Lore", StringTag.class, Collections.singletonList(new StringTag("", ChatColor.RESET + ChatColor.DARK_PURPLE + description)));

    root.tag(display.build("display"));
    return ItemData.of(ItemRegistry.ITEM_ENTRIES.get(ItemRegistry.BARRIER_INDEX).getBedrockId(), (short) 0, 1, root.buildRootTag());
}
 
Example 7
Source File: JavaTradeListTranslator.java    From Geyser with MIT License 4 votes vote down vote up
@Override
public void translate(ServerTradeListPacket packet, GeyserSession session) {
    Entity villager = session.getPlayerEntity();
    session.setVillagerTrades(packet.getTrades());
    villager.getMetadata().put(EntityData.TRADE_TIER, packet.getVillagerLevel() - 1);
    villager.getMetadata().put(EntityData.MAX_TRADE_TIER, 4);
    villager.getMetadata().put(EntityData.TRADE_XP, packet.getExperience());
    villager.updateBedrockMetadata(session);

    UpdateTradePacket updateTradePacket = new UpdateTradePacket();
    updateTradePacket.setTradeTier(packet.getVillagerLevel() - 1);
    updateTradePacket.setWindowId((short) packet.getWindowId());
    updateTradePacket.setWindowType((short) ContainerType.TRADING.id());
    String displayName;
    Entity realVillager = session.getEntityCache().getEntityByGeyserId(session.getLastInteractedVillagerEid());
    if (realVillager != null && realVillager.getMetadata().containsKey(EntityData.NAMETAG) && realVillager.getMetadata().getString(EntityData.NAMETAG) != null) {
        displayName = realVillager.getMetadata().getString(EntityData.NAMETAG);
    } else {
        displayName = packet.isRegularVillager() ? "Villager" : "Wandering Trader";
    }
    updateTradePacket.setDisplayName(displayName);
    updateTradePacket.setUnknownInt(0);
    updateTradePacket.setScreen2(true);
    updateTradePacket.setWilling(true);
    updateTradePacket.setPlayerUniqueEntityId(session.getPlayerEntity().getGeyserId());
    updateTradePacket.setTraderUniqueEntityId(session.getPlayerEntity().getGeyserId());
    CompoundTagBuilder builder = CompoundTagBuilder.builder();
    List<CompoundTag> tags = new ArrayList<>();
    for (VillagerTrade trade : packet.getTrades()) {
        CompoundTagBuilder recipe = CompoundTagBuilder.builder();
        recipe.intTag("maxUses", trade.getMaxUses());
        recipe.intTag("traderExp", trade.getXp());
        recipe.floatTag("priceMultiplierA", trade.getPriceMultiplier());
        recipe.tag(getItemTag(session, trade.getOutput(), "sell", 0));
        recipe.floatTag("priceMultiplierB", 0.0f);
        recipe.intTag("buyCountB", trade.getSecondInput() != null ? trade.getSecondInput().getAmount() : 0);
        recipe.intTag("buyCountA", trade.getFirstInput().getAmount());
        recipe.intTag("demand", trade.getDemand());
        recipe.intTag("tier", packet.getVillagerLevel() - 1);
        recipe.tag(getItemTag(session, trade.getFirstInput(), "buyA", trade.getSpecialPrice()));
        if (trade.getSecondInput() != null) {
            recipe.tag(getItemTag(session, trade.getSecondInput(), "buyB", 0));
        }
        recipe.intTag("uses", trade.getNumUses());
        recipe.byteTag("rewardExp", (byte) 1);
        tags.add(recipe.buildRootTag());
    }

    //Hidden trade to fix visual experience bug
    if (packet.isRegularVillager() && packet.getVillagerLevel() < 5) {
        tags.add(CompoundTagBuilder.builder()
                .intTag("maxUses", 0)
                .intTag("traderExp", 0)
                .floatTag("priceMultiplierA", 0.0f)
                .floatTag("priceMultiplierB", 0.0f)
                .intTag("buyCountB", 0)
                .intTag("buyCountA", 0)
                .intTag("demand", 0)
                .intTag("tier", 5)
                .intTag("uses", 0)
                .byteTag("rewardExp", (byte) 0)
                .buildRootTag());
    }

    builder.listTag("Recipes", CompoundTag.class, tags);
    List<CompoundTag> expTags = new ArrayList<>();
    expTags.add(CompoundTagBuilder.builder().intTag("0", 0).buildRootTag());
    expTags.add(CompoundTagBuilder.builder().intTag("1", 10).buildRootTag());
    expTags.add(CompoundTagBuilder.builder().intTag("2", 70).buildRootTag());
    expTags.add(CompoundTagBuilder.builder().intTag("3", 150).buildRootTag());
    expTags.add(CompoundTagBuilder.builder().intTag("4", 250).buildRootTag());
    builder.listTag("TierExpRequirements", CompoundTag.class, expTags);
    updateTradePacket.setOffers(builder.buildRootTag());
    session.sendUpstreamPacket(updateTradePacket);
}