diff --git a/README.md b/README.md index 24595da..766e643 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,18 @@ Real life days are calculated differently from the world time but are stored in +
Items can now be repaired at crafting tables + +
+ +
Dyed wool can be turned back into white wool using bone meal + +
+ ### Fixes
Fixes selected blocks being rendered under text in containers diff --git a/src/main/java/xyz/pixelatedw/finalbeta/MainMod.java b/src/main/java/xyz/pixelatedw/finalbeta/MainMod.java index 5fc95db..6b6d357 100644 --- a/src/main/java/xyz/pixelatedw/finalbeta/MainMod.java +++ b/src/main/java/xyz/pixelatedw/finalbeta/MainMod.java @@ -1,33 +1,11 @@ package xyz.pixelatedw.finalbeta; -import java.lang.reflect.Method; - import net.fabricmc.api.ModInitializer; -import net.minecraft.item.ItemInstance; -import net.minecraft.item.ItemType; -import net.minecraft.recipe.RecipeRegistry; -import net.minecraft.tile.Tile; -import net.minecraft.tile.WoolTile; public class MainMod implements ModInitializer { @Override public void onInitialize() { ModConfig.instance(); - this.addWhiteWoolRecipe(); - } - - private void addWhiteWoolRecipe() { - Method method = RecipeRegistry.class.getDeclaredMethods()[2]; - method.setAccessible(true); - try { - // Makes new recipes for all colored wools so they can be dyed back white using bone meal - for (int colorId = 0; colorId < 16; ++colorId) { - method.invoke(RecipeRegistry.getInstance(), new ItemInstance(Tile.WOOL, 1, 0), new Object[]{ - new ItemInstance(Tile.WOOL, 1, WoolTile.method_2(colorId)), new ItemInstance(ItemType.dyePowder, 1, 15)}); - } - } catch (Exception ex) { - ex.printStackTrace(); - } } } diff --git a/src/main/java/xyz/pixelatedw/finalbeta/ModConfig.java b/src/main/java/xyz/pixelatedw/finalbeta/ModConfig.java index 5614a96..f08bb4c 100644 --- a/src/main/java/xyz/pixelatedw/finalbeta/ModConfig.java +++ b/src/main/java/xyz/pixelatedw/finalbeta/ModConfig.java @@ -32,6 +32,10 @@ public class ModConfig { "Allows the player to drop the entire stack they're holding using Shift + Q (or whatever drop key they have set)"); public static final Option ENABLE_TIME_TRACKING = make("Enable Time Tracking", true, "Adds a Days Played entry in the F3 overlay displaying number of ingame days and real life days played in that world"); + public static final Option ENABLE_REPAIR = make("Enable Item Repair", true, + "Allows 2 or more items of the same type to be repaired using a crafting table using the same formula as modern day vanilla uses"); + public static final Option ENABLE_WHITE_WOOL_RECIPE = make("Enable White Wool Recipe", true, + "Allows dyed wool to be dyed back white using bone meal"); public static final Option FIX_BOW_MODEL = make("Fix bow model", true, "Makes the box model held by players and skeletons bigger and facing forward"); diff --git a/src/main/java/xyz/pixelatedw/finalbeta/WyHelper.java b/src/main/java/xyz/pixelatedw/finalbeta/WyHelper.java index 624327c..86693e4 100644 --- a/src/main/java/xyz/pixelatedw/finalbeta/WyHelper.java +++ b/src/main/java/xyz/pixelatedw/finalbeta/WyHelper.java @@ -2,11 +2,17 @@ package xyz.pixelatedw.finalbeta; import java.lang.management.ManagementFactory; import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.time.Duration; import java.util.HashMap; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.Player; +import net.minecraft.item.ItemInstance; +import net.minecraft.item.ItemType; +import net.minecraft.recipe.RecipeRegistry; +import net.minecraft.tile.Tile; +import net.minecraft.tile.WoolTile; public class WyHelper { @@ -63,8 +69,21 @@ public class WyHelper { return val < min ? min : Math.min(val, max); } + public static void registerWhiteWoolRecipe() { + Method method = RecipeRegistry.class.getDeclaredMethods()[2]; + method.setAccessible(true); + try { + // Makes new recipes for all colored wools so they can be dyed back white using bone meal + for (int colorId = 0; colorId < 16; ++colorId) { + method.invoke(RecipeRegistry.getInstance(), new ItemInstance(Tile.WOOL, 1, 0), new Object[]{ + new ItemInstance(Tile.WOOL, 1, WoolTile.method_2(colorId)), new ItemInstance(ItemType.dyePowder, 1, 15)}); + } + } catch (Exception ex) { + ex.printStackTrace(); + } + } + public static void cheatCommand(Player player) { - // player.level.setLevelTime(0); // player.level.getProperties().setRaining(false); // player.level.getProperties().setRainTime(0); diff --git a/src/main/java/xyz/pixelatedw/finalbeta/mixin/CraftingContainerMixin.java b/src/main/java/xyz/pixelatedw/finalbeta/mixin/CraftingContainerMixin.java index 763ee79..b61e3e9 100644 --- a/src/main/java/xyz/pixelatedw/finalbeta/mixin/CraftingContainerMixin.java +++ b/src/main/java/xyz/pixelatedw/finalbeta/mixin/CraftingContainerMixin.java @@ -8,12 +8,17 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import net.minecraft.container.CraftingContainer; import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemInstance; +import xyz.pixelatedw.finalbeta.ModConfig; @Mixin(CraftingContainer.class) public class CraftingContainerMixin { @Inject(method = "onContentsChanged", at = @At("HEAD"), cancellable = true) - public void onContentsChanged(Inventory inventory, CallbackInfo ci) { + public void onContentsChanged(Inventory inventory, CallbackInfo ci) { + if (!ModConfig.ENABLE_REPAIR.get()) { + return; + } + CraftingContainer container = ((CraftingContainer)(Object)this); ItemInstance resultItem = null; diff --git a/src/main/java/xyz/pixelatedw/finalbeta/mixin/CraftingInventoryMixin.java b/src/main/java/xyz/pixelatedw/finalbeta/mixin/CraftingInventoryMixin.java new file mode 100644 index 0000000..43cd195 --- /dev/null +++ b/src/main/java/xyz/pixelatedw/finalbeta/mixin/CraftingInventoryMixin.java @@ -0,0 +1,25 @@ +package xyz.pixelatedw.finalbeta.mixin; + +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.CallbackInfo; + +import net.minecraft.container.Container; +import net.minecraft.inventory.CraftingInventory; +import xyz.pixelatedw.finalbeta.ModConfig; +import xyz.pixelatedw.finalbeta.WyHelper; + +@Mixin(CraftingInventory.class) +public class CraftingInventoryMixin { + + private static boolean hasCustomRecipesRegistered = false; + + @Inject(method = "", at = @At("TAIL")) + public void init(Container container, int x, int y, CallbackInfo ci) { + if (ModConfig.ENABLE_WHITE_WOOL_RECIPE.get() && !hasCustomRecipesRegistered) { + WyHelper.registerWhiteWoolRecipe(); + hasCustomRecipesRegistered = true; + } + } +} diff --git a/src/main/resources/finalbeta.mixins.json b/src/main/resources/finalbeta.mixins.json index 8190644..57a1a91 100644 --- a/src/main/resources/finalbeta.mixins.json +++ b/src/main/resources/finalbeta.mixins.json @@ -37,7 +37,8 @@ "LevelPropertiesMixin", "LevelMixin", "DoorTileMixin", - "CraftingContainerMixin" + "CraftingContainerMixin", + "CraftingInventoryMixin" ], "injectors": { "defaultRequire": -1