diff options
Diffstat (limited to 'src/mixin/java')
12 files changed, 406 insertions, 0 deletions
diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/BlockStemMixin.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/BlockStemMixin.java new file mode 100644 index 0000000000..685e00b2a8 --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/BlockStemMixin.java @@ -0,0 +1,23 @@ +package gregtech.mixin.mixins.early.minecraft; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockStem; + +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import kubatech.api.IBlockStemAccesor; + +@Mixin(value = BlockStem.class) +public class BlockStemMixin implements IBlockStemAccesor { + + @Shadow + @Final + private Block field_149877_a; + + @Override + public Block getCropBlock() { + return this.field_149877_a; + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/CraftingManagerMixin.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/CraftingManagerMixin.java new file mode 100644 index 0000000000..1a88150128 --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/CraftingManagerMixin.java @@ -0,0 +1,24 @@ +package gregtech.mixin.mixins.early.minecraft; + +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.world.World; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +import com.github.bartimaeusnek.bartworks.ASM.BWCoreStaticReplacementMethodes; + +@Mixin(CraftingManager.class) +public abstract class CraftingManagerMixin { + + /** + * @author bart + * @reason Cache the result of findMatchingRecipe + */ + @Overwrite + public ItemStack findMatchingRecipe(InventoryCrafting inventoryCrafting, World world) { + return BWCoreStaticReplacementMethodes.findCachedMatchingRecipe(inventoryCrafting, world); + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/ForgeShapedRecipeMixin.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/ForgeShapedRecipeMixin.java new file mode 100644 index 0000000000..041df1937f --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/ForgeShapedRecipeMixin.java @@ -0,0 +1,34 @@ +package gregtech.mixin.mixins.early.minecraft; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.ShapedOreRecipe; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import gregtech.api.interfaces.IRecipeMutableAccess; + +@Mixin(value = ShapedOreRecipe.class, remap = false) +public class ForgeShapedRecipeMixin implements IRecipeMutableAccess { + + @Shadow + private ItemStack output; + + @Shadow + private Object[] input; + + @Override + public ItemStack gt5u$getRecipeOutputItem() { + return this.output; + } + + @Override + public void gt5u$setRecipeOutputItem(ItemStack newItem) { + this.output = newItem; + } + + @Override + public Object gt5u$getRecipeInputs() { + return this.input; + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/ForgeShapelessRecipeMixin.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/ForgeShapelessRecipeMixin.java new file mode 100644 index 0000000000..7bf4ba489e --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/ForgeShapelessRecipeMixin.java @@ -0,0 +1,36 @@ +package gregtech.mixin.mixins.early.minecraft; + +import java.util.ArrayList; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.ShapelessOreRecipe; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import gregtech.api.interfaces.IRecipeMutableAccess; + +@Mixin(value = ShapelessOreRecipe.class, remap = false) +public class ForgeShapelessRecipeMixin implements IRecipeMutableAccess { + + @Shadow + private ItemStack output; + + @Shadow + private ArrayList<Object> input; + + @Override + public ItemStack gt5u$getRecipeOutputItem() { + return this.output; + } + + @Override + public void gt5u$setRecipeOutputItem(ItemStack newItem) { + this.output = newItem; + } + + @Override + public Object gt5u$getRecipeInputs() { + return this.input; + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/LanguageRegistryMixin.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/LanguageRegistryMixin.java new file mode 100644 index 0000000000..f6a0ebeaad --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/LanguageRegistryMixin.java @@ -0,0 +1,27 @@ +package gregtech.mixin.mixins.early.minecraft; + +import static gregtech.mixin.MixinsVariablesHelper.currentlyTranslating; + +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 cpw.mods.fml.common.ModContainer; +import cpw.mods.fml.common.registry.LanguageRegistry; +import cpw.mods.fml.relauncher.Side; + +@SuppressWarnings("unused") +@Mixin(value = LanguageRegistry.class) +public class LanguageRegistryMixin { + + @Inject(method = "loadLanguagesFor", at = @At(value = "HEAD"), remap = false, require = 1) + private void kubatech$loadLanguagesForHEAD(ModContainer container, Side side, CallbackInfo callbackInfo) { + currentlyTranslating = container.getModId(); + } + + @Inject(method = "loadLanguagesFor", at = @At(value = "RETURN"), remap = false, require = 1) + private void kubatech$loadLanguagesForRETURN(ModContainer container, Side side, CallbackInfo callbackInfo) { + currentlyTranslating = null; + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/LocaleMixin.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/LocaleMixin.java new file mode 100644 index 0000000000..e45548765c --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/LocaleMixin.java @@ -0,0 +1,47 @@ +package gregtech.mixin.mixins.early.minecraft; + +import static gregtech.mixin.MixinsVariablesHelper.currentlyTranslating; + +import java.util.regex.Matcher; + +import net.minecraft.client.resources.Locale; +import net.minecraft.util.ResourceLocation; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.spongepowered.asm.mixin.injection.Redirect; + +import kubatech.Tags; + +@SuppressWarnings("unused") +@Mixin(value = Locale.class) +public class LocaleMixin { + + @ModifyArg( + method = "loadLocaleDataFiles", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/resources/IResourceManager;getAllResources(Lnet/minecraft/util/ResourceLocation;)Ljava/util/List;"), + index = 0, + require = 1) + private ResourceLocation kubatech$loadLocaleDataFiles(ResourceLocation resourceLocation) { + currentlyTranslating = resourceLocation.getResourceDomain(); + return resourceLocation; + } + + @Redirect( + method = "loadLocaleData(Ljava/io/InputStream;)V", + at = @At( + value = "INVOKE", + target = "Ljava/util/regex/Matcher;replaceAll(Ljava/lang/String;)Ljava/lang/String;", + remap = false), + require = 1) + private String kubatech$replaceAll(Matcher matcher, String replace) { + if (currentlyTranslating != null && currentlyTranslating.equals(Tags.MODID) && matcher.find()) { + return matcher.replaceFirst(matcher.group()); + } + return matcher.replaceAll(replace); + } + +} diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/SoundManagerInnerMixin.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/SoundManagerInnerMixin.java new file mode 100644 index 0000000000..6150f495b6 --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/SoundManagerInnerMixin.java @@ -0,0 +1,33 @@ +package gregtech.mixin.mixins.early.minecraft; + +import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.util.ResourceLocation; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; + +import gregtech.client.SeekingOggCodec; + +@Mixin(targets = "net.minecraft.client.audio.SoundManager$2$1") +public abstract class SoundManagerInnerMixin { + + @WrapOperation( + method = "getInputStream", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/resources/IResourceManager;getResource(Lnet/minecraft/util/ResourceLocation;)Lnet/minecraft/client/resources/IResource;")) + IResource gt5u$stripSeekParams(IResourceManager instance, ResourceLocation location, + Operation<IResource> original) { + if (location.getResourcePath() + .endsWith(SeekingOggCodec.EXTENSION)) { + location = new ResourceLocation( + location.getResourceDomain(), + SeekingOggCodec.stripSeekMetadata(location.getResourcePath())); + } + return original.call(instance, location); + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/SoundManagerMixin.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/SoundManagerMixin.java new file mode 100644 index 0000000000..f65d247a4e --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/SoundManagerMixin.java @@ -0,0 +1,52 @@ +package gregtech.mixin.mixins.early.minecraft; + +import net.minecraft.client.audio.ISound; +import net.minecraft.client.audio.SoundManager; +import net.minecraft.client.audio.SoundPoolEntry; +import net.minecraft.util.ResourceLocation; + +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 com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; + +import gregtech.api.util.GT_MusicSystem; +import gregtech.client.ISeekingSound; +import gregtech.client.SeekingOggCodec; + +@Mixin(SoundManager.class) +public class SoundManagerMixin { + + @WrapOperation( + method = "playSound", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/audio/SoundPoolEntry;getSoundPoolEntryLocation()Lnet/minecraft/util/ResourceLocation;")) + ResourceLocation gt5u$wrap(SoundPoolEntry instance, Operation<ResourceLocation> original, + @Local(argsOnly = true) ISound sound) { + ResourceLocation result = original.call(instance); + if (sound instanceof ISeekingSound seekingSound) { + result = SeekingOggCodec.seekResource(result, seekingSound.getSeekMillisecondOffset()); + } + return result; + } + + @Inject(method = "stopAllSounds", at = @At("HEAD")) + void gt5u$notifyOfSoundStop(CallbackInfo ci) { + GT_MusicSystem.ClientSystem.onSoundBatchStop(); + } + + @Inject(method = "pauseAllSounds", at = @At("HEAD")) + void gt5u$notifyOfSoundPause(CallbackInfo ci) { + GT_MusicSystem.ClientSystem.onSoundBatchPause(); + } + + @Inject(method = "resumeAllSounds", at = @At("HEAD")) + void gt5u$notifyOfSoundResume(CallbackInfo ci) { + GT_MusicSystem.ClientSystem.onSoundBatchResume(); + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/StringTranslateMixin.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/StringTranslateMixin.java new file mode 100644 index 0000000000..5fb393def9 --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/StringTranslateMixin.java @@ -0,0 +1,33 @@ +package gregtech.mixin.mixins.early.minecraft; + +import static gregtech.mixin.MixinsVariablesHelper.currentlyTranslating; + +import java.util.regex.Matcher; + +import net.minecraft.util.StringTranslate; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import kubatech.Tags; + +@SuppressWarnings("unused") +@Mixin(value = StringTranslate.class) +public class StringTranslateMixin { + + @Redirect( + method = "parseLangFile", + at = @At( + value = "INVOKE", + target = "Ljava/util/regex/Matcher;replaceAll(Ljava/lang/String;)Ljava/lang/String;", + remap = false), + remap = false, + require = 1) + private static String kubatech$replaceAll(Matcher matcher, String replace) { + if (currentlyTranslating != null && currentlyTranslating.equals(Tags.MODID) && matcher.find()) { + return matcher.replaceFirst(matcher.group()); + } + return matcher.replaceAll(replace); + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaShapedRecipeMixin.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaShapedRecipeMixin.java new file mode 100644 index 0000000000..0eecaef6ea --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaShapedRecipeMixin.java @@ -0,0 +1,36 @@ +package gregtech.mixin.mixins.early.minecraft; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.ShapedRecipes; + +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import gregtech.api.interfaces.IRecipeMutableAccess; + +@Mixin(ShapedRecipes.class) +public class VanillaShapedRecipeMixin implements IRecipeMutableAccess { + + @Shadow + private ItemStack recipeOutput; + + @Shadow + @Final + public ItemStack[] recipeItems; + + @Override + public ItemStack gt5u$getRecipeOutputItem() { + return this.recipeOutput; + } + + @Override + public void gt5u$setRecipeOutputItem(ItemStack newItem) { + this.recipeOutput = newItem; + } + + @Override + public Object gt5u$getRecipeInputs() { + return this.recipeItems; + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaShapelessRecipeMixin.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaShapelessRecipeMixin.java new file mode 100644 index 0000000000..926ae6630c --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaShapelessRecipeMixin.java @@ -0,0 +1,38 @@ +package gregtech.mixin.mixins.early.minecraft; + +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.ShapelessRecipes; + +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import gregtech.api.interfaces.IRecipeMutableAccess; + +@Mixin(ShapelessRecipes.class) +public class VanillaShapelessRecipeMixin implements IRecipeMutableAccess { + + @Shadow + private ItemStack recipeOutput; + + @Shadow + @Final + public List<ItemStack> recipeItems; + + @Override + public ItemStack gt5u$getRecipeOutputItem() { + return this.recipeOutput; + } + + @Override + public void gt5u$setRecipeOutputItem(ItemStack newItem) { + this.recipeOutput = newItem; + } + + @Override + public Object gt5u$getRecipeInputs() { + return this.recipeItems; + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/WorldMixin.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/WorldMixin.java new file mode 100644 index 0000000000..abdb61f55b --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/WorldMixin.java @@ -0,0 +1,23 @@ +package gregtech.mixin.mixins.early.minecraft; + +import net.minecraft.block.Block; +import net.minecraft.world.World; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import com.llamalad7.mixinextras.injector.ModifyReturnValue; + +import kubatech.loaders.BlockLoader; + +@SuppressWarnings("unused") +@Mixin(value = World.class) +public class WorldMixin { + + @SuppressWarnings("ConstantConditions") + @ModifyReturnValue(method = "getBlock", at = @At("RETURN"), require = 1) + private Block kubatech$getBlockDetector(Block block, int x, int y, int z) { + if (block == BlockLoader.kubaBlock) BlockLoader.kubaBlock.setLastBlockAccess((World) (Object) this, x, y, z); + return block; + } +} |
