aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/ftbsc/bscv/modules/self/ContainerCleaner.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/ftbsc/bscv/modules/self/ContainerCleaner.java')
-rw-r--r--src/main/java/ftbsc/bscv/modules/self/ContainerCleaner.java79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/main/java/ftbsc/bscv/modules/self/ContainerCleaner.java b/src/main/java/ftbsc/bscv/modules/self/ContainerCleaner.java
new file mode 100644
index 0000000..c53fed0
--- /dev/null
+++ b/src/main/java/ftbsc/bscv/modules/self/ContainerCleaner.java
@@ -0,0 +1,79 @@
+package ftbsc.bscv.modules.self;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.auto.service.AutoService;
+
+import ftbsc.bscv.api.ILoadable;
+import ftbsc.bscv.modules.AbstractModule;
+import ftbsc.bscv.tools.Inventory;
+import ftbsc.bscv.tools.Setting;
+import net.minecraft.client.gui.screen.inventory.ContainerScreen;
+import net.minecraft.command.arguments.ItemArgument;
+import net.minecraft.command.arguments.ItemInput;
+import net.minecraft.inventory.container.ClickType;
+import net.minecraft.inventory.container.Slot;
+import net.minecraft.item.Item;
+import net.minecraftforge.common.ForgeConfigSpec;
+import net.minecraftforge.event.TickEvent.ClientTickEvent;
+import net.minecraftforge.eventbus.api.SubscribeEvent;
+
+@AutoService(ILoadable.class)
+public class ContainerCleaner extends AbstractModule {
+
+ public final ForgeConfigSpec.ConfigValue<Integer> cooldown;
+ public final ForgeConfigSpec.ConfigValue<Boolean> limit;
+ public final ForgeConfigSpec.ConfigValue<Boolean> all;
+ public final ForgeConfigSpec.ConfigValue<List<? extends Integer>> blacklist;
+ private int counter;
+
+ public ContainerCleaner() {
+ super();
+
+ this.counter = 0;
+ this.cooldown = Setting.Number.builder()
+ .fallback(0)
+ .name("cooldown")
+ .comment("ticks before throwing next item")
+ .build(this);
+
+ this.limit = Setting.Bool.builder()
+ .fallback(true)
+ .name("limit")
+ .comment("limit to one action per tick")
+ .build(this);
+
+ this.all = Setting.Bool.builder()
+ .fallback(true)
+ .name("all")
+ .comment("throw whole stacks instead of single items")
+ .build(this);
+
+ this.blacklist = new Setting.Many<ItemInput, Integer>(ItemArgument.item(), ItemInput.class)
+ .writer(x -> Item.getId(x.getItem()))
+ .fallback(new ArrayList<Integer>())
+ .name("blacklist")
+ .comment("items to throw away")
+ .build(this);
+ }
+
+ @SubscribeEvent
+ public void onTick(ClientTickEvent event) {
+ if (MC.screen == null) return;
+ if (!(MC.screen instanceof ContainerScreen)) return;
+ if (this.counter > 0) {
+ this.counter -= 1;
+ return;
+ }
+ ContainerScreen<?> screen = (ContainerScreen<?>) MC.screen;
+ for (Slot slot : screen.getMenu().slots) {
+ if (this.blacklist.get().contains(Item.getId(slot.getItem().getItem()))) {
+ int button = this.all.get() ? 1 : 0;
+ Inventory.clickSlot(screen.getMenu().containerId, slot.index, button, ClickType.THROW);
+ this.counter = this.cooldown.get();
+ if (this.limit.get()) return; // only throw one item per tick
+ }
+ }
+ }
+}