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