Untitled

 avatar
unknown
plain_text
a year ago
9.3 kB
6
Indexable
import { world, Player } from "@minecraft/server";
import { ModalFormData, ActionFormData, MessageFormData } from "@minecraft/server-ui";

// Store example data for shops and incomes
const shopIncomes = {};
const marketplaceItems = [];

// Main menu form
export async function showMarketplaceInterface(player) {
    try {
        let mainMenuForm = new ActionFormData()
            .title("Market System")
            .body("Choose an option:")
            .button("Marketplace")
            .button("Sell Items")
            .button("Settings");

        let response = await mainMenuForm.show(player);
        if (response.selection === 0) {
            showMarketplaceForm(player);
        } else if (response.selection === 1) {
            showSellItemsForm(player);
        } else if (response.selection === 2) {
            showSettingsForm(player);
        }
    } catch (error) {
        console.error("Error showing marketplace interface:", error);
    }
}

// Marketplace form
async function showMarketplaceForm(player) {
    try {
        let marketForm = new ActionFormData()
            .title("Marketplace")
            .body("Available items:");

        marketplaceItems.forEach(item => {
            marketForm.button(`${item.name}\n${item.price} money`);
        });

        let response = await marketForm.show(player);
        if (response.selection !== undefined) {
            let selectedItem = marketplaceItems[response.selection];
            confirmPurchaseForm(player, selectedItem);
        }
    } catch (error) {
        console.error("Error showing marketplace form:", error);
    }
}

async function confirmPurchaseForm(player, item) {
    try {
        let purchaseForm = new MessageFormData()
            .title(item.name)
            .body(`Description: ${item.description}\nPrice: ${item.price} money\n\nDo you want to buy this item?`)
            .button1("Yes")
            .button2("No");

        let response = await purchaseForm.show(player);
        if (response.selection === 0) { // Check if "Yes" button was clicked
            let playerMoney = player.getScore("money");
            if (playerMoney >= item.price) {
                player.setScore("money", playerMoney - item.price);
                // Simulate giving item to player (adjust based on actual item handling)
                player.runCommand(`give @s ${item.id} 1`);
                player.sendMessage("Purchase successful!");
            } else {
                player.sendMessage("Not enough money!");
            }
        }
    } catch (error) {
        console.error("Error confirming purchase:", error);
    }
}

// Sell items form
async function showSellItemsForm(player) {
    try {
        let sellItemsForm = new ActionFormData()
            .title("Sell Items")
            .body("Choose an option:")
            .button("Create Shop")
            .button("Sell Items")
            .button("Edit Items")
            .button("See Income");

        let response = await sellItemsForm.show(player);
        if (response.selection === 0) {
            createShopForm(player);
        } else if (response.selection === 1) {
            listSellItemsForm(player);
        } else if (response.selection === 2) {
            editItemsForm(player);
        } else if (response.selection === 3) {
            seeIncomeForm(player);
        }
    } catch (error) {
        console.error("Error showing sell items form:", error);
    }
}

function createShopForm(player) {
    let shopId = Math.floor(100000 + Math.random() * 900000).toString(); // Generate random 6-digit shop ID
    player.sendMessage(`Your shop ID: ${shopId}`);
    // Store shop ID and initialize income
    shopIncomes[shopId] = 0;
}

async function listSellItemsForm(player) {
    try {
        // Get items from player's inventory
        let inventory = player.getComponent("minecraft:inventory").container;
        let items = [];

        for (let i = 0; i < inventory.size; i++) {
            let itemStack = inventory.getItem(i);
            if (itemStack) {
                items.push({
                    name: itemStack.nameTag || itemStack.id,
                    id: itemStack.id,
                    amount: itemStack.amount
                });
            }
        }

        let sellForm = new ActionFormData()
            .title("Sell Items")
            .body("Select an item to sell:");

        items.forEach(item => {
            sellForm.button(`${item.name} x${item.amount}`);
        });

        let response = await sellForm.show(player);
        if (response.selection !== undefined) {
            let selectedItem = items[response.selection];
            sellItemForm(player, selectedItem);
        }
    } catch (error) {
        console.error("Error listing sell items:", error);
    }
}

async function sellItemForm(player, item) {
    try {
        let sellItemForm = new ModalFormData()
            .title(`Sell ${item.name}`)
            .textField("Price per item:", "0")
            .textField("Number of items:", "1")
            .textField("Description:", "");

        let response = await sellItemForm.show(player);
        if (response.canceled) return;

        let price = parseInt(response.formValues[0]);
        let quantity = parseInt(response.formValues[1]);
        let description = response.formValues[2];

        if (quantity > item.amount) {
            player.sendMessage(`You don't have enough ${item.name} to sell.`);
            return;
        }

        // Deduct 20% listing fee
        let fee = Math.floor(price * quantity * 0.20);
        let playerMoney = player.getScore("money");
        player.setScore("money", playerMoney - fee);

        // Clear items from inventory
        player.runCommand(`clear @s ${item.id} ${quantity}`);

        // Add item to marketplace
        marketplaceItems.push({
            name: item.name,
            price: price,
            quantity: quantity,
            description: description
        });

        player.sendMessage(`${quantity} x ${item.name} listed for ${price} money each. Listing fee: ${fee}`);
    } catch (error) {
        console.error("Error selling item:", error);
    }
}

function editItemsForm(player) {
    // Implementation for editing items
}

async function seeIncomeForm(player) {
    try {
        let incomeForm = new ModalFormData()
            .title("See Income")
            .textField("Enter your shop ID:", "");

        let response = await incomeForm.show(player);
        if (response.canceled) return;

        let shopId = response.formValues[0];

        // Fetch and display income
        let income = getIncome(shopId);

        if (income !== null) {
            player.sendMessage(`Total income for shop ${shopId}: ${income} money`);
        } else {
            player.sendMessage("Invalid shop ID or no income available.");
        }
    } catch (error) {
        console.error("Error seeing income:", error);
    }
}

function getIncome(shopId) {
    return shopIncomes[shopId] || null;
}

// Settings form
async function showSettingsForm(player) {
    try {
        let settingsForm = new ActionFormData()
            .title("Settings")
            .body("Choose an option:")
            .button("Delete Shop")
            .button("See Income");

        let response = await settingsForm.show(player);
        if (response.selection === 0) {
            deleteShopForm(player);
        } else if (response.selection === 1) {
            seeOverallIncomeForm(player);
        }
    } catch (error) {
        console.error("Error showing settings form:", error);
    }
}

async function deleteShopForm(player) {
    try {
        let deleteForm = new ModalFormData()
            .title("Delete Shop")
            .textField("Enter your shop ID:", "");

        let response = await deleteForm.show(player);
        if (response.canceled) return;

        let shopId = response.formValues[0];
        if (shopIncomes[shopId] !== undefined) {
            delete shopIncomes[shopId];
            player.sendMessage(`Shop ${shopId} deleted successfully.`);
        } else {
            player.sendMessage("Invalid shop ID.");
        }
    } catch (error) {
        console.error("Error deleting shop:", error);
    }
}

async function seeOverallIncomeForm(player) {
    try {
        let incomeForm = new ModalFormData()
            .title("See Income")
            .textField("Enter your shop ID:", "");

        let response = await incomeForm.show(player);
        if (response.canceled) return;

        let shopId = response.formValues[0];

        // Fetch and display income
        let income = getIncome(shopId);

        if (income !== null) {
            player.sendMessage(`Total income for shop ${shopId}: ${income} money`);
        } else {
            player.sendMessage("Invalid shop ID or no income available.");
        }
    } catch (error) {
        console.error("Error seeing overall income:", error);
    }
}
Editor is loading...
Leave a Comment