Compare commits

..
6 Commits
Author SHA1 Message Date
Guillaume MercierandGuillaume Mercier d8477007c9 Add compat for fluid colors for non GT5u fluids (#69)
Co-authored-by: Guillaume Mercier <[email protected]>
2026-06-05 16:01:44 -04:00
flamingowrangler2869 bd5905dfc0 fix comparator "substractor" mode spelling (#70) 2026-05-24 00:26:01 +00:00
Algent 80e761d83f Allow Waila to handle bigger NBT packet (#68) 2026-05-12 14:12:37 +02:00
MalTeeezandgithub-actions[bot] ef0f8b5329 Prevent overflowing of bars in tooltip renderers (#66)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-05-11 18:50:24 +02:00
Alexdoru 65e4a773d0 [Memory-opti:fix leak] fix client leak from DataAccessorFMP (#65) 2026-05-10 20:19:36 +02:00
jackandMartin Robertz 30717912fb Added GUI config factory (#63)
Co-authored-by: Martin Robertz <[email protected]>
2026-05-03 10:05:56 +02:00
9 changed files with 112 additions and 59 deletions

No files matched your search

+2 -1
View File
@@ -40,7 +40,8 @@ import mcp.mobius.waila.utils.ModIdentification;
name = "Waila",
version = Tags.GRADLETOKEN_VERSION,
dependencies = "after:NotEnoughItems@[1.0.4.0,)",
acceptableRemoteVersions = "*")
acceptableRemoteVersions = "*",
guiFactory = "mcp.mobius.waila.client.WailaGuiFactory")
public class Waila {
// The instance of your mod that Forge uses.
@@ -12,18 +12,18 @@ import mcp.mobius.waila.utils.NBTUtil;
public class DataAccessorFMP implements IWailaFMPAccessor {
String id;
World world;
EntityPlayer player;
MovingObjectPosition mop;
Vec3 renderingvec = null;
TileEntity entity;
NBTTagCompound partialNBT = null;
NBTTagCompound remoteNBT = null;
long timeLastUpdate = System.currentTimeMillis();
double partialFrame;
public static final DataAccessorFMP instance = new DataAccessorFMP();
public static DataAccessorFMP instance = new DataAccessorFMP();
private String id;
private World world;
private EntityPlayer player;
private MovingObjectPosition mop;
private Vec3 renderingvec;
private TileEntity tileEntity;
private NBTTagCompound partialNBT;
private double partialFrame;
private DataAccessorFMP() {}
public void set(World _world, EntityPlayer _player, MovingObjectPosition _mop, NBTTagCompound _partialNBT,
String id) {
@@ -35,13 +35,24 @@ public class DataAccessorFMP implements IWailaFMPAccessor {
this.world = _world;
this.player = _player;
this.mop = _mop;
this.entity = world.getTileEntity(_mop.blockX, _mop.blockY, _mop.blockZ);
this.tileEntity = world.getTileEntity(_mop.blockX, _mop.blockY, _mop.blockZ);
this.partialNBT = _partialNBT;
this.id = id;
this.renderingvec = renderVec;
this.partialFrame = partialTicks;
}
public void reset() {
id = null;
world = null;
player = null;
mop = null;
renderingvec = null;
tileEntity = null;
partialNBT = null;
partialFrame = 0.0D;
}
@Override
public World getWorld() {
return this.world;
@@ -54,7 +65,7 @@ public class DataAccessorFMP implements IWailaFMPAccessor {
@Override
public TileEntity getTileEntity() {
return this.entity;
return this.tileEntity;
}
@Override
@@ -69,12 +80,9 @@ public class DataAccessorFMP implements IWailaFMPAccessor {
@Override
public NBTTagCompound getFullNBTData() {
if (this.entity == null) return null;
if (this.isTagCorrect(this.remoteNBT)) return this.remoteNBT;
if (this.tileEntity == null) return null;
NBTTagCompound tag = new NBTTagCompound();
this.entity.writeToNBT(tag);
this.tileEntity.writeToNBT(tag);
return tag;
}
@@ -98,20 +106,4 @@ public class DataAccessorFMP implements IWailaFMPAccessor {
return this.id;
}
private boolean isTagCorrect(NBTTagCompound tag) {
if (tag == null) {
this.timeLastUpdate = System.currentTimeMillis() - 250;
return false;
}
int x = tag.getInteger("x");
int y = tag.getInteger("y");
int z = tag.getInteger("z");
if (x == this.mop.blockX && y == this.mop.blockY && z == this.mop.blockZ) return true;
else {
this.timeLastUpdate = System.currentTimeMillis() - 250;
return false;
}
}
}
@@ -0,0 +1,30 @@
package mcp.mobius.waila.client;
import java.util.Set;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
import cpw.mods.fml.client.IModGuiFactory;
import mcp.mobius.waila.gui.screens.config.ScreenConfig;
public class WailaGuiFactory implements IModGuiFactory {
@Override
public void initialize(Minecraft minecraftInstance) {}
@Override
public Class<? extends GuiScreen> mainConfigGuiClass() {
return ScreenConfig.class;
}
@Override
public Set<RuntimeOptionCategoryElement> runtimeGuiCategories() {
return null;
}
@Override
public RuntimeOptionGuiHandler getHandlerFor(RuntimeOptionCategoryElement element) {
return null;
}
}
@@ -35,9 +35,13 @@ public class DecoratorFMP implements IWailaBlockDecorator {
accessor.getRenderingPosition(),
accessor.getPartialFrame());
for (List<IWailaFMPDecorator> providersList : ModuleRegistrar.instance().getFMPDecorators(id).values())
for (IWailaFMPDecorator provider : providersList)
for (List<IWailaFMPDecorator> providersList : ModuleRegistrar.instance().getFMPDecorators(id)
.values()) {
for (IWailaFMPDecorator provider : providersList) {
provider.decorateBlock(itemStack, DataAccessorFMP.instance, config);
}
}
DataAccessorFMP.instance.reset();
}
}
}
@@ -41,9 +41,11 @@ public class HUDHandlerFMP implements IWailaDataProvider {
for (List<IWailaFMPProvider> providersList : ModuleRegistrar.instance().getHeadFMPProviders(id)
.values()) {
for (IWailaFMPProvider provider : providersList)
for (IWailaFMPProvider provider : providersList) {
currenttip = provider.getWailaHead(itemStack, currenttip, DataAccessorFMP.instance, config);
}
}
DataAccessorFMP.instance.reset();
}
}
@@ -64,9 +66,11 @@ public class HUDHandlerFMP implements IWailaDataProvider {
for (List<IWailaFMPProvider> providersList : ModuleRegistrar.instance().getBodyFMPProviders(id)
.values()) {
for (IWailaFMPProvider provider : providersList)
for (IWailaFMPProvider provider : providersList) {
currenttip = provider.getWailaBody(itemStack, currenttip, DataAccessorFMP.instance, config);
}
}
DataAccessorFMP.instance.reset();
}
}
@@ -87,9 +91,11 @@ public class HUDHandlerFMP implements IWailaDataProvider {
for (List<IWailaFMPProvider> providersList : ModuleRegistrar.instance().getTailFMPProviders(id)
.values()) {
for (IWailaFMPProvider provider : providersList)
for (IWailaFMPProvider provider : providersList) {
currenttip = provider.getWailaTail(itemStack, currenttip, DataAccessorFMP.instance, config);
}
}
DataAccessorFMP.instance.reset();
}
}
@@ -90,20 +90,20 @@ public enum WailaPacketHandler {
}
public void writeNBT(ByteBuf target, NBTTagCompound tag) throws IOException {
if (tag == null) target.writeShort(-1);
if (tag == null) target.writeInt(-1);
else {
byte[] abyte = CompressedStreamTools.compress(tag);
target.writeShort((short) abyte.length);
target.writeInt(abyte.length);
target.writeBytes(abyte);
}
}
public NBTTagCompound readNBT(ByteBuf dat) throws IOException {
short short1 = dat.readShort();
int val = dat.readInt();
if (short1 < 0) return null;
if (val < 0) return null;
else {
byte[] abyte = new byte[short1];
byte[] abyte = new byte[val];
dat.readBytes(abyte);
return CompressedStreamTools.func_152457_a(abyte, NBTSizeTracker.field_152451_a);
}
@@ -12,14 +12,12 @@ import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import org.lwjgl.opengl.GL11;
import gregtech.api.util.GTUtil;
import gregtech.common.fluid.GTFluid;
import gtPlusPlus.api.objects.minecraft.FluidGT6;
import gtPlusPlus.core.util.minecraft.FluidUtils;
import mcp.mobius.waila.api.IWailaCommonAccessor;
import mcp.mobius.waila.api.IWailaVariableWidthTooltipRenderer;
@@ -37,17 +35,39 @@ public class TTRenderFluidBar implements IWailaVariableWidthTooltipRenderer {
public TTRenderFluidBar() {
if (LoadedMods.GT5U) {
bindColor = (fluidName) -> {
FluidStack aCheck = FluidUtils.getWildcardFluidStack(fluidName, 1000);
if (aCheck != null && (aCheck.getFluid() instanceof FluidGT6 || aCheck.getFluid() instanceof GTFluid)) {
short[] RGBa = GTUtil.getRGBaArray(aCheck.getFluid().getColor());
GL11.glColor4f(RGBa[0] / 255F, RGBa[1] / 255F, RGBa[2] / 255F, 1F);
} else {
GL11.glColor4f(1F, 1F, 1F, 1F);
FluidStack tFStack = FluidUtils.getWildcardFluidStack(fluidName, 1000);
if (tFStack == null) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
return;
}
Fluid tFluid = tFStack.getFluid();
if (tFluid == null) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
return;
}
// duplicate code to prevent extra stack allocations
int tColor = tFluid.getColor();
float r = ((tColor >>> 16) & 0xFF) / (float) 0xFF;
float g = ((tColor >>> 8) & 0xFF) / (float) 0xFF;
float b = (tColor & 0xFF) / (float) 0xFF;
GL11.glColor4f(r, g, b, 1.0F);
};
} else {
bindColor = (fluidName) -> GL11.glColor4f(1F, 1F, 1F, 1F);
bindColor = (fluidName) -> {
Fluid tFluid = FluidRegistry.getFluid(fluidName);
if (tFluid == null) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
return;
}
// duplicate code to prevent extra stack allocations
int tColor = tFluid.getColor();
float r = ((tColor >>> 16) & 0xFF) / (float) 0xFF;
float g = ((tColor >>> 8) & 0xFF) / (float) 0xFF;
float b = (tColor & 0xFF) / (float) 0xFF;
GL11.glColor4f(r, g, b, 1.0F);
};
}
}
@Override
@@ -83,7 +103,7 @@ public class TTRenderFluidBar implements IWailaVariableWidthTooltipRenderer {
tessellator.startDrawingQuads();
// Intentionally draw 2 pixels taller than needed than cover with the border to make the texture more
// visible
int i = (int) ((double) (maxStringW - 2) * amount / capacity);
int i = (int) ((double) (maxStringW - 2) * (amount / Math.max(capacity, amount)));
int j = 0;
for (; i > height; i = i - height) {
drawRectFromIcon(tessellator, 1 + (j * height), 0, 0, icon, height, height);
@@ -50,7 +50,7 @@ public class TTRenderRFBar implements IWailaVariableWidthTooltipRenderer {
drawRect(tessellator, 1 + i, 0, 0, width, height, 0.0, 0.0, 0.5, 1.0);
}
double i = (double) (maxStringW - 2) * amount / capacity;
double i = (double) (maxStringW - 2) * ((double) amount / Math.max(capacity, amount));
int drawnRects = 0;
for (; i > width; i -= width) {
drawRect(tessellator, 1 + (drawnRects * width), 0, 0, width, height, 0.5, 0.0, 1.0, 1.0);
@@ -92,7 +92,7 @@ hud.msg.on=On
hud.msg.state=State
hud.msg.delay=Delay
hud.msg.comparator=Comparator
hud.msg.substractor=Substractor
hud.msg.substractor=Subtractor
hud.msg.record=Record
hud.msg.offers=Offers
@@ -155,4 +155,4 @@ option.general.showhp=Show entities health
option.general.showcrop=Show crop growth
option.thaumcraft.aspects=Show aspects
nei.options.keys.showenchant=Show enchanting values
nei.options.keys.showenchant=Show enchanting values