diff options
| author | Moulberry <jjenour@student.unimelb.edu.au> | 2022-03-03 11:03:58 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-03-03 11:03:58 +0800 |
| commit | 7c6d37b2eb758a13b342b906f0aef88b940bc52a (patch) | |
| tree | 9602a014425b859e3aba98f31f93d6de04521356 /src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/MiningStuff.java | |
| parent | b11742988dec635b5c5da7c2363803cbfafb37b1 (diff) | |
| parent | db59eba3fd9121c7c0a88363994876c5b582c08c (diff) | |
| download | notenoughupdates-7c6d37b2eb758a13b342b906f0aef88b940bc52a.tar.gz notenoughupdates-7c6d37b2eb758a13b342b906f0aef88b940bc52a.tar.bz2 notenoughupdates-7c6d37b2eb758a13b342b906f0aef88b940bc52a.zip | |
Merge pull request #248 from NotEnoughUpdates/master
NEU 2.1 🙂
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 | 354 |
1 files changed, 180 insertions, 174 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 cfd97d3f..b56737e7 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/MiningStuff.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/MiningStuff.java @@ -13,7 +13,6 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.Entity; -import net.minecraft.entity.monster.EntityCreeper; import net.minecraft.init.Blocks; import net.minecraft.network.play.server.S23PacketBlockChange; import net.minecraft.util.AxisAlignedBB; @@ -27,177 +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 onChatRecevied(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; + } + } } |
