Skip to content

Commit

Permalink
Fix texture binder reloads
Browse files Browse the repository at this point in the history
  • Loading branch information
TechPizzaDev committed Aug 15, 2023
1 parent 190d899 commit 51e6d62
Show file tree
Hide file tree
Showing 14 changed files with 123 additions and 89 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,24 @@
package dev.adventurecraft.awakening.client.render;

import dev.adventurecraft.awakening.common.Vec2;
import dev.adventurecraft.awakening.extension.client.ExTextureManager;
import net.minecraft.client.render.TextureBinder;

public interface AC_TextureBinder {

void onTick(Vec2 var1);

void loadImage();

void loadImage(String var0);
void loadImage(String name);

String getTexture();

static <T extends TextureBinder> void loadImages(ExTextureManager texManager, Class<T> type) {
texManager.getTextureBinders(type).forEach(b -> ((AC_TextureBinder) b).loadImage());
}

static <T extends TextureBinder> void loadImages(ExTextureManager texManager, Class<T> type, String name) {
texManager.getTextureBinders(type).forEach(b -> ((AC_TextureBinder) b).loadImage(name));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ public void replaceTextures(World keyName, String replacementName) {

public static boolean replaceTexture(World world, String keyName, String replacementName) {
String key = keyName.toLowerCase();
ExTextureManager texManager = (ExTextureManager) Minecraft.instance.textureManager;
var texManager = (ExTextureManager) Minecraft.instance.textureManager;
if (!((ExWorldProperties) world.properties).addReplacementTexture(keyName, replacementName)) {
return false;
} else if (key.equals("/watermap.png")) {
Expand All @@ -161,22 +161,22 @@ public static boolean replaceTexture(World world, String keyName, String replace
needsReloadForRevert = true;
return true;
} else if (key.equals("/custom_fire.png")) {
((AC_TextureBinder) texManager.getTextureBinder(FireTextureBinder.class)).loadImage(replacementName);
AC_TextureBinder.loadImages(texManager, FireTextureBinder.class, replacementName);
return true;
} else if (key.equals("/custom_lava_flowing.png")) {
((AC_TextureBinder) texManager.getTextureBinder(FlowingLavaTextureBinder2.class)).loadImage(replacementName);
AC_TextureBinder.loadImages(texManager, FlowingLavaTextureBinder2.class, replacementName);
return true;
} else if (key.equals("/custom_lava_still.png")) {
((AC_TextureBinder) texManager.getTextureBinder(FlowingLavaTextureBinder.class)).loadImage(replacementName);
AC_TextureBinder.loadImages(texManager, FlowingLavaTextureBinder.class, replacementName);
return true;
} else if (key.equals("/custom_portal.png")) {
((AC_TextureBinder) texManager.getTextureBinder(PortalTextureBinder.class)).loadImage(replacementName);
AC_TextureBinder.loadImages(texManager, PortalTextureBinder.class, replacementName);
return true;
} else if (key.equals("/custom_water_flowing.png")) {
((AC_TextureBinder) texManager.getTextureBinder(FlowingWaterTextureBinder.class)).loadImage(replacementName);
AC_TextureBinder.loadImages(texManager, FlowingWaterTextureBinder.class, replacementName);
return true;
} else if (key.equals("/custom_water_still.png")) {
((AC_TextureBinder) texManager.getTextureBinder(FlowingWaterTextureBinder2.class)).loadImage(replacementName);
AC_TextureBinder.loadImages(texManager, FlowingWaterTextureBinder2.class, replacementName);
return true;
} else {
texManager.replaceTexture(keyName, replacementName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,32 +3,47 @@
import java.awt.image.BufferedImage;
import java.io.IOException;

import dev.adventurecraft.awakening.client.render.AC_TextureBinder;
import dev.adventurecraft.awakening.extension.client.ExTextureManager;
import dev.adventurecraft.awakening.extension.world.ExWorld;
import net.minecraft.client.Minecraft;
import net.minecraft.client.render.TextureBinder;

public class AC_TextureFanFX extends TextureBinder {
static int numFrames;
public class AC_TextureFanFX extends TextureBinder implements AC_TextureBinder {

int numFrames;
int curFrame = 0;
private static int[] fanImage;
private static int width;
private static int height;
int[] fanImage;
int width;
int height;

public AC_TextureFanFX() {
super(AC_Blocks.fan.texture);
loadImage();
}

public static void loadImage() {
@Override
public String getTexture() {
// TODO: fix texture management (see MixinTextureManager)
if (this.renderMode == 0) return "/terrain.png";
//if (this.renderMode == 1) return "/gui/items.png";
return "/gui/items.png";
}

@Override
public void loadImage() {
this.loadImage("/misc/fan.png");
}

@Override
public void loadImage(String name) {
try {
BufferedImage var0 = null;
if (Minecraft.instance.world != null) {
var0 = ((ExWorld) Minecraft.instance.world).loadMapTexture("/misc/fan.png");
var0 = ((ExWorld) Minecraft.instance.world).loadMapTexture(name);
}

if (var0 == null) {
var0 = ((ExTextureManager) Minecraft.instance.textureManager).getTextureImage("/misc/fan.png");
var0 = ((ExTextureManager) Minecraft.instance.textureManager).getTextureImage(name);
}

width = var0.getWidth();
Expand All @@ -43,16 +58,20 @@ public static void loadImage() {
width = 16;
height = 16;
}

}

@Override
public void onTick(Vec2 var1) {
if (this.fanImage == null) {
return;
}

int var2 = this.curFrame * height;
int var3 = 0;

for (int var4 = 0; var4 < height; ++var4) {
for (int var5 = 0; var5 < height; ++var5) {
int var6 = fanImage[var4 + var5 * width + var2];
int var6 = this.fanImage[var4 + var5 * width + var2];
this.grid[var3 * 4 + 0] = (byte) (var6 >> 16 & 255);
this.grid[var3 * 4 + 1] = (byte) (var6 >> 8 & 255);
this.grid[var3 * 4 + 2] = (byte) (var6 & 255);
Expand All @@ -61,6 +80,6 @@ public void onTick(Vec2 var1) {
}
}

this.curFrame = (this.curFrame + 1) % numFrames;
this.curFrame = (this.curFrame + 1) % this.numFrames;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.stream.Stream;

public interface ExTextureManager {

<T extends TextureBinder> T getTextureBinder(Class<T> type);
<T extends TextureBinder> Stream<T> getTextureBinders(Class<T> type);

BufferedImage getTextureImage(String name) throws IOException;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ static int getBaseColor(int meta) {
return GrassColor.map[0];
}

static void loadGrass(String var0) {
BufferedImage var1 = ((ExWorld) Minecraft.instance.world).loadMapTexture(var0);
static void loadGrass(String fileName) {
BufferedImage var1 = ((ExWorld) Minecraft.instance.world).loadMapTexture(fileName);
if (var1 == null) {
try {
var1 = ImageIO.read(FoliageColor.class.getResource(var0));
var1 = ImageIO.read(FoliageColor.class.getResource(fileName));
} catch (Exception var3) {
var3.printStackTrace();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public interface ExWorld {
void initWorld(
String mapName, DimensionData dimData, String saveName, long seed, Dimension dimension, ProgressListener progressListener);

BufferedImage loadMapTexture(String var1);
BufferedImage loadMapTexture(String name);

void updateChunkProvider();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,10 +196,10 @@ public void loadImage() {
}

@Override
public void loadImage(String var0) {
public void loadImage(String name) {
BufferedImage var1 = null;
if (Minecraft.instance.world != null) {
var1 = ((ExWorld) Minecraft.instance.world).loadMapTexture(var0);
var1 = ((ExWorld) Minecraft.instance.world).loadMapTexture(name);
}

curFrame = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -190,10 +190,10 @@ public void loadImage() {
}

@Override
public void loadImage(String var0) {
public void loadImage(String name) {
BufferedImage var1 = null;
if (Minecraft.instance.world != null) {
var1 = ((ExWorld) Minecraft.instance.world).loadMapTexture(var0);
var1 = ((ExWorld) Minecraft.instance.world).loadMapTexture(name);
}

curFrame = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,10 +195,10 @@ public void loadImage() {
loadImage("/custom_lava_flowing.png");
}

public void loadImage(String var0) {
public void loadImage(String name) {
BufferedImage var1 = null;
if (Minecraft.instance.world != null) {
var1 = ((ExWorld) Minecraft.instance.world).loadMapTexture(var0);
var1 = ((ExWorld) Minecraft.instance.world).loadMapTexture(name);
}

curFrame = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -202,10 +202,10 @@ public void loadImage() {
loadImage("/custom_water_flowing.png");
}

public void loadImage(String var0) {
public void loadImage(String name) {
BufferedImage var1 = null;
if (Minecraft.instance.world != null) {
var1 = ((ExWorld) Minecraft.instance.world).loadMapTexture(var0);
var1 = ((ExWorld) Minecraft.instance.world).loadMapTexture(name);
}

curFrame = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,10 +201,10 @@ public void loadImage() {
loadImage("/custom_water_still.png");
}

public void loadImage(String var0) {
public void loadImage(String name) {
BufferedImage var1 = null;
if (Minecraft.instance.world != null) {
var1 = ((ExWorld) Minecraft.instance.world).loadMapTexture(var0);
var1 = ((ExWorld) Minecraft.instance.world).loadMapTexture(name);
}

curFrame = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -189,10 +189,10 @@ public void loadImage() {
loadImage("/custom_portal.png");
}

public void loadImage(String var0) {
public void loadImage(String name) {
BufferedImage var1 = null;
if (Minecraft.instance.world != null) {
var1 = ((ExWorld)Minecraft.instance.world).loadMapTexture(var0);
var1 = ((ExWorld)Minecraft.instance.world).loadMapTexture(name);
}

curFrame = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import java.util.*;
import java.util.stream.Stream;

// TODO: improve texture management and lookups.
// do to not use strings and IDs at random

@Mixin(TextureManager.class)
public abstract class MixinTextureManager implements ExTextureManager {
Expand Down Expand Up @@ -207,13 +211,10 @@ public void bindImageToId(BufferedImage image, int texId) {

@SuppressWarnings("unchecked")
@Override
public <T extends TextureBinder> T getTextureBinder(Class<T> type) {
for (TextureBinder binder : this.textureBinders) {
if (type.isInstance(binder)) {
return (T) binder;
}
}
return null;
public <T extends TextureBinder> Stream<T> getTextureBinders(Class<T> type) {
return this.textureBinders.stream()
.filter(type::isInstance)
.map(binder -> (T) binder);
}

@Override
Expand Down
Loading

0 comments on commit 51e6d62

Please sign in to comment.