Jump to content

Finding blocks connected to a start position


Jay Avery

Recommended Posts

7 minutes ago, Jay Avery said:

An update for anyone who's interested. I've made a searching algorithm that finds all connected trunk blocks, and connected leaves up to a certain count, starting closest to the trunk. I use it in this method, (and use the search results to make all the tree blocks fall). If anyone has ideas on how to improve the performance I'd be grateful - I know I've used several different collections to keep track of all the checking but I couldn't think of any way to reduce that further.

 

Link to comment
Share on other sites

On 3/20/2017 at 9:45 AM, Jay Avery said:

An update for anyone who's interested. I've made a searching algorithm that finds all connected trunk blocks, and connected leaves up to a certain count, starting closest to the trunk. I use it in this method, (and use the search results to make all the tree blocks fall). If anyone has ideas on how to improve the performance I'd be grateful - I know I've used several different collections to keep track of all the checking but I couldn't think of any way to reduce that further.

 

I'm using a method very similar to yours. I've gone through several versions of this already. In my current iteration I'm only using two collections: one for blocks that need to be checked, and one for blocks I've already checked. The collection of blocks that need to be checked is an ArrayList. I use an iterator to work through it and only add blocks to it if they are logs and aren't in the list of blocks I've already checked. When I'm done, theoretically, it should only contain log blocks that need to fall.

 

However, I'm having trouble getting my collections to compare BlockPos objects correctly. It only seems to detect equivalents some of the time, so I always end up with duplicate BlockPos objects in my final list. Is that happening to you?

 

One idea for improving performance is to check for what type of log is being broken. If it's a birch log, for example, you only need to check logs directly above (no branches in birch trees).

Link to comment
Share on other sites

7 hours ago, Daeruin said:

 

I'm using a method very similar to yours. I've gone through several versions of this already. In my current iteration I'm only using two collections: one for blocks that need to be checked, and one for blocks I've already checked. The collection of blocks that need to be checked is an ArrayList. I use an iterator to work through it and only add blocks to it if they are logs and aren't in the list of blocks I've already checked. When I'm done, theoretically, it should only contain log blocks that need to fall.

 

However, I'm having trouble getting my collections to compare BlockPos objects correctly. It only seems to detect equivalents some of the time, so I always end up with duplicate BlockPos objects in my final list. Is that happening to you?

 

One idea for improving performance is to check for what type of log is being broken. If it's a birch log, for example, you only need to check logs directly above (no branches in birch trees).

Interesting!

 

I started off trying to use an iterator but that caused ConcurrentModificationExceptions when I added to the list during iteration - that's why I switched to a Queue. How do you avoid that problem?

 

I haven't noticed any problem with BlockPos duplication but I haven't checked carefully. I'll try printing out the results list before using it and see if it does contain any duplicates. How are you checking for duplicates before adding to the results list? BlockPos uses Vec3i#equals which just compares the three co-ordinates so I can't think of a reason that wouldn't work reliably.

 

Would you care to share your code?

Link to comment
Share on other sites

8 hours ago, Daeruin said:

 

One idea for improving performance is to check for what type of log is being broken. If it's a birch log, for example, you only need to check logs directly above (no branches in birch trees).

On the surface this seems like a good optimization, but I think it would break down when doing modded trees that change the structure of a birch tree.  Currently working on a modpack that has birch, oak, spruce, etc. that defy the normal vanilla growth patterns.

Link to comment
Share on other sites

15 hours ago, Jay Avery said:

Interesting!

 

I started off trying to use an iterator but that caused ConcurrentModificationExceptions when I added to the list during iteration - that's why I switched to a Queue. How do you avoid that problem?

 

I haven't noticed any problem with BlockPos duplication but I haven't checked carefully. I'll try printing out the results list before using it and see if it does contain any duplicates. How are you checking for duplicates before adding to the results list? BlockPos uses Vec3i#equals which just compares the three co-ordinates so I can't think of a reason that wouldn't work reliably.

 

Would you care to share your code?

An iterator works fine if you use the iterator's add and remove methods (iterator.add). I discovered that after running into the ConcurrentModificationException and doing some more research. There's another problem, however, because the iterator's cursor is always in between elements in the collection. When you add a new object to the collection, it gets placed behind the cursor. I have to keep track of how many things I've added and move the iterator back to look at them. I'm thinking I'll switch back to a queue at this point. The only reason I wanted to try the ArrayList in the first place was to see if it was somehow more accurate with detecting duplicates in the collection.

 

I've tried using a LinkedList, an ArrayList, and now a hash set to hold the blocks I've already looked at. In each case, I just used the collection's #contains method to see if the BlockPos is already in the list. Looks like the same thing you're doing here:

 

if (!checked.contains(toAdd))

 

My code is currently part of a private BitBucket repository. I didn't want it to be public at first, because I was embarrassed. :) I was going to post some of my code here , but it looks like it isn't possible to do spoilers or code blocks in topic replies. Unless I'm missing something?

 

Come to think of it, how do you do that monospace font in replies? All I see are bold, italic, and underline.

 

By the way, I loved your idea of using a list of BlockPos offsets and iterating through that to scan for log blocks. I tried that in my code, and it's so much cleaner than what I was doing before, which was basically a giant block of code with a million BlockPos.up().north().east() references and the like.

  • Like 1
Link to comment
Share on other sites

14 hours ago, OreCruncher said:

On the surface this seems like a good optimization, but I think it would break down when doing modded trees that change the structure of a birch tree.  Currently working on a modpack that has birch, oak, spruce, etc. that defy the normal vanilla growth patterns.

Good point! For that matter, it seems possible that modded trees could defy the pattern Draco pointed out early in this thread. For example, you could have long branches with log blocks below another log block.

Link to comment
Share on other sites

I just realized another tradeoff between LinkedList and ArrayList. With the ArrayList, you can keep it around for later use. With the LinkedList, you can't look at an element in the list with removing it from the list, which requires you to store things in yet another list if you want to do something with them later. But if you do everything you need to at the time you get the element from the list, you wouldn't need to store them elsewhere.

Link to comment
Share on other sites

9 hours ago, Daeruin said:

An iterator works fine if you use the iterator's add and remove methods (iterator.add). I discovered that after running into the ConcurrentModificationException and doing some more research. There's another problem, however, because the iterator's cursor is always in between elements in the collection. When you add a new object to the collection, it gets placed behind the cursor. I have to keep track of how many things I've added and move the iterator back to look at them. I'm thinking I'll switch back to a queue at this point. The only reason I wanted to try the ArrayList in the first place was to see if it was somehow more accurate with detecting duplicates in the collection.

Ohh, I remember now - I found out you could add elements to an iterator but I was unhappy about the cursor positioning problem which is why I went with a queue. That way, the elements which are added later are always searched later, so that guarantees that the leaves closest to the trunk will be selected first if the search gets stopped by the maximum count (rather than by reaching the edge of all leaves).

 

9 hours ago, Daeruin said:

 

I've tried using a LinkedList, an ArrayList, and now a hash set to hold the blocks I've already looked at. In each case, I just used the collection's #contains method to see if the BlockPos is already in the list. Looks like the same thing you're doing here:

 

if (!checked.contains(toAdd))

I did a test with printing out my results list before using it and there don't seem to be any duplicates - I can't think of a reason that would be happening for you!

 

9 hours ago, Daeruin said:

 

My code is currently part of a private BitBucket repository. I didn't want it to be public at first, because I was embarrassed. :) I was going to post some of my code here , but it looks like it isn't possible to do spoilers or code blocks in topic replies. Unless I'm missing something?

 

Come to think of it, how do you do that monospace font in replies? All I see are bold, italic, and underline.

You can post code! :) The eye icon is a spoiler, and the <> icon is for a block of code. And the monospace font is the tt button.

9 hours ago, Daeruin said:

By the way, I loved your idea of using a list of BlockPos offsets and iterating through that to scan for log blocks. I tried that in my code, and it's so much cleaner than what I was doing before, which was basically a giant block of code with a million BlockPos.up().north().east() references and the like.

Thanks! It backfired at first because I made the list of offsets manually and ended up missing some, so then I gave in and wrote code to print a list of all offsets so that I could copy that back into the code. :P 

Link to comment
Share on other sites

13 hours ago, Jay Avery said:

I did a test with printing out my results list before using it and there don't seem to be any duplicates - I can't think of a reason that would be happening for you!

I figured out why. It has to do with the way I'm adding things to the list. I was checking to see if the BlockPos was in the list of things I already checked, but I wasn't checking to see if it was already in the list waiting to be checked. Because I do a round of adding stuff to the queue up front, before starting to iterate on the queue, those things were getting added to the queue twice. Should be pretty easy to fix.

 

13 hours ago, Jay Avery said:

You can post code! :) The eye icon is a spoiler, and the <> icon is for a block of code. And the monospace font is the tt button.

I don't see an eye icon or <> icon. I have a single row of icons with B, I, U, link, quote, emoticon, two lists, and preview.

 

It looks like you may be doing something special with making the blocks fall. Are you just breaking and harvesting the blocks, or do you have some nifty method for making the blocks fall to the ground horizontally like a real tree? I've been messing with that piece and having some weird behavior for big oak, jungle trees, and regular oaks with branches. I think I can deal with it, but I was curious to see if you've already solved those problems.

Link to comment
Share on other sites

 

5 hours ago, Daeruin said:

It looks like you may be doing something special with making the blocks fall. Are you just breaking and harvesting the blocks, or do you have some nifty method for making the blocks fall to the ground horizontally like a real tree? I've been messing with that piece and having some weird behavior for big oak, jungle trees, and regular oaks with branches. I think I can deal with it, but I was curious to see if you've already solved those problems.

I make the blocks actually fall - I made a custom falling block entity that moves sideways as it falls, so that the blocks end up going roughly diagonally like a real tree. Here is my entity class - I've got slightly different behaviour for logs and leaves, to make sure that logs are prioritised as much as possible and fall through leaves that are in the way.

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • >>>KLIK LOGIN DISINI SAYANG<<< >>>KLIK DAFTAR DISINI SAYANG<<< Pendahuluan Dalam dunia perjudian online, slot menjadi salah satu permainan yang paling diminati. Dengan munculnya berbagai platform, Togel2Win hadir sebagai salah satu pilihan menarik, terutama dengan fitur anti rungkad yang dijanjikan. Artikel ini akan membahas tentang Togel2Win, keunggulan slot terbaru, dan bagaimana server Thailand berperan dalam meningkatkan pengalaman bermain. Apa Itu Togel2Win? Togel2Win adalah platform permainan yang menawarkan berbagai jenis permainan, termasuk slot dan togel. Dengan antarmuka yang ramah pengguna dan beragam pilihan permainan, situs ini bertujuan untuk memberikan pengalaman bermain yang menyenangkan dan menguntungkan bagi para pemain. Keunggulan Slot Togel2Win Fitur Anti Rungkad: Salah satu keunggulan utama dari Togel2Win adalah fitur anti rungkad yang dirancang untuk mengurangi kemungkinan gangguan saat bermain. Ini memastikan bahwa pemain dapat menikmati permainan tanpa gangguan teknis, meningkatkan kenyamanan dan fokus. Beragam Pilihan Slot: Togel2Win menawarkan berbagai jenis slot, dari yang klasik hingga yang modern dengan grafis menawan dan tema yang menarik. Ini memberikan variasi yang cukup bagi pemain untuk menemukan permainan yang sesuai dengan preferensi mereka. Server Thailand yang Stabil: Server yang berlokasi di Thailand memberikan koneksi yang cepat dan stabil. Ini sangat penting untuk pengalaman bermain yang lancar, terutama saat bermain slot yang memerlukan respons cepat. Bonus dan Promosi Menarik: Togel2Win sering menawarkan bonus dan promosi yang menarik untuk menarik pemain baru dan mempertahankan loyalitas pemain yang sudah ada. Ini bisa berupa bonus deposit, putaran gratis, atau program loyalitas. Tips untuk Pemain Slot di Togel2Win Pilih Slot dengan RTP Tinggi: Sebelum memulai permainan, pastikan untuk memilih slot dengan tingkat pengembalian pemain (RTP) yang tinggi untuk meningkatkan peluang menang. Kelola Anggaran: Tentukan batasan anggaran sebelum bermain dan patuhi itu. Ini membantu mencegah kerugian besar dan menjaga pengalaman bermain tetap menyenangkan. Manfaatkan Bonus: Jangan ragu untuk memanfaatkan bonus dan promosi yang ditawarkan. Ini bisa memberikan tambahan modal untuk bermain lebih lama. Kesimpulan Togel2Win merupakan pilihan menarik bagi para penggemar slot, terutama dengan fitur anti rungkad dan server yang stabil. Dengan berbagai pilihan permainan dan bonus yang menggiurkan, Togel2Win siap memberikan pengalaman bermain yang tak terlupakan. Jika Anda mencari platform slot yang andal dan menyenangkan, Togel2Win bisa menjadi solusi yang tepat.
    • I'm trying to make my own modpack, but sometimes, in certain areas of the world, the game just says "server closed". Minecraft doesn't close, it just returns to the menu. When I tried to figure it out on my own and understand the logs, I didn't understand anything (English is not my native language, so it's difficult for me). I've been trying to solve the problem for the third month. So I ask if anyone is good at this and it's not difficult for you, to help me with this. If you need details, ask. I'll describe everything. What it looks like Logs
    • Hi i installed modpack to my server, it starts but when i join it crashes everytime, im running 1.20.1 forge version, all client mods are deleted from the server.   java.lang.NoClassDefFoundError: Could not initialize class sun.security.ssl.SSLContextImpl$DefaultSSLContext at java.lang.Class.forName0(Native Method) ~[?:?] {re:mixin} at java.lang.Class.forName(Class.java:390) ~[?:?] {re:mixin} at java.lang.Class.forName(Class.java:381) ~[?:?] {re:mixin} at java.security.Provider$Service.getImplClass(Provider.java:1967) ~[?:?] {} at java.security.Provider$Service.getDefaultConstructor(Provider.java:1998) ~[?:?] {} at java.security.Provider$Service.newInstanceOf(Provider.java:1912) ~[?:?] {} at java.security.Provider$Service.newInstanceUtil(Provider.java:1920) ~[?:?] {} at java.security.Provider$Service.newInstance(Provider.java:1895) ~[?:?] {} at sun.security.jca.GetInstance.getInstance(GetInstance.java:236) ~[?:?] {} at sun.security.jca.GetInstance.getInstance(GetInstance.java:164) ~[?:?] {} at javax.net.ssl.SSLContext.getInstance(SSLContext.java:185) ~[?:?] {} at javax.net.ssl.SSLContext.getDefault(SSLContext.java:110) ~[?:?] {} at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:83) ~[?:?] {} at javax.net.ssl.HttpsURLConnection.getDefaultSSLSocketFactory(HttpsURLConnection.java:336) ~[?:?] {} at javax.net.ssl.HttpsURLConnection.<init>(HttpsURLConnection.java:292) ~[?:?] {} at sun.net.www.protocol.https.HttpsURLConnectionImpl.&lt;init&gt;(HttpsURLConnectionImpl.java:81) ~[?:?] {} at sun.net.www.protocol.https.Handler.openConnection(Handler.java:62) ~[?:?] {} at sun.net.www.protocol.https.Handler.openConnection(Handler.java:57) ~[?:?] {} at java.net.URL.openConnection(URL.java:1095) ~[?:?] {re:mixin} at java.net.URL.openStream(URL.java:1162) ~[?:?] {re:mixin} at xxrexraptorxx.additionalstructures.utils.Events.SupporterCheck(Events.java:129) ~[AdditionalStructures-1.20.x-(v.4.2.2).jar%23401!/:4.2.2] {re:classloading} at xxrexraptorxx.additionalstructures.utils.Events.SupporterRewards(Events.java:86) ~[AdditionalStructures-1.20.x-(v.4.2.2).jar%23401!/:4.2.2] {re:classloading} at xxrexraptorxx.additionalstructures.utils.__Events_SupporterRewards_PlayerLoggedInEvent.invoke(.dynamic) ~[AdditionalStructures-1.20.x-(v.4.2.2).jar%23401!/:4.2.2] {re:classloading,pl:eventbus:B} at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:73) ~[eventbus-6.0.5.jar%2352!/:?] {} at net.minecraftforge.eventbus.EventBus.post(EventBus.java:315) ~[eventbus-6.0.5.jar%2352!/:?] {} at net.minecraftforge.eventbus.EventBus.post(EventBus.java:296) ~[eventbus-6.0.5.jar%2352!/:?] {} at net.minecraftforge.event.ForgeEventFactory.firePlayerLoggedIn(ForgeEventFactory.java:875) ~[forge-1.20.1-47.3.0-universal.jar%23694!/:?] {re:mixin,re:classloading,pl:mixin:A} at net.minecraft.server.players.PlayerList.m_11261_(PlayerList.java:261) ~[server-1.20.1-20230612.114412-srg.jar%23689!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:A} at net.minecraft.server.network.ServerLoginPacketListenerImpl.m_143699_(ServerLoginPacketListenerImpl.java:139) ~[server-1.20.1-20230612.114412-srg.jar%23689!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:krypton.mixins.json:shared.network.pipeline.encryption.ServerLoginNetworkHandlerMixin,pl:mixin:APP:connectivity.mixins.json:ServerLoginNetHandlerMixin,pl:mixin:A} at net.minecraft.server.network.ServerLoginPacketListenerImpl.m_10055_(ServerLoginPacketListenerImpl.java:126) ~[server-1.20.1-20230612.114412-srg.jar%23689!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:krypton.mixins.json:shared.network.pipeline.encryption.ServerLoginNetworkHandlerMixin,pl:mixin:APP:connectivity.mixins.json:ServerLoginNetHandlerMixin,pl:mixin:A} at net.minecraft.server.network.ServerLoginPacketListenerImpl.m_9933_(ServerLoginPacketListenerImpl.java:70) ~[server-1.20.1-20230612.114412-srg.jar%23689!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:krypton.mixins.json:shared.network.pipeline.encryption.ServerLoginNetworkHandlerMixin,pl:mixin:APP:connectivity.mixins.json:ServerLoginNetHandlerMixin,pl:mixin:A} at net.minecraft.network.Connection.m_129483_(Connection.java:263) ~[server-1.20.1-20230612.114412-srg.jar%23689!/:?] {re:mixin,re:classloading,pl:mixin:APP:connectivity.mixins.json:AdvancedPacketErrorLogging,pl:mixin:APP:krypton.mixins.json:shared.network.flushconsolidation.ClientConnectionMixin,pl:mixin:APP:krypton.mixins.json:shared.network.pipeline.compression.ClientConnectionMixin,pl:mixin:APP:krypton.mixins.json:shared.network.pipeline.encryption.ClientConnectionMixin,pl:mixin:APP:connectivity.mixins.json:ConnectionErrorMixin,pl:mixin:APP:connectivity.mixins.json:NetworkManagerMixin,pl:mixin:A} at net.minecraft.server.network.ServerConnectionListener.m_9721_(ServerConnectionListener.java:142) ~[server-1.20.1-20230612.114412-srg.jar%23689!/:?] {re:mixin,re:classloading} at net.minecraft.server.MinecraftServer.m_5703_(MinecraftServer.java:907) ~[server-1.20.1-20230612.114412-srg.jar%23689!/:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:modernfix-common.mixins.json:core.MinecraftServerMixin,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftServerMixin,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:APP:neruina.mixins.json:MinecraftServerMixin,pl:mixin:A} at net.minecraft.server.dedicated.DedicatedServer.m_5703_(DedicatedServer.java:283) ~[server-1.20.1-20230612.114412-srg.jar%23689!/:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:lithostitched.mixins.json:server.DedicatedServerMixin,pl:mixin:APP:mixins/common/nochatreports.mixins.json:server.MixinDedicatedServer,pl:mixin:APP:tombstone.mixins.json:DedicatedServerMixin,pl:mixin:A} at net.minecraft.server.MinecraftServer.m_5705_(MinecraftServer.java:814) ~[server-1.20.1-20230612.114412-srg.jar%23689!/:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:modernfix-common.mixins.json:core.MinecraftServerMixin,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftServerMixin,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:APP:neruina.mixins.json:MinecraftServerMixin,pl:mixin:A} at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:661) ~[server-1.20.1-20230612.114412-srg.jar%23689!/:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:modernfix-common.mixins.json:core.MinecraftServerMixin,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftServerMixin,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:APP:neruina.mixins.json:MinecraftServerMixin,pl:mixin:A} at net.minecraft.server.MinecraftServer.m_206580_(MinecraftServer.java:251) ~[server-1.20.1-20230612.114412-srg.jar%23689!/:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:modernfix-common.mixins.json:core.MinecraftServerMixin,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftServerMixin,pl:mixin:APP:balm.mixins.json:MinecraftServerMixin,pl:mixin:APP:neruina.mixins.json:MinecraftServerMixin,pl:mixin:A} at java.lang.Thread.run(Thread.java:1589) ~[?:?] {re:mixin} Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.ExceptionInInitializerError [in thread " Iron Furnaces Update Checker"] at javax.crypto.Cipher.getInstance(Cipher.java:548) ~[?:?] {re:mixin} at sun.security.ssl.SSLCipher.isTransformationAvailable(SSLCipher.java:523) ~[?:?] {} at sun.security.ssl.SSLCipher.<init>(SSLCipher.java:512) ~[?:?] {} at sun.security.ssl.SSLCipher.<clinit>(SSLCipher.java:93) ~[?:?] {} at sun.security.ssl.CipherSuite.<clinit>(CipherSuite.java:65) ~[?:?] {} at sun.security.ssl.SSLContextImpl.getApplicableSupportedCipherSuites(SSLContextImpl.java:343) ~[?:?] {} at sun.security.ssl.SSLContextImpl$AbstractTLSContext.<clinit>(SSLContextImpl.java:556) ~[?:?] {} at java.lang.Class.forName0(Native Method) ~[?:?] {re:mixin} at java.lang.Class.forName(Class.java:390) ~[?:?] {re:mixin} at java.lang.Class.forName(Class.java:381) ~[?:?] {re:mixin} at java.security.Provider$Service.getImplClass(Provider.java:1967) ~[?:?] {} at java.security.Provider$Service.getDefaultConstructor(Provider.java:1998) ~[?:?] {} at java.security.Provider$Service.newInstanceOf(Provider.java:1912) ~[?:?] {} at java.security.Provider$Service.newInstanceUtil(Provider.java:1920) ~[?:?] {} at java.security.Provider$Service.newInstance(Provider.java:1895) ~[?:?] {} at sun.security.jca.GetInstance.getInstance(GetInstance.java:236) ~[?:?] {} at sun.security.jca.GetInstance.getInstance(GetInstance.java:164) ~[?:?] {} at javax.net.ssl.SSLContext.getInstance(SSLContext.java:185) ~[?:?] {} at javax.net.ssl.SSLContext.getDefault(SSLContext.java:110) ~[?:?] {} at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:83) ~[?:?] {} at javax.net.ssl.HttpsURLConnection.getDefaultSSLSocketFactory(HttpsURLConnection.java:336) ~[?:?] {} at javax.net.ssl.HttpsURLConnection.<init>(HttpsURLConnection.java:292) ~[?:?] {} at sun.net.www.protocol.https.HttpsURLConnectionImpl.&lt;init&gt;(HttpsURLConnectionImpl.java:81) ~[?:?] {} at sun.net.www.protocol.https.Handler.openConnection(Handler.java:62) ~[?:?] {} at sun.net.www.protocol.https.Handler.openConnection(Handler.java:57) ~[?:?] {} at java.net.URL.openConnection(URL.java:1095) ~[?:?] {re:mixin} at java.net.URL.openStream(URL.java:1162) ~[?:?] {re:mixin} at ironfurnaces.update.ThreadUpdateChecker.run(ThreadUpdateChecker.java:30) ~[ironfurnaces-1.20.1-4.1.6.jar%23534!/:4.1.6] {re:classloading}
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.