Untitled
unknown
plain_text
a year ago
9.3 kB
11
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