Skip to content

Commit

Permalink
fabric fluid salepoint implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
techno-sam committed Aug 5, 2024
1 parent 4480adc commit 8ff160c
Show file tree
Hide file tree
Showing 47 changed files with 2,333 additions and 24 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// 1.20.1 2024-08-04T19:37:15.035886867 Create: Numismatics/Numismatics' Advancements
// 1.20.1 2024-08-05T17:31:05.743168034 Create: Numismatics/Numismatics' Advancements
4ab84595dc44460d6d89ff3608940dd8694b93d6 data/numismatics/advancements/is_this_legal.json
645c92e6e449889ed4cf617432fd6fa87ffe355b data/numismatics/advancements/questionable_investment.json
8f32fb49ef81058e2e660fac983dbef2f554db38 data/numismatics/advancements/root.json
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// 1.20.1 2024-08-04T19:37:15.034619492 Create: Numismatics/Numismatics Standard Recipes
// 1.20.1 2024-08-05T17:31:05.737487381 Create: Numismatics/Numismatics Standard Recipes
0e1680b878cfa51c04809504b3542cb6312027a1 data/numismatics/recipes/crafting/gray_id_card.json
61954216f844eecdbee266da7e517a983993d2f8 data/numismatics/advancements/recipes/misc/crafting/brown_card.json
2c732f9c3bc02a29a4d86a0552f4dbbae986a34a data/numismatics/recipes/crafting/blue_authorized_card.json
Expand Down Expand Up @@ -26,8 +26,8 @@ ce32a3a7c2a5564e84b30bb1b71007ca4adc985d data/numismatics/recipes/crafting/lime_
501f27ee03faeb675a05b63b0c8058f1473f02d5 data/numismatics/advancements/recipes/misc/crafting/purple_id_card.json
8d863132d01d516db98d228e9038425923b7354d data/numismatics/recipes/crafting/black_card.json
78af0a7f17e04133eae7172df3255aaa34034537 data/numismatics/advancements/recipes/misc/crafting/red_id_card.json
86ccf10cd1549f633f99674b002c543bd46aefd0 data/numismatics/recipes/crafting/yellow_card.json
e16d9a5134c226db94bb389c44e55a8b393ca6c4 data/numismatics/recipes/crafting/brass_depositor.json
86ccf10cd1549f633f99674b002c543bd46aefd0 data/numismatics/recipes/crafting/yellow_card.json
1d0c5ff8b555ba922b0699a93dceb4cb9d49c4f9 data/numismatics/advancements/recipes/misc/crafting/lime_card.json
3cfbeee014050f945e5fa2299dbbcfbf120bf29a data/numismatics/recipes/crafting/red_authorized_card.json
6d90141ba018612413149776136ccb11b26add7c data/numismatics/advancements/recipes/misc/crafting/light_gray_authorized_card.json
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
// 1.20.1 2024-08-04T19:37:15.031552342 Create: Numismatics/Numismatics EMI excluded tags
// 1.20.1 2024-08-05T17:31:05.725976583 Create: Numismatics/Numismatics EMI excluded tags
b57edab6f7e7a6e1b1211daa4c3b217ffd09ce62 assets/emi/tag/exclusions/numismatics.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
// 1.20.1 2024-08-04T19:37:15.035644417 Create: Numismatics/Numismatics' Sequenced Assembly Recipes
// 1.20.1 2024-08-05T17:31:05.741816291 Create: Numismatics/Numismatics' Sequenced Assembly Recipes
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// 1.20.1 2024-08-04T19:37:15.03270554 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.20.1 2024-08-05T17:31:05.729416827 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)]
2f1dad2a2e0086d54cf4b88378feacc04341d87f data/numismatics/tags/items/internal/ingots/iron_ingots.json
dc5c60bbbaf3a5d7bc1f9bc0c9377757dbd8de49 data/numismatics/loot_tables/blocks/bank_terminal.json
5b0244502972f49d063d98fa0cb3f6fc65af82b2 data/numismatics/tags/items/internal/string.json
Expand All @@ -8,7 +8,7 @@ a96d3d02794064cd9be1bca25a9ba6217675e6c5 assets/numismatics/models/item/white_id
bb2a77462e6213eddde134f3cc3e9a3f07f07f3f assets/numismatics/models/item/yellow_authorized_card.json
74a4c7ca7a48382782e5dba33018dfc8255192c5 assets/numismatics/models/block/brass_depositor_locked.json
3f0d912779200aaaf55bef102d9b96acead1a636 data/numismatics/tags/items/internal/dyes/purple_dyes.json
7792957fb81474e92aea29bb69c435866fcc25ae assets/numismatics/lang/en_us.json
3346bd25775d94025b9cc65c03d9a7151d316355 assets/numismatics/lang/en_us.json
377e460c0dcf6d7de1b7ae235959105a7c45e4c4 assets/numismatics/models/item/cyan_authorized_card.json
bde18ccd9c21484154597c6271750c0406082f61 data/forge/tags/blocks/relocation_not_supported.json
eca751589c40725750e2c2baa6607e83255fd5f4 assets/numismatics/models/item/brown_authorized_card.json
Expand All @@ -18,7 +18,7 @@ ad712dd2a2a7268dfa773f38a50d526952758d5c data/numismatics/tags/items/internal/dy
8550097149cebbfd50bdeac2003327b60a4aee9a assets/numismatics/models/item/light_gray_card.json
95b492bd9230dc90fca9395c823cef39e644d8f2 assets/numismatics/models/item/sprocket.json
70c481f36a9718ac48632e6939ac6ba785be4c9e assets/numismatics/models/item/black_id_card.json
d780766e58a270fc111ee7517399d209168b8e8f assets/numismatics/lang/en_ud.json
8343a58fb3d5ce9eeecabdeaa911eccae29409d1 assets/numismatics/lang/en_ud.json
1e78f650091a4a2c43e36fb815f23d0591e058a6 assets/numismatics/models/item/magenta_card.json
909f5d14f23199c064f6b91a421bb7b15e0f1a7d assets/numismatics/models/item/orange_authorized_card.json
d6f017479b3cc538f73d7fb0a1e65d1742bab266 assets/numismatics/models/item/light_blue_id_card.json
Expand Down Expand Up @@ -56,8 +56,8 @@ d048d04208faa63f0014d614d6026a66fe118c11 data/numismatics/loot_tables/blocks/bra
790ff3c5da6a67a5de1ceb7138fa3e1c0fe97f80 data/numismatics/tags/items/internal/dyes/lime_dyes.json
5cfb64f42dbeaa0720a7dd952e47d638c17a1056 assets/numismatics/models/block/salepoint.json
a8cb82f19034a0e724e12df45c883e9cd469c210 assets/numismatics/models/item/green_card.json
e1087e56db7b4d8812ab4617344f0ac8b0f0e6c7 assets/numismatics/models/item/light_gray_authorized_card.json
390db78c5393fca4f90018df51d1a79d11a64f72 assets/numismatics/models/item/light_blue_authorized_card.json
e1087e56db7b4d8812ab4617344f0ac8b0f0e6c7 assets/numismatics/models/item/light_gray_authorized_card.json
c09892d2d189f147997d77f4ce39b0570729f030 assets/numismatics/models/item/lime_authorized_card.json
06ecd28cd97f4e8200dc396858695cad57b871c8 assets/numismatics/blockstates/blaze_banker.json
95ef415a564eba1d212053195d25b199427b94e3 assets/numismatics/blockstates/creative_vendor.json
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,14 @@
"gui.numismatics.limit.none": "ʇıɯıן oN",
"gui.numismatics.salepoint.cancel": "uoıʇɔɐsuɐɹʇ ןǝɔuɐƆ",
"gui.numismatics.salepoint.count": "sʇıu∩",
"gui.numismatics.salepoint.fluid_empty": "ʎʇdɯƎ",
"gui.numismatics.salepoint.fluid_filter_empty.0": "ɹǝʇןıℲ pınןℲ",
"gui.numismatics.salepoint.fluid_filter_empty.1": "ǝןʇʇoq ɐ ɹo ʇǝʞɔnq ɐ sɐ ɥɔns ɯǝʇı buıpןoɥ-pınןɟ ɐ ɥʇıʍ ʞɔıןƆ",
"gui.numismatics.salepoint.go": "uoıʇɔɐsuɐɹʇ ʇɹɐʇS",
"gui.numismatics.salepoint.insufficient_space": "ןןnɟ sı ʇǝbɹɐ⟘",
"gui.numismatics.salepoint.invalid_state": "ǝʇɐʇs pıןɐʌuI",
"gui.numismatics.salepoint.no_card": "pɹɐɔ oN",
"gui.numismatics.salepoint.no_filter": "ɹǝʇןıɟ oN",
"gui.numismatics.salepoint.no_state": "pǝɹnbıɟuoɔ ʇoN",
"gui.numismatics.salepoint.no_target": "punoɟ ʇou ʇǝbɹɐ⟘",
"gui.numismatics.salepoint.price": "¤%s '%s %s :ʇıu∩/ǝɔıɹԀ",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,14 @@
"gui.numismatics.limit.none": "No limit",
"gui.numismatics.salepoint.cancel": "Cancel transaction",
"gui.numismatics.salepoint.count": "Units",
"gui.numismatics.salepoint.fluid_empty": "Empty",
"gui.numismatics.salepoint.fluid_filter_empty.0": "Fluid Filter",
"gui.numismatics.salepoint.fluid_filter_empty.1": "Click with a fluid-holding item such as a bucket or a bottle",
"gui.numismatics.salepoint.go": "Start transaction",
"gui.numismatics.salepoint.insufficient_space": "Target is full",
"gui.numismatics.salepoint.invalid_state": "Invalid state",
"gui.numismatics.salepoint.no_card": "No card",
"gui.numismatics.salepoint.no_filter": "No filter",
"gui.numismatics.salepoint.no_state": "Not configured",
"gui.numismatics.salepoint.no_target": "Target not found",
"gui.numismatics.salepoint.price": "Price/Unit: %s %s, %s¤",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* Numismatics
* Copyright (c) 2024 The Railways Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

package dev.ithundxr.createnumismatics.base.client.rendering;

import net.minecraft.world.item.ItemStack;

public interface IItemApplicableWidget {
void onItemApplied(ItemStack stack);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* Numismatics
* Copyright (c) 2024 The Railways Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

package dev.ithundxr.createnumismatics.base.client.rendering;

import dev.ithundxr.createnumismatics.content.salepoint.states.ISalepointState;

public interface ISalepointStateUpdatingWidget {
void updateState(ISalepointState<?> state);
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ public SalepointConfigMenu(MenuType<?> type, int id, Inventory inv, SalepointBlo
}

@Override
@SuppressWarnings("DataFlowIssue")
protected SalepointBlockEntity createOnClient(FriendlyByteBuf extraData) {
ClientLevel world = Minecraft.getInstance().level;
BlockEntity blockEntity = world.getBlockEntity(extraData.readBlockPos());
Expand Down Expand Up @@ -122,7 +123,7 @@ public boolean canTakeItemForPickAll(@NotNull ItemStack stack, Slot slot) {
}

@Override
public void clicked(int slotId, int button, ClickType clickType, Player player) {
public void clicked(int slotId, int button, @NotNull ClickType clickType, Player player) {
ItemStack held = getCarried();
Inventory inventory = player.getInventory();
ISalepointState<?> salepointState = getSalepointState();
Expand Down Expand Up @@ -217,7 +218,7 @@ public void setSynchronizer(@NotNull ContainerSynchronizer synchronizer) {
super.setSynchronizer(synchronizer);
}

protected @Nullable ISalepointState<?> getSalepointState() {
public @Nullable ISalepointState<?> getSalepointState() {
if (contentHolder.salepointState == null)
return null;
return contentHolder.salepointState.state();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
import com.simibubi.create.foundation.gui.widget.ScrollInput;
import com.simibubi.create.foundation.utility.Components;
import com.simibubi.create.foundation.utility.Couple;
import dev.ithundxr.createnumismatics.base.client.rendering.IItemApplicableWidget;
import dev.ithundxr.createnumismatics.base.client.rendering.ISalepointStateUpdatingWidget;
import dev.ithundxr.createnumismatics.config.NumismaticsConfig;
import dev.ithundxr.createnumismatics.content.backend.Coin;
import dev.ithundxr.createnumismatics.content.backend.behaviours.SliderStylePriceConfigurationPacket;
Expand All @@ -39,6 +41,10 @@
import dev.ithundxr.createnumismatics.registry.packets.ScrollSlotPacket;
import dev.ithundxr.createnumismatics.util.TextUtils;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.components.Renderable;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.narration.NarratableEntry;
import net.minecraft.client.renderer.Rect2i;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Inventory;
Expand All @@ -62,6 +68,8 @@ public class SalepointConfigScreen extends AbstractSimiContainerScreen<Salepoint
private final Label[] coinLabels = new Label[COIN_COUNT];
private final ScrollInput[] coinScrollInputs = new ScrollInput[COIN_COUNT];

private boolean wasDragging;

private List<Rect2i> extraAreas = Collections.emptyList();

public SalepointConfigScreen(SalepointConfigMenu container, Inventory inv, Component title) {
Expand All @@ -82,9 +90,7 @@ protected void init() {
int y = topPos;

trustListButton = new IconButton(x + 16, y + background.height - 24, AllIcons.I_VIEW_SCHEDULE);
trustListButton.withCallback(() -> {
menu.contentHolder.openTrustList();
});
trustListButton.withCallback(() -> menu.contentHolder.openTrustList());
addRenderableWidget(trustListButton);

confirmButton = new IconButton(x + background.width - 33, y + background.height - 24, AllIcons.I_CONFIRM);
Expand Down Expand Up @@ -118,11 +124,19 @@ protected void init() {

ISalepointState<?> salepointState = getSalepointState();
if (salepointState != null)
salepointState.createConfigWidgets(this::addRenderableWidget);
salepointState.createConfigWidgets(this::addRenderableWidgetOffset);

extraAreas = ImmutableList.of(new Rect2i(x + background.width, y + background.height - 68, 84, 84));
}

private <T extends GuiEventListener & Renderable & NarratableEntry> T addRenderableWidgetOffset(T widget) {
if (widget instanceof AbstractWidget abstractWidget) {
abstractWidget.setX(abstractWidget.getX() + leftPos);
abstractWidget.setY(abstractWidget.getY() + topPos);
}
return addRenderableWidget(widget);
}

@Override
public List<Rect2i> getExtraAreas() {
return extraAreas;
Expand Down Expand Up @@ -185,6 +199,50 @@ public boolean mouseScrolled(double mouseX, double mouseY, double delta) {
return super.mouseScrolled(mouseX, mouseY, delta);
}

@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
if (button == 0 && !menu.getCarried().isEmpty()) {
for (GuiEventListener widget : this.children()) {
if (widget.isMouseOver(mouseX, mouseY) && widget instanceof IItemApplicableWidget itemApplicableWidget) {
itemApplicableWidget.onItemApplied(menu.getCarried());
}
}
}

return super.mouseClicked(mouseX, mouseY, button);
}

@Override
public boolean mouseDragged(double mouseX, double mouseY, int button, double dragX, double dragY) {
wasDragging = true;
return super.mouseDragged(mouseX, mouseY, button, dragX, dragY);
}

@Override
public boolean mouseReleased(double mouseX, double mouseY, int button) {
if (button == 0 && wasDragging && !menu.getCarried().isEmpty()) {
for (GuiEventListener widget : this.children()) {
if (widget.isMouseOver(mouseX, mouseY) && widget instanceof IItemApplicableWidget itemApplicableWidget) {
itemApplicableWidget.onItemApplied(menu.getCarried());
}
}
}

wasDragging = false;

return super.mouseReleased(mouseX, mouseY, button);
}

@Override
protected void containerTick() {
super.containerTick();
for (GuiEventListener widget : this.children()) {
if (widget instanceof ISalepointStateUpdatingWidget salepointStateUpdatingWidget) {
salepointStateUpdatingWidget.updateState(getSalepointState());
}
}
}

@Override
public void removed() {
NumismaticsPackets.PACKETS.send(new SliderStylePriceConfigurationPacket(menu.contentHolder));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@
import dev.ithundxr.createnumismatics.registry.packets.SalepointPurchasePacket;
import dev.ithundxr.createnumismatics.util.TextUtils;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.components.Renderable;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.narration.NarratableEntry;
import net.minecraft.client.renderer.Rect2i;
import net.minecraft.network.chat.Component;
import net.minecraft.util.FormattedCharSequence;
Expand Down Expand Up @@ -107,12 +111,20 @@ protected void init() {

ISalepointState<?> salepointState = getSalepointState();
if (salepointState != null)
salepointState.createPurchaseWidgets(this::addRenderableWidget);
salepointState.createPurchaseWidgets(this::addRenderableWidgetOffset);

extraAreas = ImmutableList.of(new Rect2i(x + background.width, y + background.height - 68, 84, 84));
updateAction();
}

private <T extends GuiEventListener & Renderable & NarratableEntry> T addRenderableWidgetOffset(T widget) {
if (widget instanceof AbstractWidget abstractWidget) {
abstractWidget.setX(abstractWidget.getX() + leftPos);
abstractWidget.setY(abstractWidget.getY() + topPos);
}
return addRenderableWidget(widget);
}

@Override
public List<Rect2i> getExtraAreas() {
return extraAreas;
Expand Down Expand Up @@ -233,7 +245,6 @@ private void onAction() {
}
}

@SuppressWarnings("DataFlowIssue")
private void updateAction() {
action = Action.GO;
Component alert = Components.translatable("gui.numismatics.salepoint.go");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
* Numismatics
* Copyright (c) 2024 The Railways Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

package dev.ithundxr.createnumismatics.content.salepoint.behaviours;

import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import dev.ithundxr.createnumismatics.content.salepoint.states.ISalepointState;
import dev.ithundxr.createnumismatics.content.salepoint.states.SalepointTypes;
import dev.ithundxr.createnumismatics.multiloader.fluid.MultiloaderFluidStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public abstract class FluidSalepointTargetBehaviour extends SalepointTargetBehaviour<MultiloaderFluidStack> {
public FluidSalepointTargetBehaviour(SmartBlockEntity be) {
super(be);
}

@Override
protected @Nullable ISalepointState<?> tryBindToSalepointInternal() {
return SalepointTypes.FLUID.create();
}

@Override
protected @NotNull Class<MultiloaderFluidStack> getContentType() {
return MultiloaderFluidStack.class;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import dev.ithundxr.createnumismatics.content.salepoint.states.ISalepointState;
import dev.ithundxr.createnumismatics.content.salepoint.states.SalepointTypes;
import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public abstract class ItemSalepointTargetBehaviour extends SalepointTargetBehaviour<ItemStack> {
Expand All @@ -36,7 +37,7 @@ public ItemSalepointTargetBehaviour(SmartBlockEntity be) {
}

@Override
protected Class<ItemStack> getContentType() {
protected @NotNull Class<ItemStack> getContentType() {
return ItemStack.class;
}
}
Loading

0 comments on commit 8ff160c

Please sign in to comment.