Jump to content

[1.7.10] How to Drag-and-Drop an element in GuiScrollingList?


Recommended Posts

Posted

I have several questions on it.

1. Is it possible to drag-and-drop the element in GuiScrollingList? Is there any limit prohibiting the dragging?

2. Please give any tutorials or instruction for checking if it is dragging, or when it got dropped.

3. Is there any easy ways for this purpose? If any, please let me know; I'm looking forward at it.

I. Stellarium for Minecraft: Configurable Universe for Minecraft! (WIP)

II. Stellar Sky, Better Star Rendering&Sky Utility mod, had separated from Stellarium.

Posted

Honestly, I have no clue how to do this. I have tried before but could never understand how the scrolling works. I would suggest finding a mod the implements some of what you want and decompiling it or, finding their github. :)

I am not a cat. I know my profile picture is sexy and amazing beyond anything you could imagine but my cat like features only persist in my fierce eyes. I might be a cat.

Posted

I can honestly say that there is no such implementation in normal source (forge+mc).

 

As to how to make it - 1st thing would be to understand how ScrollingList works, then your best option would to be make new class that would consist of 2 scrolling lists. Then you will need to, inside mouseClicked get the index clicked in one list (there is parent-child relation) and save that index to some temporary element. In your drawScreen you would need to draw this temporary element in place of mouse (also save x and y offset of element). mouseClicked has int event - you can use that to check when element is being hold and dropped, when dropped you can check if it was dropped inside same/other scrolling list and put it in index closest to separator between 2 existing indexes (if such are there). Obviously this will require you to understand how thay are being moved via scroll.

 

This is NOT very hard, it just requires shitload of reading and understanding mechanism to most basic state.

 

Structure:

MyGuiScreen (main screen)

---MyDoubleList extends Gui (and you will need to call methods inside from parent GuiScreen above)

---//MyDoubleList will containt:

------GuiScrollingList (first)

------GuiScrollingList (second)

------ElementHeld (the element that can be put into GuiScrollingList)

 

MyGuiScren calls renders/actions of MyDoubleList and MyDoubleList operates between 2 scrolling lists and element held. ElementHeld is ofc type that can be put inside those lists so it has some method that can be called from drawSlot(). You will call that method on drawScreen and draw it on mouse (with x/y offset saved), instead on one of lists. If Element is dropped not-in-one-of-lists then you can put it back to one you pulled it from.

 

I have somewhat expertise in those Guis, so to fully understand what I mean you need to 1st understand guis.

1.7.10 is no longer supported by forge, you are on your own.

Posted

I can honestly say that there is no such implementation in normal source (forge+mc).

 

As to how to make it - 1st thing would be to understand how ScrollingList works, then your best option would to be make new class that would consist of 2 scrolling lists. Then you will need to, inside mouseClicked get the index clicked in one list (there is parent-child relation) and save that index to some temporary element. In your drawScreen you would need to draw this temporary element in place of mouse (also save x and y offset of element). mouseClicked has int event - you can use that to check when element is being hold and dropped, when dropped you can check if it was dropped inside same/other scrolling list and put it in index closest to separator between 2 existing indexes (if such are there). Obviously this will require you to understand how thay are being moved via scroll.

 

This is NOT very hard, it just requires shitload of reading and understanding mechanism to most basic state.

 

Structure:

MyGuiScreen (main screen)

---MyDoubleList extends Gui (and you will need to call methods inside from parent GuiScreen above)

---//MyDoubleList will containt:

------GuiScrollingList (first)

------GuiScrollingList (second)

------ElementHeld (the element that can be put into GuiScrollingList)

 

MyGuiScren calls renders/actions of MyDoubleList and MyDoubleList operates between 2 scrolling lists and element held. ElementHeld is ofc type that can be put inside those lists so it has some method that can be called from drawSlot(). You will call that method on drawScreen and draw it on mouse (with x/y offset saved), instead on one of lists. If Element is dropped not-in-one-of-lists then you can put it back to one you pulled it from.

 

I have somewhat expertise in those Guis, so to fully understand what I mean you need to 1st understand guis.

 

Thanks, but what I want was drag-and-drop on one list, to move position.

anyway I got some understanding on how to do it. I was just too lazy...  ;| (+ I have only 2 hours per day u.u)

 

I. Stellarium for Minecraft: Configurable Universe for Minecraft! (WIP)

II. Stellar Sky, Better Star Rendering&Sky Utility mod, had separated from Stellarium.

Posted

Wait, I found a vital limit..

There is a field which represents how much the list was scrolled: GuiScrollingList#scrollDistance.

I should access to the field to find the position the element will be.

But it is private, so there is no way to access the field without reflection.

So, how can I solve this problem? Is there any breakthrough?

I. Stellarium for Minecraft: Configurable Universe for Minecraft! (WIP)

II. Stellar Sky, Better Star Rendering&Sky Utility mod, had separated from Stellarium.

Posted

No, no, no, no...

 

Just copy that code and make mod-owned gui class. (MyGuiScrollingList). Who cares about ClassLoader (meaning amout of loaded classes) anyway?

 

You are better off making new one - gives you lot more power over handling stuff, that you are going to need to make universal drag-drop-scroll list.

 

Why would anyone make that field private... cmon forge :c

1.7.10 is no longer supported by forge, you are on your own.

Posted

Access Transformers

What.. I don't want to reflection AS WELL AS AT(ASM)!

 

 

No, no, no, no...

 

Just copy that code and make mod-owned gui class. (MyGuiScrollingList). Who cares about ClassLoader (meaning amout of loaded classes) anyway?

 

You are better off making new one - gives you lot more power over handling stuff, that you are going to need to make universal drag-drop-scroll list.

 

Why would anyone make that field private... cmon forge :c

 

I didn't really want to copy the code... but if I should, I'd do it.

+ Would making a PR which simply changes the field to public be acceptable?

+ Actually I solved that. There is a method named GuiScrollingList#func_27256_c(int x, int y).

  It checks that a specific position is in the list, so I can get what I want by some trick.! (like putting y-slotheight/2)

I. Stellarium for Minecraft: Configurable Universe for Minecraft! (WIP)

II. Stellar Sky, Better Star Rendering&Sky Utility mod, had separated from Stellarium.

Posted

Using reflection is just fine. You won't get a PR in with just this change, Reflection is the way to go.

Hm. Thanks, so the those PRs are not acceptable.

& I'll not use reflection to do this, since there is another way. (..actually I doubt that you read my thread, but nevermind)

I. Stellarium for Minecraft: Configurable Universe for Minecraft! (WIP)

II. Stellar Sky, Better Star Rendering&Sky Utility mod, had separated from Stellarium.

Posted

I did read your thread...

Yes, there are other ways, you could copy-pasta the whole thing (ugly) use an AccessTransformer (hacky, overkill, doesn't work as well as most people think) or just use custom ASM code instead of an AccessTransformer (even more ugly).

In my opinion Reflection is just fine to use in this situation.

Oh, that sounds interesting. So I'd use Refelction in similar situation, when it is necessary. Thanks.

+ What I mean by 'another way', it means that there is normal way, which is just 'calling normal method'.

I. Stellarium for Minecraft: Configurable Universe for Minecraft! (WIP)

II. Stellar Sky, Better Star Rendering&Sky Utility mod, had separated from Stellarium.

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

    • When I first heard about Bitcoin back in 2018, I was skeptical. The idea of a decentralized, digital currency seemed too good to be true. But I was intrigued as I learned more about the technology behind it and its potential. I started small, investing just a few hundred dollars, dipping my toes into the cryptocurrency waters. At first, it was exhilarating to watch the value of my investment grow exponentially. I felt like I was part of the future, an early adopter of this revolutionary new asset. But that euphoria was short-lived. One day, I logged into my digital wallet only to find it empty - my Bitcoin had vanished without a trace. It turned out that the online exchange I had trusted had been hacked, and my funds were stolen. I was devastated, both financially and emotionally. All the potential I had seen in Bitcoin was tainted by the harsh reality that with decentralization came a lack of regulation and oversight. My hard-earned money was gone, lost to the ether of the digital world. This experience taught me a painful lesson about the price of trust in the uncharted territory of cryptocurrency. While the technology holds incredible promise, the risks can be catastrophic if you don't approach it with extreme caution. My Bitcoin investment gamble had failed, and I was left to pick up the pieces, wiser but poorer for having placed my faith in the wrong hands. My sincere appreciation goes to MUYERN TRUST HACKER. You are my hero in recovering my lost funds. Send a direct m a i l ( muyerntrusted ( @ ) mail-me ( . )c o m ) or message on whats app : + 1 ( 4-4-0 ) ( 3 -3 -5 ) ( 0-2-0-5 )
    • You could try posting a log (if there is no log at all, it may be the launcher you are using, the FAQ may have info on how to enable the log) as described in the FAQ, however this will probably need to be reported to/remedied by the mod author.
    • So me and a couple of friends are playing with a shitpost mod pack and one of the mods in the pack is corail tombstone and for some reason there is a problem with it, where on death to fire the player will get kicked out of the server and the tombstone will not spawn basically deleting an entire inventory, it doesn't matter what type of fire it is, whether it's from vanilla fire/lava, or from modded fire like ice&fire/lycanites and it's common enough to where everyone on the server has experienced at least once or twice and it doesn't give any crash log. a solution to this would be much appreciated thank you!
    • It is 1.12.2 - I have no idea if there is a 1.12 pack
  • Topics

×
×
  • Create New...

Important Information

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