Skip to content

Commit

Permalink
bank menu card slot switches account
Browse files Browse the repository at this point in the history
  • Loading branch information
techno-sam committed Apr 7, 2024
1 parent 8f88704 commit e7fb7a6
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 17 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package dev.ithundxr.createnumismatics.content.bank;

import com.simibubi.create.foundation.gui.menu.MenuBase;
import dev.ithundxr.createnumismatics.Numismatics;
import dev.ithundxr.createnumismatics.content.backend.BankAccount;
import dev.ithundxr.createnumismatics.content.backend.Coin;
import dev.ithundxr.createnumismatics.content.coins.CoinItem;
import dev.ithundxr.createnumismatics.content.coins.SlotInputMergingCoinBag;
import dev.ithundxr.createnumismatics.content.coins.SlotOutputMergingCoinBag;
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;
Expand All @@ -32,7 +34,7 @@ public class BankMenu extends MenuBase<BankAccount> {
public static final int PLAYER_HOTBAR_END_INDEX = PLAYER_INV_START_INDEX + 9;
public static final int PLAYER_INV_END_INDEX = PLAYER_INV_START_INDEX + 36;
protected ContainerData dataAccess;
private CardWritingContainer cardWritingContainer;
private CardSwitchContainer cardSwitchContainer;
public BankMenu(MenuType<?> type, int id, Inventory inv, FriendlyByteBuf extraData) {
super(type, id, inv, extraData);
}
Expand All @@ -56,8 +58,8 @@ protected void initAndReadInventory(BankAccount contentHolder) {}

@Override
protected void addSlots() {
if (cardWritingContainer == null)
cardWritingContainer = new CardWritingContainer(this::slotsChanged, contentHolder.id);
if (cardSwitchContainer == null)
cardSwitchContainer = new CardSwitchContainer(this::slotsChanged, this::switchTo);
int x = 13;
int y = 71;

Expand All @@ -68,19 +70,28 @@ protected void addSlots() {

addSlot(new SlotInputMergingCoinBag(contentHolder.linkedCoinBag, null, 159, y));

addSlot(new CardSlot.UnboundCardSlot(cardWritingContainer, 0, 8, 109));
addSlot(new CardSlot.BoundCardSlot(cardSwitchContainer, 0, 8, 109));

addPlayerSlots(40, 152);
}

private void switchTo(UUID otherAccount) {
if (player instanceof ServerPlayer serverPlayer) {
BankAccount account = Numismatics.BANK.getAccount(otherAccount);
if (account != null && account.isAuthorized(serverPlayer)) {
Utils.openScreen(serverPlayer, account, account::sendToMenu);
}
}
}

@Override
protected void saveData(BankAccount contentHolder) {}

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

Expand Down Expand Up @@ -120,16 +131,16 @@ public void removed(Player playerIn) {
return returnStack;
}

public static class CardWritingContainer implements Container {
private final Consumer<CardWritingContainer> slotsChangedCallback;
private final UUID uuid;
private static class CardSwitchContainer implements Container {
private final Consumer<CardSwitchContainer> slotsChangedCallback;
private final Consumer<UUID> uuidChangedCallback;

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

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

Expand Down Expand Up @@ -169,15 +180,13 @@ public boolean isEmpty() {
@Override
public void setItem(int slot, @NotNull ItemStack stack) {
this.stacks.set(0, stack);
if (!CardItem.isBound(stack) && NumismaticsTags.AllItemTags.CARDS.matches(stack))
CardItem.set(stack, uuid);
if (CardItem.isBound(stack) && NumismaticsTags.AllItemTags.CARDS.matches(stack))
this.uuidChangedCallback.accept(CardItem.get(stack));
this.slotsChangedCallback.accept(this);
}

@Override
public void setChanged() {

}
public void setChanged() {}

@Override
public boolean stillValid(@NotNull Player player) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package dev.ithundxr.createnumismatics.content.bank.blaze_banker;

import com.simibubi.create.foundation.gui.menu.MenuBase;
import dev.ithundxr.createnumismatics.content.bank.BankMenu;
import dev.ithundxr.createnumismatics.content.bank.BankMenu.CardWritingContainer;
import dev.ithundxr.createnumismatics.content.bank.CardItem;
import dev.ithundxr.createnumismatics.content.bank.CardSlot;
import dev.ithundxr.createnumismatics.content.bank.IDCardItem;
import dev.ithundxr.createnumismatics.content.bank.IDCardSlot.BoundIDCardSlot;
Expand All @@ -12,6 +11,8 @@
import net.minecraft.client.multiplayer.ClientLevel;
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;
Expand All @@ -20,6 +21,11 @@
import net.minecraft.world.level.block.entity.BlockEntity;
import org.jetbrains.annotations.NotNull;

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

public class BlazeBankerMenu extends MenuBase<BlazeBankerBlockEntity> {
public static final int ID_CARD_SLOTS = 27;
public static final int CARD_SLOT_INDEX = ID_CARD_SLOTS;
Expand Down Expand Up @@ -176,4 +182,74 @@ protected boolean moveItemStackTo(ItemStack stack, int startIndex, int endIndex,
}
return bl;
}

private static class CardWritingContainer implements Container {
private final Consumer<CardWritingContainer> slotsChangedCallback;
private final UUID uuid;

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

public CardWritingContainer(Consumer<CardWritingContainer> slotsChangedCallback, UUID uuid) {
this.slotsChangedCallback = slotsChangedCallback;
this.uuid = uuid;
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))
CardItem.set(stack, uuid);
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);
}
}
}

0 comments on commit e7fb7a6

Please sign in to comment.