Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
import java.util.concurrent.Callable

plugins {
id 'fabric-loom' version '1.7-SNAPSHOT'
id 'fabric-loom' version '0.8-SNAPSHOT'
id 'maven-publish'
id 'com.github.breadmoirai.github-release' version "2.3.7"
}

sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
sourceCompatibility = JavaVersion.VERSION_16
targetCompatibility = JavaVersion.VERSION_16

archivesBaseName = project.archives_base_name
version = project.mod_version
version = project.minecraft_version+'-'+project.mod_version+'+v'+new Date().format('yyMMdd')
group = project.maven_group

repositories {
mavenLocal()
maven {
name 'Gegy'
url 'https://maven.gegy.dev'
Expand Down
12 changes: 6 additions & 6 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ org.gradle.jvmargs=-Xmx1G

# Fabric Properties
# check these on https://modmuss50.me/fabric.html
minecraft_version=1.21.1
yarn_mappings=1.21.1+build.1
loader_version=0.15.11
minecraft_version=1.16.5
yarn_mappings=1.16.5+build.1
loader_version=0.11.1

# Mod Properties
mod_version=1.7.4
Expand All @@ -14,8 +14,8 @@ archives_base_name=one-click-crafting

# Dependencies
# check this on https://modmuss50.me/fabric.html
fabric_version=0.102.0+1.21.1
fabric_version=0.29.4+1.16
# https://github.com/LambdAurora/SpruceUI
spruceui_version=5.1.0+1.21
spruceui_version=2.1.4+1.16
# https://maven.terraformersmc.com/releases/com/terraformersmc/modmenu/
modmenu_version=11.0.1
modmenu_version=1.15.0
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.ingame.HandledScreen;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.options.KeyBinding;
import net.minecraft.client.util.InputUtil;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.recipe.RecipeEntry;
import net.minecraft.recipe.Recipe;
import net.minecraft.screen.slot.SlotActionType;
import org.lwjgl.glfw.GLFW;

Expand Down Expand Up @@ -44,17 +44,18 @@ public void onInitializeClient() {
));
}

public void recipeClicked(RecipeEntry<?> recipe) {
//System.out.println("recipe clicked " + recipe.getId());
//System.out.println("enabled = " + isEnabled());
public void recipeClicked(Recipe<?> recipe) {
isDropping = false;
isShiftDropping = false;
lastCraft = null;
if (isEnabled()) {
isDropping = config.isDropEnable() && isDropPressed();
isShiftDropping = isDropping && Screen.hasShiftDown();
lastCraft = recipe.value().getResult((MinecraftClient.getInstance().world.getRegistryManager()));
} else {
isDropping = false;
isShiftDropping = false;
lastCraft = null;
boolean dropping = config.isDropEnable() && isDropPressed();
boolean isShiftDown = Screen.hasShiftDown();
if (isShiftDown || dropping || config.isSingleClickEnable()) {
isDropping = dropping;
isShiftDropping = isDropping && isShiftDown;
lastCraft = recipe.getOutput();
}
}
}

Expand All @@ -71,15 +72,14 @@ private boolean isToggleHoldPressed() {
}

private boolean isDropPressed() {
return isKeybindingPressed(MinecraftClient.getInstance().options.dropKey);
return isKeybindingPressed(MinecraftClient.getInstance().options.keyDrop);
}

private boolean isKeybindingPressed(KeyBinding keyBinding) {
return InputUtil.isKeyPressed(MinecraftClient.getInstance().getWindow().getHandle(), ((KeyBindingAccessor) keyBinding).getBoundKey().getCode());
}

public void onResultSlotUpdated(ItemStack itemStack) {
//System.out.println("Result Slot Updated with " + itemStack);
if (lastCraft == null) return;
if (itemStack.getItem() == Items.AIR) {
if (startedDropCrafting) {
Expand All @@ -89,7 +89,7 @@ public void onResultSlotUpdated(ItemStack itemStack) {
}
return;
}
if (!ItemStack.areItemsEqual(itemStack, lastCraft)) {
if (!itemStack.isItemEqual(lastCraft)) {
return;
}
MinecraftClient client = MinecraftClient.getInstance();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public class OneClickCraftingConfig {
private boolean alwaysOn = true;
private boolean altHold = true;
private boolean ctrlHold = true;
private boolean singleClickEnable = false;
private boolean dropEnable = true;

public static OneClickCraftingConfig getInstance() {
Expand All @@ -44,6 +45,7 @@ public static void loadModConfig() {
instance.alwaysOn = config.alwaysOn;
instance.altHold = config.altHold;
instance.ctrlHold = config.ctrlHold;
instance.singleClickEnable = config.singleClickEnable;
instance.dropEnable = config.dropEnable;
} catch (IOException e) {
e.printStackTrace();
Expand Down Expand Up @@ -86,6 +88,14 @@ public void setCtrlHold(boolean ctrlHold) {
this.ctrlHold = ctrlHold;
}

public boolean isSingleClickEnable() {
return singleClickEnable;
}

public void setSingleClickEnable(boolean singleClickEnable) {
this.singleClickEnable = singleClickEnable;
}

public boolean isDropEnable() {
return dropEnable;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,33 @@
package com.github.breadmoirai.oneclickcrafting.config;

import dev.lambdaurora.spruceui.Position;
import dev.lambdaurora.spruceui.SpruceTexts;
import dev.lambdaurora.spruceui.option.SpruceBooleanOption;
import dev.lambdaurora.spruceui.screen.SpruceScreen;
import dev.lambdaurora.spruceui.widget.SpruceButtonWidget;
import dev.lambdaurora.spruceui.widget.container.SpruceOptionListWidget;
import me.lambdaurora.spruceui.Position;
import me.lambdaurora.spruceui.SpruceTexts;
import me.lambdaurora.spruceui.background.SimpleColorBackground;
import me.lambdaurora.spruceui.option.SpruceBooleanOption;
import me.lambdaurora.spruceui.screen.SpruceScreen;
import me.lambdaurora.spruceui.widget.SpruceButtonWidget;
import me.lambdaurora.spruceui.widget.SpruceSeparatorWidget;
import me.lambdaurora.spruceui.widget.container.SpruceOptionListWidget;
import me.lambdaurora.spruceui.wrapper.VanillaButtonWrapper;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.text.Text;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.TranslatableText;

@Environment(EnvType.CLIENT)
public class OneClickCraftingConfigScreen extends SpruceScreen {
private final Screen parent;

public OneClickCraftingConfigScreen(Screen parent) {
super(Text.translatable("config.oneclickcrafting.title"));
super(new TranslatableText("config.oneclickcrafting.title"));
this.parent = parent;
}
};

@Override
protected void init() {
super.init();
SpruceOptionListWidget list = new SpruceOptionListWidget(Position.of(0, 22), this.width, this.height - 36 - 22);
SpruceOptionListWidget list = new SpruceOptionListWidget(Position.of(0, 32), this.width, this.height - 36 - 32);

OneClickCraftingConfig config = OneClickCraftingConfig.getInstance();
SpruceBooleanOption alwaysOn = new SpruceBooleanOption(
Expand All @@ -36,42 +40,55 @@ protected void init() {
"config.oneclickcrafting.alt_hold",
config::isAltHold,
config::setAltHold,
Text.translatable("config.oneclickcrafting.alt_hold.tooltip")
new TranslatableText("config.oneclickcrafting.alt_hold.tooltip")
);
SpruceBooleanOption ctrlHold = new SpruceBooleanOption(
"config.oneclickcrafting.ctrl_hold",
config::isCtrlHold,
config::setCtrlHold,
Text.translatable("config.oneclickcrafting.ctrl_hold.tooltip")
new TranslatableText("config.oneclickcrafting.ctrl_hold.tooltip")
);
SpruceBooleanOption singleClickEnable = new SpruceBooleanOption(
"config.oneclickcrafting.single_click_enable",
config::isSingleClickEnable,
config::setSingleClickEnable,
new TranslatableText("config.oneclickcrafting.single_click_enable.tooltip")
);
SpruceBooleanOption dropEnable = new SpruceBooleanOption(
"config.oneclickcrafting.drop_enable",
config::isDropEnable,
config::setDropEnable,
Text.translatable("config.oneclickcrafting.drop_enable.tooltip")
new TranslatableText("config.oneclickcrafting.drop_enable.tooltip")
);

list.addSingleOptionEntry(alwaysOn);
list.addSingleOptionEntry(ctrlHold);
list.addSingleOptionEntry(altHold);
list.addSingleOptionEntry(singleClickEnable);
list.addSingleOptionEntry(dropEnable);
list.setRenderTransition(false);
list.setBackground(new SimpleColorBackground(0, 0, 0, 0));

SpruceButtonWidget done = new SpruceButtonWidget(Position.of(this, this.width / 2 + 4, this.height - 28), 150, 20, SpruceTexts.GUI_DONE,
VanillaButtonWrapper done = new SpruceButtonWidget(Position.of(this, this.width / 2 - 75, this.height - 28), 150, 20, SpruceTexts.GUI_DONE,
btn -> {
if (this.client != null) {
this.client.setScreen(this.parent);
this.client.method_29970(this.parent);
}
});
}).asVanilla();

addDrawableChild(list);
addDrawableChild(done);
this.children.add(list);
this.addButton(done);
}

@Override
public void renderTitle(MatrixStack matrices, int mouseX, int mouseY, float delta) {
drawCenteredText(matrices, this.textRenderer, this.title, this.width / 2, 16, 16777215);
}

@Override
public void close() {
public void onClose() {
if (this.client != null) {
this.client.setScreen(parent);
this.client.method_29970(this.parent); // setScreen
}
OneClickCraftingConfig.saveModConfig();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class ClientPlayNetworkHandlerMixin {

@Inject(at = @At("TAIL"), method = "onScreenHandlerSlotUpdate(Lnet/minecraft/network/packet/s2c/play/ScreenHandlerSlotUpdateS2CPacket;)V")
private void onScreenHandlerSlotUpdate(ScreenHandlerSlotUpdateS2CPacket packet, CallbackInfo ci) {
if (packet.getSlot() == 0 && packet.getStack() != null)
OneClickCraftingClient.getInstance().onResultSlotUpdated(packet.getStack());
if (packet.getSlot() == 0 && packet.getItemStack() != null)
OneClickCraftingClient.getInstance().onResultSlotUpdated(packet.getItemStack());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.github.breadmoirai.oneclickcrafting.client.OneClickCraftingClient;
import net.minecraft.client.network.ClientPlayerInteractionManager;
import net.minecraft.recipe.RecipeEntry;
import net.minecraft.recipe.Recipe;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
Expand All @@ -11,8 +11,8 @@
@Mixin(ClientPlayerInteractionManager.class)
public class ClientPlayerInteractionManagerMixin {

@Inject(at = @At("TAIL"), method = "clickRecipe(ILnet/minecraft/recipe/RecipeEntry;Z)V")
private void clickRecipe(int syncId, RecipeEntry<?> recipe, boolean craftAll, CallbackInfo ci) {
@Inject(at = @At("TAIL"), method = "clickRecipe(ILnet/minecraft/recipe/Recipe;Z)V")
private void clickRecipe(int syncId, Recipe<?> recipe, boolean craftAll, CallbackInfo ci) {
OneClickCraftingClient.getInstance().recipeClicked(recipe);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.breadmoirai.oneclickcrafting.mixin;

import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.options.KeyBinding;
import net.minecraft.client.util.InputUtil;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/assets/oneclickcrafting/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
"config.oneclickcrafting.ctrl_hold.tooltip": "Enables holding Ctrl to toggle the mod's functionality",
"config.oneclickcrafting.drop_enable": "Enable Drop Key on Craft",
"config.oneclickcrafting.drop_enable.tooltip": "Holding your drop key and clicking on a recipe will craft it and drop it instead of moving it to your inventory. Does not work with shift.",
"config.oneclickcrafting.single_click_enable": "Enable Single Click Crafting",
"config.oneclickcrafting.single_click_enable.tooltip": "Single click on a recipe will craft it if no other combination keys (e.g. drop key or shift) are pressed.",
"category.oneclickcrafting.keybindings": "One Click Crafting",
"key.oneclickcrafting.toggle_hold": "Toggle (Hold)"
}
6 changes: 3 additions & 3 deletions src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@
"one-click-crafting.mixins.json"
],
"depends": {
"fabricloader": ">=0.15.7",
"fabricloader": ">=0.11.1",
"fabric-key-binding-api-v1": "*"
},
"recommends": {
"modmenu": ">=11.0.1",
"minecraft": ">=1.21.1"
"modmenu": ">=1.15.0",
"minecraft": ">=1.16.5"
}
}
2 changes: 1 addition & 1 deletion src/main/resources/one-click-crafting.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"required": true,
"minVersion": "0.8",
"package": "com.github.breadmoirai.oneclickcrafting.mixin",
"compatibilityLevel": "JAVA_17",
"compatibilityLevel": "JAVA_16",
"mixins": [

],
Expand Down