Files
TiedUp-/src/main/java/com/tiedup/remake/entities/MerchantTrade.java
NotEvil f6466360b6 Clean repo for open source release
Remove build artifacts, dev tool configs, unused dependencies,
and third-party source dumps. Add proper README, update .gitignore,
clean up Makefile.
2026-04-12 00:51:22 +02:00

138 lines
3.7 KiB
Java

package com.tiedup.remake.entities;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
/**
* Represents a single trade offer from a Kidnapper Merchant.
*
* Price is in gold ingots and/or gold nuggets.
* Example: 3x Gold Ingot + 5x Gold Nugget for 1x Ropes
*/
public class MerchantTrade {
private final ItemStack item;
private final int ingotPrice;
private final int nuggetPrice;
public MerchantTrade(ItemStack item, int ingotPrice, int nuggetPrice) {
this.item = item.copy();
this.ingotPrice = Math.max(0, ingotPrice);
this.nuggetPrice = Math.max(0, nuggetPrice);
}
/**
* Check if the player can afford this trade with the given stacks.
*
* @param ingots Stack of gold ingots (or empty)
* @param nuggets Stack of gold nuggets (or empty)
* @return true if player has enough gold
*/
public boolean canAfford(ItemStack ingots, ItemStack nuggets) {
int ingotCount = ingots.is(Items.GOLD_INGOT) ? ingots.getCount() : 0;
int nuggetCount = nuggets.is(Items.GOLD_NUGGET)
? nuggets.getCount()
: 0;
return ingotCount >= ingotPrice && nuggetCount >= nuggetPrice;
}
/**
* Consume the payment from the given stacks.
* MUST call canAfford() before this!
*
* @param ingots Stack of gold ingots
* @param nuggets Stack of gold nuggets
*/
public void consumePayment(ItemStack ingots, ItemStack nuggets) {
if (ingots.is(Items.GOLD_INGOT)) {
ingots.shrink(ingotPrice);
}
if (nuggets.is(Items.GOLD_NUGGET)) {
nuggets.shrink(nuggetPrice);
}
}
/**
* Get the item being sold.
* @return Copy of the item stack
*/
public ItemStack getItem() {
return item.copy();
}
/**
* Get display name of the item.
*/
public Component getItemName() {
return item.getHoverName();
}
/**
* Get ingot price.
*/
public int getIngotPrice() {
return ingotPrice;
}
/**
* Get nugget price.
*/
public int getNuggetPrice() {
return nuggetPrice;
}
/**
* Get formatted price display.
* Examples:
* - "5 gold + 12 nuggets"
* - "3 gold"
* - "8 nuggets"
*/
public Component getPriceDisplay() {
if (ingotPrice > 0 && nuggetPrice > 0) {
return Component.literal(
ingotPrice + " gold + " + nuggetPrice + " nuggets"
);
} else if (ingotPrice > 0) {
return Component.literal(ingotPrice + " gold");
} else if (nuggetPrice > 0) {
return Component.literal(nuggetPrice + " nuggets");
} else {
return Component.literal("Free");
}
}
/**
* Save this trade to NBT.
*/
public CompoundTag save() {
CompoundTag tag = new CompoundTag();
tag.put("Item", item.save(new CompoundTag()));
tag.putInt("IngotPrice", ingotPrice);
tag.putInt("NuggetPrice", nuggetPrice);
return tag;
}
/**
* Load a trade from NBT.
*/
public static MerchantTrade load(CompoundTag tag) {
ItemStack item = ItemStack.of(tag.getCompound("Item"));
int ingotPrice = tag.getInt("IngotPrice");
int nuggetPrice = tag.getInt("NuggetPrice");
return new MerchantTrade(item, ingotPrice, nuggetPrice);
}
@Override
public String toString() {
return (
item.getHoverName().getString() +
" for " +
getPriceDisplay().getString()
);
}
}