Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,22 @@
// 1.20.1 2024-04-19T18:54:51.676973276 Create: Numismatics/Registrate Provider for numismatics [Recipes, Advancements, Loot Tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)]
// 1.21.1 2025-08-11T14:40:38.617334 Registrate Provider for numismatics [Registries, Data Maps, Recipes, Advancements, Loot Tables, Tags (enchantments), Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), generic_server_provider, Blockstates, Item models, Lang (en_us/en_ud), generic_client_provider]
f7f43dd6d567ec8303c73b79409bc92d8b56574a assets/numismatics/blockstates/andesite_depositor.json
3961fdf3030140fc32e0e8c1d440ac395e62f5b6 assets/numismatics/blockstates/bank_terminal.json
06ecd28cd97f4e8200dc396858695cad57b871c8 assets/numismatics/blockstates/blaze_banker.json
160d556c6bfdb651082b39784258f6d06c21ca8f assets/numismatics/blockstates/brass_depositor.json
95ef415a564eba1d212053195d25b199427b94e3 assets/numismatics/blockstates/creative_vendor.json
d2b105f0657bad99b8efed45dc0a8df8ff775c10 assets/numismatics/blockstates/vendor.json
da2ea46b51689cb1062f072ab847b8e164a414e2 assets/numismatics/lang/en_ud.json
56639735048e12545395308eb903659b052b2d9e assets/numismatics/lang/en_us.json
265ef24d62bc7580e763e1fb6802bf4e58dc0194 assets/numismatics/models/block/andesite_depositor.json
4f78ca868db20495aa20be7c6a14e2678fb16f9f assets/numismatics/models/block/andesite_depositor_locked.json
411b79f79547a0adcb665bf7440e8169f7dcb24e assets/numismatics/models/block/brass_depositor.json
74a4c7ca7a48382782e5dba33018dfc8255192c5 assets/numismatics/models/block/brass_depositor_locked.json
2449b7346e1657ef1c6ab4c134aab55b216ec783 assets/numismatics/models/item/andesite_depositor.json
83ce6c9d27970b4c643f0f9f3dfeb58668fca3d4 assets/numismatics/models/item/banking_guide.json
228b67a48aa045bfe809c54c756df80eb0765aad assets/numismatics/models/item/bank_terminal.json
52b48750de8a5a571a08bce3f2f025474153d50b assets/numismatics/models/item/bevel.json
84ab8c91452f94501b3acc31ec1e0bc64417f839 assets/numismatics/models/item/black_card.json
>>>>>>> 646131b (Shopkeeper Integration):common/src/generated/resources/.cache/64c87e664647124a7b6450bc49fb722594ed5a16
70c481f36a9718ac48632e6939ac6ba785be4c9e assets/numismatics/models/item/black_id_card.json
95ef415a564eba1d212053195d25b199427b94e3 assets/numismatics/blockstates/creative_vendor.json
4458283178334ae169a7cbbd1aa09067cbb99ee7 data/numismatics/tags/items/internal/dyes/green_dyes.json
Expand Down Expand Up @@ -92,6 +110,27 @@ f7f43dd6d567ec8303c73b79409bc92d8b56574a assets/numismatics/blockstates/andesite
ce821bcccb920fd51237904e253fb29100882648 data/numismatics/tags/items/internal/dyes/brown_dyes.json
74a4c7ca7a48382782e5dba33018dfc8255192c5 assets/numismatics/models/block/brass_depositor_locked.json
95b492bd9230dc90fca9395c823cef39e644d8f2 assets/numismatics/models/item/sprocket.json
facbd710d107ebc9b2c6ddfa3b59a16d5f85c992 assets/numismatics/models/item/spur.json
8fd12493390894fa5b3988f499f758c17137af16 assets/numismatics/models/item/sun.json
6965cf99471bb8c63f5f8a94577e2cddc3b2bc33 assets/numismatics/models/item/vendor.json
c1863c2bd08a5910a534aee0dcbc61a352fb9577 assets/numismatics/models/item/white_card.json
a96d3d02794064cd9be1bca25a9ba6217675e6c5 assets/numismatics/models/item/white_id_card.json
9c20dd40c03605721d0231ffde829d55e36b1c05 assets/numismatics/models/item/yellow_card.json
c05836600bd1689f598515841869634b1d709cca assets/numismatics/models/item/yellow_id_card.json
b8a840be34886ce90bc6ebbd48ac70a40060ada1 data/create/tags/block/fan_transparent.json
b8a840be34886ce90bc6ebbd48ac70a40060ada1 data/create/tags/block/passive_boiler_heaters.json
a615f3af71b117b4f5974a64a1c744ff072fba54 data/c/tags/block/relocation_not_supported.json
0604bc1712ca30d404c0c27b4c1469f729fdefd6 data/minecraft/tags/block/mineable/axe.json
ce83b2be6bbae03794f249386337ee5110241e57 data/minecraft/tags/block/mineable/pickaxe.json
9e6e50d40e3688ae681107e60ac5ff5fc22585f9 data/numismatics/loot_table/blocks/andesite_depositor.json
dc5c60bbbaf3a5d7bc1f9bc0c9377757dbd8de49 data/numismatics/loot_table/blocks/bank_terminal.json
266d9b0eb6fdecc4bcf6da465078d059009a3b54 data/numismatics/loot_table/blocks/blaze_banker.json
d048d04208faa63f0014d614d6026a66fe118c11 data/numismatics/loot_table/blocks/brass_depositor.json
6cb764824a2190dab6219b7502ec77f14c1a90e0 data/numismatics/loot_table/blocks/creative_vendor.json
3c36bec4bc30ac2bd5f0e0c881d6505b5cce35fe data/numismatics/loot_table/blocks/vendor.json
5d9d50abdbf4922335b7b2d1242efffd46d0d237 data/numismatics/tags/item/cards.json
21c85af57203e0c9029479d7a0fa39be536924ce data/numismatics/tags/item/coins.json
f49059171fc7b0d64bf27fec6fbe7270ba5de7b3 data/numismatics/tags/item/id_cards.json
b3293e39ea5d4a1fdf65d014ec370b328ae36949 assets/numismatics/models/item/light_gray_id_card.json
fa326874015c5f24f6a65390c31f96324eecc96d assets/numismatics/models/item/blue_card.json
d36f0cc1a6b0873730d353bd84dda701d169265b data/numismatics/tags/items/internal/plates/iron_plates.json
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@
"block.numismatics.vendor.tooltip.trade_item": "ǝpɐɹ⟘ oʇ ɯǝʇI",
"command.numismatics.arguments.enum.invalid": "%s :ǝɹɐ sǝnןɐʌ pıןɐΛ ˙,%s, ǝnןɐʌ ɯnuǝ pıןɐʌuI :ɹoɹɹƎ",
"gui.numismatics.bank_terminal.balance": "¤%s '%s %s :ǝɔuɐןɐᗺ",
"gui.numismatics.checkout_screen.header": "ʇnoʞɔǝɥƆ",
"gui.numismatics.checkout_screen.pay_with_card": "pɹɐƆ ɥʇıʍ ʎɐԀ",
"gui.numismatics.checkout_screen.pay_with_coins": "suıoƆ ɥʇıʍ ʎɐԀ",
"gui.numismatics.checkout_screen.total": "¤%s '%s %s :ןɐʇo⟘ ɹǝpɹO",
"gui.numismatics.trust_list": "ʇsıꞀ ʇsnɹ⟘",
"gui.numismatics.vendor.count": ")x%s( ",
"gui.numismatics.vendor.full": "ןןnɟ sı ɹopuǝΛ",
Expand Down Expand Up @@ -106,5 +110,8 @@
"item.numismatics.yellow_id_card": "pɹɐƆ ᗡI ʍoןןǝʎ",
"itemGroup.numismatics": "sɔıʇɐɯsıɯnN :ǝʇɐǝɹƆ",
"numismatics.andesite_depositor.price": "ǝɔıɹԀ",
"numismatics.checkout.failure": "˙pǝbɹɐɥɔ uǝǝq ʇou ǝʌɐɥ noʎ ¡uoıʇɔɐsuɐɹʇ buıssǝɔoɹd ɹoɹɹƎ",
"numismatics.checkout.insufficient_funds": "¡spunɟ ʇuǝıɔıɟɟnsuI",
"numismatics.checkout.unauthorized": "pɹɐɔ ʇɐɥʇ ǝsn oʇ pǝzıɹoɥʇnɐ ʇou ǝɹ,noʎ",
"numismatics.trust_list.configure": "ʇsıꞀ ʇsnɹ⟘ ǝɹnbıɟuoƆ"
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@
"block.numismatics.vendor.tooltip.trade_item": "Item to Trade",
"command.numismatics.arguments.enum.invalid": "Error: Invalid enum value '%s'. Valid values are: %s",
"gui.numismatics.bank_terminal.balance": "Balance: %s %s, %s¤",
"gui.numismatics.checkout_screen.header": "Checkout",
"gui.numismatics.checkout_screen.pay_with_card": "Pay with Card",
"gui.numismatics.checkout_screen.pay_with_coins": "Pay with Coins",
"gui.numismatics.checkout_screen.total": "Order Total: %s %s, %s¤",
"gui.numismatics.trust_list": "Trust List",
"gui.numismatics.vendor.count": " (%sx)",
"gui.numismatics.vendor.full": "Vendor is full",
Expand Down Expand Up @@ -106,5 +110,8 @@
"item.numismatics.yellow_id_card": "Yellow ID Card",
"itemGroup.numismatics": "Create: Numismatics",
"numismatics.andesite_depositor.price": "Price",
"numismatics.checkout.failure": "Error processing transaction! You have not been charged.",
"numismatics.checkout.insufficient_funds": "Insufficient funds!",
"numismatics.checkout.unauthorized": "You're not authorized to use that card",
"numismatics.trust_list.configure": "Configure Trust List"
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import dev.ithundxr.createnumismatics.base.data.recipe.NumismaticsSequencedAssemblyRecipeGen;
import dev.ithundxr.createnumismatics.base.data.recipe.NumismaticsStandardRecipeGen;
import dev.ithundxr.createnumismatics.content.backend.GlobalBankManager;
import dev.ithundxr.createnumismatics.content.checkout.GlobalDeferredCheckoutOrderManager;
import dev.ithundxr.createnumismatics.multiloader.Loader;
import dev.ithundxr.createnumismatics.registry.NumismaticsAdvancements;
import dev.ithundxr.createnumismatics.registry.NumismaticsCommands;
Expand All @@ -38,6 +39,7 @@ public class Numismatics {
public static final String VERSION = findVersion();
public static final Logger LOGGER = LoggerFactory.getLogger(NAME);
public static final GlobalBankManager BANK = new GlobalBankManager();
public static final GlobalDeferredCheckoutOrderManager DEFERRED_ORDERS = new GlobalDeferredCheckoutOrderManager();

private static final CreateRegistrate REGISTRATE = CreateRegistrate.create(MOD_ID);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,4 +125,12 @@ public static Coin closest(int value) {
}
return closest;
}

public static final Coin[] byValueAscending = new Coin[] {
SPUR, BEVEL, SPROCKET, COG, CROWN, SUN
};

public static final Coin[] byValueDescending = new Coin[] {
SUN, CROWN, COG, SPROCKET, BEVEL, SPUR
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
package dev.ithundxr.createnumismatics.content.checkout;

import com.simibubi.create.foundation.gui.menu.MenuBase;
import dev.ithundxr.createnumismatics.content.bank.CardItem;
import dev.ithundxr.createnumismatics.content.bank.CardSlot;
import dev.ithundxr.createnumismatics.registry.NumismaticsTags;
import dev.ithundxr.createnumismatics.util.Utils;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.Container;
import net.minecraft.world.ContainerHelper;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.MenuType;
import net.minecraft.world.inventory.Slot;
import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.function.Consumer;
import java.util.function.Function;

public class CheckoutMenu extends MenuBase<DeferredCheckoutOrderMenuProvider> {
private CheckoutMenu.CardSwitchContainer cardSwitchContainer;
protected UUID currentCardUUID = Utils.emptyUUID;

public CheckoutMenu(MenuType<?> type, int id, Inventory inv, FriendlyByteBuf extraData) {
super(type, id, inv, extraData);
}

public CheckoutMenu(MenuType<?> type, int id, Inventory inv, DeferredCheckoutOrderMenuProvider contentHolder) {
super(type, id, inv, contentHolder);
}

@Override
protected DeferredCheckoutOrderMenuProvider createOnClient(FriendlyByteBuf extraData) {
return DeferredCheckoutOrderMenuProvider.clientSide(extraData);
}

@Override
protected void initAndReadInventory(DeferredCheckoutOrderMenuProvider contentHolder) {
}

@Override
protected void addSlots() {
if (cardSwitchContainer == null)
cardSwitchContainer = new CheckoutMenu.CardSwitchContainer(this::slotsChanged, (id) -> {
currentCardUUID = id;
return true;
});

addSlot(new CardSlot.BoundCardSlot(cardSwitchContainer, 0, 148, 73));
addPlayerSlots(40, 152);
}

@Override
protected void addPlayerSlots(int x, int y) {
for (int hotbarSlot = 0; hotbarSlot < 9; ++hotbarSlot) {
this.addSlot(new LockableSlot(playerInventory, hotbarSlot, x + hotbarSlot * 18, y + 58, hotbarSlot == playerInventory.selected));
}
for (int row = 0; row < 3; ++row) {
for (int col = 0; col < 9; ++col) {
int slot = col + row * 9 + 9;
this.addSlot(new LockableSlot(playerInventory, slot, x + col * 18, y + row * 18, slot == playerInventory.selected));
}
}
}

@Override
protected void saveData(DeferredCheckoutOrderMenuProvider contentHolder) {
}

@Override
public void removed(Player playerIn) {
super.removed(playerIn);
if (playerIn instanceof ServerPlayer) {
clearContainer(player, cardSwitchContainer);
}
}

@Override
public @NotNull ItemStack quickMoveStack(@NotNull Player player, int index) { // index is slot that was clicked
Slot clickedSlot = this.slots.get(index);

if (!clickedSlot.hasItem())
return ItemStack.EMPTY;

if (NumismaticsTags.AllItemTags.CARDS.matches(clickedSlot.getItem())) {
if (index == 0) // They've clicked the card in the slot
moveItemStackTo(clickedSlot.getItem(), 1, player.getInventory().getContainerSize() + 1, false);
else // They've clicked a card in their inventory
moveItemStackTo(clickedSlot.getItem(), 0, 1, false);
}

return ItemStack.EMPTY;
}

private class CardSwitchContainer implements Container {
private final Consumer<CheckoutMenu.CardSwitchContainer> slotsChangedCallback;
private final Function<UUID, Boolean> uuidChangedCallback; // should return success

@NotNull
protected final List<ItemStack> stacks = new ArrayList<>();

public CardSwitchContainer(Consumer<CheckoutMenu.CardSwitchContainer> slotsChangedCallback, Function<UUID, Boolean> uuidChangedCallback) {
this.slotsChangedCallback = slotsChangedCallback;
this.uuidChangedCallback = uuidChangedCallback;
stacks.add(ItemStack.EMPTY);
}

@Override
public int getContainerSize() {
return 1;
}

protected ItemStack getStack() {
return stacks.get(0);
}

@Override
public boolean isEmpty() {
return getStack().isEmpty();
}

@Override
public @NotNull ItemStack getItem(int slot) {
return getStack();
}

@Override
public @NotNull ItemStack removeItem(int slot, int amount) {
ItemStack stack = ContainerHelper.removeItem(this.stacks, 0, amount);
if (!stack.isEmpty()) {
this.slotsChangedCallback.accept(this);
}
return stack;
}

@Override
public @NotNull ItemStack removeItemNoUpdate(int slot) {
return ContainerHelper.takeItem(this.stacks, 0);
}

@Override
public void setItem(int slot, @NotNull ItemStack stack) {
this.stacks.set(0, stack);
if (CardItem.isBound(stack) && NumismaticsTags.AllItemTags.CARDS.matches(stack)) {
if (!this.uuidChangedCallback.apply(CardItem.get(stack))) {
// Non-existent account
stacks.set(0, CardItem.clear(stack));
CheckoutMenu.this.clearContainer(CheckoutMenu.this.player, this);
}
}
this.slotsChangedCallback.accept(this);
}

@Override
public void setChanged() {
}

@Override
public boolean stillValid(@NotNull Player player) {
return true;
}

@Override
public void clearContent() {
this.stacks.set(0, ItemStack.EMPTY);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package dev.ithundxr.createnumismatics.content.checkout;

public enum CheckoutPaymentMethod {
CANCEL_TRANSACTION,
CARD,
COINS;
}
Loading