diff --git a/build.gradle b/build.gradle index cfa8784..75ff936 100644 --- a/build.gradle +++ b/build.gradle @@ -14,9 +14,14 @@ repositories { maven { url "https://maven.shedaniel.me/" } maven { url "https://maven.terraformersmc.com/" } maven { url "https://www.cursemaven.com" } - maven { url "https://ladysnake.jfrog.io/artifactory/mods" } +// maven { url "https://ladysnake.jfrog.io/artifactory/mods" } maven { url "https://jitpack.io" } maven { url "https://maven.nucleoid.xyz/"} + maven { url "https://api.modrinth.com/maven" } + + maven { + setUrl("https://maven.ladysnake.org/releases") + } } dependencies { @@ -29,11 +34,13 @@ dependencies { modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" // LevelZ - modImplementation ('com.github.Globox1997:LevelZ:1.19-SNAPSHOT') { +// modImplementation ('com.github.Globox1997:LevelZ:1.19-SNAPSHOT') { + modImplementation ('maven.modrinth:levelz:1.4.9+1.19.2') { exclude(group: "net.fabricmc.fabric-api") } // LibZ - modImplementation ('com.github.Globox1997:LibZ:344927d33c') { +// modImplementation ('com.github.Globox1997:LibZ:344927d33c') { + modImplementation ('maven.modrinth:libz:1.0.0') { exclude(group: "net.fabricmc.fabric-api") } // Cloth @@ -48,18 +55,18 @@ dependencies { modCompileOnly ('curse.maven:numismatic-overhaul-568316:3860596') { exclude(group: "net.fabricmc.fabric-api") } - modCompileOnly ("dev.onyxstudios.cardinal-components-api:cardinal-components-base:5.0.0-beta.1") - modCompileOnly ("dev.onyxstudios.cardinal-components-api:cardinal-components-entity:5.0.0-beta.1") + modCompileOnly ("dev.onyxstudios.cardinal-components-api:cardinal-components-base:5.0.2") + modCompileOnly ("dev.onyxstudios.cardinal-components-api:cardinal-components-entity:5.0.2") // FarmersDelight modCompileOnly ('curse.maven:farmers-delight-fabric-482834:3947019') { exclude(group: "net.fabricmc.fabric-api") } // FallingTree - modCompileOnly ('curse.maven:falling-tree-349559:3968312'),{ + modCompileOnly ('curse.maven:falling-tree-349559:3968312'){ exclude(group: "net.fabricmc.fabric-api") } // TreeChop - modCompileOnly ('curse.maven:treechop-421377:4413708'),{ + modCompileOnly ('curse.maven:treechop-421377:4413708'){ exclude(group: "net.fabricmc.fabric-api") } // MedievalWeapons @@ -67,7 +74,7 @@ dependencies { // exclude(group: "net.fabricmc.fabric-api") // } // Harvest Scythes - modCompileOnly ('curse.maven:harvest-scythes-412225:4026103'),{ + modCompileOnly ('curse.maven:harvest-scythes-412225:4026103'){ exclude(group: "net.fabricmc.fabric-api") } } diff --git a/src/main/java/net/jobsaddon/access/PlayerAccess.java b/src/main/java/net/jobsaddon/access/PlayerAccess.java index a050f94..d3fb784 100644 --- a/src/main/java/net/jobsaddon/access/PlayerAccess.java +++ b/src/main/java/net/jobsaddon/access/PlayerAccess.java @@ -13,4 +13,8 @@ public interface PlayerAccess { public void setLastRecipeId(Identifier identifier); + public boolean isQuickCrafted(); + + public void setQuickCraftedRecipe(boolean quickCrafted); + } diff --git a/src/main/java/net/jobsaddon/mixin/misc/CraftingScreenHandlerMixin.java b/src/main/java/net/jobsaddon/mixin/misc/CraftingScreenHandlerMixin.java new file mode 100644 index 0000000..8d867f6 --- /dev/null +++ b/src/main/java/net/jobsaddon/mixin/misc/CraftingScreenHandlerMixin.java @@ -0,0 +1,22 @@ +package net.jobsaddon.mixin.misc; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import net.jobsaddon.access.PlayerAccess; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.CraftingScreenHandler; + +@Mixin(CraftingScreenHandler.class) +public class CraftingScreenHandlerMixin { + + @Inject(method = "transferSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/screen/ScreenHandlerContext;run(Ljava/util/function/BiConsumer;)V")) + private void quickMoveMixin(PlayerEntity player, int slot, CallbackInfoReturnable info) { + if (!player.getWorld().isClient()) { + ((PlayerAccess) player).setQuickCraftedRecipe(true); + } + } +} diff --git a/src/main/java/net/jobsaddon/mixin/misc/ItemMixin.java b/src/main/java/net/jobsaddon/mixin/misc/ItemMixin.java index d7caed4..bba328f 100644 --- a/src/main/java/net/jobsaddon/mixin/misc/ItemMixin.java +++ b/src/main/java/net/jobsaddon/mixin/misc/ItemMixin.java @@ -1,5 +1,10 @@ package net.jobsaddon.mixin.misc; +import net.minecraft.screen.BlastFurnaceScreenHandler; +import net.minecraft.screen.CraftingScreenHandler; +import net.minecraft.screen.FurnaceScreenHandler; +import net.minecraft.screen.PlayerScreenHandler; +import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -18,13 +23,24 @@ public class ItemMixin { @Inject(method = "onCraft", at = @At("TAIL")) private void onCraftMixin(ItemStack stack, World world, PlayerEntity player, CallbackInfo info) { - if (!world.isClient && stack != null && !stack.isEmpty()) { - if (((PlayerAccess) player).getLastRecipeId() == null || !JobLists.restrictedRecipeIds.contains(((PlayerAccess) player).getLastRecipeId())) { + + if (!world.isClient() && stack != null && !stack.isEmpty()) { + boolean isQuickCrafted = ((PlayerAccess) player).isQuickCrafted(); + boolean isRestricted = JobLists.restrictedRecipeIds.contains(((PlayerAccess) player).getLastRecipeId()); + Identifier receipt = ((PlayerAccess) player).getLastRecipeId(); + + + // We need to rely on this check, because of a bug in 1.19 causing wrong setLastRecipeId + boolean isFurnace = player.currentScreenHandler instanceof FurnaceScreenHandler || player.currentScreenHandler instanceof BlastFurnaceScreenHandler; + + if (!isQuickCrafted && ((receipt == null || !isRestricted) || isFurnace)) { JobHelper.addSmitherXp(player, stack); JobHelper.addFisherCraftingXp(player, stack); JobHelper.addFarmerCraftingXp(player, stack); + ((PlayerAccess) player).setLastRecipeId(null); } - ((PlayerAccess) player).setLastRecipeId(null); + ((PlayerAccess) player).setQuickCraftedRecipe(false); } } } + diff --git a/src/main/java/net/jobsaddon/mixin/misc/RecipeUnlockerMixin.java b/src/main/java/net/jobsaddon/mixin/misc/RecipeUnlockerMixin.java index 5ff576a..a005c33 100644 --- a/src/main/java/net/jobsaddon/mixin/misc/RecipeUnlockerMixin.java +++ b/src/main/java/net/jobsaddon/mixin/misc/RecipeUnlockerMixin.java @@ -16,6 +16,7 @@ public interface RecipeUnlockerMixin { @Inject(method = "shouldCraftRecipe", at = @At("HEAD")) default public void shouldCraftRecipeMixin(World world, ServerPlayerEntity player, Recipe recipe, CallbackInfoReturnable info) { + System.out.println("Should craft called " + recipe.getId()); ((PlayerAccess) player).setLastRecipeId(recipe.getId()); } } diff --git a/src/main/java/net/jobsaddon/mixin/player/PlayerEntityMixin.java b/src/main/java/net/jobsaddon/mixin/player/PlayerEntityMixin.java index 487bfa5..240287c 100644 --- a/src/main/java/net/jobsaddon/mixin/player/PlayerEntityMixin.java +++ b/src/main/java/net/jobsaddon/mixin/player/PlayerEntityMixin.java @@ -33,6 +33,7 @@ public class PlayerEntityMixin implements JobsManagerAccess, PlayerAccess { private int blockCount; @Nullable private Identifier lastRecipeIdentifier; + private boolean quickCraftedRecipe; @Inject(method = "readCustomDataFromNbt", at = @At(value = "TAIL")) private void readCustomDataFromNbtMixin(NbtCompound tag, CallbackInfo info) { @@ -114,4 +115,14 @@ public Identifier getLastRecipeId() { public void setLastRecipeId(Identifier identifier) { this.lastRecipeIdentifier = identifier; } + + @Override + public boolean isQuickCrafted() { + return this.quickCraftedRecipe; + } + + @Override + public void setQuickCraftedRecipe(boolean quickCrafted) { + this.quickCraftedRecipe = quickCrafted; + } } diff --git a/src/main/resources/data/jobsaddon/restricted/default.json b/src/main/resources/data/jobsaddon/restricted/default.json new file mode 100644 index 0000000..4f94123 --- /dev/null +++ b/src/main/resources/data/jobsaddon/restricted/default.json @@ -0,0 +1,46 @@ +{ + "replace": false, + "recipes": [ + "minecraft:wheat", + "minecraft:hay_block", + "minecraft:coal_block", + "minecraft:coal", + "minecraft:gold_ingot_from_nuggets", + "minecraft:gold_nugget", + "minecraft:gold_ingot_from_gold_block", + "minecraft:gold_block", + "minecraft:raw_gold", + "minecraft:raw_gold_block", + "minecraft:iron_ingot_from_nuggets", + "minecraft:iron_nugget", + "minecraft:iron_ingot_from_iron_block", + "minecraft:iron_block", + "minecraft:raw_iron", + "minecraft:raw_iron_block", + "minecraft:copper_block", + "minecraft:copper_ingot", + "minecraft:copper_ingot_from_waxed_copper_block", + "minecraft:raw_copper", + "minecraft:raw_copper_block", + "minecraft:diamond_block", + "minecraft:diamond", + "minecraft:netherite_block", + "minecraft:netherite_ingot_from_netherite_block", + "minecraft:redstone_block", + "minecraft:redstone", + "minecraft:emerald_block", + "minecraft:emerald", + "minecraft:lapis_block", + "minecraft:lapis_lazuli", + "minecraft:quartz_block", + "minecraft:slime_ball", + "minecraft:slime_block", + "minecraft:honey_block", + "minecraft:honey_bottle", + "minecraft:dried_kelp", + "minecraft:dried_kelp_block", + "minecraft:dried_kelp_from_campfire_cooking", + "minecraft:dried_kelp_from_smelting", + "minecraft:dried_kelp_from_smoking" + ] +} \ No newline at end of file diff --git a/src/main/resources/jobsaddon.mixins.json b/src/main/resources/jobsaddon.mixins.json index 7e08da9..364ba77 100644 --- a/src/main/resources/jobsaddon.mixins.json +++ b/src/main/resources/jobsaddon.mixins.json @@ -14,6 +14,7 @@ "misc.EnchantmentScreenHandlerMixin", "misc.ItemMixin", "misc.RecipeUnlockerMixin", + "misc.CraftingScreenHandlerMixin", "block.BlockMixin", "block.TntBlockMixin", "block.SweetBerryBushBlockMixin",