#help-development
1 messages ยท Page 732 of 1
Sadly when we have getters for components those will have to be under the spigot subclass

not important logically but there's a semicolon in front of .create ^^'
Why can't java just handle identical methods with different return types smh
just a quick question is there anything in bukkit.yml or spigot.yml that could not allow to interaction between blocks or placement of them?
also hi choco
haha yeaaaa makes sense
getNameComponent is also an idea, but def still ugly
Already went through different options and nesting under spigot() just made the most sense
blahhh
Is it true new 1.20.2 builds use Mojang mappings for fields and stuff???
Instead of the obfuscated ones
no its a bug
Ah okay
Cause TAB added support for them, and I thought I would have too ๐
Guess they did not realize it was a bug
Yeah they're going to realize pretty quick that it was a mistake. Things will start breaking
All good things things come to an end ๐ฆ
Yeah I was excited for a min
Yo. So, I need a map that stores my custom user class with the UUID of a bukkit's Player. However I iterate through it asynchronously, so HashMap cannot be used. I've used ConcurrentHashMap so far, but I think I could make it work with the IdentityHashMap. The only problem: it does not support async iteration. So I came up with a class of my own. I need someone to evaluate it's efficiency for me. Please https://paste.md-5.net/aferomacoj.java
pay no mind to the forEach methods, as they're only used on disable
And I don't necessarily mean computer evaluation
:( feelz
you could always just profile it
Uuids shouldn't be used as keys in identity maps
are UUIDs mutable or something?
No
The uuid of the player wouldn't match the one you pulled from a db
They'll be different objects
Only .equals can prove their equality
IdentityHashMap uses reference equality instead of object equality. Meaning, IdentityHashMap#equals() is actually using == instead of a proper implementation.
Hence, you shouldn't use UUIDs as the keys.
This is intentional btw.
If you hold a cache of uuid as key in a identity map over player rejoining, the same bug would surface
I know that
I should've speficied: it only holds uuids of online players and only checks it by Player#getUniqueId
No other uuid is in play
Then it should be fine
But is it objectively faster than ConcurrentHashMap?
For sync modifications and async iteration (only value read)
I don't think so
Fair Ig
If you look into the equals of uuid, it's pretty simple
Identity equality is still faster
And with greater number of comparisons it can become visible
Yes, but i don't think by much
Pretty sure some other part of the code will show problems sooner than this one
Wdym?
Can I check in an enhanced for loop (i hope that's the right term) if i'm at the last position of the Set i'm going through?
It's possible
Maybe not ideal
But very much possible
I mean the lag will show in other parts sooner than performance from checking
if i want to check if a player's velocity is not null and nothing else, am i required to use the length() method? Doesn't vector have a lengthSquared method for faster math?
nevermind it has
im blind
For reference: I want to list the operators. So I iterrate through Bukkit.getOperators() and append , between each. I just don't want a comma at the end.
StringJoiner is pretty cool
And check index == size - 1
pls if u can check #help-server
StringBuilder for the win
It starts from 0
Happens
it's late for me lol
Size at 0 means empty
He understood
yea i know
i was gonna say, what the hell is StringJoiner, I only know StringBuilder
I never really used StringJoiner, but it's probably like array toString formatting class
Okay the regular for-loop was already a thing i tried, but i gave up bc i was to stupid to get the player using an index lol
idek why i don't know stuff like that. i've been coding for years lmao
If I have a UUID as a String, can I convert that to UUID? (fromString tells me the String is too large)
StringJoiner is pretty much faster for joining strings with a delimeter than StringBuilder always will be
since it calls JLA under the hood
Which does some cool stuff
Hi ! For some reason the skin is not applied, it is applied when i set my uuid in there but not when i use any other uuid. I check the method getSkinFromUUID and it returns the correct data
I am sure that the uuid from the config file is correct
Yes i know 1.8.8 is old ๐
I dunno what to tell you
It must be an invalid uuid string then
You need
Like a refresh
why doesnt this work?
-- is used for decrementing
Yeah, i saw that on some forums, i tried some things to apply the skin on my npc but none of the solutions worked for me, maybe i'm not searching in the right spot ๐ค
I teleported the player to another world
And back
thats not the same as the one u sent above
For the respawn packet to be sent
Oh, that kind of refresh ๐ค Weird to have to do that but i'll try thanks !
any help, pls: #1156902127940153405
yeah well they dont sadly, my theory is that it would bring some confusion if that was possible but yea
?jd-bcc
?jd-s
I tried it and the entity just does not move or tp ๐
Also tried to delay the tp back in place but still
Hmm
Do i need to do it before or after sending the packets, after i suppose
After
Weird ๐ค
Probably not
Maybe tping before removing the player will do the work ?
Nuh
Supositions ๐
My setSkin method for players
is there a way i can edit the preset for this
Removed set added back and tgen teleported
The what now
is there an easy way to remove a player's name from tab list without NMS or am I going to have a fun day figuring NMS out? Im looking to make a custom tab menu but player names and their ping need to go away
Almost what i did i might rework some things ๐ค Thanks for the help
Player#hidePlayer
that removes them from the world altogether for other players
I mean specifically tab bar
No
It sends a packet
That controls others tab visibility
the preset intj gives me
Yeah, so the player is getting tped but no skin updates ๐
I just tested this, its more than just tab visibility. Players do not render for other players who are told to have them hidden
I have no idea what preset is
Is there a way to prevent an ItemStack object being replaced by a new on during some inventory adding? I'm trying to instanceof and it seems like it's a different object?
this thing.
You sure?
yeah I just tested it
the "implement methods" automatically adds this
that's
what it's supposed to do.
also, your class naming scheme is weird.
would suggest you avoid naming classes with lowercase
Ah this. I have no idea. I just always either copied classes or set it by hand
but yeah I don't really know what you were expecting from "implement methods", what did you want it to do?
What version?
1.20.1
Maybe some new changes then?
yh so do i but its super annoying xd
but
well thx anyways
just want it to hold different names for the args
for future reference that's a "quick fix" or whatever IntelliJ calls it
yeah there's nothing that lets you change that afaik
it's just auto-named based off of the arg types
There's a way to do it, I just don't remember how it's done in IJ atm.
arlight
would recommend renaming that to CommandHelp or something btw
I think the last time I added a replacement like that was in Eclipse and it was easier than it was in IJ.
as much as I like IntelliJ, it's really bad about certain things
this is one of them
straight up running projects is another
Hello, how can I get the nms Player from bukkit Player class?
or like exporting a .jar file normally without maven/etc.
Hello! How does "org.bukkit.generator.BiomeProvider" work? Therefore I chose "forest" to avoid water and yet the whole world is kind of water. Does this have to do with the "Tempraturer"
do you still need a CraftPlayer for that?
a code snippet would help
you might have just done something wrong
but CraftPlayer isn't net.minecraft.world.entity.Player?
keep in mind if the chunk has already been generated, changing its biome won't do anything
you can cast them
has anyone ever disigned a website to auto generate inventorys? cause if not i think ill do it
okay thanks
wym "auto generate"
like you just choose the items u want in there in like a dropdown menu or something and it writes the code for you
?paste
i don't see that code actually changing generation though
@prime reef
I don't want to pass through CraftPlayer, or maybe automatically
not importing this
I don't want to make a version for every version of Minecraft
but idk how to cast to a CraftPlayer without importing the class
I don't know how to cast the player to a CraftPlayer.class and then getting handle
Isn't that the ole ((CraftPlayer) player.getHandle())?
okay thanks
?paste
Hope it doesn't break. :kek:
to avoid versioned imports https://paste.md-5.net/ehuvixugir.java and tools https://paste.md-5.net/zudikulisi.java
exactly what I need! thanks
You don't cast, you convert. IIRC, CraftItemStack#asNMSCopy(). There's also CraftItemStack#asBukkitCopy() if you need to convert back.
okay thanks
let's use reflection x)
Hi im trying to save in an yml file the uuid and the bal (its an economy plugin) but it doesnt works
public static String getFolderPath(UUID p) { return Bukkit.getPluginsFolder(). }
IntellyJ cant find the Bukkit
plugin folder is not a thing
I think you're looking for the data folder for your plugin in /plugins/
ye
That method can be found in your main plugin class
How can i create the folder from onEnable and then access it aswell?
whatever is extending JavaPlugin
getDataFolder()
the folder is created automatically
if it doesn't already exist
wait cant understand .-.
Iirc, it is not, you need to create it or it will be created when you saveDefaultConfig/options.copyDefaults
public class MyPlugin extends JavaPlugin
{
@Override
public void onEnable()
{
// This is your plugin folder
File pluginDirectory = this.getDataFolder();
}
}
naw spigot creates this folder when the plugin gets initialised
you don't have to manually create it
(If you attempt to write something to the directory)
im creating a class wicht returns the plugin path
like: path + /player/ + UUID
how can i do this
Not according to the official source repo
ยฏ_(ใ)_/ยฏ
I've never had to
. ๐ฆ
Returns the folder that the plugin data's files are located in. The folder may not yet exist.
I'm confused, can you elaborate?
You can read all the documenation you want. When I run my plugin the folder is auto-created when I write to it
lemme reformulate the question
it doesn't, not unless you call saveDefaultConfig() or save on teh config
Can you elaborate?
You didn't read my entire message
Want to create a class wicht gives me the path of a yml file allocated on (pluginfolder + player + UUID)
But how can firstly get the plugin folder path if it might not exist
So /plugins/YourPlugin/itz_Abu/caabc402-657c-462d-bf2e-9ae139cacd69/ ?
Plugin#getDataFolder()
ye but on itz_AbU its just player
wont work
you can do new File(plugin.getDatafolser(), "player")
its pluginfolder + "player" + UUID
No wonder it doesn't work.
uhm
https://www.youtube.com/watch?v=NjfnfGghLuw&list=TLPQMjgwOTIwMjNT1zTjUy4Trg&index=2 im following this tutorial bruh and there i t works .-.
You can't append extra strings to a file path unless that path exists.
min: 5:20
or evenjava File players = new File(plugin.getDatafolser(), "players"); players.mkdirs(); File id = new Folder(players, uuid.toString() + ".yml");
File file = new File(plugin.getDataFolder(), "path/to/your/file.extension")
id will be the handle to your new file, if you create it
FileConfiguration yourConfig = new FileConfiguration();
yourConfig.set("MAP", yourHashMap);```
or YAMLConfiguration, I forget which it is
Since when can you call new FileConfiguration and not YamlConfiguration.loadConfiguration(file)
then using the code above you can yourConfig.save(id);
for check on join event if the player has his own line?
How can i check if a UUID is already in there
You got it right.
I've just done a test to verify that claim. It's wrong. The folder is auto-created when you write to it
what and how are you writing?
literally writing an empty txt file
i`ll just go to sleep .-. im getting crazy... Thanks for the help bye
using what code?
Show code I'd like to see this.
@Override
public void onEnable()
{
String s = this.getDataFolder().getAbsolutePath() + File.separator + "doc.txt";
Files.createFile(Path.of(s));
}
folders are only created by Bukkit when using the Config
testign now
Then the best solution is to avoid NMS as much as possible
my bet you are also saving a config
๐
nope
You may also just do new File(getDataFolder(), "doc.txt");
You are correct though
I am wrong
my bad
I have other infrastructure that auto-creates folders and files
yeah I just checked it here. no folder created ๐
Yeah yeah my bad
I guess I've just expected it because of my infrastructure
honestly kind of nuts spigot doesn't do this for ya
its kinda not upto Spigot at that point as you are not using its API
I meant more as a QOL thing
yup and it's not really a huge effort
it'd be more pain if you don't want a plugin folder
I just thought it only created it if you attempted to write to it
if you don't write to it nothing should happen
oh, that's just how file io stuff generally works
seems only if you mess with config saving or have infrastructure in place to auto-create folders on the fly does it appear
clearly not here lol
Is there a way to copy and simulate an instance of a chunk, without affecting the original?
this is why i wrote a config library lmao
There are chunk snapshots but that is about it. You'd need dedicated tooling that I am not sure already exists
this gif triggered my ptsd
What do you mean simulate?
I could probably help, breaking shit is my specialty
broke both my hands running it back
o k
that is the definition of copy, you just copy the blocks to some other chunk
They most likely mean taking a virtual snapshot rather than copying the "physical" blocks
it's the simulate part I'm concerned about
then what's the simulate part about?
this doesn't sound like a backup system
Could also be a simple computation on the chunk (grow all trees, remove ores, whatever) but without them responding it is anyone's guess
oh shit
I didn't know what nms mappings actually were until I figured I'd check just now
that's cool
yeah lets you read nms
which means it's not fun anymore
good ol' 1.12 days where I memorized all the nitty gritty a() methods and what they did
and I could just guess based on the order of operations
You sound like the boomers that complain kids have it too easy these days
Back in my day, we didn't have these fancy mappings or persistent data containers.
Back in my day we had to reverse engineer everything
Back in my day we didnโt have integers!
Back in my day we didn't have letters!
except I'm prob the youngest one here
Age check
Actually lol
mm no conclube has always been lurking
Haha na just for some mere secs
how old
judging by the pfp I lost the argument
No
Discord admins watching with interest:
what ๐ญ
you 12?
thats the day my best friend died
Why would you have that in discord bio
why not ?
never forget ๐ค
You alrighty, spigot?
Why does 1.20.2 doesn't contain CraftWorld anymore?
I'm using <artifactId>spigot</artifactId>
After compiling with BuildTools
Are you using the mojmapped jar?
I turned on the remapped option through the options window
Otherwise - invalidate sources and restart your IDE
There is such a tedious thing in creating a plugin as loading data from configs. You have to do everything manually (it can take 200 lines in ONE class ) and still worry about these names. Does anyone have a specific system for loading configs + error protection?
class or something else for check errors
i have but it is intended for certain configs in a certain plugin and not for all
so far I have something like this https://paste.md-5.net/fayajibova.cs
cuse confortable in this setuation
do you not like this?
i too but in this moment
yes
enums?
you can just see "new"
end next class
but yes this not so confortable
you use enums for check error type?
lol no this is in github
a wait
yes
haahah
i dont was think this exists in SpigotMC
Fair enough
Here is something that only generates plains:
public class CustomBiomeProvider extends BiomeProvider {
@Override
public Biome getBiome(WorldInfo worldInfo, int x, int y, int z) {
return Biome.PLAINS;
}
@Override
public List<Biome> getBiomes(WorldInfo worldInfo) {
return List.of(Biome.PLAINS);
}
}
private void generateNoOceanWorld() {
WorldCreator creator = new WorldCreator(NO_OCEAN_WORLD);
CustomBiomeProvider customBiomeProvider = new CustomBiomeProvider();
creator.biomeProvider(customBiomeProvider);
creator.createWorld();
}
@slate tinsel
How could I hook myself to be able to intercept even the handshake packet?
Thanks! ๐
Does anyone know what aternos plugin add effect to item and that effect still working when put item in inventory help me pls
No fucking shit
Hello how can I get the amount of durability the mending enchantment will repair, on average, per point of experience?
Read wiki
aka 2
thanks
A player?
Honestly I think the closest is just the default pose
Are you already connected to the proxy
oh fuck no
It seems to work, but plains contain large oceans. Actually they were the ones I wanted to disappear, can it be solved?
why
Even if you force the only biome to be plains, areas below sea level will still be filled with water
iran
What about it?
You can't pay money in iran?
na
we cant play mine
we dont have xbox live here
its filterd
Rewrite the terrain generation
is iran part of north korea?
Is there an easy way to do it or do you have to keep using nms then?
Sure. But this has nothing to do with the oceans. Those bodies of water will still be of type plains.
You can probably use a datapack to remove dips below sea level
Idk a ton about the datapack worldgen
bros literally got an xbox account linked to his profile
looks like piracy to me
๐ดโโ ๏ธ
Okay, so guess it's not that easy to do then?
so no one can create an online-mode server there and get players
Therefore, I prefer not to mix data packs into my plugin
You can do pretty much all of it using the spigot API.
But writing your own terrain generator is an absolute mammoth task.
play it
its an iranian server
with cracked
Let me guess. 1.8
its 1.20
1gb ram
yeah
its .com actually and not .ir
what is the output of /glist
what ????????????????????????????????????
its a bungee server
execute /glist in your console
k
bungee or server s?
Change the port of your lobby server. It should not be the same as your proxies port
I want to make custom elytra is there a way to change it's entity model or texture???
Not without mods
Thanks
Sadly armor models can still not be changed using the modelid
probably
Why is this https://hastebin.com/share/dudilawoyu.java
Giving: this java.sql.SQLException: After end of result set
Hastebin is a free web-based pastebin service for storing and sharing text and code snippets with anyone. Get started now.
double plotpricee = Double.parseDouble(null);
What?
lol
?
Double.parseDouble(null) works
what's the entire stack trace?
You can as well just not do that...
Not enough code and no stack trace to be able to figure out why
Use the correct ResultSet
Its already figured out
rs is not declared anywhere
ยฏ_(ใ)_/ยฏ
only making the assumption it's another resultset
his error says he quieried beyond the last entry so it is defined earlier
exception could of occured on executeQuery()
well yeah, I'm just saying his code doesn't show where
it does
know your exceptions and what throws what ๐
no it does not. You're not adding anything to a long dead conversation
it does not for you, big difference here
^
Point to me in the code where 'rs' is defined
I didn;t "guess", the error and the code he provided gave all the info to diagnose.
the exception points out the incorrect result set being used as ElgarL pointed out
probably, but mine was that while you don't see anything, doesn't mean others don't or can't know
So, I thought of making an api for my plugin that would work with typescript/javascript, but idk how I could
- Execute the script
- Share info between the server/plugin and the script
Anybody got suggestions?
Your words alone, not mine ๐
you would need to shade a javascript engine
I've done that before
I don't remember shading js tho
but the jar was like 14mb
lemme decompile
What javascript engine would you recomend and is there a way to run typescript?
because a few years ago the JDK had nashorn but oracle discontinued it
Oh boy another scripting Lang
yeh
Tbf Iโm sure a JavaScript spigot bridge already exists
now kiss
Well, that's young
It does. I've used one
It was private and proprietary, but they exist for sure
Do not recommend
think we used it at work to like run scripts on dungeons
Python is awful imo
Yeah but that uses the plugin loader API which is sensical
python is garbage
Anyways if you want to expose some API via JavaScript you can do that, you'll just need a JavaScript engine. Probably Graal
PAPI already does this
I'll see if I am able to understand anything
So you could use them as an example
You could probably expose the api to any language if youโre brave enough
Java in c in c++ in spigot
Imagine if we could show html to clients
Js and python kinda work because they are fairly common scripting languages
Anything else probably has no real use
I like how I still don't understand how this would be possible
How common is typescript?
Oh okay time for a new one
What happened, I discovered it just recently
its common in other languages
its just not as publicly visible as something like javascript
I am getting the Velocity#length() each tick and I found out that even if I am stopped the returned value is 0.08. Where is this located in the nms?
its just like F#
its not as publicly visible as say C#
but F# is indeed used a lot
F# incidently is another programming language from MS
actually, the y is -0.0784000015258789
yes, but where is this coded?
need to look into the non-used NMS stuff
so you are going to have to find in the buildtools directory the decompiled stuff
and then toss those classes into an IDE
spigot doesn't make use of everything or modify everything in the MC code
so there is plenty of classes that are not decompiled/used at all
But the wiki is a Mess yo use
It would be cool if the wiki had the mapping names of packets
Other than that I donโt see how itโs a mess
wiki is basic data is all
Still mapping names would be nice
Since sometimes itโs difficult to figure out what the wiki name actually matches with
is it hard to write a worldgenerator where the biomes are just smaller?
or like what kinda classes /api would I use for that stuff
Uhh
You can do it with BiomeProvider in the api
But you'd have to handle the math and stuff yourself
Alternativly you can do a datapack
what math
you mean make like a custom biome noise map or something?
nvm ill just look at BiomeProvider, thanks
pretty much
You have an x, y, z and a ton of noise values
And you pick the right biome based on that
I see
a lot of headaches then
thanks for pointing me in the right direction though
I am responsible of closing the InputStream of Plugin#getResource right?
yea
Yes but it might get automatically closed depending on where you use it. If you're calling YamlConfiguration#loadConfiguration() then it will close automatically
ok thanks
is it bad if I create many Model objects to store data for each section of the config?
the sections are just too diverse
this all specific buttons
in gui
Give an example
Also objects don't use nowhere near the amount of RAM you think they do
You'd need millions to use a few mb of ram
yikes non-standard item format
i'm trying to spawn lightning on a player upon sending a specific message but i keep getting this error when trying to send the message: "Caused by: java.lang.IllegalStateException: LightningStrikeEvent cannot be triggered asynchronously from another thread."
how do i fix it?
code:
public class ChatEvent implements Listener {
public static HashMap<String, Boolean> wizards = new HashMap<>();
@EventHandler
public static void onPlayerChat(AsyncPlayerChatEvent event) {
if (!isCustomItem(event.getPlayer().getInventory().getItemInMainHand())) return;
if (event.getMessage().equalsIgnoreCase("i cast thunder")) {
Player player = event.getPlayer();
Location location = player.getLocation();
World world = player.getWorld();
ItemStack item = player.getInventory().getItemInMainHand();
if (getItemId(item).equals("thunderstaff")) {
world.strikeLightning(location);
player.sendMessage("YOUR STAFF HAS BEEN GRANTED WITH POWER");
wizards.put(player.getName(), true);
}
}
}
}
mm that config is awful
AsyncPlayerChatEvent fires.. Async
Which means it's in another thread
wdym
You want to go back to the main thread
This is an Async Event
In another note, that's some hardcore static abuse
gotcha
And a Map<Whatever, Boolean> can be replaced with a Set<Whatever> and just use contains check
Bukkit has a rule about calling Bukkit api methods from a thread that is not the main thread
You can however use Bukkit scheduler to sync a call to the main thread
As long as no fancy quad-state schenanigans are used
tristate you mean
No, quad-state: Present null, Present true, Present false, Not present
here
what better use map<item,slot> or object for save this
think of threads like little workers working on executing certain parts of your program
there is the 'main' thread and then other worker threads
p sure that most maps don't like null vlaues
gotcha
Async means asynchronous or in otherwords out-of-sync
ConcurrentHashMap is the only implementation worth of note that doesn't like it
useful for having 1 thread deal with something that's expensive or needs rapid polling while the main thread can handle other stuff
Chat is one event that's Async
because people can send messages at anytime
More that it doesn't really interact with the server at all
And has no need to pollute the main thread
It also works when the main thread is dying 
Which is funny
yes
oh cool I really need to learn how to make good configs
well ye
especially when idiots say "ooh don't talk in chat it makes the lag worse" 
Pretty much
Like are you going to be messing with entities while processing a chat msg?
this is true lol
further to this though
Bukkit.getScheduler().scheduleSyncDelayedTask(<Your plugin instance here>,() ->
{
// Code here to sync to main thread
});
but sometimes you want to use completablefutures and it's a pain
So there are like two ways of doing it
One's just making a sync(Runnable runnable) method
The other is just making a custom executor
welcome to programming
been here a while, love and hate it
been here for like a decade
or callSyncMethod. so many ways
sorry i was afk lmao
thanks for the sample!
callSyncMethod is the new(ish) fancy one
this code just schedules your api call so its executed on the main thread
ah i see
Like there's no need to worry about this
i mean this is same?
just i dont undestand why this exists if bukkit has same task metod
i was think this has better speed
but ok
scheduleBlahBlah all return an int
Where as runTaskblahblah return BukkitTask
also runTask was added due to the confusing naming of sync/async
oh it returns a Future
And then there is callSyncMethod witch returns a future
idk why I did this
isnt that just glorified bukkit task or sth lol
I think it is tbh
throwback to when I had a schedulebuilder class
The sync part confuses me though
Kind of
You call a sync method and wait for a response?
new ScheduleBuilder(plugin)
.every(10).ticks()
.run(() -> { ... });
.async()
.during(15).minutes()
.start();
Not if you call it from another thread?
I guess but why is it called callSync then
lol
doc says it will call a method on main thread
sync basically means main thread in this case
Which isn't really how sync works but yeah
yeah that's why it's confusing me
Yeah if you try to call get on a tick before this method call is scheduled, then you got a clean deadlock
bro can't even make it past the first part ๐
I wonder how far I can get if I do 5 attempts blindfolded
Not further than the fast wave def
1.5 seconds 2gb
That looks so tough, wth
Looks is the key word
my mans never seen blood bath ๐
deadlocked is easy in comparison to some of the user created demons
frame perfect movements :c
I don't know how this turned into a gd conversation but since this is happening I'll throw in the fact that I'm trying to jump from a medium demon to Acu and so far I've got 12k attempts + 0-30, 26-64, 63-100 + 45-84 + 41-81
Please wish me luck because the predrop is less consistent than my grades
I'll need it
godspeed lol
I'm stuck here
oh boy
Everyone starts somewhere
think the last one I did was jumper
you have a long road ahead of you soldier
does any of you know how to make a spigot server?
that one is hard, used to struggle with it when playing the free version
Nah m8 we just program plugins. I have no idea if they work bc setting up a server is incomprehensible to me...
What's your hardest btw?
Yeah, it's pretty hard, but nothing compared to the one logical showed us
What am i looking at?
Ok this is a perfect loop it's not that long actually
You have to maneuver the wave while keeping the eye on the correct key and in the end you'll have to pick the key
Oof
My brain can't do this
And well this is the hardest level verified so far (the gif above)
(should be the hardest when it's placed on the list)
think the only demon I beat was like masterquest or whatever the name was
Mastergame?
ye
i failed to process this gif
xD
Blood Bath, I attempted Blood Lust and some other harder demons but gave up. Was getting too time consuming for what it was worth
Oo, nice
something like 27k attempts
Did you jump to it?
I mean some parts you can, some parts doesn't make sense to
I mean like what was your prev hardest?
i feel like you get a mental issue playing geometry dash
Playing since 2015-2016, I can confirm
yeah
When you got the game
college
You old fuck ๐
i was 84 at 1975 when i started playing it
You're either fake or your dead
some demon level in the gauntlets the GD had, can't remember their names
there are some later gauntlets with only demons
Since when?!?!??!
idk in older versions it works just fine
wtf is a humanentity anways
Afaik the only class that extends HumanEntity is Player
It's an interface actually but idgaf
But for some abstraction reason they are 2 different things
damn
HumanEntity is a Player or NPC
he did his research ๐
I guess by NPC they're referring to fake players?
yup
not sure why it can't just be player then
It can be
guess ive just never used it in the newer versions
But internally it's a HumanEntity
fake player opening a gui?
NMS provides us with HumanEntity so that is what we forward
However, these days we normally just convert it to player
ill forward you in a minute
Player p;
welp ig that all makes sense and stuff
still weird that ive apprently never used it in newer versions
I think this is basically the only place it appears
yh im normally to lazy to make guis
ye
I've not seen it much anywhere else
I also don't get the use case for it
since it's very niche
and even making a npc requires NMS calls but they have support for it opening a GUI? you wouldn't even see the GUI though... ?
It isn't useful
nope
It's just how Mojang did it
to be fair I could just make my own InventoryInteractEvent that casts HumanEntity to player and pass it on
its been like it is for too long
ye
method sig would change
all we could do is deprecate and make new method
Idk exactly how ABI works
why not
Do you
Nah I just meant locally in my own plugins
not force spigot to change it (แตแตแถแตแตหขแต แตสฐแตสธ สทแตโฟแต)
i got it working :D
now i have one last question
using a list inside of a list is possibly the most confusing thing i did this week
i'm trying to send a message to the player but it sends before the player's message is sent
is there a way to prevent that or do i manually have to delay that line?
List<List<Map<List<ItemStack>,Set<KeK>>>> mess;
got it
tick is 50ms or 1/20th of a second
ye
it could be 1, but theres a chance it will send before
so 4 is good, 6 is better as it can account for some lag
why would lag cause a scheduled message to be sent earlier or later?
damn
end user ping
i saw it a few times with 1 tick delay, i could get like 200ping and then message sends before mine has
I meant on the server side
the lag i meant was users ping
but if your waiting for a players message, you could just wait for the message and then fire off something?
the event would early fire or something like that
i dont actually know why it would happen but it did
correct me if I'm wrong but it was my understanding that if the player sends a message and the server recieves it, the AsyncChatEvent fires regardless of how garbage or good your ping is?
the event fires before clients see the message
so if client ping lag or something is bad, the message you could send would fire before it sends even with a tick delay
I'm very confused, Player sends a message? I imagine talking in chat, Server recieves message and then sends a message back to the player
How does a server that's physically further away than the players client, manage to have a message arrive from it on the client before the client can print its own message?
Because the client doesn't print its own message?
Client -> Server (Message: Joe Mama!)
Server fires event
Server -> All clients (Client1 said Joe Mama!)
and I'm guessing the AsyncChatEvent is the first stop it makes
before sending it to everyone else
Yep
is there an event for stepping on a pressure plate?
Interact event
It's time to get physical
hey someone please sanity check me and tell me that the mc version for 1.20.2 is not, in fact, showing up as 1_20_R2 which was what 1.20.1 was showing up as
am I tripping here?
Wasn't 1.20.1 R1
uh
I remember it was a mess because 1.20 and 1.20.1 are the same but not using the same name but at the same time you can't download the mappings for 1.20 specifically
(because they're the same afaik between 1.20 and 1.20.1)
so I guess maybe I was wrong? Was it using R1 this whole time for 1.20.1?
Maybe?
its prolly something stupid but when i enter a command that is registered in the main and in the plugin yml it just returns false
any idea why that might happen?
i dont.
it doesnt even execute the command executor
thats the thing
it just returns false
instantly
How do you check if it returns false and doesnt get called?
it sends in the usage from the plugin yml
wich usally happens when it returns false
which
?notworking
"Does not working" is a useless statement. Please describe what exactly is not working, what you expect it to do, and what actually happens. If you get any console errors, also ?paste the entire stacktrace.
