aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kubatech/mixin
diff options
context:
space:
mode:
authorJakub <53441451+kuba6000@users.noreply.github.com>2023-06-15 17:53:16 +0200
committerGitHub <noreply@github.com>2023-06-15 17:53:16 +0200
commitcb383c824c3f799e678fb98f29661d79b5a13836 (patch)
treec27ec3672eb0cb1726565bf28ae2655404496231 /src/main/java/kubatech/mixin
parentb2c2a6dfe91696d4ecada95e5e43806ddb144ece (diff)
downloadGT5-Unofficial-cb383c824c3f799e678fb98f29661d79b5a13836.tar.gz
GT5-Unofficial-cb383c824c3f799e678fb98f29661d79b5a13836.tar.bz2
GT5-Unofficial-cb383c824c3f799e678fb98f29661d79b5a13836.zip
Use mixins accessors + some misc fixes (#77)
* Change reflections to mixins * Wrap witchery checking * Remove more repeating code * hmm * test generation * test * client sided * Update CommandCustomDrops.java * Update MobRecipeLoader.java * Save to static variable * Imports * Log message * Convert InfernalHelper to mixin accessors * Update build.gradle * One more * Return class nodes to optimize * Translations mixin * Automatically add commands * Fixes * Fix https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/12021 * Update kubatech.java * Update CommonProxy.java * Unnecessary qualified reference * Simplify ItemUtils * Check if single player diffrently * Remove accessor for infernal-mobs
Diffstat (limited to 'src/main/java/kubatech/mixin')
-rw-r--r--src/main/java/kubatech/mixin/Mixin.java12
-rw-r--r--src/main/java/kubatech/mixin/MixinsVariablesHelper.java6
-rw-r--r--src/main/java/kubatech/mixin/TargetedMod.java4
-rw-r--r--src/main/java/kubatech/mixin/mixins/minecraft/EntityAccessor.java15
-rw-r--r--src/main/java/kubatech/mixin/mixins/minecraft/EntityLivingAccessor.java16
-rw-r--r--src/main/java/kubatech/mixin/mixins/minecraft/EntityLivingBaseAccessor.java16
-rw-r--r--src/main/java/kubatech/mixin/mixins/minecraft/EntitySlimeAccessor.java13
-rw-r--r--src/main/java/kubatech/mixin/mixins/minecraft/LanguageRegistryMixin.java27
-rw-r--r--src/main/java/kubatech/mixin/mixins/minecraft/LocaleMixin.java47
-rw-r--r--src/main/java/kubatech/mixin/mixins/minecraft/RendererLivingEntityAccessor.java15
-rw-r--r--src/main/java/kubatech/mixin/mixins/minecraft/StringTranslateMixin.java33
-rw-r--r--src/main/java/kubatech/mixin/mixins/minecraft/WorldMixin.java12
12 files changed, 208 insertions, 8 deletions
diff --git a/src/main/java/kubatech/mixin/Mixin.java b/src/main/java/kubatech/mixin/Mixin.java
index 74f0ca5263..19e3b32610 100644
--- a/src/main/java/kubatech/mixin/Mixin.java
+++ b/src/main/java/kubatech/mixin/Mixin.java
@@ -12,7 +12,17 @@ public enum Mixin {
// Minecraft
EnchantmentHelperMixin("minecraft.EnchantmentHelperMixin", VANILLA),
- WorldMixin("minecraft.WorldMixin", VANILLA);
+ WorldMixin("minecraft.WorldMixin", VANILLA),
+ EntityAccessor("minecraft.EntityAccessor", VANILLA),
+ EntityLivingAccessor("minecraft.EntityLivingAccessor", VANILLA),
+ EntityLivingBaseAccessor("minecraft.EntityLivingBaseAccessor", VANILLA),
+ EntitySlimeAccessor("minecraft.EntitySlimeAccessor", VANILLA),
+ RendererLivingEntityAccessor("minecraft.RendererLivingEntityAccessor", VANILLA),
+ StringTranslateMixin("minecraft.StringTranslateMixin", VANILLA),
+ LanguageRegistryMixin("minecraft.LanguageRegistryMixin", VANILLA),
+ LocaleMixin("minecraft.LocaleMixin", Side.CLIENT, VANILLA),
+
+ ;
public final String mixinClass;
public final List<TargetedMod> targetedMods;
diff --git a/src/main/java/kubatech/mixin/MixinsVariablesHelper.java b/src/main/java/kubatech/mixin/MixinsVariablesHelper.java
new file mode 100644
index 0000000000..1875be6efc
--- /dev/null
+++ b/src/main/java/kubatech/mixin/MixinsVariablesHelper.java
@@ -0,0 +1,6 @@
+package kubatech.mixin;
+
+public class MixinsVariablesHelper {
+
+ public static String currentlyTranslating = null;
+}
diff --git a/src/main/java/kubatech/mixin/TargetedMod.java b/src/main/java/kubatech/mixin/TargetedMod.java
index 6152a91236..65717c7e12 100644
--- a/src/main/java/kubatech/mixin/TargetedMod.java
+++ b/src/main/java/kubatech/mixin/TargetedMod.java
@@ -6,7 +6,9 @@ import com.google.common.io.Files;
public enum TargetedMod {
- VANILLA("Minecraft", "unused", true),;
+ VANILLA("Minecraft", "unused", true),
+
+ ;
public final String modName;
public final String jarNamePrefixLowercase;
diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/EntityAccessor.java b/src/main/java/kubatech/mixin/mixins/minecraft/EntityAccessor.java
new file mode 100644
index 0000000000..67e42acf6a
--- /dev/null
+++ b/src/main/java/kubatech/mixin/mixins/minecraft/EntityAccessor.java
@@ -0,0 +1,15 @@
+package kubatech.mixin.mixins.minecraft;
+
+import java.util.Random;
+
+import net.minecraft.entity.Entity;
+
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Accessor;
+
+@Mixin(value = Entity.class)
+public interface EntityAccessor {
+
+ @Accessor
+ void setRand(Random rand);
+}
diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/EntityLivingAccessor.java b/src/main/java/kubatech/mixin/mixins/minecraft/EntityLivingAccessor.java
new file mode 100644
index 0000000000..59f8ea66d6
--- /dev/null
+++ b/src/main/java/kubatech/mixin/mixins/minecraft/EntityLivingAccessor.java
@@ -0,0 +1,16 @@
+package kubatech.mixin.mixins.minecraft;
+
+import net.minecraft.entity.EntityLiving;
+
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Invoker;
+
+@Mixin(value = EntityLiving.class)
+public interface EntityLivingAccessor {
+
+ @Invoker
+ void callAddRandomArmor();
+
+ @Invoker
+ void callEnchantEquipment();
+}
diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/EntityLivingBaseAccessor.java b/src/main/java/kubatech/mixin/mixins/minecraft/EntityLivingBaseAccessor.java
new file mode 100644
index 0000000000..95370b872b
--- /dev/null
+++ b/src/main/java/kubatech/mixin/mixins/minecraft/EntityLivingBaseAccessor.java
@@ -0,0 +1,16 @@
+package kubatech.mixin.mixins.minecraft;
+
+import net.minecraft.entity.EntityLivingBase;
+
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Invoker;
+
+@Mixin(value = EntityLivingBase.class)
+public interface EntityLivingBaseAccessor {
+
+ @Invoker
+ void callDropFewItems(boolean recentlyHit, int lootingLevel);
+
+ @Invoker
+ void callDropRareDrop(int lootingLevel);
+}
diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/EntitySlimeAccessor.java b/src/main/java/kubatech/mixin/mixins/minecraft/EntitySlimeAccessor.java
new file mode 100644
index 0000000000..d7b4eaafb8
--- /dev/null
+++ b/src/main/java/kubatech/mixin/mixins/minecraft/EntitySlimeAccessor.java
@@ -0,0 +1,13 @@
+package kubatech.mixin.mixins.minecraft;
+
+import net.minecraft.entity.monster.EntitySlime;
+
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Invoker;
+
+@Mixin(value = EntitySlime.class)
+public interface EntitySlimeAccessor {
+
+ @Invoker
+ void callSetSlimeSize(int size);
+}
diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/LanguageRegistryMixin.java b/src/main/java/kubatech/mixin/mixins/minecraft/LanguageRegistryMixin.java
new file mode 100644
index 0000000000..77d99d2ab4
--- /dev/null
+++ b/src/main/java/kubatech/mixin/mixins/minecraft/LanguageRegistryMixin.java
@@ -0,0 +1,27 @@
+package kubatech.mixin.mixins.minecraft;
+
+import static kubatech.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 loadLanguagesForHEAD(ModContainer container, Side side, CallbackInfo callbackInfo) {
+ currentlyTranslating = container.getModId();
+ }
+
+ @Inject(method = "loadLanguagesFor", at = @At(value = "RETURN"), remap = false, require = 1)
+ private void loadLanguagesForRETURN(ModContainer container, Side side, CallbackInfo callbackInfo) {
+ currentlyTranslating = null;
+ }
+}
diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/LocaleMixin.java b/src/main/java/kubatech/mixin/mixins/minecraft/LocaleMixin.java
new file mode 100644
index 0000000000..e591878c32
--- /dev/null
+++ b/src/main/java/kubatech/mixin/mixins/minecraft/LocaleMixin.java
@@ -0,0 +1,47 @@
+package kubatech.mixin.mixins.minecraft;
+
+import static kubatech.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 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 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/main/java/kubatech/mixin/mixins/minecraft/RendererLivingEntityAccessor.java b/src/main/java/kubatech/mixin/mixins/minecraft/RendererLivingEntityAccessor.java
new file mode 100644
index 0000000000..a2fe93954f
--- /dev/null
+++ b/src/main/java/kubatech/mixin/mixins/minecraft/RendererLivingEntityAccessor.java
@@ -0,0 +1,15 @@
+package kubatech.mixin.mixins.minecraft;
+
+import net.minecraft.client.model.ModelBase;
+import net.minecraft.client.renderer.entity.RendererLivingEntity;
+
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Accessor;
+
+@Mixin(value = RendererLivingEntity.class)
+public interface RendererLivingEntityAccessor {
+
+ @Accessor
+ ModelBase getMainModel();
+
+}
diff --git a/src/main/java/kubatech/mixin/mixins/minecraft/StringTranslateMixin.java b/src/main/java/kubatech/mixin/mixins/minecraft/StringTranslateMixin.java
new file mode 100644
index 0000000000..2841ccc0c0
--- /dev/null
+++ b/src/main/java/kubatech/mixin/mixins/minecraft/StringTranslateMixin.java
@@ -0,0 +1,33 @@
+package kubatech.mixin.mixins.minecraft;
+
+import static kubatech.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 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/main/java/kubatech/mixin/mixins/minecraft/WorldMixin.java b/src/main/java/kubatech/mixin/mixins/minecraft/WorldMixin.java
index 4d8aaf10e6..ed28dc60c4 100644
--- a/src/main/java/kubatech/mixin/mixins/minecraft/WorldMixin.java
+++ b/src/main/java/kubatech/mixin/mixins/minecraft/WorldMixin.java
@@ -5,8 +5,8 @@ import net.minecraft.world.World;
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.CallbackInfoReturnable;
+
+import com.gtnewhorizon.mixinextras.injector.ModifyReturnValue;
import kubatech.loaders.BlockLoader;
@@ -15,9 +15,9 @@ import kubatech.loaders.BlockLoader;
public class WorldMixin {
@SuppressWarnings("ConstantConditions")
- @Inject(method = "getBlock", at = @At("RETURN"), require = 1)
- private void getBlockDetector(int x, int y, int z, CallbackInfoReturnable<Block> callbackInfoReturnable) {
- if (callbackInfoReturnable.getReturnValue() == BlockLoader.kubaBlock)
- BlockLoader.kubaBlock.setLastBlockAccess((World) (Object) this, x, y, z);
+ @ModifyReturnValue(method = "getBlock", at = @At("RETURN"), require = 1)
+ private Block getBlockDetector(Block block, int x, int y, int z) {
+ if (block == BlockLoader.kubaBlock) BlockLoader.kubaBlock.setLastBlockAccess((World) (Object) this, x, y, z);
+ return block;
}
}