From e4d3f10587d28184ce163bc345ffa8dfe8782843 Mon Sep 17 00:00:00 2001 From: Wynd Date: Tue, 10 Sep 2024 00:32:41 +0300 Subject: [PATCH] Added coal and redstone blocks for better storage and removed some reflection in favor of accessors and invokers --- .../xyz/pixelatedw/finalbeta/MainMod.java | 16 +++++ .../xyz/pixelatedw/finalbeta/ModConfig.java | 2 + .../xyz/pixelatedw/finalbeta/ModTile.java | 59 ++++++++++++++++++ .../xyz/pixelatedw/finalbeta/WyHelper.java | 55 +++------------- .../finalbeta/mixin/ClientPlayerMixin.java | 2 +- .../mixin/CraftingInventoryMixin.java | 52 --------------- .../mixin/MinecraftAccessorMixin.java | 14 +++++ .../mixin/RecipeRegistryAccessorMixin.java | 16 +++++ .../finalbeta/mixin/ToolItemMixin.java | 4 +- .../mixin/TranslationStorageMixin.java | 27 ++++++++ src/main/resources/assets/finalbeta/icon.png | Bin 453 -> 3207 bytes .../assets/finalbeta/lang/en_US.lang | 3 + src/main/resources/finalbeta.mixins.json | 6 +- 13 files changed, 155 insertions(+), 101 deletions(-) create mode 100644 src/main/java/xyz/pixelatedw/finalbeta/ModTile.java delete mode 100644 src/main/java/xyz/pixelatedw/finalbeta/mixin/CraftingInventoryMixin.java create mode 100644 src/main/java/xyz/pixelatedw/finalbeta/mixin/MinecraftAccessorMixin.java create mode 100644 src/main/java/xyz/pixelatedw/finalbeta/mixin/RecipeRegistryAccessorMixin.java create mode 100644 src/main/java/xyz/pixelatedw/finalbeta/mixin/TranslationStorageMixin.java create mode 100644 src/main/resources/assets/finalbeta/lang/en_US.lang diff --git a/src/main/java/xyz/pixelatedw/finalbeta/MainMod.java b/src/main/java/xyz/pixelatedw/finalbeta/MainMod.java index d460d06..1c99e47 100644 --- a/src/main/java/xyz/pixelatedw/finalbeta/MainMod.java +++ b/src/main/java/xyz/pixelatedw/finalbeta/MainMod.java @@ -4,6 +4,10 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import net.fabricmc.api.ModInitializer; +import net.minecraft.item.ItemInstance; +import net.minecraft.item.ItemType; +import net.minecraft.tile.Tile; +import net.minecraft.tile.WoolTile; public class MainMod implements ModInitializer { public static final Logger LOGGER = LogManager.getLogger(); @@ -11,5 +15,17 @@ public class MainMod implements ModInitializer { @Override public void onInitialize() { ModConfig.instance(); + + if (ModConfig.ENABLE_WHITE_WOOL_RECIPE.get()) { + for (int colorId = 0; colorId < 16; ++colorId) { + WyHelper.addShapelessRecipe(new ItemInstance(Tile.WOOL, 1, 0), new Object[]{ + new ItemInstance(Tile.WOOL, 1, WoolTile.method_2(colorId)), new ItemInstance(ItemType.dyePowder, 1, 15)}); + } + } + + if (ModConfig.ENABLE_COAL_AND_REDSTONE_BLOCKS_RECIPE.get()) { + WyHelper.addShapedRecipe(new ItemInstance(ModTile.COAL_BLOCK, 1, 0), "###", "###", "###", '#', ItemType.coal); + WyHelper.addShapedRecipe(new ItemInstance(ModTile.REDSTONE_BLOCK, 1, 0), "###", "###", "###", '#', ItemType.redstone); + } } } diff --git a/src/main/java/xyz/pixelatedw/finalbeta/ModConfig.java b/src/main/java/xyz/pixelatedw/finalbeta/ModConfig.java index 7f02424..846505c 100644 --- a/src/main/java/xyz/pixelatedw/finalbeta/ModConfig.java +++ b/src/main/java/xyz/pixelatedw/finalbeta/ModConfig.java @@ -50,6 +50,8 @@ public class ModConfig { "Name says it all, furnace minecarts will load chunks as they go on tracks."); public static final Option CLOUDS_HEIGHT = make("Clouds Height", 0.0, "Clouds height modifier, goes from 0.0, meaning the default 108 blocks height, to 1.0, meaning a 324 blocks height."); + public static final Option ENABLE_COAL_AND_REDSTONE_BLOCKS_RECIPE = make("Enable Coal and Redstone Blocks Recipe", false, + "Allows crafting coal and redstone as blocks for better storage"); 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/ModTile.java b/src/main/java/xyz/pixelatedw/finalbeta/ModTile.java new file mode 100644 index 0000000..3206f7a --- /dev/null +++ b/src/main/java/xyz/pixelatedw/finalbeta/ModTile.java @@ -0,0 +1,59 @@ +package xyz.pixelatedw.finalbeta; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.item.ItemType; +import net.minecraft.item.PlaceableTileItem; +import net.minecraft.level.TileView; +import net.minecraft.tile.Tile; +import net.minecraft.tile.TileSounds; +import net.minecraft.tile.material.Material; + +public class ModTile extends Tile { + + public static final Tile REDSTONE_BLOCK = (new ModTile(100, 176, Material.STONE)).hardness(3.0F).blastResistance(5.0F).sounds(Tile.STONE_SOUNDS).tint(11149858).name("blockRedstone"); + public static final Tile COAL_BLOCK = (new ModTile(101, 103, Material.STONE)).hardness(3.0F).blastResistance(5.0F).sounds(Tile.STONE_SOUNDS).tint(1118481).name("blockCoal"); + + static { + ItemType.byId[REDSTONE_BLOCK.id] = (new PlaceableTileItem(REDSTONE_BLOCK.id - 256)).setName("redstoneBlock"); + ItemType.byId[COAL_BLOCK.id] = (new PlaceableTileItem(COAL_BLOCK.id - 256)).setName("coalBlock"); + } + + private int tint = 16777215; + + public ModTile(int id, int texId, Material mat) { + super(id, texId, mat); + } + + @Override + public ModTile hardness(float hardness) { + return (ModTile) super.hardness(hardness); + } + + @Override + public ModTile blastResistance(float resistance) { + return (ModTile) super.blastResistance(resistance); + } + + @Override + public ModTile sounds(TileSounds sounds) { + return (ModTile) super.sounds(sounds); + } + + public ModTile tint(int tint) { + this.tint = tint; + return this; + } + + @Override + @Environment(EnvType.CLIENT) + public int method_1589(int i) { + return this.tint; + } + + @Override + @Environment(EnvType.CLIENT) + public int getTint(TileView tile, int x, int y, int z) { + return this.tint; + } +} diff --git a/src/main/java/xyz/pixelatedw/finalbeta/WyHelper.java b/src/main/java/xyz/pixelatedw/finalbeta/WyHelper.java index a5f84f5..d47e661 100644 --- a/src/main/java/xyz/pixelatedw/finalbeta/WyHelper.java +++ b/src/main/java/xyz/pixelatedw/finalbeta/WyHelper.java @@ -1,17 +1,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.recipe.RecipeRegistry; +import xyz.pixelatedw.finalbeta.mixin.MinecraftAccessorMixin; +import xyz.pixelatedw.finalbeta.mixin.RecipeRegistryAccessorMixin; public class WyHelper { - private static final Minecraft INSTANCE; public static final String SPAWN_TIME_TAG = "SpawnTime"; public static final String PLAY_TIME_TAG = "PlayTime"; public static long playTime; @@ -21,48 +21,13 @@ public class WyHelper { // doors have ok ? I don't even care about the overhead at this point. public static final HashMap DOOR_UPDATES = new HashMap<>(); public static final HashMap DOOR_STATES = new HashMap<>(); - - static { - INSTANCE = getInstance(); + + public static void addShapedRecipe(ItemInstance result, Object... recipe) { + ((RecipeRegistryAccessorMixin) RecipeRegistry.getInstance()).invokeAddShapedRecipe(result, recipe); } - public static Field getField(Class clz, String... names) { - for (String name : names) { - try { - Field field = clz.getDeclaredField(name); - field.setAccessible(true); - return field; - } catch (NoSuchFieldException ex) { - continue; - } - } - return null; - } - - public static Method getMethod(Class clz, String[] names, Class... params) { - for (String name : names) { - try { - Method method = clz.getDeclaredMethod(name, params); - method.setAccessible(true); - return method; - } catch (NoSuchMethodException ex) { - continue; - } - } - return null; - } - - public static Minecraft getInstance() { - if (INSTANCE != null) { - return INSTANCE; - } else { - try { - return (Minecraft) getField(Minecraft.class, "instance", "field_2791").get(null); - } catch (IllegalArgumentException | IllegalAccessException e) { - e.printStackTrace(); - return null; - } - } + public static void addShapelessRecipe(ItemInstance result, Object... ingredients) { + ((RecipeRegistryAccessorMixin) RecipeRegistry.getInstance()).invokeAddShapelessRecipe(result, ingredients); } public static long getRealDaysPlayed() { @@ -71,7 +36,7 @@ public class WyHelper { } public static long getGameDaysPlayed() { - long seconds = WyHelper.getInstance().level.getLevelTime() / 20; + long seconds = MinecraftAccessorMixin.getMinecraft().level.getLevelTime() / 20; return Duration.ofSeconds(seconds).toMinutes() / 20; } diff --git a/src/main/java/xyz/pixelatedw/finalbeta/mixin/ClientPlayerMixin.java b/src/main/java/xyz/pixelatedw/finalbeta/mixin/ClientPlayerMixin.java index 6567681..3716937 100644 --- a/src/main/java/xyz/pixelatedw/finalbeta/mixin/ClientPlayerMixin.java +++ b/src/main/java/xyz/pixelatedw/finalbeta/mixin/ClientPlayerMixin.java @@ -24,7 +24,7 @@ public class ClientPlayerMixin { @Inject(method = "method_136", at = @At("TAIL")) public void onKeyPressed(int key, boolean state, CallbackInfo ci) { - Minecraft mc = WyHelper.getInstance(); + Minecraft mc = MinecraftAccessorMixin.getMinecraft(); Player player = (Player) (Object) this; if (player.vehicle != null && key == Keyboard.KEY_LSHIFT && state) { diff --git a/src/main/java/xyz/pixelatedw/finalbeta/mixin/CraftingInventoryMixin.java b/src/main/java/xyz/pixelatedw/finalbeta/mixin/CraftingInventoryMixin.java deleted file mode 100644 index a377f3e..0000000 --- a/src/main/java/xyz/pixelatedw/finalbeta/mixin/CraftingInventoryMixin.java +++ /dev/null @@ -1,52 +0,0 @@ -package xyz.pixelatedw.finalbeta.mixin; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -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 net.minecraft.item.ItemInstance; -import net.minecraft.item.ItemType; -import net.minecraft.recipe.RecipeRegistry; -import net.minecraft.tile.Tile; -import net.minecraft.tile.WoolTile; -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) { - registerWhiteWoolRecipe(); - hasCustomRecipesRegistered = true; - } - } - - private static void registerWhiteWoolRecipe() { - Method method = WyHelper.getMethod(RecipeRegistry.class, new String[] { "addShapelessRecipe", "method_542" }, ItemInstance.class, Object[].class); - - if (method == null) { - return; - } - - 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 (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) { - ex.printStackTrace(); - } - } -} diff --git a/src/main/java/xyz/pixelatedw/finalbeta/mixin/MinecraftAccessorMixin.java b/src/main/java/xyz/pixelatedw/finalbeta/mixin/MinecraftAccessorMixin.java new file mode 100644 index 0000000..4038ec9 --- /dev/null +++ b/src/main/java/xyz/pixelatedw/finalbeta/mixin/MinecraftAccessorMixin.java @@ -0,0 +1,14 @@ +package xyz.pixelatedw.finalbeta.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import net.minecraft.client.Minecraft; + +@Mixin(Minecraft.class) +public interface MinecraftAccessorMixin { + @Accessor("instance") + public static Minecraft getMinecraft() { + throw new AssertionError(); + } +} diff --git a/src/main/java/xyz/pixelatedw/finalbeta/mixin/RecipeRegistryAccessorMixin.java b/src/main/java/xyz/pixelatedw/finalbeta/mixin/RecipeRegistryAccessorMixin.java new file mode 100644 index 0000000..91f40b8 --- /dev/null +++ b/src/main/java/xyz/pixelatedw/finalbeta/mixin/RecipeRegistryAccessorMixin.java @@ -0,0 +1,16 @@ +package xyz.pixelatedw.finalbeta.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +import net.minecraft.item.ItemInstance; +import net.minecraft.recipe.RecipeRegistry; + +@Mixin(RecipeRegistry.class) +public interface RecipeRegistryAccessorMixin { + @Invoker("addShapedRecipe") + void invokeAddShapedRecipe(ItemInstance result, Object... shape); + + @Invoker("addShapelessRecipe") + void invokeAddShapelessRecipe(ItemInstance result, Object... materials); +} diff --git a/src/main/java/xyz/pixelatedw/finalbeta/mixin/ToolItemMixin.java b/src/main/java/xyz/pixelatedw/finalbeta/mixin/ToolItemMixin.java index 2d7f204..36bc44d 100644 --- a/src/main/java/xyz/pixelatedw/finalbeta/mixin/ToolItemMixin.java +++ b/src/main/java/xyz/pixelatedw/finalbeta/mixin/ToolItemMixin.java @@ -13,6 +13,7 @@ import net.minecraft.item.tool.ToolItem; import net.minecraft.item.tool.ToolMaterial; import net.minecraft.tile.Tile; import xyz.pixelatedw.finalbeta.ModConfig; +import xyz.pixelatedw.finalbeta.ModTile; @Mixin(ToolItem.class) public class ToolItemMixin { @@ -22,7 +23,8 @@ public class ToolItemMixin { Tile.DIAMOND_ORE, Tile.BLOCK_DIAMOND, Tile.ICE, Tile.NETHERRACK, Tile.LAPIS_LAZULI_ORE, Tile.LAPIS_LAZULI_BLOCK, // Here starts the list of blocks that are not affected by default Tile.STAIRS_STONE, Tile.REDSTONE_ORE, Tile.REDSTONE_ORE_LIT, Tile.DOOR_IRON, Tile.BRICK, Tile.FURNACE, Tile.FURNACE_LIT, - Tile.DISPENSER, Tile.STONE_PRESSURE_PLATE, Tile.RAIL, Tile.DETECTOR_RAIL, Tile.GOLDEN_RAIL, Tile.PISTON, Tile.STICKY_PISTON}; + Tile.DISPENSER, Tile.STONE_PRESSURE_PLATE, Tile.RAIL, Tile.DETECTOR_RAIL, Tile.GOLDEN_RAIL, Tile.PISTON, Tile.STICKY_PISTON, + ModTile.COAL_BLOCK, ModTile.REDSTONE_BLOCK}; private static final Tile[] HATCHET_BLOCKS = new Tile[]{Tile.WOOD, Tile.BOOKSHELF, Tile.LOG, Tile.CHEST, // Here starts the list of blocks that are not affected by default diff --git a/src/main/java/xyz/pixelatedw/finalbeta/mixin/TranslationStorageMixin.java b/src/main/java/xyz/pixelatedw/finalbeta/mixin/TranslationStorageMixin.java new file mode 100644 index 0000000..3aa74a9 --- /dev/null +++ b/src/main/java/xyz/pixelatedw/finalbeta/mixin/TranslationStorageMixin.java @@ -0,0 +1,27 @@ +package xyz.pixelatedw.finalbeta.mixin; + +import java.io.IOException; +import java.util.Properties; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +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.client.resource.language.TranslationStorage; + +@Mixin(TranslationStorage.class) +public class TranslationStorageMixin { + @Shadow + private Properties translations; + + @Inject(method = "()V", at = @At("TAIL")) + private void init(CallbackInfo ci) { + try { + this.translations.load(TranslationStorage.class.getResourceAsStream("/assets/finalbeta/lang/en_US.lang")); + } catch (IOException ex) { + ex.printStackTrace(); + } + } +} diff --git a/src/main/resources/assets/finalbeta/icon.png b/src/main/resources/assets/finalbeta/icon.png index 047b91f2347de5cf95f23284476fddbe21ba23fe..d7b63da8130770c28dcfb463155d1cd6a982014d 100644 GIT binary patch literal 3207 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 diff --git a/src/main/resources/assets/finalbeta/lang/en_US.lang b/src/main/resources/assets/finalbeta/lang/en_US.lang new file mode 100644 index 0000000..ebe99a4 --- /dev/null +++ b/src/main/resources/assets/finalbeta/lang/en_US.lang @@ -0,0 +1,3 @@ +tile.blockRedstone.name=Redstone Block +tile.blockCoal.name=Coal Block + diff --git a/src/main/resources/finalbeta.mixins.json b/src/main/resources/finalbeta.mixins.json index a95640f..379bf18 100644 --- a/src/main/resources/finalbeta.mixins.json +++ b/src/main/resources/finalbeta.mixins.json @@ -38,12 +38,14 @@ "LevelMixin", "DoorTileMixin", "CraftingContainerMixin", - "CraftingInventoryMixin", "RecipeRegistryMixin", "SnowballMixin", "EntityMixin", "SlimeMixin", - "DimensionMixin" + "DimensionMixin", + "TranslationStorageMixin", + "RecipeRegistryAccessorMixin", + "MinecraftAccessorMixin" ], "injectors": { "defaultRequire": -1