diff options
Diffstat (limited to 'src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/MiningStuff.java')
| -rw-r--r-- | src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/MiningStuff.java | 350 |
1 files changed, 180 insertions, 170 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/MiningStuff.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/MiningStuff.java index 2d681bc3..b56737e7 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/MiningStuff.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/MiningStuff.java @@ -26,174 +26,184 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import java.util.Map; public class MiningStuff { - private static BlockPos overlayLoc = null; - private static long titaniumNotifMillis = 0; - private static Minecraft mc; - - public MiningStuff() { - mc = Minecraft.getMinecraft(); - } - - public static void processBlockChangePacket(S23PacketBlockChange packetIn) { - if (!NotEnoughUpdates.INSTANCE.config.mining.titaniumAlert) { - return; - } - - IBlockState state = packetIn.getBlockState(); - if (SBInfo.getInstance().getLocation() != null && - SBInfo.getInstance().getLocation().startsWith("mining_") && - state.getBlock() == Blocks.stone && state.getValue(BlockStone.VARIANT) == BlockStone.EnumType.DIORITE_SMOOTH) { - - for (Map.Entry<String, Float> entry : MiningOverlay.commissionProgress.entrySet()) { - String s = entry.getKey(); - if (s.contains("Titanium")) { - if (entry.getValue() == 1f) { - return; - } - BlockPos pos = packetIn.getBlockPosition(); - - IBlockState existingBlock = Minecraft.getMinecraft().theWorld.getBlockState(pos); - if (existingBlock == null) return; - if (existingBlock.getBlock() == Blocks.stone && existingBlock.getValue(BlockStone.VARIANT) == BlockStone.EnumType.DIORITE_SMOOTH) - return; - if (!checkIfAnyIsAir(getAttachedBlocks(pos)) && NotEnoughUpdates.INSTANCE.config.mining.titaniumAlertMustBeVisible) - return; - BlockPos player = Minecraft.getMinecraft().thePlayer.getPosition(); - - double distSq = pos.distanceSq(player); - - if (distSq < 12 * 12) { - titaniumNotifMillis = System.currentTimeMillis(); - } - return; - } - } - } - } - - private static BlockPos[] getAttachedBlocks(BlockPos block) { - BlockPos[] blocks = new BlockPos[6]; - blocks[0] = new BlockPos(block.getX() - 1, block.getY(), block.getZ()); - blocks[1] = new BlockPos(block.getX() + 1, block.getY(), block.getZ()); - blocks[2] = new BlockPos(block.getX(), block.getY() - 1, block.getZ()); - blocks[3] = new BlockPos(block.getX(), block.getY() + 1, block.getZ()); - blocks[4] = new BlockPos(block.getX(), block.getY(), block.getZ() - 1); - blocks[5] = new BlockPos(block.getX(), block.getY(), block.getZ() + 1); - return blocks; - } - - private static boolean checkIfAnyIsAir(BlockPos[] blocks) { - for (BlockPos block : blocks) { - if (mc.theWorld.getBlockState(block).getBlock() instanceof BlockAir) { - return true; - } - } - return false; - } - - @SubscribeEvent - public void onRenderOverlay(RenderGameOverlayEvent.Post event) { - if (!NotEnoughUpdates.INSTANCE.config.mining.titaniumAlert) { - return; - } - if (titaniumNotifMillis <= 0) return; - - int delta = (int) (System.currentTimeMillis() - titaniumNotifMillis); - int notifLen = 5000; - int fadeLen = 500; - if (delta > 0 && delta < notifLen && event.type == RenderGameOverlayEvent.ElementType.ALL) { - ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); - int width = scaledResolution.getScaledWidth(); - int height = scaledResolution.getScaledHeight(); - - GlStateManager.enableBlend(); - GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); - - GlStateManager.pushMatrix(); - GlStateManager.translate((float) (width / 2), (float) (height / 2), 0.0F); - GlStateManager.scale(4.0F, 4.0F, 4.0F); - - int colour1 = 0xcc; - int colour2 = 0xff; - - double factor = (Math.sin(delta * 2 * Math.PI / 1000) + 1) / 2; - int colour = (int) (colour1 * factor + colour2 * (1 - factor)); - - int alpha = 255; - if (delta < fadeLen) { - alpha = delta * 255 / fadeLen; - } else if (delta > notifLen - fadeLen) { - alpha = (notifLen - delta) * 255 / fadeLen; - } - - if (alpha > 10) { - TextRenderUtils.drawStringCenteredScaledMaxWidth("Titanium has spawned nearby!", Minecraft.getMinecraft().fontRendererObj, - 0, 0, true, width / 4 - 20, colour | (colour << 8) | (colour << 16) | (alpha << 24)); - } - - GlStateManager.popMatrix(); - } - } - - @SubscribeEvent - public void renderWorldLast(RenderWorldLastEvent event) { - if (overlayLoc == null) return; - - Entity viewer = Minecraft.getMinecraft().getRenderViewEntity(); - double viewerX = viewer.lastTickPosX + (viewer.posX - viewer.lastTickPosX) * event.partialTicks; - double viewerY = viewer.lastTickPosY + (viewer.posY - viewer.lastTickPosY) * event.partialTicks; - double viewerZ = viewer.lastTickPosZ + (viewer.posZ - viewer.lastTickPosZ) * event.partialTicks; - - AxisAlignedBB bb = new AxisAlignedBB( - overlayLoc.getX() - viewerX, - overlayLoc.getY() - viewerY, - overlayLoc.getZ() - viewerZ, - overlayLoc.getX() + 1 - viewerX, - overlayLoc.getY() + 1 - viewerY, - overlayLoc.getZ() + 1 - viewerZ).expand(0.01f, 0.01f, 0.01f); - - GlStateManager.disableCull(); - CustomItemEffects.drawFilledBoundingBox(bb, 1f, SpecialColour.special(0, 100, 0xff0000)); - GlStateManager.enableCull(); - GlStateManager.enableTexture2D(); - } - - @SubscribeEvent - public void onLoadWorld(WorldEvent.Load event) { - overlayLoc = null; - } - - @SubscribeEvent - public void onChatReceived(ClientChatReceivedEvent event) { - if (!NotEnoughUpdates.INSTANCE.config.mining.puzzlerSolver) { - overlayLoc = null; - return; - } - - if (event.message.getFormattedText().startsWith("\u00A7e[NPC] \u00A7dPuzzler") && - event.message.getUnformattedText().contains(":")) { - String clean = Utils.cleanColour(event.message.getUnformattedText()); - clean = clean.split(":")[1].trim(); - - BlockPos pos = new BlockPos(181, 195, 135); - - for (int i = 0; i < clean.length(); i++) { - char c = clean.charAt(i); - - if (c == '\u25C0') { //Left - pos = pos.add(1, 0, 0); - } else if (c == '\u25B2') { //Up - pos = pos.add(0, 0, 1); - } else if (c == '\u25BC') { //Down - pos = pos.add(0, 0, -1); - } else if (c == '\u25B6') { //Right - pos = pos.add(-1, 0, 0); - } else { - return; - } - } - - overlayLoc = pos; - } - } + private static BlockPos overlayLoc = null; + private static long titaniumNotifMillis = 0; + private static Minecraft mc; + + public MiningStuff() { + mc = Minecraft.getMinecraft(); + } + + public static void processBlockChangePacket(S23PacketBlockChange packetIn) { + if (!NotEnoughUpdates.INSTANCE.config.mining.titaniumAlert) { + return; + } + + IBlockState state = packetIn.getBlockState(); + if (SBInfo.getInstance().getLocation() != null && + SBInfo.getInstance().getLocation().startsWith("mining_") && + state.getBlock() == Blocks.stone && state.getValue(BlockStone.VARIANT) == BlockStone.EnumType.DIORITE_SMOOTH) { + + for (Map.Entry<String, Float> entry : MiningOverlay.commissionProgress.entrySet()) { + String s = entry.getKey(); + if (s.contains("Titanium")) { + if (entry.getValue() == 1f) { + return; + } + BlockPos pos = packetIn.getBlockPosition(); + + IBlockState existingBlock = Minecraft.getMinecraft().theWorld.getBlockState(pos); + if (existingBlock == null) return; + if (existingBlock.getBlock() == Blocks.stone && + existingBlock.getValue(BlockStone.VARIANT) == BlockStone.EnumType.DIORITE_SMOOTH) + return; + if (!checkIfAnyIsAir(getAttachedBlocks(pos)) && + NotEnoughUpdates.INSTANCE.config.mining.titaniumAlertMustBeVisible) + return; + BlockPos player = Minecraft.getMinecraft().thePlayer.getPosition(); + + double distSq = pos.distanceSq(player); + + if (distSq < 12 * 12) { + titaniumNotifMillis = System.currentTimeMillis(); + } + return; + } + } + } + } + + private static BlockPos[] getAttachedBlocks(BlockPos block) { + BlockPos[] blocks = new BlockPos[6]; + blocks[0] = new BlockPos(block.getX() - 1, block.getY(), block.getZ()); + blocks[1] = new BlockPos(block.getX() + 1, block.getY(), block.getZ()); + blocks[2] = new BlockPos(block.getX(), block.getY() - 1, block.getZ()); + blocks[3] = new BlockPos(block.getX(), block.getY() + 1, block.getZ()); + blocks[4] = new BlockPos(block.getX(), block.getY(), block.getZ() - 1); + blocks[5] = new BlockPos(block.getX(), block.getY(), block.getZ() + 1); + return blocks; + } + + private static boolean checkIfAnyIsAir(BlockPos[] blocks) { + for (BlockPos block : blocks) { + if (mc.theWorld.getBlockState(block).getBlock() instanceof BlockAir) { + return true; + } + } + return false; + } + + @SubscribeEvent + public void onRenderOverlay(RenderGameOverlayEvent.Post event) { + if (!NotEnoughUpdates.INSTANCE.config.mining.titaniumAlert) { + return; + } + if (titaniumNotifMillis <= 0) return; + + int delta = (int) (System.currentTimeMillis() - titaniumNotifMillis); + int notifLen = 5000; + int fadeLen = 500; + if (delta > 0 && delta < notifLen && event.type == RenderGameOverlayEvent.ElementType.ALL) { + ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); + int width = scaledResolution.getScaledWidth(); + int height = scaledResolution.getScaledHeight(); + + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + + GlStateManager.pushMatrix(); + GlStateManager.translate((float) (width / 2), (float) (height / 2), 0.0F); + GlStateManager.scale(4.0F, 4.0F, 4.0F); + + int colour1 = 0xcc; + int colour2 = 0xff; + + double factor = (Math.sin(delta * 2 * Math.PI / 1000) + 1) / 2; + int colour = (int) (colour1 * factor + colour2 * (1 - factor)); + + int alpha = 255; + if (delta < fadeLen) { + alpha = delta * 255 / fadeLen; + } else if (delta > notifLen - fadeLen) { + alpha = (notifLen - delta) * 255 / fadeLen; + } + + if (alpha > 10) { + TextRenderUtils.drawStringCenteredScaledMaxWidth( + "Titanium has spawned nearby!", + Minecraft.getMinecraft().fontRendererObj, + 0, + 0, + true, + width / 4 - 20, + colour | (colour << 8) | (colour << 16) | (alpha << 24) + ); + } + + GlStateManager.popMatrix(); + } + } + + @SubscribeEvent + public void renderWorldLast(RenderWorldLastEvent event) { + if (overlayLoc == null) return; + + Entity viewer = Minecraft.getMinecraft().getRenderViewEntity(); + double viewerX = viewer.lastTickPosX + (viewer.posX - viewer.lastTickPosX) * event.partialTicks; + double viewerY = viewer.lastTickPosY + (viewer.posY - viewer.lastTickPosY) * event.partialTicks; + double viewerZ = viewer.lastTickPosZ + (viewer.posZ - viewer.lastTickPosZ) * event.partialTicks; + + AxisAlignedBB bb = new AxisAlignedBB( + overlayLoc.getX() - viewerX, + overlayLoc.getY() - viewerY, + overlayLoc.getZ() - viewerZ, + overlayLoc.getX() + 1 - viewerX, + overlayLoc.getY() + 1 - viewerY, + overlayLoc.getZ() + 1 - viewerZ + ).expand(0.01f, 0.01f, 0.01f); + + GlStateManager.disableCull(); + CustomItemEffects.drawFilledBoundingBox(bb, 1f, SpecialColour.special(0, 100, 0xff0000)); + GlStateManager.enableCull(); + GlStateManager.enableTexture2D(); + } + + @SubscribeEvent + public void onLoadWorld(WorldEvent.Load event) { + overlayLoc = null; + } + + @SubscribeEvent + public void onChatReceived(ClientChatReceivedEvent event) { + if (!NotEnoughUpdates.INSTANCE.config.mining.puzzlerSolver) { + overlayLoc = null; + return; + } + + if (event.message.getFormattedText().startsWith("\u00A7e[NPC] \u00A7dPuzzler") && + event.message.getUnformattedText().contains(":")) { + String clean = Utils.cleanColour(event.message.getUnformattedText()); + clean = clean.split(":")[1].trim(); + + BlockPos pos = new BlockPos(181, 195, 135); + + for (int i = 0; i < clean.length(); i++) { + char c = clean.charAt(i); + + if (c == '\u25C0') { //Left + pos = pos.add(1, 0, 0); + } else if (c == '\u25B2') { //Up + pos = pos.add(0, 0, 1); + } else if (c == '\u25BC') { //Down + pos = pos.add(0, 0, -1); + } else if (c == '\u25B6') { //Right + pos = pos.add(-1, 0, 0); + } else { + return; + } + } + + overlayLoc = pos; + } + } } |
