Skip to content

Commit

Permalink
add visitor rare drop protection (cookies-mod#210)
Browse files Browse the repository at this point in the history
* first push of visitor drop protection

* visitor drop protection might be done just need testing

* QOL changes, fix lore detection? only tested with copper

* Update VisitorDropProtection.java

* Update src/main/java/codes/cookies/mod/features/farming/garden/visitors/VisitorDropProtection.java

Co-authored-by: Maik Z. <58326890+zFlxw@users.noreply.github.com>

* remove unused int option stuff for now

* Update src/main/java/codes/cookies/mod/features/farming/garden/visitors/VisitorDropProtection.java

Co-authored-by: Moritz <59416038+Morazzer@users.noreply.github.com>

* Update src/main/java/codes/cookies/mod/features/farming/garden/visitors/VisitorDropProtection.java

Co-authored-by: Moritz <59416038+Morazzer@users.noreply.github.com>

* Update VisitorDropProtection.java

* Update src/main/java/codes/cookies/mod/features/farming/garden/visitors/VisitorDropProtection.java

Co-authored-by: Moritz <59416038+Morazzer@users.noreply.github.com>

* Update VisitorDropProtection.java

* update and fixed based on review

* Update src/main/java/codes/cookies/mod/features/farming/garden/visitors/VisitorDropProtection.java

i forgor its here locally 💀

Co-authored-by: Moritz <59416038+Morazzer@users.noreply.github.com>

* Update src/main/java/codes/cookies/mod/features/farming/garden/GardenFeatures.java

Co-authored-by: Moritz <59416038+Morazzer@users.noreply.github.com>

* fix extraneous translation key

* rework regex

* make static

* use string.matches instead of pattern matcher

* cleaned up lore matching

---------

Co-authored-by: Maik Z. <58326890+zFlxw@users.noreply.github.com>
Co-authored-by: Moritz <59416038+Morazzer@users.noreply.github.com>
  • Loading branch information
3 people authored Dec 15, 2024
1 parent f1d7350 commit 74488e4
Show file tree
Hide file tree
Showing 14 changed files with 203 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,8 @@ private void addMisc(CookiesTranslationBuilder translationBuilder) {
translationBuilder.add(RANCHER_BOOTS_RESET_TO_DEFAULT, "Reset to default");
translationBuilder.add(RANCHER_BOOTS_FARMING_SPEEDS, "Farming Speeds");

translationBuilder.add(DROP_PROTECTION_MESSAGE, "Refusing temporarily disabled due to rare drop");

translationBuilder.add(BLOCK_XYZ, "(%s, %s, %s)");
translationBuilder.add(PAGE, "Page");
translationBuilder.add(PAGE_WITH_NUMBER, "Page %s");
Expand Down Expand Up @@ -300,6 +302,20 @@ private void addFarmingConfig(CookiesTranslationBuilder translationBuilder) {
"Show rancher overlay",
"Show optimal speeds in the rancher's boots.");

translationBuilder.add(CONFIG_FARMING_CATEGORIES_VISITORS, "Visitors");

translationBuilder.addConfig(CONFIG_FARMING_VISITOR_DROP_PROTECTION,
"Rare drop protection",
"Prevents rejecting visitors with rare drops for 5s");

translationBuilder.addConfig(CONFIG_FARMING_VISITOR_NOT_AS_RARE_DROP_PROTECTION,
"Common drop protection",
"Prevents rejecting visitors with drops that are not as rare as the ones in the rare drop protection.");

translationBuilder.addConfig(CONFIG_FARMING_VISITOR_DROP_PROTECTION_DELAY,
"Drop protection delay",
"Delay in seconds before the visitor drop protection is removed.");

translationBuilder.add(CONFIG_FARMING_SQUEAKY_MOUSEMAT, "Squeaky Mousemat");
translationBuilder.addConfig(
CONFIG_FARMING_SQUEAKY_MOUSEMAT_OVERLAY,
Expand All @@ -317,7 +333,6 @@ private void addFarmingConfig(CookiesTranslationBuilder translationBuilder) {
translationBuilder.add(CONFIG_FARMING_COMPOST_SORT_ORDER_VALUES_DESCENDING, "Descending");
translationBuilder.add(CONFIG_FARMING_COMPOST_SORT_ORDER_VALUES_UNSORTED, "Unsorted");

translationBuilder.add(CONFIG_FARMING_CATEGORIES_VISITOR, "Visitors");
translationBuilder.addConfig(CONFIG_FARMING_VISITOR_MATERIAL_HELPER,
"Show visitor materials",
"Shows the amount of items a visitor needs down to the actual crop.");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
// 1.21.3 2024-12-07T10:30:22.914149 cookies-mod/Language (en_us)
e7b7bab76739a378cb9b6e48a0534029ba9d04d3 assets/cookies-mod/lang/en_us.json
// 1.21.3 2024-12-11T11:17:47.4766913 cookies-mod/Language (en_us)
b8e506abeadfabc1b260c9088e803802d2607fc9 assets\cookies-mod\lang\en_us.json
11 changes: 9 additions & 2 deletions src/main/generated/assets/cookies-mod/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@
"cookies.config.farming.categories.jacobs": "Jacob / Contests",
"cookies.config.farming.categories.ranchers": "Rancher's Boots",
"cookies.config.farming.categories.render": "Render",
"cookies.config.farming.categories.visitor": "Visitors",
"cookies.config.farming.categories.visitors": "Visitors",
"cookies.config.farming.compost_sort_order.name": "Item sort",
"cookies.config.farming.compost_sort_order.tooltip": "How the items should be sorted.",
"cookies.config.farming.compost_sort_order.values.ascending": "Ascending",
Expand All @@ -218,8 +218,14 @@
"cookies.config.farming.squeaky_mouse_mat.overlay.name": "Enabled overlay",
"cookies.config.farming.squeaky_mouse_mat.overlay.tooltip": "Enables an overlay for the squeaky mousemat where you can save yaw/pitch for every crop.",
"cookies.config.farming.tooltip": "Farming related settings.",
"cookies.config.farming.visitor_drop_protection.name": "Rare drop protection",
"cookies.config.farming.visitor_drop_protection.tooltip": "Prevents rejecting visitors with rare drops for 5s",
"cookies.config.farming.visitor_drop_protection_delay.name": "Drop protection delay",
"cookies.config.farming.visitor_drop_protection_delay.tooltip": "Delay in seconds before the visitor drop protection is removed.",
"cookies.config.farming.visitor_material_helper.name": "Show visitor materials",
"cookies.config.farming.visitor_material_helper.tooltip": "Shows the amount of items a visitor needs down to the actual crop.",
"cookies.config.farming.visitor_not_as_rare_drop_protection.name": "Common drop protection",
"cookies.config.farming.visitor_not_as_rare_drop_protection.tooltip": "Prevents rejecting visitors with drops that are not as rare as the ones in the rare drop protection.",
"cookies.config.farming.yaw_pitch_display.name": "Yaw/Pitch display",
"cookies.config.farming.yaw_pitch_display.tooltip": "Displays your yaw/pitch on the screen (in a non obnoxious way).",
"cookies.config.helpers.anvil_helper.name": "Anvil Helper",
Expand Down Expand Up @@ -374,6 +380,7 @@
"cookies.craft_helper.line1": "Set the recipe as the selected",
"cookies.craft_helper.line2": "craft helper item!",
"cookies.craft_helper.placement": "Example Inventory",
"cookies.dropprotectionmessage": "Refusing temporarily disabled due to rare drop",
"cookies.go_back": "Go Back",
"cookies.hotm_utils.cost_next_10": "Cost (10)",
"cookies.hotm_utils.cost_total": "Cost (Total)",
Expand Down Expand Up @@ -473,4 +480,4 @@
"cookies.unexpected_error": "An unexpected error occurred while executing the command!",
"cookies.update_available": "Your version of the mod isn't up-to-date!",
"cookies.update_modrinth": "(Click here to open modrinth)"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
import codes.cookies.mod.config.system.options.BooleanOption;
import codes.cookies.mod.config.system.options.ButtonOption;
import codes.cookies.mod.config.system.options.EnumCycleOption;
import codes.cookies.mod.config.system.options.SliderOption;
import codes.cookies.mod.config.system.options.StringInputOption;
import codes.cookies.mod.config.system.options.TextDisplayOption;

import codes.cookies.mod.features.farming.garden.keybinds.GardenKeybindPredicate;
Expand Down Expand Up @@ -57,6 +59,13 @@ public class FarmingConfig extends Category {

public RancherSpeedConfig rancherSpeed = new RancherSpeedConfig();

@Parent
public TextDisplayOption visitors = new TextDisplayOption(CONFIG_FARMING_CATEGORIES_VISITORS);

public BooleanOption visitorRareDropProtection = new BooleanOption(CONFIG_FARMING_VISITOR_DROP_PROTECTION, true);

public BooleanOption visitorNotAsRareDropProtection = new BooleanOption(CONFIG_FARMING_VISITOR_NOT_AS_RARE_DROP_PROTECTION, false).onlyIf(visitorRareDropProtection);

@Parent
public TextDisplayOption mousemat = new TextDisplayOption(CONFIG_FARMING_SQUEAKY_MOUSEMAT);

Expand All @@ -79,7 +88,6 @@ public class FarmingConfig extends Category {
case DESCENDING -> CONFIG_FARMING_COMPOST_SORT_ORDER_VALUES_DESCENDING;
})).onlyIf(showCompostPriceBreakdown);


@Parent
public TextDisplayOption jacobsText = new TextDisplayOption(CONFIG_FARMING_CATEGORIES_JACOBS);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public class CookieDataManager {
public static final Path MOD_DATA_FOLDER = Path.of(FabricLoader.getInstance().getConfigDir().toString(), "cookiesmod/data");

public static void load() {
if(!Files.exists(MOD_DATA_FOLDER)) {
if (!Files.exists(MOD_DATA_FOLDER)) {
ExceptionHandler.tryCatch(() -> Files.createDirectories(MOD_DATA_FOLDER));
}

Expand Down Expand Up @@ -65,7 +65,7 @@ private static void loadField(Field declaredField) {

final String fileContent = new String(bytes, StandardCharsets.UTF_8);
final JsonElement fileElement = JsonParser.parseString(fileContent);
if(fileElement.isJsonObject())
if (fileElement.isJsonObject())
data.read(fileElement.getAsJsonObject());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ private void renderPlayer(DrawContext drawContext, DungeonPlayer player) {
}
drawContext.getMatrices().push();
if (DungeonConfig.getInstance().showPlayerSkulls.getValue() && player.getPlayer() != null) {
if(DungeonConfig.getInstance().rotatePlayerHeads.getValue()) {
if (DungeonConfig.getInstance().rotatePlayerHeads.getValue()) {
drawContext.getMatrices()
.multiply(RotationAxis.POSITIVE_Z.rotationDegrees((float) (player.getRotation().getValue())));
}
Expand All @@ -226,7 +226,7 @@ private void renderPlayer(DrawContext drawContext, DungeonPlayer player) {

this.drawPlayerHead(drawContext, player);

if(!DungeonConfig.getInstance().rotatePlayerHeads.getValue()) {
if (!DungeonConfig.getInstance().rotatePlayerHeads.getValue()) {
drawContext.getMatrices().push();
drawContext.getMatrices().translate(4, 4, 0);
drawContext.getMatrices().multiply(RotationAxis.POSITIVE_Z.rotationDegrees((float) (player.getRotation().getValue())));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package codes.cookies.mod.features.farming.garden;

import codes.cookies.mod.features.Loader;

import codes.cookies.mod.features.farming.garden.visitors.VisitorDropProtection;
/**
* Utility class to load all garden features.
*/
Expand All @@ -11,6 +11,6 @@ public class GardenFeatures {
public static void load() {
Loader.load("PlotPriceBreakdown", PlotPriceBreakdown::new);
Loader.load("CompostUpgrades", CompostUpgrades::new);
//Loader.load("VisitorHelper", VisitorHelper::new);
Loader.load("VisitorDropProtection", VisitorDropProtection::init);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public enum GardenKeybindPredicate {
HOLDING_FARMING_TOOL.shouldBeEnabled = () ->
{
var holdingFarmingTool = getHoldingFarmingTool();
if(heldFarmingTool != holdingFarmingTool) {
if (heldFarmingTool != holdingFarmingTool) {
for (var keybind : KeyBinding.KEYS_BY_ID.values()) {
keybind.setPressed(false);
keybind.timesPressed = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ protected void refreshWidgetPositions() {
public boolean mouseClicked(double mouseX, double mouseY, int button) {
if (this.selectedKeyBinding != null) {
var key = InputUtil.Type.MOUSE.createFromCode(button);
if(key == selectedKeyBinding.getDefaultKey()) {
if (key == selectedKeyBinding.getDefaultKey()) {
KeyBindingAccessor.toAccessor(selectedKeyBinding).cookies$setGardenKey(null);
} else {
KeyBindingAccessor.toAccessor(selectedKeyBinding).cookies$setGardenKey(new GardenKeybindsData.GardenKeyBindOverride(key));
Expand All @@ -99,7 +99,7 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) {
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
if (this.selectedKeyBinding != null) {
var key = keyCode == GLFW.GLFW_KEY_ESCAPE ? InputUtil.UNKNOWN_KEY : InputUtil.fromKeyCode(keyCode, scanCode);
if(key.equals(selectedKeyBinding.getDefaultKey())) {
if (key.equals(selectedKeyBinding.getDefaultKey())) {
KeyBindingAccessor.toAccessor(selectedKeyBinding).cookies$setGardenKey(null);
} else {
KeyBindingAccessor.toAccessor(selectedKeyBinding).cookies$setGardenKey(new GardenKeybindsData.GardenKeyBindOverride(key));
Expand Down Expand Up @@ -333,12 +333,12 @@ protected void update() {
MutableText mutableText = Text.empty();

var thisKey = this.binding.boundKey;
if(this.gardenKey.cookies$getGardenKey() != null)
if (this.gardenKey.cookies$getGardenKey() != null)
{
thisKey = this.gardenKey.cookies$getGardenKey().key();
}

if(!thisKey.equals(InputUtil.UNKNOWN_KEY)) {
if (!thisKey.equals(InputUtil.UNKNOWN_KEY)) {
for (KeyBinding keyBinding : ControlsListWidget.this.client.options.allKeys) {
var otherKey = keyBinding.boundKey;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
package codes.cookies.mod.features.farming.garden.visitors;

import codes.cookies.mod.CookiesMod;
import codes.cookies.mod.config.ConfigManager;
import codes.cookies.mod.events.InventoryEvents;
import codes.cookies.mod.events.api.InventoryContentUpdateEvent;
import codes.cookies.mod.translations.TranslationKeys;
import codes.cookies.mod.utils.exceptions.ExceptionHandler;
import codes.cookies.mod.utils.items.CookiesDataComponentTypes;
import codes.cookies.mod.utils.skyblock.LocationUtils;
import codes.cookies.mod.utils.skyblock.inventories.ItemBuilder;
import com.google.common.util.concurrent.Runnables;
import net.minecraft.client.gui.screen.ingame.HandledScreen;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.screen.slot.Slot;
import net.minecraft.text.Style;
import net.minecraft.text.Text;

import net.minecraft.util.Formatting;
import net.minecraft.util.Rarity;

import org.apache.commons.lang3.StringUtils;

import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class VisitorDropProtection implements TranslationKeys {

private static final Pattern rewardsPattern = Pattern.compile("Rewards:([\\S\\s]*)(?:Click|Missing)");

private VisitorDropProtection(HandledScreen<?> handledScreen) {
InventoryContentUpdateEvent.registerSlot(handledScreen.getScreenHandler(),
ExceptionHandler.wrap(this::updateSlots));
}

private void updateSlots(Slot slot) {
if (slot.id == 33) {
handleRejectButton(slot.getStack(), handleAcceptItem(slot.inventory.getStack(29)));
}
}

protected static final ItemStack disabledItem = new ItemBuilder(Items.BARRIER).hideAdditionalTooltips().set(CookiesDataComponentTypes.ITEM_CLICK_RUNNABLE, Runnables.doNothing())
.setName(Text.translatable(DROP_PROTECTION_MESSAGE).setStyle(Style.EMPTY.withColor(Formatting.RED).withItalic(false).withBold(true))).set(DataComponentTypes.RARITY, Rarity.COMMON).build();

private void handleRejectButton(ItemStack rejectStack, boolean applyProtection) {
if (!applyProtection || rejectStack == null || rejectStack.isEmpty() || !rejectStack.isOf(Items.RED_TERRACOTTA)) {
return;
}

rejectStack.set(CookiesDataComponentTypes.ITEM_CLICK_RUNNABLE, Runnables.doNothing());
rejectStack.set(CookiesDataComponentTypes.OVERRIDE_ITEM, disabledItem);
CookiesMod.getExecutorService().schedule(() -> {
rejectStack.remove(CookiesDataComponentTypes.OVERRIDE_ITEM);
rejectStack.remove(CookiesDataComponentTypes.ITEM_CLICK_RUNNABLE);
}, 5, TimeUnit.SECONDS);
}

private boolean handleAcceptItem(ItemStack visitorItem) {
if (visitorItem == null || visitorItem.isEmpty() || !visitorItem.isOf(Items.GREEN_TERRACOTTA) || !visitorItem.contains(DataComponentTypes.LORE)) {
return false;
}
var lore = String.join("\n", visitorItem.get(DataComponentTypes.LORE).lines().stream().map(Text::getString).toArray(String[]::new));

Matcher matcher = rewardsPattern.matcher(lore);

if (!matcher.find()) {
return false;
}

for (String rareDrop : rareDrops) {
if (StringUtils.containsIgnoreCase(lore, rareDrop)) {
return true;
}
}

if (ConfigManager.getConfig().farmingConfig.visitorNotAsRareDropProtection.getValue()) {
for (String commonDrop : commonDrops) {
if (StringUtils.containsIgnoreCase(lore, commonDrop)) {
return true;
}
}
}

return false;
}

private static final String[] rareDrops = new String[] {
"Bandana",
"Music",
"Dedication",
"Jungle Key",
"Soul",
"Space",
"Harbinger",
"Overgrown Grass",
"Dye",
};

private static final String[] commonDrops = new String[] {
"Candy",
"Biofuel",
"Pet Cake",
"Fine Flour",
"Pelt",
"Velvet",
"Cashmere",
"Satin",
"Oxford",
"Powder",
};

public static void init() {
InventoryEvents.beforeInit("cookies-behaviour:always", inv -> LocationUtils.Island.GARDEN.isActive() && ConfigManager.getConfig().farmingConfig.visitorRareDropProtection.getValue(), VisitorDropProtection::new);
}
}
14 changes: 7 additions & 7 deletions src/main/java/codes/cookies/mod/mixins/KeybindingMixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public abstract class KeybindingMixin implements KeyBindingAccessor {
@Override
public void cookies$setGardenKey(GardenKeybindsData.GardenKeyBindOverride key) {
cookies$gardenKey = key;
if(key != null) {
if (key != null) {
GARDEN_KEY_TO_BINDINGS.put(key.key(), this);
}
}
Expand All @@ -63,7 +63,7 @@ public abstract class KeybindingMixin implements KeyBindingAccessor {

@Inject(method = "updatePressedStates", at = @At(value = "HEAD"), cancellable = true)
private static void cookies$updatePressedStates(CallbackInfo ci) {
if(ConfigManager.getConfig().farmingConfig.gardenKeybindPredicate.getValue().getShouldBeEnabled().get()) {
if (ConfigManager.getConfig().farmingConfig.gardenKeybindPredicate.getValue().getShouldBeEnabled().get()) {
for (var keyBinding : GARDEN_KEY_TO_BINDINGS.values()) {
if (keyBinding.cookies$getGardenKey().key().getCategory() == InputUtil.Type.KEYSYM && keyBinding.cookies$getGardenKey().key().getCode() != InputUtil.UNKNOWN_KEY.getCode()) {
((KeyBinding)keyBinding).setPressed(InputUtil.isKeyPressed(MinecraftClient.getInstance().getWindow().getHandle(), keyBinding.cookies$getGardenKey().key().getCode()));
Expand All @@ -75,7 +75,7 @@ public abstract class KeybindingMixin implements KeyBindingAccessor {

@Inject(method = "setKeyPressed", at = @At(value = "HEAD"), cancellable = true)
private static void cookies$setKeyPressed(InputUtil.Key key, boolean pressed, CallbackInfo ci) {
if(ConfigManager.getConfig().farmingConfig.gardenKeybindPredicate.getValue().getShouldBeEnabled().get()) {
if (ConfigManager.getConfig().farmingConfig.gardenKeybindPredicate.getValue().getShouldBeEnabled().get()) {
if (GARDEN_KEY_TO_BINDINGS.get(key) instanceof KeyBindingAccessor accessor) {
if (accessor.cookies$getGardenKey() != null) {
((KeyBinding) accessor).setPressed(pressed);
Expand All @@ -90,15 +90,15 @@ public abstract class KeybindingMixin implements KeyBindingAccessor {

@Inject(method = "onKeyPressed", at = @At(value = "HEAD"), cancellable = true)
private static void cookies$onKeyPressed(InputUtil.Key key, CallbackInfo ci) {
if(ConfigManager.getConfig().farmingConfig.gardenKeybindPredicate.getValue().getShouldBeEnabled().get()) {
if (ConfigManager.getConfig().farmingConfig.gardenKeybindPredicate.getValue().getShouldBeEnabled().get()) {
if (GARDEN_KEY_TO_BINDINGS.get(key) instanceof KeyBindingAccessor accessor) {
if (accessor.cookies$getGardenKey() != null) {
((KeyBinding) accessor).timesPressed++;
}

ci.cancel();
}
if(KEY_TO_BINDINGS.get(key) instanceof KeyBindingAccessor accessor && accessor.cookies$getGardenKey() != null) {
if (KEY_TO_BINDINGS.get(key) instanceof KeyBindingAccessor accessor && accessor.cookies$getGardenKey() != null) {
ci.cancel();
}
}
Expand All @@ -107,7 +107,7 @@ public abstract class KeybindingMixin implements KeyBindingAccessor {
@Inject(method = "matchesKey", at = @At(value = "HEAD"), cancellable = true)
private void cookies$matchesKey(int keyCode, int scanCode, CallbackInfoReturnable<Boolean> cir)
{
if(ConfigManager.getConfig().farmingConfig.gardenKeybindPredicate.getValue().getShouldBeEnabled().get()) {
if (ConfigManager.getConfig().farmingConfig.gardenKeybindPredicate.getValue().getShouldBeEnabled().get()) {
if (this.cookies$getGardenKey() != null) {
cir.setReturnValue(keyCode == InputUtil.UNKNOWN_KEY.getCode()
? this.cookies$getGardenKey().key().getCategory() == InputUtil.Type.SCANCODE && this.cookies$getGardenKey().key().getCode() == scanCode
Expand All @@ -117,7 +117,7 @@ public abstract class KeybindingMixin implements KeyBindingAccessor {
}
@Inject(method = "matchesMouse", at = @At(value = "HEAD"), cancellable = true)
public void matchesMouse(int code, CallbackInfoReturnable<Boolean> cir) {
if(ConfigManager.getConfig().farmingConfig.gardenKeybindPredicate.getValue().getShouldBeEnabled().get()) {
if (ConfigManager.getConfig().farmingConfig.gardenKeybindPredicate.getValue().getShouldBeEnabled().get()) {
if (this.cookies$getGardenKey() != null) {
cir.setReturnValue(this.cookies$getGardenKey().key().getCategory() == InputUtil.Type.MOUSE && this.cookies$getGardenKey().key().getCode() == code);
}
Expand Down
Loading

0 comments on commit 74488e4

Please sign in to comment.