aboutsummaryrefslogtreecommitdiff
path: root/src/mixin/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/mixin/java')
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/early/minecraft/BlockStemMixin.java23
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/early/minecraft/CraftingManagerMixin.java24
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/early/minecraft/ForgeShapedRecipeMixin.java34
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/early/minecraft/ForgeShapelessRecipeMixin.java36
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/early/minecraft/LanguageRegistryMixin.java27
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/early/minecraft/LocaleMixin.java47
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/early/minecraft/SoundManagerInnerMixin.java33
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/early/minecraft/SoundManagerMixin.java52
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/early/minecraft/StringTranslateMixin.java33
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaShapedRecipeMixin.java36
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaShapelessRecipeMixin.java38
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/early/minecraft/WorldMixin.java23
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;
+ }
+}