From b3fc4a09ba9ab7af891597cc950b703c83537d7d Mon Sep 17 00:00:00 2001 From: Roadhog360 Date: Sat, 2 Dec 2023 02:05:01 -0600 Subject: [PATCH] Convert interpolation to mixin This is so ANY texture can have this without needing special code, good for texture packs and stuff and easier to work with --- .../etfuturum/EtFuturumMixinPlugin.java | 4 + .../java/ganymedes01/etfuturum/ModBlocks.java | 8 +- .../etfuturum/blocks/BaseBlock.java | 27 ------- .../etfuturum/blocks/BaseFlower.java | 1 - .../{BlockModernLog.java => BaseLog.java} | 22 ++---- .../etfuturum/blocks/BaseSubtypesBlock.java | 18 +---- .../etfuturum/blocks/BlockBambooBlock.java | 8 +- .../etfuturum/blocks/BlockBlastFurnace.java | 7 +- .../etfuturum/blocks/BlockMagma.java | 2 +- .../etfuturum/blocks/BlockNetherSprouts.java | 1 - .../etfuturum/blocks/BlockNetherStem.java | 7 +- .../etfuturum/blocks/BlockOldRose.java | 2 - .../etfuturum/blocks/BlockPackedMud.java | 11 --- .../blocks/BlockPolishedBlackstoneButton.java | 1 - .../etfuturum/blocks/BlockSculk.java | 2 +- .../etfuturum/blocks/BlockTwistingVines.java | 1 - .../etfuturum/blocks/BlockWeepingVines.java | 1 - .../configuration/configs/ConfigMixins.java | 8 +- .../MixinTextureMap.java | 76 +++++++++++++++++++ 19 files changed, 107 insertions(+), 100 deletions(-) rename src/main/java/ganymedes01/etfuturum/blocks/{BlockModernLog.java => BaseLog.java} (77%) create mode 100644 src/main/java/ganymedes01/etfuturum/mixins/interpolatedtexturemap/MixinTextureMap.java diff --git a/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java b/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java index 25162eb7a..bd1a9ea17 100644 --- a/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java +++ b/src/main/java/ganymedes01/etfuturum/EtFuturumMixinPlugin.java @@ -234,6 +234,10 @@ public List getMixins() { if (ConfigMixins.flowerPotFixes) { mixins.add("flowerpotfix.client.MixinRenderBlocks"); } + + if (ConfigMixins.interpolatedTextures) { + mixins.add("interpolatedtexturemap.MixinTextureMap"); + } } return mixins; diff --git a/src/main/java/ganymedes01/etfuturum/ModBlocks.java b/src/main/java/ganymedes01/etfuturum/ModBlocks.java index 12f1c44c9..1dd53a6ae 100644 --- a/src/main/java/ganymedes01/etfuturum/ModBlocks.java +++ b/src/main/java/ganymedes01/etfuturum/ModBlocks.java @@ -17,7 +17,7 @@ public enum ModBlocks { STONE(ConfigBlocksItems.enableStones, new BlockBountifulStone()), - PRISMARINE_BLOCK(ConfigBlocksItems.enablePrismarine, new BaseSubtypesBlock(Material.rock, "prismarine$i", "prismarine_bricks", "dark_prismarine") + PRISMARINE_BLOCK(ConfigBlocksItems.enablePrismarine, new BaseSubtypesBlock(Material.rock, "prismarine", "prismarine_bricks", "dark_prismarine") .setHardness(1.5F).setResistance(10.0F)), SEA_LANTERN(ConfigBlocksItems.enablePrismarine, new BlockSeaLantern()), DAYLIGHT_DETECTOR_INVERTED(ConfigBlocksItems.enableInvertedDaylightSensor, new BlockInvertedDaylightDetector(), null), @@ -290,9 +290,9 @@ public enum ModBlocks { //new wood logs CRIMSON_STEM(ConfigBlocksItems.enableCrimsonBlocks, new BlockNetherStem("crimson")), WARPED_STEM(ConfigBlocksItems.enableWarpedBlocks, new BlockNetherStem("warped")), - MANGROVE_LOG(ConfigBlocksItems.enableMangroveBlocks, new BlockModernLog("mangrove")), - CHERRY_LOG(ConfigBlocksItems.enableCherryBlocks, new BlockModernLog("cherry", ModSounds.soundCherryWood)), - BAMBOO_BLOCK(ConfigBlocksItems.enableBambooBlocks, new BlockBambooBlock("bamboo", ModSounds.soundBambooWood)), + MANGROVE_LOG(ConfigBlocksItems.enableMangroveBlocks, new BaseLog("mangrove")), + CHERRY_LOG(ConfigBlocksItems.enableCherryBlocks, new BaseLog("cherry").setBlockSound(ModSounds.soundCherryWood)), + BAMBOO_BLOCK(ConfigBlocksItems.enableBambooBlocks, new BlockBambooBlock("bamboo").setBlockSound(ModSounds.soundBambooWood)), //new wood stairs CRIMSON_STAIRS(ConfigBlocksItems.enableCrimsonBlocks, new BaseStairs(WOOD_PLANKS.get(), 0).setBlockSound(ModSounds.soundNetherWood).setUnlocalizedNameWithPrefix("crimson")), diff --git a/src/main/java/ganymedes01/etfuturum/blocks/BaseBlock.java b/src/main/java/ganymedes01/etfuturum/blocks/BaseBlock.java index 915bfb254..5b4af11cb 100644 --- a/src/main/java/ganymedes01/etfuturum/blocks/BaseBlock.java +++ b/src/main/java/ganymedes01/etfuturum/blocks/BaseBlock.java @@ -1,15 +1,10 @@ package ganymedes01.etfuturum.blocks; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import ganymedes01.etfuturum.EtFuturum; -import ganymedes01.etfuturum.client.InterpolatedIcon; import ganymedes01.etfuturum.core.utils.Utils; import net.minecraft.block.Block; import net.minecraft.block.material.MapColor; import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.client.renderer.texture.TextureMap; /** * Because the standard block constructor is protected... @@ -18,7 +13,6 @@ public class BaseBlock extends Block { private Block mapColorBase; - private boolean interpolatedIcon; public BaseBlock(Material p_i45394_1_) { super(p_i45394_1_); @@ -32,18 +26,10 @@ public BaseBlock setUnlocalizedNameWithPrefix(String name) { @Override public Block setBlockTextureName(String name) { - if (name.endsWith("$i")) { - interpolatedIcon = true; - name = name.substring(0, name.length() - 2); - } return super.setBlockTextureName(name); } public BaseBlock setNames(String name) { - if (name.endsWith("$i")) { - interpolatedIcon = true; - name = name.substring(0, name.length() - 2); - } setUnlocalizedNameWithPrefix(name); setBlockTextureName(name); return this; @@ -75,17 +61,4 @@ public BaseBlock setMapColorBaseBlock(Block block) { public MapColor getMapColor(int p_149728_1_) { return mapColorBase == null ? super.getMapColor(p_149728_1_) : mapColorBase.getMapColor(p_149728_1_); } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister p_149651_1_) { - if (interpolatedIcon) { - blockIcon = new InterpolatedIcon(textureName); - if (p_149651_1_ instanceof TextureMap) { - ((TextureMap) p_149651_1_).setTextureEntry(textureName, (InterpolatedIcon) blockIcon); - } - } else { - super.registerBlockIcons(p_149651_1_); - } - } } diff --git a/src/main/java/ganymedes01/etfuturum/blocks/BaseFlower.java b/src/main/java/ganymedes01/etfuturum/blocks/BaseFlower.java index 2cfe441c5..06ca7d7b0 100644 --- a/src/main/java/ganymedes01/etfuturum/blocks/BaseFlower.java +++ b/src/main/java/ganymedes01/etfuturum/blocks/BaseFlower.java @@ -4,7 +4,6 @@ import cpw.mods.fml.relauncher.SideOnly; import ganymedes01.etfuturum.EtFuturum; import ganymedes01.etfuturum.core.utils.Utils; -import ganymedes01.etfuturum.lib.RenderIDs; import net.minecraft.block.BlockFlower; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; diff --git a/src/main/java/ganymedes01/etfuturum/blocks/BlockModernLog.java b/src/main/java/ganymedes01/etfuturum/blocks/BaseLog.java similarity index 77% rename from src/main/java/ganymedes01/etfuturum/blocks/BlockModernLog.java rename to src/main/java/ganymedes01/etfuturum/blocks/BaseLog.java index d7f5eaacb..bcaf90930 100644 --- a/src/main/java/ganymedes01/etfuturum/blocks/BlockModernLog.java +++ b/src/main/java/ganymedes01/etfuturum/blocks/BaseLog.java @@ -3,12 +3,10 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import ganymedes01.etfuturum.EtFuturum; -import ganymedes01.etfuturum.client.InterpolatedIcon; import ganymedes01.etfuturum.configuration.configs.ConfigBlocksItems; import ganymedes01.etfuturum.core.utils.Utils; import net.minecraft.block.BlockLog; import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -18,12 +16,12 @@ import java.util.List; -public class BlockModernLog extends BlockLog implements ISubBlocksBlock { +public class BaseLog extends BlockLog implements ISubBlocksBlock { protected final String type; protected String[] types; - public BlockModernLog(String type) { + public BaseLog(String type) { super(); this.type = type; types = new String[]{type + "_log", type + "_wood", "stripped_" + type + "_log", "stripped_" + type + "_wood"}; @@ -32,9 +30,9 @@ public BlockModernLog(String type) { setCreativeTab(EtFuturum.creativeTabBlocks); } - public BlockModernLog(String type, SoundType sound) { - this(type); - Utils.setBlockSound(this, sound); + public BaseLog setBlockSound(SoundType type) { + Utils.setBlockSound(this, type); + return this; } @Override @@ -43,16 +41,6 @@ public void registerBlockIcons(IIconRegister iconRegister) { field_150167_a = new IIcon[types.length]; field_150166_b = new IIcon[types.length]; - if (types[0].contains("stem")) { - InterpolatedIcon animatedStem = new InterpolatedIcon(getTypes()[0]); - if (iconRegister instanceof TextureMap) { - ((TextureMap) iconRegister).setTextureEntry(getTypes()[0], animatedStem); - } - blockIcon = field_150166_b[1] = field_150167_a[0] = field_150167_a[1] = animatedStem; - } else { - blockIcon = field_150166_b[1] = field_150167_a[0] = field_150167_a[1] = iconRegister.registerIcon(types[0]); - } - blockIcon = field_150166_b[1] = field_150167_a[0] = field_150167_a[1] = iconRegister.registerIcon(types[0]); field_150166_b[3] = field_150167_a[2] = field_150167_a[3] = iconRegister.registerIcon(types[2]); field_150166_b[0] = iconRegister.registerIcon(types[0] + "_top"); diff --git a/src/main/java/ganymedes01/etfuturum/blocks/BaseSubtypesBlock.java b/src/main/java/ganymedes01/etfuturum/blocks/BaseSubtypesBlock.java index ee20dbd36..994e06739 100644 --- a/src/main/java/ganymedes01/etfuturum/blocks/BaseSubtypesBlock.java +++ b/src/main/java/ganymedes01/etfuturum/blocks/BaseSubtypesBlock.java @@ -2,10 +2,8 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import ganymedes01.etfuturum.client.InterpolatedIcon; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -16,7 +14,6 @@ public class BaseSubtypesBlock extends BaseBlock implements ISubBlocksBlock { @SideOnly(Side.CLIENT) private IIcon[] icons; - private final boolean[] interpolatedIcons; private final String[] types; private final int startMeta; @@ -28,13 +25,6 @@ public BaseSubtypesBlock(Material material, String... types) { public BaseSubtypesBlock(Material material, int startMeta, String... types) { super(material); this.startMeta = startMeta; - interpolatedIcons = new boolean[types.length]; - for (int i = 0; i < types.length; i++) { - if (types[i].endsWith("$i")) { - interpolatedIcons[i] = true; - types[i] = types[i].substring(0, types[i].length() - 2); - } - } this.types = types; if (!"".equals(types[0])) { setNames(types[0]); @@ -86,13 +76,7 @@ public IIcon getIcon(int side, int meta) { public void registerBlockIcons(IIconRegister reg) { setIcons(new IIcon[getTypes().length]); for (int i = 0; i < getIcons().length; i++) { - if (interpolatedIcons[i] && reg instanceof TextureMap) { - InterpolatedIcon icon = new InterpolatedIcon(getTypes()[i]); - ((TextureMap) reg).setTextureEntry(getTypes()[i], icon); - getIcons()[i] = icon; - } else { - getIcons()[i] = "".equals(getTypes()[i]) ? reg.registerIcon(getTextureName()) : reg.registerIcon((getTextureDomain().isEmpty() ? "" : getTextureDomain() + ":") + getTypes()[i]); - } + getIcons()[i] = "".equals(getTypes()[i]) ? reg.registerIcon(getTextureName()) : reg.registerIcon((getTextureDomain().isEmpty() ? "" : getTextureDomain() + ":") + getTypes()[i]); } } } \ No newline at end of file diff --git a/src/main/java/ganymedes01/etfuturum/blocks/BlockBambooBlock.java b/src/main/java/ganymedes01/etfuturum/blocks/BlockBambooBlock.java index 6799cbdd6..236924205 100644 --- a/src/main/java/ganymedes01/etfuturum/blocks/BlockBambooBlock.java +++ b/src/main/java/ganymedes01/etfuturum/blocks/BlockBambooBlock.java @@ -2,6 +2,7 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import ganymedes01.etfuturum.client.sound.ModSounds; import ganymedes01.etfuturum.configuration.configs.ConfigBlocksItems; import ganymedes01.etfuturum.core.utils.Utils; import net.minecraft.client.renderer.texture.IIconRegister; @@ -13,12 +14,13 @@ import java.util.List; -public class BlockBambooBlock extends BlockModernLog implements ISubBlocksBlock { +public class BlockBambooBlock extends BaseLog { - public BlockBambooBlock(String type, SoundType soundBambooWood) { - super(type, soundBambooWood); + public BlockBambooBlock(String type) { + super(type); types = new String[]{type + "_block", "stripped_" + type + "_block"}; setBlockName(Utils.getUnlocalisedName(type + "_block")); + setBlockSound(ModSounds.soundBambooWood); } @Override diff --git a/src/main/java/ganymedes01/etfuturum/blocks/BlockBlastFurnace.java b/src/main/java/ganymedes01/etfuturum/blocks/BlockBlastFurnace.java index 8e4835ae8..362a5dbbb 100644 --- a/src/main/java/ganymedes01/etfuturum/blocks/BlockBlastFurnace.java +++ b/src/main/java/ganymedes01/etfuturum/blocks/BlockBlastFurnace.java @@ -4,7 +4,6 @@ import cpw.mods.fml.relauncher.SideOnly; import ganymedes01.etfuturum.EtFuturum; import ganymedes01.etfuturum.ModBlocks; -import ganymedes01.etfuturum.client.InterpolatedIcon; import ganymedes01.etfuturum.configuration.configs.ConfigSounds; import ganymedes01.etfuturum.core.utils.Utils; import ganymedes01.etfuturum.lib.GUIIDs; @@ -13,7 +12,6 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockFurnace; import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -74,10 +72,7 @@ public void randomDisplayTick(World p_149734_1_, int p_149734_2_, int p_149734_3 public void registerBlockIcons(IIconRegister p_149651_1_) { this.blockIcon = p_149651_1_.registerIcon("blast_furnace_side"); if (isCooking) { - blockFront = new InterpolatedIcon("blast_furnace_front_on"); - if (p_149651_1_ instanceof TextureMap) { - ((TextureMap) p_149651_1_).setTextureEntry("blast_furnace_front_on", (InterpolatedIcon) blockFront); - } + this.blockIcon = p_149651_1_.registerIcon("blast_furnace_front_on"); } else { this.blockFront = p_149651_1_.registerIcon("blast_furnace_front"); } diff --git a/src/main/java/ganymedes01/etfuturum/blocks/BlockMagma.java b/src/main/java/ganymedes01/etfuturum/blocks/BlockMagma.java index be32c2691..3cf7c93b5 100644 --- a/src/main/java/ganymedes01/etfuturum/blocks/BlockMagma.java +++ b/src/main/java/ganymedes01/etfuturum/blocks/BlockMagma.java @@ -22,7 +22,7 @@ public BlockMagma() { setHardness(0.5F); setResistance(0.5F); setLightLevel(0.2F); - setNames("magma$i"); + setNames("magma"); setCreativeTab(EtFuturum.creativeTabBlocks); } diff --git a/src/main/java/ganymedes01/etfuturum/blocks/BlockNetherSprouts.java b/src/main/java/ganymedes01/etfuturum/blocks/BlockNetherSprouts.java index 1dd9b6551..053075715 100644 --- a/src/main/java/ganymedes01/etfuturum/blocks/BlockNetherSprouts.java +++ b/src/main/java/ganymedes01/etfuturum/blocks/BlockNetherSprouts.java @@ -3,7 +3,6 @@ import ganymedes01.etfuturum.EtFuturum; import ganymedes01.etfuturum.client.sound.ModSounds; import ganymedes01.etfuturum.core.utils.Utils; -import ganymedes01.etfuturum.lib.RenderIDs; import net.minecraft.block.Block; import net.minecraft.block.BlockBush; import net.minecraft.init.Blocks; diff --git a/src/main/java/ganymedes01/etfuturum/blocks/BlockNetherStem.java b/src/main/java/ganymedes01/etfuturum/blocks/BlockNetherStem.java index c4037c059..3914ac7b4 100644 --- a/src/main/java/ganymedes01/etfuturum/blocks/BlockNetherStem.java +++ b/src/main/java/ganymedes01/etfuturum/blocks/BlockNetherStem.java @@ -5,14 +5,15 @@ import net.minecraft.world.IBlockAccess; import net.minecraftforge.common.util.ForgeDirection; -public class BlockNetherStem extends BlockModernLog implements ISubBlocksBlock { +public class BlockNetherStem extends BaseLog { public BlockNetherStem(String type) { - super(type, ModSounds.soundStem); - setBlockName(Utils.getUnlocalisedName(type + "_stem")); + super(type); for (int i = 0; i < getTypes().length; i++) { getTypes()[i] = getTypes()[i].replace("log", "stem").replace("wood", "hyphae"); } + setBlockName(Utils.getUnlocalisedName(type + "_stem")); + setBlockSound(ModSounds.soundStem); } @Override diff --git a/src/main/java/ganymedes01/etfuturum/blocks/BlockOldRose.java b/src/main/java/ganymedes01/etfuturum/blocks/BlockOldRose.java index dbf2c21d3..5c855fa18 100644 --- a/src/main/java/ganymedes01/etfuturum/blocks/BlockOldRose.java +++ b/src/main/java/ganymedes01/etfuturum/blocks/BlockOldRose.java @@ -1,9 +1,7 @@ package ganymedes01.etfuturum.blocks; -import ganymedes01.etfuturum.EtFuturum; import ganymedes01.etfuturum.core.utils.Utils; import ganymedes01.etfuturum.lib.Reference; -import ganymedes01.etfuturum.lib.RenderIDs; public class BlockOldRose extends BaseFlower { diff --git a/src/main/java/ganymedes01/etfuturum/blocks/BlockPackedMud.java b/src/main/java/ganymedes01/etfuturum/blocks/BlockPackedMud.java index 539fa24fc..94d8370d1 100644 --- a/src/main/java/ganymedes01/etfuturum/blocks/BlockPackedMud.java +++ b/src/main/java/ganymedes01/etfuturum/blocks/BlockPackedMud.java @@ -1,21 +1,10 @@ package ganymedes01.etfuturum.blocks; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import ganymedes01.etfuturum.EtFuturum; import ganymedes01.etfuturum.client.sound.ModSounds; -import ganymedes01.etfuturum.configuration.configs.ConfigSounds; -import ganymedes01.etfuturum.core.utils.Utils; -import net.minecraft.block.Block; import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.IIcon; import net.minecraft.world.World; -import java.util.Random; - public class BlockPackedMud extends BaseSubtypesBlock { public BlockPackedMud() { diff --git a/src/main/java/ganymedes01/etfuturum/blocks/BlockPolishedBlackstoneButton.java b/src/main/java/ganymedes01/etfuturum/blocks/BlockPolishedBlackstoneButton.java index d92a4e03e..e08d974fe 100644 --- a/src/main/java/ganymedes01/etfuturum/blocks/BlockPolishedBlackstoneButton.java +++ b/src/main/java/ganymedes01/etfuturum/blocks/BlockPolishedBlackstoneButton.java @@ -6,7 +6,6 @@ import ganymedes01.etfuturum.ModBlocks; import ganymedes01.etfuturum.core.utils.Utils; import net.minecraft.block.BlockButtonStone; -import net.minecraft.init.Blocks; import net.minecraft.util.IIcon; public class BlockPolishedBlackstoneButton extends BlockButtonStone { diff --git a/src/main/java/ganymedes01/etfuturum/blocks/BlockSculk.java b/src/main/java/ganymedes01/etfuturum/blocks/BlockSculk.java index 6bed9f16e..f46b146cc 100644 --- a/src/main/java/ganymedes01/etfuturum/blocks/BlockSculk.java +++ b/src/main/java/ganymedes01/etfuturum/blocks/BlockSculk.java @@ -10,7 +10,7 @@ public class BlockSculk extends BaseBlock { public BlockSculk() { super(Material.ground); - setNames("sculk$i"); + setNames("sculk"); setHardness(.6F); setResistance(.2F); setBlockSound(ModSounds.soundSculk); diff --git a/src/main/java/ganymedes01/etfuturum/blocks/BlockTwistingVines.java b/src/main/java/ganymedes01/etfuturum/blocks/BlockTwistingVines.java index 3bb62f332..139d47b9f 100644 --- a/src/main/java/ganymedes01/etfuturum/blocks/BlockTwistingVines.java +++ b/src/main/java/ganymedes01/etfuturum/blocks/BlockTwistingVines.java @@ -16,7 +16,6 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.IShearable; -import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; import java.util.Random; diff --git a/src/main/java/ganymedes01/etfuturum/blocks/BlockWeepingVines.java b/src/main/java/ganymedes01/etfuturum/blocks/BlockWeepingVines.java index a2709fb31..2066d4f33 100644 --- a/src/main/java/ganymedes01/etfuturum/blocks/BlockWeepingVines.java +++ b/src/main/java/ganymedes01/etfuturum/blocks/BlockWeepingVines.java @@ -16,7 +16,6 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.IShearable; -import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; import java.util.Random; diff --git a/src/main/java/ganymedes01/etfuturum/configuration/configs/ConfigMixins.java b/src/main/java/ganymedes01/etfuturum/configuration/configs/ConfigMixins.java index be70a908c..b863367ed 100644 --- a/src/main/java/ganymedes01/etfuturum/configuration/configs/ConfigMixins.java +++ b/src/main/java/ganymedes01/etfuturum/configuration/configs/ConfigMixins.java @@ -39,6 +39,7 @@ public class ConfigMixins extends ConfigBase { public static boolean betterPistons; public static boolean flowerPotFixes; public static boolean soulFire; + public static boolean interpolatedTextures; static final String catBackport = "backported features"; static final String catOptimization = "optimizations"; @@ -62,10 +63,11 @@ public ConfigMixins(File file) { protected void syncConfigOptions() { if (EtFuturumMixinPlugin.side == MixinEnvironment.Side.CLIENT) { furnaceCrackle = getBoolean("furnaceCrackle", catBackport, true, "Allows vanilla furnaces to have crackling sounds.\nModified Client Classes: net.minecraft.block.BlockFurnace"); - boundedBlockBreakingParticles = getBoolean("boundedBlockBreakingParticles", catBackport, true, "In 1.14+, when breaking a block the block break particles stay within the outline, instead of always occupying the whole block space.\nMofified Classes: net.minecraft.client.particle.EffectRenderer"); - adjustedAttenuation = getBoolean("adjustedAttenuation", catBackport, true, "Adjusts the attenuation distance of certain sounds. This needs to be a separate mixin due to the way it works.\nCurrently changes portal abience, and beacon ambience to have an attenuation distance of 8 blocks away, instead of 16.\nModified Classes: net.minecraft.client.audio.SoundManager"); + boundedBlockBreakingParticles = getBoolean("boundedBlockBreakingParticles", catBackport, true, "In 1.14+, when breaking a block, the block break particles stay within the outline, instead of always occupying the whole block space.\nMofified Client Classes: net.minecraft.client.particle.EffectRenderer"); + adjustedAttenuation = getBoolean("adjustedAttenuation", catBackport, true, "Adjusts the attenuation distance of certain sounds. This needs to be a separate mixin due to the way it works.\nCurrently changes portal abience, and beacon ambience to have an attenuation distance of 8 blocks away, instead of 16.\nModified Client Classes: net.minecraft.client.audio.SoundManager"); + interpolatedTextures = getBoolean("interpolatedTextures", catBackport, true, "Adds support for the \"interpolate\" flag in .mcmeta files. If turned off, stuff like Nether stems, magma etc will not have smooth texture animations! Modified Client Classes: net.minecraft.client.renderer.texture.TextureMap"); - flowerPotFixes = getBoolean("flowerPotFixes", catFixes, true, "Fixes flower pots having several restrictions limiting what they'll render inside of them. Required for crimson roots or azalea to render correctly in the flower pot.\nModified Classes: net.minecraft.client.renderer.RenderBlock"); + flowerPotFixes = getBoolean("flowerPotFixes", catFixes, true, "Fixes flower pots having several restrictions limiting what they'll render inside of them. Required for crimson roots or azalea to render correctly in the flower pot.\nModified Client Classes: net.minecraft.client.renderer.RenderBlock"); } endPortalFix = getBoolean("endPortalFix", catBackport, true, "Makes the End Portal block (the actual portal, not the frame) have an item icon, proper hitbox and will not instantly destroy itself in other dimensions.\nModified classes: net.minecraft.block.BlockEndPortal"); diff --git a/src/main/java/ganymedes01/etfuturum/mixins/interpolatedtexturemap/MixinTextureMap.java b/src/main/java/ganymedes01/etfuturum/mixins/interpolatedtexturemap/MixinTextureMap.java new file mode 100644 index 000000000..da8f01de9 --- /dev/null +++ b/src/main/java/ganymedes01/etfuturum/mixins/interpolatedtexturemap/MixinTextureMap.java @@ -0,0 +1,76 @@ +package ganymedes01.etfuturum.mixins.interpolatedtexturemap; + +import com.google.gson.JsonObject; +import ganymedes01.etfuturum.client.InterpolatedIcon; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.AbstractTexture; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.client.renderer.texture.ITickableTextureObject; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.SimpleResource; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +import java.lang.reflect.Field; +import java.util.Map; + +@Mixin(TextureMap.class) +public abstract class MixinTextureMap extends AbstractTexture implements ITickableTextureObject, IIconRegister { + + @Shadow + @Final + private int textureType; + + @Shadow + @Final + private Map mapRegisteredSprites; + + @Unique + private Field mcmetaJsonField; + + @Inject(method = "registerIcon", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;(Ljava/lang/String;)V"), + locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true) + private void registerInterpolatedIcon(String textureName, CallbackInfoReturnable cir, Object icon) { + try { + String prefixedTextureName; + String unprefixedName; + String domain; + if (textureName.contains(":")) { + domain = textureName.split(":")[0]; + unprefixedName = textureName.substring(textureName.indexOf(":") + 1); + } else { + domain = "minecraft"; + unprefixedName = textureName; + } + prefixedTextureName = domain + ":textures/" + (textureType == 0 ? "blocks/" : "items/") + unprefixedName + ".png"; + IResource resource = Minecraft.getMinecraft().getResourceManager().getResource(new ResourceLocation(prefixedTextureName)); + if (resource instanceof SimpleResource) { + //This returns IMetadataSections, which seems to already remove unused mcmeta fields in 1.7.10 + //I'm just running this to poplate the mcmetaJson field more easily; this does it for us + resource.getMetadata(""); + if (mcmetaJsonField == null) { + mcmetaJsonField = SimpleResource.class.getDeclaredField("mcmetaJson"); //Forge field, cannot use ATs + mcmetaJsonField.setAccessible(true); + } + JsonObject mcmetaJson = (JsonObject) mcmetaJsonField.get(resource); + JsonObject animationJson; + if (mcmetaJson != null && (animationJson = mcmetaJson.getAsJsonObject("animation")) != null + && animationJson.has("interpolate") && animationJson.getAsJsonPrimitive("interpolate").getAsBoolean()) { + InterpolatedIcon interpolatedIcon = new InterpolatedIcon(textureName); + mapRegisteredSprites.put(textureName, interpolatedIcon); + cir.setReturnValue(interpolatedIcon); + } + } + } catch (Exception ignored) { + } //Should quietly fail, no need to fail hard + } +}