#help-development

1 messages · Page 1011 of 1

stoic summit
#

can anyone teach me to edit pl?

#

i have a pl on me verry old

#

like 1.12

#

can anyone teach me to edit it

#

im new to these stuff i joined it last week only

#

so im very confused and im overcomplicating stuffs

#

so the teacher would be having patience to teach me

chrome beacon
#

Are you willing to learn or are you just trying to get it done for free

stoic summit
#

im willing to learn

#

wait

#

ur

#

;;=-;

#

are u

#

jesse?

chrome beacon
#

No

stoic summit
#

ohk

#

so will u teach?

chrome beacon
#

Do you know the basics of Java

stoic summit
#

nop

chrome beacon
#

?learnjava

undone axleBOT
#

For Beginners:

Codecademy - Learn Java: Interactive Java programming course from basics to more advanced concepts. Perfect for absolute beginners.
https://www.codecademy.com/learn/learn-java
JetBrains Academy - Java Developer Track: Learn by doing with projects and challenges. It covers Java fundamentals to advanced topics.
https://www.jetbrains.com/academy/
Udemy - Java Programming Masterclass for Software Developers: Updated courses that cover Java 8 to Java 17 features. Suitable for those who prefer structured learning.
https://www.udemy.com/course/java-the-complete-java-developer-course/

For Intermediate to Advanced Learners:

Oracle Java Tutorials: The official guides by Oracle for Java programming—great for understanding the depth of Java.
https://docs.oracle.com/javase/tutorial/
Baeldung - Learn Java and Spring: Focus on Spring Framework and modern Java technologies. Best for intermediate learners aiming to expand their knowledge.
https://www.baeldung.com/

Practice and Hands-on Learning:

Exercism - Java Track: Solve exercises and get feedback from mentors. Great for practicing coding skills.
https://exercism.io/tracks/java
LeetCode: Practice your coding skills and prepare for technical interviews with Java.
https://leetcode.com/

Free Resources and Documentation:

Java Programming and Documentation: A comprehensive collection of Java programming guides, tutorials, and API documentation.
https://docs.oracle.com/en/java/

Community and Support:

Stack Overflow: A vast community of developers. Great for getting help with specific problems or understanding concepts.
https://stackoverflow.com/questions/tagged/java
r/learnjava on Reddit: Join the community of Java learners and get advice, share resources, and discuss projects.
https://www.reddit.com/r/learnjava/

Remember: Learning to program takes practice and patience. Don't hesitate to experiment with code and participate in community discussions. Happy coding! 🎉

chrome beacon
#

Then start there

stoic summit
#

i just wana know how to load a existing plugin and simply export it back

#

as jar*

chrome beacon
#

So you have no interesst in learning

stoic summit
#

i have

chrome beacon
#

You just want it done free

stoic summit
#

when ill learn java

#

ill edit it

fair rock
#

Its not like: Load -> Change a number to 1.20 -> back to jar

Thats not how Plugin development works when Mojang changes a high amount of stuff every update xd

stoic summit
#

;-;

#

hmm

#

aight so

#

how do i doit?

#

conditions -

#
  • idk java
chrome beacon
#

Start by following some guides above

stoic summit
#
  • idk how to use intellij properly
#
  • i can compile gradle stuff from cmd
fair rock
#

As Olivo said, getting started with basic of java and intellij would be the best

stoic summit
#

;-;

fair rock
#

You can always ask question but its not like everyone wants to code your entire project for free. xd

stoic summit
#

ahhhhhhhhhhh

chrome beacon
#

Don't skip the learn Java part

#

If you're in a hurry you should comission someone instead

#

?services

undone axleBOT
stoic summit
#

;=-;

charred blaze
#

if i create plugin with java 21 will it support java 8 or something?

quaint mantle
quaint mantle
#

I'm pretty sure Java 21 can run Java 8 bytecode.

drowsy helm
#

It’s backwards compatible, not forwards

sand lynx
#

Can i add a BBB link to my resource as download link, even though on BBB the resource is paid, and on spigot page is not a premium one?

quiet ice
#

I think that might be treated as advertising and wouldn't be allowed

#

People have complained about such pedantics in the past, so I'd be weary of this

river oracle
#

At minimum resource removal

#

That's even removed from the fact it's scummy

quiet ice
#

even linking to a premium spigot resource is an offence from what I have heard so far, so it isn't something that is unique to BBB

valid burrow
#

not really. If you post in 4 different channels that just mixes up the topics the channels are designated to

quiet ice
#

they probably misunderstood with what you meant with crosspost - I would've also misunderstood it at first

#

And yeah, crossposting is le big bad (although I still do it rather frequently if I expect the chances of someone knowing something in one discord being small)

dawn flower
#

can i add the player to the passengers of an entity and make them stand up

#

while still being a passenger

chrome beacon
#

no

drowsy helm
#

Nope

chrome beacon
#

what are you trying to do

drowsy helm
#

Bruh stop copying what im gonna type :((

chrome beacon
#

xy problem

#

?xy

undone axleBOT
dawn flower
#

i got a cannon and i want people to stand up while shooting (without them bugging out when trying to move by cancelling event)

drowsy helm
#

Just apply velocity

chrome beacon
#

?

chrome beacon
dawn flower
#

basically get the effect of riding (cancels all WASD) movement

dawn flower
#

spoiler alert: it isnt

chrome beacon
#

you can make the player look like it's standing up for other players

drowsy helm
#

Bit hacky, but you can make them spectator inside an armour stand

chrome beacon
#

That's also an option

#

Will lock mouse inputs though

dawn flower
drowsy helm
#

But yeah why do they need to stand

dawn flower
#

also that makes the player invisible for themself

dawn flower
chrome beacon
drowsy helm
#

Ah

dawn flower
#

plus it's block displays not armorstand

chrome beacon
#

You can spawn an NPC

#

that looks like them

drowsy helm
#

Lol

fair rock
#

Ask him why its better, than argue just with no, thats how people interact with stupid ideas kekw

drowsy helm
#

I think a sitting pose would look funnier

dawn flower
#

there'll be alot of cannons

drowsy helm
#

How about you make it a cannon ball and they are sitting ON the cannong ball

dawn flower
#

and ALOT of people dismounting and remounting

dawn flower
orchid gazelle
#

I believe I can touch the sky

drowsy helm
#

Genuine suggestion lol

wet breach
dawn flower
wet breach
#

that didn't really answer what I asked

drowsy helm
#

How about

fair rock
#

Question: You want that people can interact with the canon:

Just fire or moving/rotating the cannon as well?

drowsy helm
#

Launch them with velocity then give slowness 9999

dawn flower
#

rotating and shootign only

wet breach
#

and they need to be mounted to do that?

fair rock
#

he wants the player to stand up and not in the sitting pose

#

with no movement

wet breach
#

I am still failing to see why mounting is necessary to accomplish that

fair rock
#

Idk too

drowsy helm
#

He doesn’t want the player to be able to move

#

While being launched

wet breach
#

they are launching players?

dawn flower
#

he doesn't get launched 🤦‍♂️

#

it shoots a cannon ball

fair rock
#

HAHAHHAHA xd

drowsy helm
#

Im so confused

wet breach
#

ok, well they don't need the player to mount anything to not have the player move and still control a cannon

#

since mounting makes them sit, and sitting is the pose not being wanted, it makes sense then to not mount them

#

and instead use the other methods to make this feature of their's

quasi gulch
#

Are there any resources how to make my plugin reload safe. Like a list of things a reload does so my plugin can be safe?

river oracle
#

E.g. /myplugin reload

quasi gulch
#

yeah i know but to much players still reload. Is there something i can do?

shadow night
quasi gulch
#

Ok

river oracle
#

reload isn't even supported by spigot it is still existing for backwards compatibility (we don't want people complaining)

vital sandal
#

what is the new name of this packet?

chrome beacon
#

?switchmappings

wet breach
quasi gulch
#

ok

chrome beacon
#

(and cleanup data)

wet breach
#

you can use that event and check which load type it is, and if its reload, treat it like a reload command

#

then your plugin is reload safe

tardy delta
#

oh thats a thing? i used the old way of checking if !Bukkit.getWorlds().isEmpty() in onLoad

wet breach
#

it also doesn't hurt to create a reload command specific to your plugin as well, as this will allow reloading your plugin specifically and not the entire server lol

quasi gulch
#

ok nice thanks

vital sandal
#

there are reason so that I don't use mapping

shadow night
#

no

#

If there is a reason to not mojmap spigot, it's a bad reason

chrome beacon
shadow night
#

I wanna know the reason

quasi gulch
#

When i reload i get the error that my database H2 isnt closed but is should autoclose because of the try catch. How can it still be open after a reload

tardy delta
#

?nocode

undone axleBOT
#

It’s hard to answer a programming question without code
Oh no! You ran into a problem. But no worries, people are willing to help, but first they need to see your code. This is because otherwise, they would be providing help based on guesses instead of concrete knowledge. Whether it be a compile error, runtime error, or an unexpected output, I'm sure that if you were to provide code, you'd receive a quick solution.

quasi gulch
#

ok 1sec

#

Thats my Database class

shadow night
quasi gulch
tardy delta
#

stupid site

quasi gulch
#

Yeah i needed to anwer some catcha

tardy delta
#

use pastes.dev or smth next time, pastebin sucks

shadow night
#

?paste

undone axleBOT
quasi gulch
#

ok

shadow night
#

Fr fr

quasi gulch
tardy delta
#

now where on earth is the code that closes the connection

quasi gulch
#

it says that everything in a try catch autocloses

#

or is that not in h2?

tardy delta
#

i dont see no try catch autoclosing

eternal oxide
#

only in a try with resources I believe

tardy delta
#

its a try with resources, ye google that

#

bit scary how sql exceptions propagate into runtime exceptions but uhh ye..

quasi gulch
#

ahh ok

#

but i close the database with Connection.close(); everytime should take close the connection everythime?

#

line 53 connectToDatabase().close();

tardy delta
#

youre doing connectToDatabase().close(); which opens a new connection and immediately closes it

quasi gulch
#

ahh ok right

#

long time didnt look at that code xd

tardy delta
#

dunno if thats really want you want, closing your conneection after every statement

quasi gulch
#

when should i close it then?

eternal oxide
#

you shoudl not with h2

#

teh driver will close the connection when teh VM terminates

quasi gulch
#

okay so i should open a connection at start up and close that connection on Server stop? And only use that one connection?

autumn cave
#

Hey, I've just moved my dependencies from shaded jar to the spigot plugin.yml libraries system. All of my dependencies work, except for kord. Any clue why? I get NoClassDefFoundError. Its important to note that I include dev.kord:kord-core in the libraries, and that dependency will include:

  • dev.kord:kord-common
  • dev.kord:kord-rest
  • dev.kord:kord-gateway
    And I also see these dependencies get downloaded and loaded by my plugin. However only the kord-core classes are loaded. The NoClassDefFoundError are only coming from classes of kord-common, kord-rest or kord-gateway. Is there something special about this dependency that causes problems with the spigot library system? I've also tried specifying those in the libraries array, but same problem. Here is my libraries array with all the other functioning libraries for reference:
libraries:
  # kotlin
  - org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.24
  - org.jetbrains.kotlin:kotlin-reflect:1.9.24
  - org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0
  # exposed
  - org.jetbrains.exposed:exposed-core:0.49.0
  - org.jetbrains.exposed:exposed-crypt:0.49.0
  - org.jetbrains.exposed:exposed-dao:0.49.0
  - org.jetbrains.exposed:exposed-jdbc:0.49.0
  - org.jetbrains.exposed:exposed-kotlin-datetime:0.49.0
  # other
  - com.github.ben-manes.caffeine:caffeine:3.1.8
  - org.anarres:parallelgzip:1.0.5
  - com.cronutils:cron-utils:9.2.1
  # kord
  - dev.kord:kord-core:0.13.1
  # normally should not need to include these, but still does not work:
  - dev.kord:kord-common:0.13.1
  - dev.kord:kord-rest:0.13.1
  - dev.kord:kord-gateway:0.13.1
eternal oxide
#

get a connection in onEnable, close in onDisable

#

ignore everything else as the driver will handle it

quasi gulch
#

okay so on a reload it doenst close automaticly right and thats the reason i get the locked file error?

eternal oxide
#

correct

#

close in onDisable

quasi gulch
#

Ahh ok finaly understood what i wrote a year ago xd

eternal oxide
#

a reload doesn;t exit the VM so no shutdown hook is called

tardy delta
#

what class exactly

autumn cave
tardy delta
#

i have no clue what that libraries section even does internally

remote swallow
autumn cave
tardy delta
#

is that stuff on maven central?

remote swallow
#

you might need the jvm specific versions

autumn cave
#

What do you mean by jvm specific versions?

remote swallow
#

kord is multiplatform so has multiple different versions, add -jvm to all the group ids

autumn cave
#

Ohh that just might be it!

marsh crest
#

is there a good method of like

#

idk how to explain this but

#

for all players in a world_A

make "ghost" of player
place ghost in world_B
set ghost position to mimic player position and yaw and pitch etc and in world_B instead of world_A

wet breach
#

just fyi, static doesn't get GC'ed

autumn cave
remote swallow
#

unfortunately no

#

would be fun but could open up to all sorts of downloaded malware

autumn cave
#

ok, not a problem for me. Ah I see

shadow night
#

you can do magic and just write your own library loader or something

wet breach
autumn cave
eternal oxide
#

just google, the code is not hard

#

I do it in GroupManger for versions prior to the libraries in plugin.yml

eternal oxide
#

library loading

autumn cave
#

What is 'GroupManager'?

eternal oxide
#

called DependencyManager.checkDependencies(this)

#

reads the plugin.yml libraries entroes and downloads them

wet breach
autumn cave
eternal oxide
#

yeah, takign a 7 year break kinds let people forget

tardy delta
#

i mean i still remember it

wet breach
#

well, I still use it

#

in fact its probably the only permission plugin that I do use

#

lmao

vital sandal
#

infinity recursive :D?

wet breach
#

infinite recursion can't happen

#

a stack exception would be thrown before the JVM would allow infinite recursion to happen

vital sandal
#

well it was initially a boring joke :L

tardy delta
vital sandal
#

I got this from other code and something really weird occur

wet breach
#

I suppose if you were careful to limit the recursion

tardy delta
#

i mean then you could laugh at a segfault or something

wet breach
#

you could technically in a way have infinite recursion

tardy delta
#

or some internal jvm assertion

autumn cave
#

Anyone else get:

Tried to load invalid item: 'Item must not be minecraft:air'

In 1.20.6, is the cause known?

chrome beacon
#

Looks like it's trying to load an item that's air

#

since no other context is provided that's all we can say

autumn cave
vital sandal
#

who tf create a list like this

wet breach
chrome beacon
#

Are you viewing decompiled code

#

or is the code old

wet breach
#

probably neither

#

and easily answerable as well

vital sandal
#

that make sense

wet breach
#

Are you asking about who makes a list without initializing it?

vital sandal
wet breach
#

The difference between initializing a list at the beginning of class and declaring it only

#

is that if you declare and only initialize in a method, then when the class is loaded the list isn't loaded until you need the method. This saves on resources

#

conversely if the list is needed for the entire class it makes sense to initialize the moment the class loads

autumn cave
#

Is there a setting for disabling Downloading ... and Loaded library ... logs by any chance?

vital sandal
#

hmm

cinder abyss
#

Hello, how can I use reflection to access CraftBukkit/NMS classes, and then access their properties/fields, like with an interface (but in interfaces, I can't make fields)

chrome beacon
#

why do it with an interface then?

cinder abyss
chrome beacon
#

??

cinder abyss
#

with this code, I was having some errors

cinder abyss
# chrome beacon ??

with this, if I remember correctly:```java
Class<NmsEnumParticle> clasz = (Class<NmsEnumParticle>) getEnumParticleClass();

@Nullable
public NmsEnumParticle getEnumParticle(NmsEnumParticle particle) throws ClassNotFoundException {
Class<NmsEnumParticle> clasz = (Class<NmsEnumParticle>) getEnumParticleClass();

return Arrays.stream(clasz.getEnumConstants()).filter(enu ->  enu.b().equals(particle.b())).findFirst().orElse(null);

}```
it returns a casting error

chrome beacon
#

send the error

#

?paste

undone axleBOT
cinder abyss
#

for sure

#

let me recreates this code

tardy delta
#

what type is NmsEnumParticle

cinder abyss
tardy delta
#

wont work

#

you cannot simply cast Class<nms stuff> to your class type

chrome beacon
#

wait are you trying to convert nms enum to your enum

#

by casting

#

??

cinder abyss
chrome beacon
#

That's not how casting works ;/

cinder abyss
chrome beacon
#

You can use a switch or if statement

cinder abyss
#

thank you

chrome beacon
#

or if they have the same name

#

you can use that

cinder abyss
#

yeah

glass mauve
vestal moat
#

Hey, a user reported that plugin's libraries have an issue

#

Basically i am using the library loader in plugin.yml and one library isn't being downloaded properly

#

transitive dependencies are not downloaded

#

1.20.4 i think

#

I remember i tested on 1.20.6 before it was fine

wet breach
glass mauve
#

well something everyone should avoid

wet breach
#

sometimes you can't

#

generics have their uses

tardy delta
#

glad you havent touched the mindustry codebase

marsh crest
#

the yt video i found seems to be outdated

twilit coral
pseudo hazel
marsh crest
#

i tried the nms strat but that didn't work either

#

or like i think it didn't

sullen canyon
#

thou the idea is to make it work across servers, not worlds

marsh crest
#

i thought i could just like

#

spawn an entity with that person's skin

#

and just place it where the person is

#

cuz i dont really need nametags or anything i literally just need the skin lol

sullen canyon
#

well yea you could do it with nms

cinder abyss
#

Hello, does anyone has created a nms reflection lib?

alpine urchin
#

@cinder abyss what u tryna do

cinder abyss
#

that works with multiple version, basically not having an import for every single version, but a system that adapt for each version using reflection

shadow night
#

Something like intermediary mappings in fabric?

cinder abyss
shadow night
#

Thought of that before

cinder abyss
#

Like a custom class new NmsPlayer(Location location); that creates a fake player at this location, and in the system, it adapts for each minecraft version

shadow night
#

I thought of having a custom classloader that will let you access nms classes by their intermediary names on all versions

cinder abyss
#

yeah, like that

woeful spire
#

hello, how can i remove the raises of the villagers trades, is there any plugin?they`re demand is too high sometimes

chrome beacon
#

Or are you making a plugin

shadow night
cinder abyss
#

so, does anyone has created a nms reflection lib?

shadow night
chrome beacon
#

^^

cinder abyss
#

I just need a solid structure to begin

chrome beacon
#

Intermidary class loader is probably the best approach if you want to cover a lot of nms

shadow night
chrome beacon
#

yeah you'd want a plugin to convert to intermediary

cinder abyss
chrome beacon
#

yes

#

could probably use the fabric toolchain for that

cinder abyss
shadow night
#

Intermediary approach: convert nms from mojmapped to intermediary, implement classloader to make intermediary load nms classes

cinder abyss
#

I would like : Plugin call my lib -> Lib's Nms Handler -> Redirect to nms' good version class

#

I'll do my research then, thanks

valid burrow
#

whats the best way to let users link actions from my plugins to various other plugins for example NPC's

#

i want to allow them to trigger certain functionalities in any ways they please

cinder abyss
shadow night
#

Make it open source and post the repo link in the thread

cinder abyss
#

it's at a very untested and uncomplete phase, but I'll post it when I'll have the first results

#

actually starting with particles in legacy versions

shadow night
#

If you do the intermediary mapped thing then your tasks would be to write some plugin to remap when compiling and the classloader that will map the intermediary names to their obfuscated names

#

I'm pretty sure intermediary mappings exist for all or most versions, dunno how they are generated tbh

cinder abyss
#

hmm I see

shadow night
cinder abyss
dawn flower
#

hi

#

is it possible to turn similar to latin unicode chars to the latin unicode char?

#

or do i have to make a bigass list

#

i made one but it doesn't cover even 10% and it took me like an hour

eternal oxide
#

what?

#

What is "similar to latin"?

dawn flower
#

for example

#

ᵗ ₜ ⓣ 🅣 🅃 🆃 🇹 ʇ t ᴛ ⒯ 𝗍 𝘁 𝘵 𝙩 𝓉 𝓽 𝕥 𝖙 𝚝 ᖶ ㄒ are all t

#

which can be used to bypass chat filter

#

i tried making a simple program that maps all unicode chars and turns them into an image and compares them to latin and saves them in cache but it isn't that accurate

eternal oxide
#

you could do it simpler. Convert to ASCII, strip all non printable and display

dawn flower
#

i want to allow non ascii as well

eternal oxide
#

you are better off specifying the ranges you will accept as unicode then

#

dump everything outside it

dawn flower
#

at what range do emojis end

eternal oxide
#

1F600 Emoticons 1F64F

#

you could go upto 1FAFF for enojis

lament maple
#
public class ChatListener implements Listener {

    @EventHandler
    public void onChat(AsyncPlayerChatEvent event) {
        String prefix = PrefixManager.getChatPrefix(event.getPlayer());
        event.setFormat(prefix + " &8» &7%1$s &8» &7%2$s");
    }
}

Can someone tell me whats wrong? It doesnt override my chat format.

#

(no err in console)

eternal oxide
#

did you register the listener?

lament maple
eternal oxide
#

Might help 🙂

lament maple
eternal oxide
#

no but you havea couple of issues

#

You are mapping Player objects to a String. Player objects are only valid for the one session. If they relog it's a new Player Object

#

best to just use their UUID

#

Player#getUniqueId()

fluid cypress
#

can someone explain this to me?

val player = Bukkit.getOfflinePlayer(purchaser)
val name = player.name
if (name != null) {
    val z = name
    //  ^? z is String?, should be String
} else {
    val z = name
    //  ^? z is String?, should be null
}

why does type narrowing sometimes work and sometimes doesnt? i never experienced this in another language. at first i assumed it was bc of getters and setters, but it still doesnt work even when extracting the value to a new variable

eternal oxide
#

name will always be null or a String

#

looks like Kotlin is casting null to a String

#

which it can do

#

you can cast null to anything

sterile axle
#

You check name isn't null, but the type of name is still String?. Performing the if check does not change that

#

You can make it String by asserting the type as non-nullable. val z = name!

#

name can be a nullable type while not having the value null

dawn flower
#

why does kotlin look like javascript

sterile axle
#

it doesn't really

lament maple
blazing ocean
lament maple
#

wait nvm

fluid cypress
#

bc of val

dawn flower
#

it is

#

it's var in js

fluid cypress
#

it would be if it was var

dawn flower
#

not val

blazing ocean
dawn flower
#

1 character away from being js

sterile axle
#

ok putting aside the dumbfuckery for a moment, did that answer your question

blazing ocean
fluid cypress
#

so it seems like it is indeed narrowing the type

sterile axle
#

oh is it double bang

dawn flower
blazing ocean
fluid cypress
#

just implicitly

sterile axle
#

uhhhh, i mean. i dunno then tbh

fluid cypress
#

which is weird

sterile axle
#

i'll let a kotlin god answer

#

they're bound to be around

blazing ocean
fluid cypress
#

and what does Type! mean? i saw that a few times

blazing ocean
remote swallow
fluid cypress
#

the equivalent to @NotNull in java?

blazing ocean
blazing ocean
fluid cypress
#

i see

#

so, String! being a java String

blazing ocean
#

yes

fluid cypress
#

and not a kotlin String

blazing ocean
#

although strings are the same

fluid cypress
#

then i guess String! doesnt have the kotlin specific methods

blazing ocean
#

primitives are special here because they exist in both langs and can interop iirc

blazing ocean
fluid cypress
#

mmm

cinder abyss
#

Hello, should I destroy my pc? Or how can I solve that?```java
public NmsCraftPlayer getCraftPlayer(Player player) throws ClassNotFoundException {
return (NmsCraftPlayer) Class.forName(craftBukkit + ".entity.CraftPlayer").cast(player);
}

public interface NmsCraftPlayer {
Object getHandle();
}```

java.lang.ClassCastException: org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer cannot be cast to io.github.paulem.reflection.interfaces.NmsCraftPlayer```
remote swallow
#

once again you cannot cast an nms class to your class

#

that is not how it works

cinder abyss
remote swallow
#

what are you trying to do first

#

thisis a giant xy

cinder abyss
#

I just want some type completion instead of Object

remote swallow
#

create modules for it then

cinder abyss
remote swallow
#

Hi there! Today I’m going to explain how to setup a multi-module project using maven to support different NMS versions. Important notes about this tutorial: Every step will have detailled screenshots using IntelliJ. I explicitly chose not to include everything as copy/pastable source code, but normal screenshots (you can click on them to show th...

remote swallow
#

if you want type completion, dont use reflection and create modules

#

you wont get type completion easily with reflection

cinder abyss
#

so I'll use an handler for every single class of nms

remote swallow
#

its a lot easier to just make modules

#

as soon as theres loads of breaking nms changes you have to version handle your reflection anyway

cinder abyss
#

I prefer using reflection

remote swallow
#

do you really want to support all of them?

cinder abyss
#

it's a lib

#

not a plugin

eternal night
#

None of your reflection based code will work from 1.8 to 1.20.6

remote swallow
#

^^

eternal night
#

You'll be doing modules but now with reflection, the worst of both worlds

remote swallow
#

having modules will make updating to future versions a lot easier because theres a hell of a lot of breaking nms changes soon

dawn flower
#

how do i turn text to an image

eternal oxide
#

what kind of image?

dawn flower
#

just an image

dawn flower
#

like this

#

thanks

acoustic pendant
#

I'm trying to delete a world but when restarting or every 5 min when trying to save the world (the server itself)

#

that error is happening

eternal oxide
#

you didn;t unload the world first

valid burrow
#

how does one retrieve a big int from a yml file

#

do i just get it as a string?

chrome beacon
#

yeah

tardy delta
#

theres a BigInt constructor to go from a string

valid burrow
#

yh ik

dawn flower
#

is the best way to filter out fake whitespaces is rendering the unicode then checking if the image is empty?

#

(i have a dataset of all unicodes in images ranging from 0 to 60k so it'll be fast)

fluid cypress
#

if there is an async task running, will spigot wait for it to end before disabling the plugin on server shutdown?

#

basically a scheduler.runTaskAsynchronously on onDisable

dawn flower
#

all your tasks get cancelled when the plugin gets disabled

#

i believe if you use a Thread it doesn't

tardy delta
#

^

fluid cypress
#

mmm

#

so a java thread

tardy delta
#

well i mean you gotta block it

dawn flower
#

yeah

tardy delta
#

a la joining it

fluid cypress
#

then runTaskAsynchronously is not the best option for database insertions?

hazy parrot
#

Why not just block on disable

#

No reason to do it async

dawn flower
#

why would you want to access a database if the plugin gets disabled

fluid cypress
#

bc im starting the task on the insert method

#

and i would have to refactor all insertions

#

to use a task every time, except onDisable

hazy parrot
#

Refactor time

dawn flower
#

you can opt for a normal java thread or just refractor

fluid cypress
#

i guess ill use a java thread

#

should i start a new one on each insertion? should i reuse the same with a queue?

dawn flower
#

depends

fluid cypress
#

im not a java developer outside of minecraft

tardy delta
#

please use a completable future or smth then (if you intend to use it async too), if youre only planning to block the thread use an executor service

fluid cypress
#

and im using kotlin btw, not java

tardy delta
#

no please dont start a new thread every time

#

look into coroutines

#

those are lightweight tasks that run in parallel or smth

fluid cypress
#

cool

#

so they wont be stopped or cancelled or something on sv shutdown, right?

tardy delta
#

uhhh

#

i dont know enough of them

#

goksi probably does

#

@hazy parrot help me here mate

acoustic pendant
#

that's my method to delete the world

#
    public static void delete(File file) {
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            if (files == null)
                return;
            for (File child : files) {
                delete(child);
            }
        }
        file.delete();
    }```
dawn flower
#

cant u just delete the directory directly

river oracle
#

yeah

acoustic pendant
#

yea probably

river oracle
#

you love your C# huh

acoustic pendant
#

however i don't think that would solve the problem

dawn flower
#

still do it, also whats ur problem

dawn flower
#

i believe bukkit has a list of worlds during runtime

acoustic pendant
#

it has

#

loaded worlds

dawn flower
#

no like

#

saved worlds or smth

acoustic pendant
#

uhm

#

I don't know

dawn flower
#

one sec

#

look in RestartCommand.class

#

and look at how it's saving, there might be something that you missed

acoustic pendant
#

RestartCommand?

hazy parrot
#

Literally same as with java thread(if daemon thread )

#

You program will not wait for coroutine to finish

dawn flower
acoustic pendant
dawn flower
#

yeah ik

#

look into it

fluid cypress
acoustic pendant
#

let me chekc

fluid cypress
#

what should i use instead?

hazy parrot
#

You generally shouldn't call async operations on disable

#

No reason for it to be async

chrome beacon
#

^^

hazy parrot
#

As program will shutdown anyway

chrome beacon
#

Run the database query sync in on disable

acoustic pendant
fluid cypress
#

ok, but then you could create a race condition in case the db operation takes too long

dawn flower
#

add nms to your libs and look using intellij or eclipse

#

wait is it from nms

acoustic pendant
#

uuuh

fluid cypress
#

even if it wasnt called from onDisable, the server could shutdown before the operation is completely done, right?

acoustic pendant
#

I don't have buildtools installed

hazy parrot
dawn flower
#

Iterator iterator = this.getAllLevels().iterator();

#

in Server.class

acoustic pendant
#

oh

fluid cypress
#

then it will always wait for coroutines, except when calling onDisable?

#

i dont get it

dawn flower
#

MinecraftServer*

acoustic pendant
#

do i need to use nms for removing it from levels?

dawn flower
#

no

acoustic pendant
#

I mean, i think that using unloadWorld should work but not sure now

fluid cypress
#

then, how can i make sure no db operations will be cancelled

chrome beacon
#

You just wait for all routines to finish

#

block the thread in onDisable

dawn flower
#

you got 2 options, first one is to remove it when the server isn't running (safest) and the second one is to remove it using reflection

#

this is the field with the levels (worlds) private Map<ResourceKey<Level>, ServerLevel> levels; in Server.class

fluid cypress
#

but it makes sense, ill do that

chrome beacon
#

You need to make it wait

#

for them

dawn flower
#

wait i fucked up

fluid cypress
#

ok cool ill do that

hazy parrot
#

As I said, call join() on Job

acoustic pendant
acoustic pendant
#

ok

dawn flower
#

is MinecraftServer in the Server tree

acoustic pendant
#

I mean, i guess?

dawn flower
#

uh unload already removes it

#

so that's confusing

acoustic pendant
#

yeah, that's what i'm saying

#

if I unload it that shoudn't be happening

chrome beacon
#

I believe the file lock can still remain after unload

dawn flower
#

try manually deleting that

#

if u can

acoustic pendant
#

you can't delete session.lock if the server is running right?

#

and uid.dat

dawn flower
#

what are you trying to do btw

#

?xy

undone axleBOT
acoustic pendant
#

delete the world

dawn flower
#

why

acoustic pendant
#

it's directory

dawn flower
#

do you NEED to do it while the server is online

acoustic pendant
#

because i'm creating a tempworld for a game

acoustic pendant
#

just delete the world so it doesn't create 100 worlds yk

dawn flower
#

then delete it when the server stops

acoustic pendant
#

yea yea

dawn flower
#

or create one world

#

or like 10 worlds

#

and change the loaded chunks to change the current minigame

acoustic pendant
#

I was deleting the world when the match ended

dawn flower
#

you can create a new world for each minigame

acoustic pendant
#

i'll have to look into it

acoustic pendant
dawn flower
#

no like

#

static worlds

#

that never gets deleted

acoustic pendant
#

wdym

#

i need to restart them

dawn flower
#

reload the chunks

#

with the old data

acoustic pendant
#

and making an array list of the placed block it's not the best way i believe

dawn flower
#

that isn't a good way

#

it's the only way

acoustic pendant
acoustic pendant
#

no

dawn flower
#

dawg

acoustic pendant
#

that can have many problems

#

like if the server crashes

dawn flower
#

what do u think happens internally when u reput a chunk

dawn flower
acoustic pendant
#

uh yea

acoustic pendant
dawn flower
#

make it reload all maps in onEnable

chrome beacon
#

Just disable the map saving?

dawn flower
#

u can do that?

acoustic pendant
#

but there can be more than one map every time the server is on

acoustic pendant
#

its that posible to do if the server is crashing

dawn flower
#

how big is the map

acoustic pendant
#

all the blocks placed and broken

#

Per game

chrome beacon
#

Set to false

dawn flower
#

or that

acoustic pendant
#

i'm doing that already

chrome beacon
#

Then if it crashes the blocks will be gone

acoustic pendant
#

but if I unload the chunks and then load the chunks again will it restore?

acoustic pendant
river oracle
#

the computer memory of the world is not the thing that needs to be saved its updated in real time

#

there is some level of chunks being cached before the IO barrier iirc

worthy yarrow
hasty obsidian
#

mb thanks

quaint mantle
#

Please give me some ideas for plugin? I'm begginer and want something hard but not too hard

#

I want to make a system or so

quaint mantle
#

It is item in hand that gives you more space? or?

worthy yarrow
#

Try to do a toggle inventory on right click or something

quaint mantle
#

I did diabetes plugin, for my gf whos suffer from diabetes type2, did it nice 🙂 with insulin injectors, sugar falls, sickness

quaint mantle
worthy yarrow
#

You asked what does it do

quaint mantle
worthy yarrow
#

No worries haha

quaint mantle
#

Give me something harder pleasee

worthy yarrow
#

Ask gpt or something haha

drowsy helm
#

How about a bot which generates ideas so we dont have to

marsh crest
#

how could i basically check if a player threw a snowball and give that ball back to them

quaint mantle
quaint mantle
fluid cypress
# hazy parrot As I said, call `join()` on `Job`

i got java.lang.NoClassDefFoundError: kotlin/coroutines/jvm/internal/SuspendLambda while disabling the plugin
this is basically the db code

object Database {
    val job = Job()
    val coroutineScope = CoroutineScope(Dispatchers.IO + job)

    fun insert(stuff) {
        coroutineScope.launch {
            // db insertion
        }
    }

    fun waitToComplete() {
        runBlocking {
            job.complete()
            job.join()
        }
    }
}

then i call waitToComplete from onDisable

marsh crest
#

i have this but if i do event.getEntity().getShooter() idk what to do with that

quaint mantle
#

are you all coding in kotlin?

drowsy helm
#

If it’s a snowball, get the person who throws it

#

Done

marsh crest
#

thats

#

thats where i am stuck

quaint mantle
drowsy helm
#

if event.getEntity() instanceof Snowball

#

Then Projectile has a get shooter method

quaint mantle
#

Understood

#

Ty

worthy yarrow
#

Some here do, most that I’ve seen do not

marsh crest
#

how do i check if everyone is a spectator in a world except for one person

#

i assume 2 for loops

drowsy helm
#

Only need one

marsh crest
#

i got it dw sorry lol

chrome beacon
fluid cypress
#

and idk what else do i have to do besides adding implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1") to the dependencies section

chrome beacon
#

That won't provide it at runtime by default

#

How are you loading it

fluid cypress
#

what dou you mean loading it

#

this is the entire build.gradle.kts

plugins {
    kotlin("jvm") version "2.0.0-RC3"
    kotlin("plugin.serialization") version "2.0.0-RC3"
    id("com.github.johnrengelman.shadow") version "8.1.1"
}

version = "0.1.0-SNAPSHOT"

java {
    toolchain.languageVersion.set(JavaLanguageVersion.of(17))
}

tasks.jar {
    from()
}

tasks.shadowJar {
    exec {
        commandLine("./scripts/pre.sh")
    }

    archiveFileName.set("${project.name}-${project.version}.jar")

    doLast {
        exec {
            commandLine("./scripts/post.sh")
        }
    }
}

repositories {
    mavenCentral()
    maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots")
    maven("https://jitpack.io")
    maven("https://maven.enginehub.org/repo")
    maven("https://repo.codemc.io/repository/maven-public/")
    maven("https://repo.onarandombox.com/content/groups/public")
}

dependencies {
    implementation(kotlin("stdlib"))
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.0-RC")
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.0-RC")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1")
    implementation("org.jetbrains.exposed:exposed-core:0.50.1")
    implementation("org.jetbrains.exposed:exposed-jdbc:0.50.1")
    implementation("org.jetbrains.exposed:exposed-java-time:0.50.1")
    compileOnly("org.spigotmc:spigot-api:1.20.1-R0.1-SNAPSHOT")
    compileOnly("com.github.MilkBowl:VaultAPI:1.7.1")
    compileOnly("com.sk89q.worldguard:worldguard-bukkit:7.1.0-SNAPSHOT")
    compileOnly("org.maxgamer:QuickShop:5.1.2.5-SNAPSHOT")
    compileOnly("com.github.Zrips:Jobs:5.2.2.3")
}
chrome beacon
#

Code that doesn't exist cannot run

#

So it needs to be provided

#

Looking at that build file you're most likely shading

fluid cypress
#

yea, and the shadow plugin handles that, right?

chrome beacon
#

You aren't relocating though

#

Which is recommended to prevent conflicts with other plugins

fluid cypress
#

what is that, why do i need to do that, and how do i do that

#

mmm so if i make two plugins like that, without realocating

#

they will conflict with each other

#

?

chrome beacon
#

When a class is loaded twice from two different jars the jvm won't know what to do

#

To prevent this you relocate the dependency (change the package) to be inside of your plugins package

#

Making it unique

modern current
fluid cypress
#

i see

#

and how do i do that

chrome beacon
#

The shadowjar wiki should tell you

#

I mainly use maven so 🤷‍♂️

modern current
chrome beacon
#

Also you should look in to switching to a shadowjar fork

fluid cypress
#

ok, ill check that, that error happened just once tho

#

seems like a race condition

#

i guess i can do jar tf plugin.jar to check if there is that class?

chrome beacon
fluid cypress
#

SuspendLambda

fluid cypress
chrome beacon
#

But still do relocate

fluid cypress
#
kotlin/coroutines/jvm/internal/RestrictedSuspendLambda.class
kotlin/coroutines/jvm/internal/SuspendLambda.class
#

the class is being added so

#

idk

chrome beacon
#

Relocate and try again

fluid cypress
#

seems like some builds just fail for some reason, it already happened before i think

chrome beacon
#

If it doesn't help send the entire stacktrace

fluid cypress
#

will do

#

tomorrow tho

river oracle
#

it'll reduce your jar size and will just make life easier with not needing to relocate and all

#

if you use bukkit's library loader ensure you switch implementation to compileOnly

night parrot
#

how do I fix this

#

name: SkyblockPlugin
version: 1.0
main: com.EdwardNewgate.skyblock.SkyblockPlugin
api-version: 1.16
description: A plugin version made by Edward_Newgate2 for AsteriaX skyblock.
author: EdwardNewgate
commands:
frobot:
description: FarmRobot commands
usage: /<command> <give|reload>
aliases: [farmrobot]

remote swallow
#

remove java.

#

the package is com.EdwardNewgate.skyblock.SkyblockPlugin

night parrot
rough ibex
#

Isn't it src/main/java/

#

or, rather, should be

glass mauve
#

also resources folder not marked as resource

#

looks like a broken project

kind hatch
night parrot
night parrot
kind hatch
#

Yes, the project structure should follow this
/src/main/java
/src/main/resources

glass mauve
night parrot
#

damn fr, ily guys

#

C:\Users\Anamol_Gamer\Documents\skyblockplugin\src\main\java\com\EdwardNewgate\skyblock\SkyblockPlugin.java:9:55
java: constructor CropReplantListener in class com.EdwardNewgate.skyblock.CropReplantListener cannot be applied to given types;
required: com.EdwardNewgate.skyblock.SkyblockPlugin
found: no arguments
reason: actual and formal argument lists differ in length

#

how I fix this

kind hatch
#

Sounds like you forgot to pass in your arguments.

night parrot
kind hatch
#

Show code

night parrot
kind hatch
#

Yea, there it is.

night parrot
kind hatch
#

You put what the constructor wants. 🤔

glad prawn
#

he know what to put in FarmRobotCommand but not that listener

oblique oyster
#

💀

glad prawn
#

oh no 💀

hollow summit
#

is proguard easily deobfuscatable ?

#

don't have much experience obfuscating my code

barren peak
#

I have a bukkitrunnable that is teleporting a fallingblock 0.5 blocks in the x direction every 0.5 seconds, however even though the runnable is running exactly every 0.5 seconds (10 ticks), the block moves in chunks at a time (EX: it waits 1 second and moves twice or waits 1.5 seconds and moves 3 times all at once). This isn't due to lag, as there are consistent results every single time and when sending messages to the player they get sent exactly every 10 ticks. When I tried spawning a new fallingblock at the target location every 0.5 seconds, it works perfectly, however, when teleporting, it doesn't work. Here is the code to teleport it:
Location loc = fallingBlock.getLocation().clone();
...and every 10 ticks (BukkitRunnable)...
{
fallingblock.teleport(loc.add(0.5, 0, 0));
}
does anyone know why this happens?

EDIT: A much nicer laid out version can be found here:
https://www.spigotmc.org/threads/teleportation-of-entities-is-inconsistent.648550/

any help is appreciated

eternal oxide
#

Start by not using an external variable for loc. get the location from the ent modify it and teleport. No need to clone.

#

do it all in your runnable so you know you are not messing with it elsewhere

worthy yarrow
#

Hey elgarl!

eternal oxide
#

Hi

worthy yarrow
#

Question

#
public interface Transaction {

    void abstractTransaction(Player player, int amount);

    void serializeTransaction();

    void saveTransaction();
}

exp / other currency conversion, I'm not sure what else to handle with transactions, got ideas?

drowsy helm
#

Wot

worthy yarrow
#

idk what to handle lol

#

I wanna log all conversion transactions

blazing ocean
drowsy helm
#

Diamond block to cat spawn egg conversion rate

worthy yarrow
#

There are also like 4 different conversions

#

Haha I'm cooked idk why I'm trying to api it, literally just need 3 functions

dry hazel
#

you don't need to suffix every method with Transaction, you're already in an appropriately named interface

#

no idea what the abstract means

worthy yarrow
#

I don't even need the interface, I was just being dumb

#

abstract was literally because I thought I was going to handle different kinds of transactions

#

(in the interface kek)

twilit coral
# worthy yarrow Thank you sir

idk what exactly you're going to do, but it appears like your transaction is a service, you could have it serialize the transactions using your method in the interface to the database layer

small valve
#

Question;

Let's say I want to send a plugin message from the proxy, let's say

"%rank% %player% >> Some Message"

I want to wait for the server to respond with the parsed placeholder API messages. Is this possible?

i.e. Pseudocode:

Bungee

requestFromServers(someText).whenReady((parsedText) -> {
  // doStuff
});
eternal oxide
#

yes and no

#

you can only send/receive via teh channels so in a Listener

small valve
drowsy helm
#

I mean you could with some sort of handshake but it would be a pain in the ass

eternal oxide
#

you would need to store the request and in teh incoming channel check for the response

#

use an identifier to indicate request/response matching

echo basalt
#

Reactive programming in this case is the best option

eternal oxide
#

once you get a response throw in a consumer you stored

echo basalt
#

Guy wants completablefutures

#

And a Map<UUID, CompletableFuture<MyResponse>> :)

small valve
#

Another question; how do I determine which server the plugin emssage was sent from?

echo basalt
#

You need to encode that in your byte[]

drowsy helm
#

whats the end goal withi this?

small valve
#

I can't use event.getSocketAddress()?

echo basalt
#

I mean

#

If you're already sending byte arrays I figured you might have a packet system

small valve
# drowsy helm whats the end goal withi this?

I want to like... send a string over to a specified server for parsing so that it can be parsed with vault/placeholder api.

I'm making a cross-server chat sync plugin and need stuff for ranks and stuff. SO I need to differentiate joins/leaves/server switches/chat messages etc

drowsy helm
#

why not listen from the server's side then send it to the proxy

#

then the proxy propagates it

#

instead of pingponging it back and forth

small valve
#

Plugin is already fully complete for the latter option

#

Alright I get the gist of what i need to do

wraith delta
umbral ridge
valid burrow
#

Asked this yesterday but didnt get a response

#

How would yall allow users to link your plugins funtionalities to other plugins like citizens so they could for example open a specific GUI through an NPC

pseudo hazel
#

like bukkit does probably

valid burrow
#

elaborate

pseudo hazel
#

are you the plugin that has the npcs?

#

or the other way around

drowsy helm
#

so like an intermediary api?

valid burrow
#

i just want to allow users to use other plugins to open funtionalities in my plugin

#

i know some of them use commands for that

#

and just open their GUIs on commands

drowsy helm
#

thats what an api is for

valid burrow
#

but i dont want users to be able to open the GUIs by themselfss

valid burrow
pseudo hazel
#

you could still use commands

valid burrow
#

and how would i check if the user executed the command themselves or if it was through an NPC?

drowsy helm
#

what

#

no you make the api

#

they handle the logic

valid burrow
#

why would i make an api. I doubt plugins like citizens are gonna hook into my plugin

#

let me rephrase the issue

#

I have a plugin that has guis that need to be opend for some tasks

#

currently i have chests admins could place to open these guis

#

but i want to allow the to link the GUI to what ever they please

drowsy helm
#

most versatile option is just a command impl that takes a player arg

valid burrow
#

alr

azure harbor
#

Hi everyone, I wanted to know if you know a system to show a player a high resolution image, I managed to do everything with the inventories but it's not high resolution. I saw that somehow it is possible to do it without inserting it into the RP, perhaps with an image URL or in the plugin folder

quasi gulch
#

You mean with a Resource Pack?

fair rock
#

"without inserting it into the RP"

quasi gulch
#

But showing images without a Resource Pack just isnt possible

#

exept for like maps

valid burrow
#

yea so it is possible xd

#

using maps is not a new concept

wet breach
#

could use an Armorstand or display entities

azure harbor
quasi gulch
wet breach
#

well, I don't know about display entities as I haven't messed with them yet

quasi gulch
drowsy helm
#

would be hard to do high texture with that method

#

and super laggy

#

what do you consider "high res" for mc anyway?

azure harbor
#

1000*1000

drowsy helm
#

should be able to do that with an inventory

quasi gulch
#

You would need like 15 maps for 1920px in witdh so not really much

drowsy helm
#

do you want a screen overlay or world location

quasi gulch
#

doable

quaint mantle
#

Back again with this error, could this be a 1.8.x thing?

chrome beacon
#

I mean the first thing you would test is with a vanilla client

quaint mantle
#

I'm pretty certain it's an issue with the plugin itself

#

Well, not the entire plugin, just a specific part of the plugin

chrome beacon
#

so I take it you haven't tried it

#

do that

quaint mantle
#

On it

#

Just checked, it happens with the vanilla client as well

chrome beacon
#

oh well it's trying to read a packet with too little data in it

#

You'll have to figure out what exactly is happening

quaint mantle
#

?1.8

undone axleBOT
azure harbor
echo basalt
#

Yeah, but you'd need to do some picky stuff

#

Itemframes are locked to the nearest block. You can't put one in the middle of the air

young knoll
#

Sadly maps also have limited colors

echo basalt
#

You can estimate the player's FOV a little bit and wrap the image around the player's field of view, at a certain distance so it looks high res

azure harbor
#

I don't think the one I saw is a map, because if I go to 3rd person the image remains, perhaps with the titles, but I can't find the image inside the RP

echo basalt
#

Hm

#

Tiny pixels and a lot of praying

#

that'll lag the shit out of the client though

young knoll
#

Text display on the head?

#

Can do a ton of little pixels with that

echo basalt
#

I'm thinkingj

#

You can apply a projection to player skull items

young knoll
#

Do you happen to have a video of what you saw

#

Or where you saw it

fair rock
echo basalt
#

Skin data

#

Perspective not projection but whatever

#

You know how people make 2d heads?

#

They're less laggy

fair rock
young knoll
#

I'm pretty sure what they saw is just a hardcoded imagine in the rp and then font magic

#

But I don't remember how to open the RP -_-

turbid flame
#

How to grant permission to player?

fair rock
turbid flame
fair rock
#

There is only the /op command

#

Minecraft dont have groups/permission handling

turbid flame
#

Not even using reflection?

#

I mean

#

Yea i have groups etc. defined in the backend. When player join playable server like lobby, prison etc backend provide permission set for this player that match this server

#

I need to set this permission set to play so if i invoke .hasPermission it will return coresponding output

fair rock
#

Oh you mean with code, bro asked "pure minecraft" like without plugins im sorry xd

young knoll
#

Add a permission attachment to the player

#

Or use an api like vault

turbid flame
turbid flame
#

One more question how does this boolean value that is set to PermissionAtachment work?

#

What is the diffrence if set to true or false?

young knoll
#

false explicitly denies the permission

#

true allows it

turbid flame
young knoll
#

yes

turbid flame
#

So i can grant player every permission available on the server and then modify this boolean value?

quaint mantle
turbid flame
smoky anchor
blazing ocean
# echo basalt You know how people make 2d heads?

noxesium and per-pixel rendering. the last one is shitty on the client as it has to render lots of bitmaps at once, which, at a large scale gets really laggy. i'd recommend to stick to noxesium tho

shadow night
#

Forge users are crying rn

blazing ocean
#

allows you to render player heads with translatables

blazing ocean
#

i guess one could make a forge port but you'll have to just keep it synced with upstream

#

nobody really uses forge for 1.20+ anymore tho

shadow night
shadow night
blazing ocean
#

noxcrew writes good code sooo

blazing ocean
shadow night
#

Forge fork that literally replaced forge

blazing ocean
#

sounds like fabric but worse

shadow night
#

It was basically like: forge owner was bad guy, people didn't like him, people took over discord server, forked forge, continued living

blazing ocean
#

i have probably just offended so many people with that statement lmao

shadow night
# blazing ocean sounds like fabric but worse

Well the idea of fabric is the exact opposite from forge
Fabric: make everything yourself, you only get a few small APIs and everything else needs you to mixin
Forge: We give you an extremely big API so you don't have to change any of the games code, for better mod compat (back in the jar modding days shit basically)

cinder abyss
shadow night
#

The only incompatibility in forge I see is optifine

blazing ocean
cinder abyss
shadow night
cinder abyss
quiet ice
#

not after mixins were formally added to forge

shadow night
#

Nobody in their mind uses optifine after 1.12.2, and on 1.12.2 and before it was fine

quiet ice
#

Optifine won't be alive for too long on older versions; people have started to replace it with other mods

quiet ice
#

Angelica being one of these replacements

cinder abyss
#

and it's not even been updated to 1.20.5 and 1.20.6 💀

#

optifine is now : dead

shadow night
#

does the InventoryClickEvent not tell me anything about who that player is who clicked

quiet ice
#

tbh, noone in their right mind would port their mod to 1.20.5

cinder abyss
slender elbow
#

getWhoLetTheDogsOut()

drifting nova
#

How do I change the title of an inventory while it's open?

barren peak
wet breach
#

o.O

wet breach
barren peak
#

also nothing else modifies its location

wet breach
barren peak
#

I can also attach a vid to the thread to show whats happening if that helps

wet breach
#

teleporting and spawning are two different things and have different priorities

#

same is even true when a player teleports

#

not everything that happens in the server happens exactly on time every time

barren peak
wet breach
#

occasionally the server will skip ticks

wet breach
barren peak
barren peak
wet breach
#

seems you believe you have a problem when there is none

wet breach
#

they are merely suggestions to the server when they want to run