Compare commits

..
12 changed files with 201 additions and 224 deletions

No files matched your search

@@ -17,7 +17,6 @@ import cpw.mods.fml.common.registry.GameData;
import mcp.mobius.waila.api.IWailaCommonAccessor;
import mcp.mobius.waila.api.IWailaDataAccessor;
import mcp.mobius.waila.api.IWailaEntityAccessor;
import mcp.mobius.waila.handlers.HUDHandlerInventory;
import mcp.mobius.waila.utils.NBTUtil;
public class DataAccessorCommon implements IWailaCommonAccessor, IWailaDataAccessor, IWailaEntityAccessor {
@@ -124,23 +123,9 @@ public class DataAccessorCommon implements IWailaCommonAccessor, IWailaDataAcces
@Override
public NBTTagCompound getNBTData() {
if ((this.tileEntity != null) && this.isTagCorrectTileEntity(this.remoteNbt)) {
if (!remoteNbt.getBoolean(HUDHandlerInventory.TAG_SUMMARY_ONLY)) return remoteNbt;
NBTTagCompound tag = new NBTTagCompound();
try {
this.tileEntity.writeToNBT(tag);
} catch (Exception ignored) {}
return HUDHandlerInventory.mergeSummary(remoteNbt, tag);
}
if ((this.tileEntity != null) && this.isTagCorrectTileEntity(this.remoteNbt)) return remoteNbt;
if ((this.entity != null) && this.isTagCorrectEntity(this.remoteNbt)) {
if (!remoteNbt.getBoolean(HUDHandlerInventory.TAG_SUMMARY_ONLY)) return remoteNbt;
NBTTagCompound tag = new NBTTagCompound();
try {
this.entity.writeToNBT(tag);
} catch (Exception ignored) {}
return HUDHandlerInventory.mergeSummary(remoteNbt, tag);
}
if ((this.entity != null) && this.isTagCorrectEntity(this.remoteNbt)) return remoteNbt;
if (this.tileEntity != null) {
NBTTagCompound tag = new NBTTagCompound();
@@ -21,7 +21,6 @@ import mcp.mobius.waila.api.IWailaEntityProvider;
import mcp.mobius.waila.cbcore.LangUtil;
import mcp.mobius.waila.cbcore.Layout;
import mcp.mobius.waila.client.KeyEvent;
import mcp.mobius.waila.handlers.HUDHandlerInventory;
import mcp.mobius.waila.network.Message0x01TERequest;
import mcp.mobius.waila.network.Message0x03EntRequest;
import mcp.mobius.waila.network.WailaPacketHandler;
@@ -81,8 +80,7 @@ public class MetaDataProvider {
keys.addAll(ModuleRegistrar.instance().getSyncedNBTKeys(accessor.getTileEntity()));
if (!keys.isEmpty() || ModuleRegistrar.instance().hasNBTProviders(block)
|| ModuleRegistrar.instance().hasNBTProviders(accessor.getTileEntity())
|| HUDHandlerInventory.shouldRequest(accessor.getTileEntity()))
|| ModuleRegistrar.instance().hasNBTProviders(accessor.getTileEntity()))
WailaPacketHandler.INSTANCE.sendToServer(new Message0x01TERequest(accessor.getTileEntity(), keys));
} else if (accessor.getTileEntity() != null && !Waila.instance.serverPresent
@@ -195,8 +193,7 @@ public class MetaDataProvider {
if (ModuleRegistrar.instance().hasSyncedNBTKeys(accessor.getEntity()))
keys.addAll(ModuleRegistrar.instance().getSyncedNBTKeys(accessor.getEntity()));
if (!keys.isEmpty() || ModuleRegistrar.instance().hasNBTEntityProviders(accessor.getEntity())
|| HUDHandlerInventory.shouldRequest(accessor.getEntity()))
if (!keys.isEmpty() || ModuleRegistrar.instance().hasNBTEntityProviders(accessor.getEntity()))
WailaPacketHandler.INSTANCE.sendToServer(new Message0x03EntRequest(accessor.getEntity(), keys));
} else if (accessor.getEntity() != null && !Waila.instance.serverPresent && accessor.isTimeElapsed(250)) {
@@ -16,6 +16,7 @@ import mcp.mobius.waila.handlers.HUDHandlerBlocks;
import mcp.mobius.waila.handlers.HUDHandlerEntities;
import mcp.mobius.waila.handlers.VanillaTooltipHandler;
import mcp.mobius.waila.handlers.nei.NEIHandler;
import mcp.mobius.waila.overlay.BlockIconRenderer;
import mcp.mobius.waila.overlay.tooltiprenderers.TTRenderAspectString;
import mcp.mobius.waila.overlay.tooltiprenderers.TTRenderBar;
import mcp.mobius.waila.overlay.tooltiprenderers.TTRenderFluidBar;
@@ -53,6 +54,7 @@ public class ProxyClient extends ProxyServer {
ModuleRegistrar.instance().addConfig("General", "general.showents");
ModuleRegistrar.instance().addConfig("General", "general.showhp");
ModuleRegistrar.instance().addConfig("General", "general.showcrop");
ModuleRegistrar.instance().addConfig("General", BlockIconRenderer.CFG_SHOW, true);
ModuleRegistrar.instance().registerTooltipRenderer("waila.health", new TTRenderHealth());
ModuleRegistrar.instance().registerTooltipRenderer("waila.stack", new TTRenderStack());
@@ -1,175 +0,0 @@
package mcp.mobius.waila.handlers;
import java.util.List;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.InventoryLargeChest;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityChest;
import net.minecraft.world.World;
import mcp.mobius.waila.api.IWailaConfigHandler;
import mcp.mobius.waila.api.IWailaDataAccessor;
import mcp.mobius.waila.api.IWailaDataProvider;
import mcp.mobius.waila.api.IWailaEntityAccessor;
import mcp.mobius.waila.api.IWailaEntityProvider;
import mcp.mobius.waila.api.impl.ConfigHandler;
import mcp.mobius.waila.api.impl.ModuleRegistrar;
import mcp.mobius.waila.cbcore.LangUtil;
import mcp.mobius.waila.utils.WailaExceptionHandler;
/**
* Shows "X items in Y of Z slots" for every block and entity that is an {@link IInventory}.
* <p>
* The server always adds the summary to the NBT answer of a {@link IInventory} target (see
* {@link #writeSummary(Object, World, int, int, int, NBTTagCompound)}). This is not done with an NBT provider, because
* an NBT provider would stop the synced NBT keys of other mods for all inventories.
* <p>
* If the client only asked because of the summary, the answer has only the summary and {@link #TAG_SUMMARY_ONLY}. The
* client then adds the summary to its own NBT of the target, so that other mods still get the same NBT as before.
*/
public class HUDHandlerInventory implements IWailaDataProvider, IWailaEntityProvider {
public static final String CFG_SHOW = "general.showinventory";
private static final String TAG_ITEMS = "WailaInvItems";
private static final String TAG_USED = "WailaInvUsed";
private static final String TAG_SLOTS = "WailaInvSlots";
public static final String TAG_SUMMARY_ONLY = "WailaInvOnly";
/**
* @return true if the client must ask the server for the summary of this target.
*/
public static boolean shouldRequest(Object target) {
// Players implement IInventory, so this also summarises player inventories. Test instanceof EntityPlayer to
// skip.
return target instanceof IInventory && ConfigHandler.instance().getConfig(CFG_SHOW, true);
}
/**
* Server side: adds the item count, the used slots and the total slots of the target to the tag.
*/
public static void writeSummary(Object target, NBTTagCompound tag) {
if (!(target instanceof IInventory)) return;
try {
IInventory inv = (IInventory) target;
// Count both halves of a double chest. The chest updates its neighbours every tick.
if (target instanceof TileEntityChest chest) {
TileEntityChest other = chest.adjacentChestXNeg != null ? chest.adjacentChestXNeg
: chest.adjacentChestXPos != null ? chest.adjacentChestXPos
: chest.adjacentChestZNeg != null ? chest.adjacentChestZNeg : chest.adjacentChestZPos;
if (other != null) inv = new InventoryLargeChest("", chest, other);
}
long items = 0;
int used = 0;
int slots = inv.getSizeInventory();
for (int i = 0; i < slots; i++) {
ItemStack stack = inv.getStackInSlot(i);
if (stack == null || stack.getItem() == null || stack.stackSize <= 0) continue;
items += stack.stackSize;
used++;
}
tag.setLong(TAG_ITEMS, items);
tag.setInteger(TAG_USED, used);
tag.setInteger(TAG_SLOTS, slots);
} catch (Exception e) {
// Do not lose the data of the other providers because of one bad inventory
WailaExceptionHandler.handleErr(e, "HUDHandlerInventory | " + target.getClass().getName(), null);
}
}
/**
* Client side: adds the values of a summary only answer to the local NBT of the target.
*/
public static NBTTagCompound mergeSummary(NBTTagCompound remote, NBTTagCompound local) {
for (String key : new String[] { TAG_ITEMS, TAG_USED, TAG_SLOTS }) {
NBTBase tag = remote.getTag(key);
if (tag != null) local.setTag(key, tag.copy());
}
return local;
}
private static void addLine(NBTTagCompound tag, List<String> currenttip, IWailaConfigHandler config) {
if (tag == null || !config.getConfig(CFG_SHOW, true) || !tag.hasKey(TAG_SLOTS)) return;
int slots = tag.getInteger(TAG_SLOTS);
if (slots <= 0) return;
long items = tag.getLong(TAG_ITEMS);
int used = tag.getInteger(TAG_USED);
String key = items == 1 ? "hud.msg.inventory.single" : "hud.msg.inventory";
currenttip.add(String.format(LangUtil.translateG(key), items, used, slots));
}
@Override
public ItemStack getWailaStack(IWailaDataAccessor accessor, IWailaConfigHandler config) {
return null;
}
@Override
public List<String> getWailaHead(ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor,
IWailaConfigHandler config) {
return currenttip;
}
@Override
public List<String> getWailaBody(ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor,
IWailaConfigHandler config) {
addLine(accessor.getNBTData(), currenttip, config);
return currenttip;
}
@Override
public List<String> getWailaTail(ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor,
IWailaConfigHandler config) {
return currenttip;
}
@Override
public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, int x,
int y, int z) {
return tag;
}
@Override
public Entity getWailaOverride(IWailaEntityAccessor accessor, IWailaConfigHandler config) {
return null;
}
@Override
public List<String> getWailaHead(Entity entity, List<String> currenttip, IWailaEntityAccessor accessor,
IWailaConfigHandler config) {
return currenttip;
}
@Override
public List<String> getWailaBody(Entity entity, List<String> currenttip, IWailaEntityAccessor accessor,
IWailaConfigHandler config) {
addLine(accessor.getNBTData(), currenttip, config);
return currenttip;
}
@Override
public List<String> getWailaTail(Entity entity, List<String> currenttip, IWailaEntityAccessor accessor,
IWailaConfigHandler config) {
return currenttip;
}
@Override
public NBTTagCompound getNBTData(EntityPlayerMP player, Entity ent, NBTTagCompound tag, World world) {
return tag;
}
public static void register() {
HUDHandlerInventory provider = new HUDHandlerInventory();
ModuleRegistrar.instance().addConfig("General", CFG_SHOW, true);
ModuleRegistrar.instance().registerBodyProvider((IWailaDataProvider) provider, IInventory.class);
ModuleRegistrar.instance().registerBodyProvider((IWailaEntityProvider) provider, IInventory.class);
}
}
@@ -20,7 +20,6 @@ import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import mcp.mobius.waila.api.IWailaDataProvider;
import mcp.mobius.waila.api.impl.ModuleRegistrar;
import mcp.mobius.waila.handlers.HUDHandlerInventory;
import mcp.mobius.waila.utils.AccessHelper;
import mcp.mobius.waila.utils.NBTUtil;
import mcp.mobius.waila.utils.WailaExceptionHandler;
@@ -126,16 +125,11 @@ public class Message0x01TERequest extends SimpleChannelInboundHandler<Message0x0
}
}
} else if (msg.keys.isEmpty()) {
// The client asked only for the inventory summary
tag.setBoolean(HUDHandlerInventory.TAG_SUMMARY_ONLY, true);
} else {
entity.writeToNBT(tag);
tag = NBTUtil.createTag(tag, msg.keys);
}
HUDHandlerInventory.writeSummary(entity, tag);
tag.setInteger("WailaX", msg.posX);
tag.setInteger("WailaY", msg.posY);
tag.setInteger("WailaZ", msg.posZ);
@@ -16,7 +16,6 @@ import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import mcp.mobius.waila.api.IWailaEntityProvider;
import mcp.mobius.waila.api.impl.ModuleRegistrar;
import mcp.mobius.waila.handlers.HUDHandlerInventory;
import mcp.mobius.waila.utils.AccessHelper;
import mcp.mobius.waila.utils.NBTUtil;
import mcp.mobius.waila.utils.WailaExceptionHandler;
@@ -84,16 +83,11 @@ public class Message0x03EntRequest extends SimpleChannelInboundHandler<Message0x
}
}
} else if (msg.keys.isEmpty()) {
// The client asked only for the inventory summary
tag.setBoolean(HUDHandlerInventory.TAG_SUMMARY_ONLY, true);
} else {
entity.writeToNBT(tag);
tag = NBTUtil.createTag(tag, msg.keys);
}
HUDHandlerInventory.writeSummary(entity, tag);
tag.setInteger("WailaEntityID", entity.getEntityId());
WailaPacketHandler.INSTANCE.sendTo(new Message0x04EntNBTData(tag), WailaPacketHandler.getPlayer(ctx));
@@ -0,0 +1,164 @@
package mcp.mobius.waila.overlay;
import java.util.HashSet;
import java.util.Set;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityChest;
import net.minecraft.world.World;
import net.minecraftforge.client.ForgeHooksClient;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import mcp.mobius.waila.api.impl.ConfigHandler;
import mcp.mobius.waila.utils.WailaExceptionHandler;
/**
* Draws a small turning 3D model of the block in the world as the tooltip icon. Based on {@code GuiBlockDraw} of WDMla
* (https://github.com/GTNewHorizons/WDMla), which is based on the {@code WorldSceneRenderer} of BlockRenderer6343.
* <p>
* The block is drawn from the real world, so the icon shows the same state (facing, connections, TESR content) as the
* block that the player looks at.
*/
public final class BlockIconRenderer {
public static final String CFG_SHOW = "general.showblockicon3d";
/** Degrees per second */
private static final float TURN_SPEED = 45f;
private static final float PITCH = 30f;
private static final RenderBlocks renderBlocks = new RenderBlocks();
private static final Set<Class<?>> failedClasses = new HashSet<>();
private BlockIconRenderer() {}
public static boolean isEnabled() {
return ConfigHandler.instance().getConfig(CFG_SHOW, true);
}
/**
* Draws the block at (bx, by, bz) in the square with the top left corner (x, y) and the side length size.
*
* @return false if nothing was drawn, then the caller must draw the normal item icon.
*/
public static boolean render(int x, int y, int size, int bx, int by, int bz) {
final Minecraft mc = Minecraft.getMinecraft();
final World world = mc.theWorld;
if (world == null) return false;
Block block = world.getBlock(bx, by, bz);
if (block == null || block.isAir(world, bx, by, bz) || failedClasses.contains(block.getClass())) return false;
TileEntity tile = world.getTileEntity(bx, by, bz);
TileEntityRendererDispatcher tesr = TileEntityRendererDispatcher.instance;
boolean hasTesr = tile != null && tesr.hasSpecialRenderer(tile);
if (block.getRenderType() == -1 && !hasTesr) return false;
// A double chest is drawn as one large model by one of its halves, use the item icon for it
if (tile instanceof TileEntityChest chest && (chest.adjacentChestXNeg != null || chest.adjacentChestXPos != null
|| chest.adjacentChestZNeg != null
|| chest.adjacentChestZPos != null))
return false;
float angle = (Minecraft.getSystemTime() % 360000L) / 1000f * TURN_SPEED;
// A turning cube is at most about 1.6 blocks wide or high on the screen with this pitch
float scale = size / 1.6f;
Tessellator tessellator = Tessellator.instance;
int matrixDepth = GL11.glGetInteger(GL11.GL_MODELVIEW_STACK_DEPTH);
int attribDepth = GL11.glGetInteger(GL11.GL_ATTRIB_STACK_DEPTH);
GL11.glPushMatrix();
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
try {
// Some models are larger than one block, do not draw over the text
ScaledResolution res = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
float factor = res.getScaleFactor() * OverlayConfig.scale;
int margin = 3;
GL11.glEnable(GL11.GL_SCISSOR_TEST);
GL11.glScissor(
(int) ((x - margin) * factor),
(int) (mc.displayHeight - (y + size + margin) * factor),
(int) ((size + 2 * margin) * factor),
(int) ((size + 2 * margin) * factor));
GL11.glTranslatef(x + size / 2f, y + size / 2f, 150f);
GL11.glScalef(scale, -scale, scale);
GL11.glRotatef(PITCH, 1f, 0f, 0f);
GL11.glRotatef(angle, 0f, 1f, 0f);
GL11.glTranslated(-bx - 0.5d, -by - 0.5d, -bz - 0.5d);
GL11.glColor4f(1f, 1f, 1f, 1f);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glDepthMask(true);
GL11.glDisable(GL11.GL_CULL_FACE);
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glAlphaFunc(GL11.GL_GREATER, 0.1f);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
// Normal block model. The face shading of RenderBlocks gives the 3D look, so no GL lighting here.
if (block.getRenderType() != -1) {
RenderHelper.disableStandardItemLighting();
GL11.glDisable(GL11.GL_LIGHTING);
mc.renderEngine.bindTexture(TextureMap.locationBlocksTexture);
renderBlocks.blockAccess = world;
renderBlocks.renderAllFaces = true;
// The offsets of the tessellator are global and are not reset by draw
tessellator.setTranslation(0, 0, 0);
tessellator.startDrawingQuads();
try {
for (int pass = 0; pass < 2; pass++) {
if (!block.canRenderInPass(pass)) continue;
ForgeHooksClient.setRenderPass(pass);
renderBlocks.renderBlockByRenderType(block, bx, by, bz);
}
} finally {
ForgeHooksClient.setRenderPass(-1);
try {
tessellator.draw();
} catch (IllegalStateException alreadyDrawn) {
// A renderer can end the batch itself, draw would throw then
}
tessellator.setTranslation(0, 0, 0);
}
}
// Special renderer, also drawn on top of the block model above
if (hasTesr) {
RenderHelper.enableStandardItemLighting();
for (int pass = 0; pass < 2; pass++) {
if (!tile.shouldRenderInPass(pass)) continue;
ForgeHooksClient.setRenderPass(pass);
GL11.glColor4f(1f, 1f, 1f, 1f);
tesr.renderTileEntityAt(tile, bx, by, bz, 0f);
}
ForgeHooksClient.setRenderPass(-1);
RenderHelper.disableStandardItemLighting();
}
return true;
} catch (Exception e) {
failedClasses.add(block.getClass());
WailaExceptionHandler.handleErr(e, "BlockIconRenderer | " + block.getClass().getName(), null);
return false;
} finally {
renderBlocks.blockAccess = null;
renderBlocks.renderAllFaces = false;
// A renderer can leave unbalanced pushes behind, but should never pop the caller's. Query each
// stack once and pop down to where it started.
for (int i = GL11.glGetInteger(GL11.GL_ATTRIB_STACK_DEPTH) - attribDepth; i > 0; i--) GL11.glPopAttrib();
for (int i = GL11.glGetInteger(GL11.GL_MODELVIEW_STACK_DEPTH) - matrixDepth; i > 0; i--) GL11.glPopMatrix();
}
}
}
@@ -11,8 +11,6 @@ import mcp.mobius.waila.api.impl.ConfigHandler;
public class OverlayRenderer {
private static boolean hasBlending;
private static boolean hasDepthTest;
private static int boundTexIndex;
public static boolean isOverlayVisible() {
@@ -69,7 +67,16 @@ public class OverlayRenderer {
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
if (tooltip.hasIcon && tooltip.stack != null && tooltip.stack.getItem() != null)
boolean drawn3D = tooltip.hasIcon && tooltip.hasBlockPos
&& BlockIconRenderer.isEnabled()
&& BlockIconRenderer.render(
tooltip.x + 5,
tooltip.y + tooltip.h / 2 - 8,
16,
tooltip.blockX,
tooltip.blockY,
tooltip.blockZ);
if (!drawn3D && tooltip.hasIcon && tooltip.stack != null && tooltip.stack.getItem() != null)
DisplayUtil.renderStack(tooltip.x + 5, tooltip.y + tooltip.h / 2 - 8, tooltip.stack);
loadGLState();
@@ -78,17 +85,12 @@ public class OverlayRenderer {
}
private static void saveGLState() {
hasBlending = GL11.glGetBoolean(GL11.GL_BLEND);
hasDepthTest = GL11.glGetBoolean(GL11.GL_DEPTH_TEST);
boundTexIndex = GL11.glGetInteger(GL11.GL_TEXTURE_BINDING_2D);
GL11.glPushAttrib(GL11.GL_CURRENT_BIT);
// Icons turn on lighting, lights, color material and rescale normal; the box changes blend func and shade model
GL11.glPushAttrib(GL11.GL_CURRENT_BIT | GL11.GL_ENABLE_BIT | GL11.GL_LIGHTING_BIT | GL11.GL_COLOR_BUFFER_BIT);
}
private static void loadGLState() {
if (hasBlending) GL11.glEnable(GL11.GL_BLEND);
else GL11.glDisable(GL11.GL_BLEND);
if (hasDepthTest) GL11.glEnable(GL11.GL_DEPTH_TEST);
else GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, boundTexIndex);
GL11.glPopAttrib();
}
@@ -49,6 +49,8 @@ public class Tooltip {
Point pos;
boolean hasIcon = false;
ItemStack stack;
boolean hasBlockPos = false;
int blockX, blockY, blockZ;
IWailaCommonAccessor accessor = DataAccessorCommon.instance;
@@ -106,6 +108,16 @@ public class Tooltip {
this.stack = stack;
}
/**
* Sets the position of the block, so that the icon can show the block from the world.
*/
public void setBlockPos(int x, int y, int z) {
this.hasBlockPos = true;
this.blockX = x;
this.blockY = y;
this.blockZ = z;
}
public Tooltip(List<String> textData, boolean hasIcon) {
if (hasIcon) hasIcon = ConfigHandler.instance().showIcon();
@@ -14,9 +14,11 @@ import net.minecraftforge.common.config.Configuration;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent;
import mcp.mobius.waila.api.IWailaBlock;
import mcp.mobius.waila.api.impl.ConfigHandler;
import mcp.mobius.waila.api.impl.DataAccessorCommon;
import mcp.mobius.waila.api.impl.MetaDataProvider;
import mcp.mobius.waila.api.impl.ModuleRegistrar;
import mcp.mobius.waila.api.impl.TipList;
import mcp.mobius.waila.cbcore.Layout;
import mcp.mobius.waila.utils.Constants;
@@ -97,6 +99,10 @@ public class WailaTickHandler {
currenttip.addAll(currenttipTail);
this.tooltip = new Tooltip(currenttip, targetStack);
// Only show the world block when no provider chose another stack (camo blocks, multiparts, ...)
if (!(accessor.getBlock() instanceof IWailaBlock)
&& !ModuleRegistrar.instance().hasStackProviders(accessor.getBlock()))
this.tooltip.setBlockPos(target.blockX, target.blockY, target.blockZ);
}
} else if (target != null && target.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY) {
DataAccessorCommon accessor = DataAccessorCommon.instance;
@@ -29,7 +29,6 @@ import mcp.mobius.waila.api.IWailaRegistrar;
import mcp.mobius.waila.api.impl.ModuleRegistrar;
import mcp.mobius.waila.handlers.DecoratorFMP;
import mcp.mobius.waila.handlers.HUDHandlerFMP;
import mcp.mobius.waila.handlers.HUDHandlerInventory;
import mcp.mobius.waila.utils.LoadedMods;
public class ProxyServer {
@@ -42,7 +41,6 @@ public class ProxyServer {
HUDHandlerVanilla.register();
HUDHandlerFurnace.register();
HUDHandlerInventory.register();
/* BUILDCRAFT */
BCModule.register();
@@ -43,8 +43,6 @@ client.msg.nousage=No usage found.
hud.msg.holdkeymoreinfo=Hold %s for more info
hud.msg.empty=Empty
hud.msg.inventory=%d items in %d of %d slots
hud.msg.inventory.single=%d item in %d of %d slots
hud.msg.output=Output
hud.msg.input=Input
hud.msg.out=Out
@@ -155,7 +153,7 @@ option.stevescarts.shifttoggle=Shift toggle
option.general.showents=Show entities
option.general.showhp=Show entities health
option.general.showcrop=Show crop growth
option.general.showinventory=Show inventory summary
option.general.showblockicon3d=Show 3D block icon
option.thaumcraft.aspects=Show aspects
nei.options.keys.showenchant=Show enchanting values