Skip to content

Commit ddb969a

Browse files
authored
Merge pull request RobertSkalko#194 from TUsama/loot-button
add quick loot button
2 parents ab1bc09 + 17cd494 commit ddb969a

File tree

10 files changed

+241
-140
lines changed

10 files changed

+241
-140
lines changed

src/main/java/com/robertx22/mine_and_slash/capability/player/container/BackpackButton.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.robertx22.mine_and_slash.capability.player.container;
22

33
import com.robertx22.mine_and_slash.capability.player.data.Backpacks;
4-
import com.robertx22.mine_and_slash.vanilla_mc.packets.OpenBackpackPacket;
4+
import com.robertx22.mine_and_slash.vanilla_mc.packets.backpack.OpenBackpackPacket;
55
import com.robertx22.library_of_exile.main.Packets;
66
import com.robertx22.library_of_exile.utils.TextUTIL;
77
import net.minecraft.client.Minecraft;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.robertx22.mine_and_slash.capability.player.container;
2+
3+
import com.robertx22.library_of_exile.main.Packets;
4+
import com.robertx22.mine_and_slash.config.forge.ClientConfigs;
5+
import com.robertx22.mine_and_slash.mmorpg.SlashRef;
6+
import com.robertx22.mine_and_slash.uncommon.localization.Gui;
7+
import com.robertx22.mine_and_slash.vanilla_mc.packets.backpack.BackPackLootMenuPacket;
8+
import net.minecraft.ChatFormatting;
9+
import net.minecraft.client.Minecraft;
10+
import net.minecraft.client.gui.GuiGraphics;
11+
import net.minecraft.client.gui.components.ImageButton;
12+
import net.minecraft.client.gui.components.Tooltip;
13+
import net.minecraft.client.gui.screens.inventory.ContainerScreen;
14+
import net.minecraft.resources.ResourceLocation;
15+
import net.minecraft.world.inventory.Slot;
16+
import net.minecraftforge.client.event.ScreenEvent;
17+
18+
public class BackpackQuickLootButton extends ImageButton {
19+
static ResourceLocation TEXTURE = SlashRef.id("textures/gui/backpack_button.png");
20+
public BackpackQuickLootButton(int pX, int pY, ContainerScreen screen) {
21+
super(pX + ClientConfigs.getConfig().QUICK_LOOT_BUTTON_X_OFFSET.get(), pY + ClientConfigs.getConfig().QUICK_LOOT_BUTTON_Y_OFFSET.get(), 14, 14, 0, 0, 16, TEXTURE, 16, 32, x -> Packets.sendToServer(new BackPackLootMenuPacket()), Gui.MASTER_BACKPACK_LOOT_BUTTON.locName());
22+
this.setTooltip(Tooltip.create(Gui.MASTER_BACKPACK_LOOT_BUTTON.locName()));
23+
}
24+
25+
26+
public static void addLootButton(ScreenEvent.Init event){
27+
if (!(event instanceof ScreenEvent.Init.Post)) return;
28+
if (Minecraft.getInstance().screen instanceof ContainerScreen containerScreen && ClientConfigs.getConfig().ENABLE_QUICK_LOOT_BUTTON.get()){
29+
event.addListener(new BackpackQuickLootButton(containerScreen.getGuiLeft() + containerScreen.getXSize(), containerScreen.getGuiTop(), containerScreen));
30+
}
31+
}
32+
}

src/main/java/com/robertx22/mine_and_slash/config/forge/ClientConfigs.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,10 @@ public class ClientConfigs {
7979
OVERLAY_CONFIGS.put(type, b.defineEnum(type.name() + "_" + "CONFIG", type.getDefaultConfig()));
8080
}
8181
}
82-
82+
b.comment("Buttons").push("buttons");
83+
ENABLE_QUICK_LOOT_BUTTON = b.define("enable_quick_loot_button", true);
84+
QUICK_LOOT_BUTTON_X_OFFSET = b.define("quick_loot_button_x_offset", 0);
85+
QUICK_LOOT_BUTTON_Y_OFFSET = b.define("quick_loot_button_y_offset", 0);
8386

8487
b.pop();
8588

@@ -116,6 +119,10 @@ public class ClientConfigs {
116119
public ForgeConfigSpec.IntValue REMOVE_EMPTY_TOOLTIP_LINES_IF_MORE_THAN_X_LINES;
117120
public ForgeConfigSpec.IntValue SHOW_DECIMALS_ON_NUMBER_SMALLER_THAN;
118121

122+
public ForgeConfigSpec.BooleanValue ENABLE_QUICK_LOOT_BUTTON;
123+
public ForgeConfigSpec.ConfigValue<Integer> QUICK_LOOT_BUTTON_X_OFFSET;
124+
public ForgeConfigSpec.ConfigValue<Integer> QUICK_LOOT_BUTTON_Y_OFFSET;
125+
119126

120127
public OverlayConfig getOverlayConfig(OverlayType type) {
121128
var preset = OVERLAY_CONFIGS.get(type).get();

src/main/java/com/robertx22/mine_and_slash/mmorpg/MMORPG.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import com.robertx22.mine_and_slash.aoe_data.database.stat_effects.StatEffects;
2222
import com.robertx22.mine_and_slash.aoe_data.database.stats.Stats;
2323
import com.robertx22.mine_and_slash.aoe_data.datapacks.lang_file.CreateLangFile;
24+
import com.robertx22.mine_and_slash.capability.player.container.BackpackQuickLootButton;
25+
import com.robertx22.mine_and_slash.capability.player.container.BackpackScreen;
2426
import com.robertx22.mine_and_slash.characters.PlayerStats;
2527
import com.robertx22.mine_and_slash.config.forge.ClientConfigs;
2628
import com.robertx22.mine_and_slash.config.forge.ServerContainer;
@@ -55,6 +57,7 @@
5557
import net.minecraftforge.client.event.EntityRenderersEvent;
5658
import net.minecraftforge.client.event.RegisterClientTooltipComponentFactoriesEvent;
5759
import net.minecraftforge.client.event.RegisterKeyMappingsEvent;
60+
import net.minecraftforge.client.event.ScreenEvent;
5861
import net.minecraftforge.data.event.GatherDataEvent;
5962
import net.minecraftforge.eventbus.api.EventPriority;
6063
import net.minecraftforge.eventbus.api.IEventBus;
@@ -154,6 +157,10 @@ public void accept(ExileEvents.OnCheckIsDevToolsRunning event) {
154157
x.register(SocketTooltip.SocketComponent.class, SocketTooltip::new);
155158
});
156159

160+
ForgeEvents.registerForgeEvent(ScreenEvent.Init.class, x -> {
161+
BackpackQuickLootButton.addLootButton(x);
162+
});
163+
157164

158165
DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> {
159166

src/main/java/com/robertx22/mine_and_slash/mmorpg/registers/common/C2SPacketRegister.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import com.robertx22.mine_and_slash.prophecy.AcceptProphecyAffixPacket;
1212
import com.robertx22.mine_and_slash.prophecy.AcceptProphecyPacket;
1313
import com.robertx22.mine_and_slash.vanilla_mc.packets.*;
14+
import com.robertx22.mine_and_slash.vanilla_mc.packets.backpack.BackPackLootMenuPacket;
15+
import com.robertx22.mine_and_slash.vanilla_mc.packets.backpack.OpenBackpackPacket;
1416
import com.robertx22.mine_and_slash.vanilla_mc.packets.perks.PerkChangePacket;
1517
import com.robertx22.mine_and_slash.vanilla_mc.packets.spells.TellServerToCancelSpellCast;
1618
import com.robertx22.mine_and_slash.vanilla_mc.packets.spells.TellServerToCastSpellPacket;
@@ -39,6 +41,8 @@ public static void register() {
3941
Packets.registerClientToServerPacket(MMORPG.NETWORK, new UnsummonPacket(), i++);
4042
Packets.registerClientToServerPacket(MMORPG.NETWORK, new RequestStatCalcInfoPacket(), i++);
4143
Packets.registerClientToServerPacket(MMORPG.NETWORK, new LockRecipePacket(""), i++);
44+
45+
Packets.registerClientToServerPacket(MMORPG.NETWORK, new BackPackLootMenuPacket(), i++);
4246

4347

4448
// Packets.registerClientToServerPacket(MMORPG.NETWORK, new SetupHotbarPacket(), i++);

src/main/java/com/robertx22/mine_and_slash/uncommon/localization/Gui.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public enum Gui implements IAutoLocName {
1010
TALENT_SCREEN_SEARCH_KEYWORD_GAME_CHANGER("game changer"),
1111
TALENT_SCREEN_SEARCH_KEYWORD_ALL("all"),
1212
TALENT_SCREEN_SEARCH_TIPS("Search Keywords: \n\n%1$s: show all allocated talents\n\n%2$s: show all game changer talents"),
13+
MASTER_BACKPACK_LOOT_BUTTON("Click to loot all eligible items to master backpack"),
1314
STATION_LOCK_RECIPE("Lock Recipe"),
1415
STATION_UNLOCK_RECIPE("Unlock Recipe"),
1516
STATION_START_CRAFTING("Start Crafting"),
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.robertx22.mine_and_slash.vanilla_mc.packets.backpack;
2+
3+
import com.robertx22.library_of_exile.main.MyPacket;
4+
import com.robertx22.library_of_exile.packets.ExilePacketContext;
5+
import com.robertx22.mine_and_slash.capability.player.data.Backpacks;
6+
import com.robertx22.mine_and_slash.mmorpg.SlashRef;
7+
import com.robertx22.mine_and_slash.uncommon.datasaving.Load;
8+
import net.minecraft.network.FriendlyByteBuf;
9+
import net.minecraft.resources.ResourceLocation;
10+
import net.minecraft.server.level.ServerPlayer;
11+
import net.minecraft.world.inventory.ChestMenu;
12+
import net.minecraft.world.inventory.Slot;
13+
import net.minecraftforge.client.event.sound.SoundEvent;
14+
15+
public class BackPackLootMenuPacket extends MyPacket<BackPackLootMenuPacket> {
16+
@Override
17+
public ResourceLocation getIdentifier() {
18+
return SlashRef.id("backpack_loot");
19+
}
20+
21+
@Override
22+
public void loadFromData(FriendlyByteBuf friendlyByteBuf) {
23+
24+
}
25+
26+
@Override
27+
public void saveToData(FriendlyByteBuf friendlyByteBuf) {
28+
29+
}
30+
31+
@Override
32+
public void onReceived(ExilePacketContext exilePacketContext) {
33+
if (exilePacketContext.getPlayer() instanceof ServerPlayer player) {
34+
Backpacks backpacks = Load.backpacks(player).getBackpacks();
35+
if (player.hasContainerOpen() && player.containerMenu instanceof ChestMenu chestMenu) {
36+
for (Slot slot : chestMenu.slots) {
37+
backpacks.tryAutoPickup(player, slot.getItem(), false);
38+
}
39+
}
40+
41+
}
42+
}
43+
44+
@Override
45+
public MyPacket<BackPackLootMenuPacket> newInstance() {
46+
return new BackPackLootMenuPacket();
47+
}
48+
}

src/main/java/com/robertx22/mine_and_slash/vanilla_mc/packets/OpenBackpackPacket.java renamed to src/main/java/com/robertx22/mine_and_slash/vanilla_mc/packets/backpack/OpenBackpackPacket.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.robertx22.mine_and_slash.vanilla_mc.packets;
1+
package com.robertx22.mine_and_slash.vanilla_mc.packets.backpack;
22

33
import com.robertx22.library_of_exile.main.MyPacket;
44
import com.robertx22.library_of_exile.packets.ExilePacketContext;

0 commit comments

Comments
 (0)