mirror of
https://github.com/Motschen/Blur.git
synced 2025-12-16 03:35:10 +01:00
Clean up reflection, add resource pack image and reload listener
This commit is contained in:
10
build.gradle
10
build.gradle
@@ -27,12 +27,10 @@ minecraft {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
minecraft "com.mojang:minecraft:18w49a"
|
minecraft "com.mojang:minecraft:18w50a"
|
||||||
mappings "net.fabricmc:yarn:18w49a.10"
|
mappings "net.fabricmc:yarn:18w50a.2"
|
||||||
modCompile "net.fabricmc:fabric-loader:0.2.0.62"
|
modCompile "net.fabricmc:fabric-loader:0.2.0.64"
|
||||||
|
modCompile "net.fabricmc:fabric:0.1.1.47"
|
||||||
// Fabric API. This is technically optional, but you probably want it anyway.
|
|
||||||
modCompile "net.fabricmc:fabric:0.1.0.37"
|
|
||||||
|
|
||||||
implementation 'com.google.code.findbugs:jsr305:3.0.2'
|
implementation 'com.google.code.findbugs:jsr305:3.0.2'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.tterrag.blur;
|
package com.tterrag.blur;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -7,9 +8,10 @@ import java.util.Map;
|
|||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
|
||||||
import com.google.common.base.Throwables;
|
|
||||||
import com.tterrag.blur.mixin.MixinWorldRenderer;
|
import com.tterrag.blur.mixin.MixinWorldRenderer;
|
||||||
|
import com.tterrag.blur.util.ReflectionHelper;
|
||||||
import com.tterrag.blur.util.ShaderResourcePack;
|
import com.tterrag.blur.util.ShaderResourcePack;
|
||||||
|
|
||||||
import net.fabricmc.api.ModInitializer;
|
import net.fabricmc.api.ModInitializer;
|
||||||
@@ -20,6 +22,8 @@ import net.minecraft.client.gl.Shader;
|
|||||||
import net.minecraft.client.gui.Gui;
|
import net.minecraft.client.gui.Gui;
|
||||||
import net.minecraft.client.render.WorldRenderer;
|
import net.minecraft.client.render.WorldRenderer;
|
||||||
import net.minecraft.client.resource.ClientResourcePackContainer;
|
import net.minecraft.client.resource.ClientResourcePackContainer;
|
||||||
|
import net.minecraft.client.texture.NativeImage;
|
||||||
|
import net.minecraft.resource.ReloadableResourceManager;
|
||||||
import net.minecraft.resource.ResourcePackCompatibility;
|
import net.minecraft.resource.ResourcePackCompatibility;
|
||||||
import net.minecraft.resource.ResourcePackContainer;
|
import net.minecraft.resource.ResourcePackContainer;
|
||||||
import net.minecraft.resource.ResourcePackContainer.Factory;
|
import net.minecraft.resource.ResourcePackContainer.Factory;
|
||||||
@@ -52,20 +56,21 @@ public class Blur implements ModInitializer {
|
|||||||
public static Blur instance;
|
public static Blur instance;
|
||||||
|
|
||||||
public Blur() throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
|
public Blur() throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
|
||||||
Field _rps;
|
ResourcePackContainerManager<ClientResourcePackContainer> rps = ReflectionHelper.getValue(MinecraftClient.class, MinecraftClient.getInstance(), "field_1715", "resourcePackContainerManager");
|
||||||
try {
|
|
||||||
_rps = MinecraftClient.class.getDeclaredField("field_1715");
|
|
||||||
} catch (NoSuchFieldException e) {
|
|
||||||
_rps = MinecraftClient.class.getDeclaredField("resourcePackContainerManager");
|
|
||||||
}
|
|
||||||
_rps.setAccessible(true);
|
|
||||||
ResourcePackContainerManager<ClientResourcePackContainer> rps = (ResourcePackContainerManager<ClientResourcePackContainer>)_rps.get(MinecraftClient.getInstance());
|
|
||||||
rps.addCreator(new ResourcePackCreator() {
|
rps.addCreator(new ResourcePackCreator() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T extends ResourcePackContainer> void registerContainer(Map<String, T> var1, Factory<T> factory) {
|
public <T extends ResourcePackContainer> void registerContainer(Map<String, T> var1, Factory<T> factory) {
|
||||||
|
NativeImage img = null;
|
||||||
T var3 = (T) new ClientResourcePackContainer("blur", true, () -> dummyPack, new StringTextComponent(dummyPack.getName()), new StringTextComponent(dummyPack.getName()), ResourcePackCompatibility.COMPATIBLE, SortingDirection.BOTTOM, true, null);
|
try {
|
||||||
|
img = NativeImage.fromInputStream(dummyPack.openRoot("pack.png"));
|
||||||
|
} catch (IOException e) {
|
||||||
|
LogManager.getLogger().error("Could not load blur's pack.png", e);
|
||||||
|
}
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
T var3 = (T) new ClientResourcePackContainer("blur", true, () -> dummyPack,
|
||||||
|
new StringTextComponent(dummyPack.getName()), new StringTextComponent("Default shaders for Blur"),
|
||||||
|
ResourcePackCompatibility.COMPATIBLE, SortingDirection.BOTTOM, true, img);
|
||||||
if (var3 != null) {
|
if (var3 != null) {
|
||||||
var1.put("blur", var3);
|
var1.put("blur", var3);
|
||||||
}
|
}
|
||||||
@@ -76,12 +81,10 @@ public class Blur implements ModInitializer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInitialize() {
|
public void onInitialize() {}
|
||||||
// Add our dummy resourcepack
|
|
||||||
// ((ReloadableResourceManager)MinecraftClient.getInstance().getResourceManager()).addListener(dummyPack);
|
|
||||||
|
|
||||||
// config = new Configuration(new File(event.getModConfigurationDirectory(), "blur.cfg"));
|
public void registerReloadListeners(ReloadableResourceManager manager) {
|
||||||
// saveConfig();
|
manager.addListener(dummyPack);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* private void saveConfig() {
|
/* private void saveConfig() {
|
||||||
@@ -123,12 +126,7 @@ public class Blur implements ModInitializer {
|
|||||||
*/
|
*/
|
||||||
public void onGuiChange(Gui newGui) {
|
public void onGuiChange(Gui newGui) {
|
||||||
if (_listShaders == null) {
|
if (_listShaders == null) {
|
||||||
try {
|
_listShaders = ReflectionHelper.getField(class_279.class, "field_1497");
|
||||||
_listShaders = class_279.class.getDeclaredField("field_1497");
|
|
||||||
_listShaders.setAccessible(true);
|
|
||||||
} catch (NoSuchFieldException | SecurityException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (MinecraftClient.getInstance().world != null) {
|
if (MinecraftClient.getInstance().world != null) {
|
||||||
WorldRenderer er = MinecraftClient.getInstance().worldRenderer;
|
WorldRenderer er = MinecraftClient.getInstance().worldRenderer;
|
||||||
@@ -159,7 +157,7 @@ public class Blur implements ModInitializer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (IllegalArgumentException | IllegalAccessException e) {
|
} catch (IllegalArgumentException | IllegalAccessException e) {
|
||||||
Throwables.propagate(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,27 +4,40 @@ import org.objectweb.asm.Opcodes;
|
|||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At.Shift;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
import com.tterrag.blur.Blur;
|
import com.tterrag.blur.Blur;
|
||||||
|
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.gui.Gui;
|
import net.minecraft.client.gui.Gui;
|
||||||
|
import net.minecraft.resource.ReloadableResourceManager;
|
||||||
|
|
||||||
@Mixin(MinecraftClient.class)
|
@Mixin(MinecraftClient.class)
|
||||||
public class MixinMinecraftClient {
|
public class MixinMinecraftClient {
|
||||||
|
|
||||||
@Inject(method = "openGui(Lnet/minecraft/client/gui/Gui;)V",
|
@Inject(method = "openGui(Lnet/minecraft/client/gui/Gui;)V",
|
||||||
at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;currentGui:Lnet/minecraft/client/gui/Gui;", opcode = Opcodes.PUTFIELD, ordinal = 0))
|
at = @At(value = "FIELD",
|
||||||
|
target = "net/minecraft/client/MinecraftClient.currentGui : Lnet/minecraft/client/gui/Gui;",
|
||||||
|
opcode = Opcodes.PUTFIELD))
|
||||||
public void onGuiOpen(Gui newGui, CallbackInfo info) {
|
public void onGuiOpen(Gui newGui, CallbackInfo info) {
|
||||||
Blur.instance.onGuiChange(newGui);
|
Blur.instance.onGuiChange(newGui);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "method_1523(Z)V",
|
@Inject(method = "method_1523(Z)V",
|
||||||
|
at = @At(value = "INVOKE",
|
||||||
at = @At(value = "INVOKE", target = "net/minecraft/client/toast/ToastManager.draw()V"),
|
target = "net/minecraft/client/toast/ToastManager.draw()V"),
|
||||||
require = 1)
|
require = 1)
|
||||||
public void onPostRenderTick(CallbackInfo info) {
|
public void onPostRenderTick(CallbackInfo info) {
|
||||||
Blur.instance.onPostRenderTick();
|
Blur.instance.onPostRenderTick();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Inject(method = "init()V",
|
||||||
|
at = @At(value = "FIELD",
|
||||||
|
target = "net/minecraft/client/MinecraftClient.resourceManager : Lnet/minecraft/resource/ReloadableResourceManager;",
|
||||||
|
opcode = Opcodes.PUTFIELD,
|
||||||
|
shift = Shift.AFTER))
|
||||||
|
public void onResourceManagerAssign(CallbackInfo info) {
|
||||||
|
Blur.instance.registerReloadListeners((ReloadableResourceManager) MinecraftClient.getInstance().getResourceManager());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
36
src/main/java/com/tterrag/blur/util/ReflectionHelper.java
Normal file
36
src/main/java/com/tterrag/blur/util/ReflectionHelper.java
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
package com.tterrag.blur.util;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class ReflectionHelper {
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public static <T> T getValue(Class<?> cls, Object instance, String...names) {
|
||||||
|
try {
|
||||||
|
return (T) getField(cls, names).get(instance);
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Field getField(Class<?> cls, String... names) {
|
||||||
|
for (String name : names) {
|
||||||
|
Field f = getFieldInternal(cls, name);
|
||||||
|
if (f != null) {
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new IllegalArgumentException("Could not find any of fields " + Arrays.toString(names) + " on class " + cls);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Field getFieldInternal(Class<?> cls, String name) {
|
||||||
|
try {
|
||||||
|
Field f = cls.getDeclaredField(name);
|
||||||
|
f.setAccessible(true);
|
||||||
|
return f;
|
||||||
|
} catch (NoSuchFieldException | SecurityException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -75,7 +75,7 @@ public class ShaderResourcePack implements ResourcePack, ResourceReloadListener
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return "Blur dummy resource pack";
|
return "Blur Shaders";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -88,12 +88,11 @@ public class ShaderResourcePack implements ResourcePack, ResourceReloadListener
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InputStream openRoot(String var1) throws IOException {
|
public InputStream openRoot(String var1) throws IOException {
|
||||||
return open(ResourceType.ASSETS, new Identifier(var1));
|
return Blur.class.getResourceAsStream("/assets/blur/" + var1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<Identifier> findResources(ResourceType var1, String var2, int var3, Predicate<String> var4) {
|
public Collection<Identifier> findResources(ResourceType var1, String var2, int var3, Predicate<String> var4) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
src/main/resources/assets/blur/pack.png
Normal file
BIN
src/main/resources/assets/blur/pack.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 182 KiB |
Reference in New Issue
Block a user