Skip to content

Commit

Permalink
Add item blacklisting
Browse files Browse the repository at this point in the history
  • Loading branch information
pupbrained committed Oct 15, 2023
1 parent 8f9d048 commit 0acab28
Show file tree
Hide file tree
Showing 6 changed files with 55 additions and 5 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ org.gradle.parallel=true
minecraft_version=1.20.1
yarn_mappings=1.20.1+build.9
loader_version=0.14.22
mod_version=1.3.1+1.20
mod_version=1.4.0+1.20.1
maven_group=xyz.pupbrained
archives_base_name=drop_confirm
fabric_version=0.90.0+1.20.1
43 changes: 42 additions & 1 deletion src/main/java/xyz/pupbrained/config/DropConfirmConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,12 @@
import dev.isxander.yacl3.config.v2.api.SerialEntry;
import dev.isxander.yacl3.config.v2.api.serializer.GsonConfigSerializerBuilder;
import dev.isxander.yacl3.gui.controllers.BooleanController;
import dev.isxander.yacl3.gui.controllers.dropdown.ItemController;
import dev.isxander.yacl3.gui.controllers.slider.DoubleSliderController;
import dev.isxander.yacl3.platform.YACLPlatform;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.item.Item;
import net.minecraft.item.Items;
import net.minecraft.text.Text;

import java.util.List;
Expand All @@ -31,6 +34,9 @@ public final class DropConfirmConfig {
@SerialEntry
public double confirmationResetDelay = 1.0;

@SerialEntry
public List<Item> blacklistedItems = List.of();

public static Screen createScreen(Screen parent) {
return YetAnotherConfigLib.create(DropConfirmConfig.GSON, ((defaults, config, builder) -> {
var defaultCategoryBuilder = ConfigCategory.createBuilder()
Expand Down Expand Up @@ -63,11 +69,23 @@ public static Screen createScreen(Screen parent) {
doubleOption -> new DoubleSliderController(doubleOption, 1.0, 5.0, 0.05)
);

var blacklistedItems = createListOption(
"option.drop_confirm.blacklisted_items",
"option.drop_confirm.blacklisted_items.description",
defaults.blacklistedItems,
() -> config.blacklistedItems,
val -> config.blacklistedItems = val,
Items.AIR,
true,
ItemController::new
);

return builder
.title(Text.translatable("config.drop_confirm.title"))
.category(
defaultCategoryBuilder
.options(List.of(enabled, playSounds, confirmationResetDelay))
.group(blacklistedItems)
.build()
);
})).generateScreen(parent);
Expand All @@ -92,5 +110,28 @@ private static <T> Option<T> createOption (
.customController(customController)
.build();
}
}

private static <T> ListOption<T> createListOption (
String name,
String description,
List<T> defaultValue,
Supplier<List<T>> currentValue,
Consumer<List<T>> newValue,
T initialValue,
Boolean insertEntriesAtEnd,
Function<ListOptionEntry<T>, Controller<T>> customController
) {
return ListOption.<T>createBuilder()
.name(Text.translatable(name))
.description(
OptionDescription.createBuilder()
.text(Text.translatable(description))
.build()
)
.binding(defaultValue, currentValue, newValue)
.initial(initialValue)
.insertEntriesAtEnd(insertEntriesAtEnd)
.customController(customController)
.build();
}
}
3 changes: 3 additions & 0 deletions src/main/java/xyz/pupbrained/mixin/ItemDropMixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ private void onItemDrop(boolean entireStack, CallbackInfoReturnable<Boolean> cir
final var inventory = player.getInventory();
var itemStack = inventory.getMainHandStack();

if (config.blacklistedItems.contains(itemStack.getItem()))
return;

if (!Util.confirmed) {
mc.inGameHud.setOverlayMessage(
Text.of(
Expand Down
4 changes: 3 additions & 1 deletion src/main/resources/assets/drop_confirm/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,7 @@
"option.drop_confirm.enabled": "Enable DropConfirm",
"option.drop_confirm.enabled.description": "Whether DropConfirm should be enabled.",
"option.drop_confirm.play_sounds": "Play Sounds",
"option.drop_confirm.play_sounds.description": "Whether DropConfirm should play sounds for various events."
"option.drop_confirm.play_sounds.description": "Whether DropConfirm should play sounds for various events.",
"option.drop_confirm.blacklisted_items": "Blacklisted Items",
"option.drop_confirm.blacklisted_items.description": "Items that should be ignored by DropConfirm."
}
4 changes: 3 additions & 1 deletion src/main/resources/assets/drop_confirm/lang/fr_ca.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,7 @@
"option.drop_confirm.enabled": "Activer DropConfirm",
"option.drop_confirm.enabled.description": "Si DropConfirm devrait être activé.",
"option.drop_confirm.play_sounds": "Jouer les effets audio",
"option.drop_confirm.play_sounds.description": "Si DropConfirm devrait jouer les effets audio de base."
"option.drop_confirm.play_sounds.description": "Si DropConfirm devrait jouer les effets audio de base.",
"option.drop_confirm.blacklisted_items": "Items ignorés",
"option.drop_confirm.blacklisted_items.description": "Les items qui ne devraient pas être affectés par DropConfirm."
}
4 changes: 3 additions & 1 deletion src/main/resources/assets/drop_confirm/lang/fr_fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,7 @@
"option.drop_confirm.enabled": "Activer DropConfirm",
"option.drop_confirm.enabled.description": "Si DropConfirm devrait être activé.",
"option.drop_confirm.play_sounds": "Jouer les effets audio",
"option.drop_confirm.play_sounds.description": "Si DropConfirm devrait jouer les effets audio de base."
"option.drop_confirm.play_sounds.description": "Si DropConfirm devrait jouer les effets audio de base.",
"option.drop_confirm.blacklisted_items": "Items ignorés",
"option.drop_confirm.blacklisted_items.description": "Les items qui ne devraient pas être affectés par DropConfirm."
}

0 comments on commit 0acab28

Please sign in to comment.