diff options
Diffstat (limited to 'src/main/java/ftbsc/bscv/modules/self/ContainerCleaner.java')
-rw-r--r-- | src/main/java/ftbsc/bscv/modules/self/ContainerCleaner.java | 79 |
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 + } + } + } +} |