#help-development
1 messages · Page 162 of 1
if I'm absent for a single class this year my degree is gone
lol what
perks of being absent for months at a time
i can just not go to databases class and nobody cares
i aint understanding anything of what that guy says atleast lol
teacher is talking about big data and mongodb
20 theory classes and 0 practical classes
hmm yye kinda same here
we had 6 blocks of 3 hours each
next week is sql
where we had to write a fucking document
except all of them were the same
Big data - it is the concept of storing tons of data for analyzing it
Data warehouse - it's just a huge database cluster
Data mining - it is gathering data for Big Data that is stored on the Data Warehouse
ok now write 6 more
i should learn my lesson lol
we learned sql last year so we're gonna learn sql this year again
all you do on a programming course is learn how to make a calculator in 4 different languages across 4 years
regex is easier than sql change my mind
mmh depends
also one thing that came with years of experience
is the shame that goes on every time someone asks what I do for a living
like
"Yeah uh... I'm basically a minecraft server developer"
then they start thinking I'm scamming their kids
Then they ask how much I make and it's like 3x their wage lmao
mye people dont like the word minecraft
perks of living on a country where the minimum and average wage is like 5$/hour
I say I'm a game developer
and people reply "what do you do, really"
and I'm like...
"I make content for video games"
it just sounds so fuckin bland
it's like being a cashier
and saying
"I scan bar codes all day"
"and take money from people's hands and put it in a box"
true lol
except with cashiers people actually understand what's going on
with development people don't expect me to take 4 hours to synchronize a GUI with a database
or spending 3 hours to figure out why theres a heisenbug in my code
that time I wasted 12 hours debugging client-sided items because the wiki.vg format didn't correspond to NMS and I didn't know that
only had to debug all fields on the packet 👍
i got my minecraft gui to sync realtime to a web server using javascript and redis mongodb
I'm thinking on grabbing my image board system and making a web engine
betterdiscord plugins was fun
or just using gecko
and allow you to have a web browser
you click, a message appears on chat
you click that message and just start typing in chat
and it types on the keyboard too
like
[KEYBOARD] where you click
and it suggests a / command and anything you type after will be sent as a packet above 1.13
so it looks like you're typing /www.google.com
🤔
then it pulls up google
this sounds more possible than it should be
not discord related, its betterdiscord
allows u to modify the way discord works
but u can get banned so i stopped
dunno what that is
yeah i made like realtime translators for incoming messages and outgoing
so you can type in whatever language at the same speed
probably the only project i ever finished
is there a way to create a new Custom Entity with reflection I mean by extending the entity's class and then overriding all of its methods?
wait did u test this btw
It's just a cleaned up version of my tested gun code
gun code just looks like this
ight cool thanks
I talk about NMS classes. Is there a way to make version support with reflection? Not needing to make a new class for every version
ehh not really no
you could modify bytecode but it's too hacky
yeah ik
I use bytecode modifying mainly for Minecraft Mods
I'm asking because I saw some thread about someone saying that it's possible to modify the package address at runtime and making it version support like reflection
Hi, you know why i can set a lore?
public static ItemStack createItem(Material material, int amount, String displayName, List<String> lore) {
ItemStack itemStack = new ItemStack(material, amount);
ItemMeta itemMeta = itemStack.getItemMeta();
itemMeta.setDisplayName(displayName);
itemMeta.setLore(lore);
itemStack.setItemMeta(itemMeta);
return itemStack;
}
take a string varargs and wrap that with Arrays.asList in createItem method
it expects a list now
Okay thx!
if the garbage collector worked properly 90% of bukkit code would be gone
heh?
it's all garbage
ah now i understand lmfao
Bukkit is like a sub language for NMS
Like that?
Whatever createItem(..., String... lore) { meta.setLore(Arrays.asList(lore)) }
but he uses variable List<String>
no reason to create an arraylist lol
public static ItemStack createItem(Material material, int amount, String displayName, String... lore) {
ItemStack itemStack = new ItemStack(material, amount);
ItemMeta itemMeta = itemStack.getItemMeta();
itemMeta.setDisplayName(displayName);
itemMeta.setLore(Arrays.asList(lore));
itemStack.setItemMeta(itemMeta);
return itemStack;
}```
how much antialiasing does your ide have holy shit
Thanks but
At some point yeah but if you want to put a list in the String... lore variable it's not gonna work. I think the best is to have two methods one with String... lore and one List<String>. There is solution for the String... lore not taking a list by converting the list into an array but this will create another new list
import Arrays class
remove the last dot
Yes thx x)
or you can import all the static methods by adding "*" after the dot and adding static after the import keyword.
by importing static you're not gonna need to type the class name
just type directly the method
you're welcome
ok thanks for your help
mye he has to know
new ItemStack(material, 5)
when you're creating the ItemStack you can use the other constructor which takes int amount parameter
or set the amount of itemstack variable
then take an argument in ya method?
itemstack.setAmount(int amount)
what
make sure to catch exception
int number;
try {
// try to execute this code
number = Integer.parseInt(args[x]);
} catch (NumberFormatException e) {
// the player did not enter a number so an exception is thrown, we handle it here
player.sendMessage("Please enter a valid number");
return true;
}```
@quaint mantle
what do you mean by this?
suggested that to him
i found better solution
public void cringe (List<String> lore) {
List.of(lore);
}
public void cringe (String... lore) {
List.of(lore);
}
man probably using java 8
I do
java 17 best
#Java8CodersLivesDontMatterSoSwitchOverToNewJDK
only those stupid preview featurres suck
I use Java 8 for Programming
Integer int = args[2] is not valid you need to convert it through Integer.parseInt(args[x])
yu cannot assign a string to an int
try {
int amount = Integer.parseInt(args[2]);
} catch (NumberFormatException ex) {}
for the List<String> lore why you're using List.of(lore) you already have a list
Omg
List.of(List.of(List.of()))
it's getting erased later
compiler will fix anyways
but still
same with String... lore converting list to array and then converting the array to list
guy blames me for slower but a lot wider solution
I mean doing List.of(lore) when the lore is already a List is just useless
Yeah but if you don't know if you would get varargs or list it's better
independent from value you gave
yeah but var args is an array and when you put an array it will execute the other method which takes an array
true if parameter
i think i realized the only way is parameter
so my solution is trash
woke up
finally
List.of(Collection) isnt a thing its copyOf then
then it will convert it to List here everything is good but I just say that the other method which takes only a List doesn't need to be converted to another List
I mean you can't make a method which eats both varargs and list in the same time
that's true
ImmutableList.of
so my solution is bad
List::copyOf just calls ImmutableCollections::listCopy under the hood as of now (hence immutability and a shallow copy)
Immutable list was a list which cannot be edited right?
yes
does this mean that the Immutable list takes less memory?
cringe(null, Lore lines)
it will work with some checks but I still think it's better just to have two methods one which takes a String... and one which a List<String>
the worst solution ever
yea
i'm just going to shitcode part
its memory footprint is just as big as a normal list in principle
you have an additional array
anyways gonna be garbage collected
yeah gc is good
I'm one of guys who wants to have super optimized code
especially if it isnt the serial gc
You don't need to worry about this
yes but you'd rather care about scalability then
Nobody uses command 50 times in one millisecond
i saw my teacher calling System.gc manually in some code 🤔
like time and space complexity O(expression)
gui application
optimize this
someone can do this via hack client xd
oh god
shes doing more crazy stuff
well i used System.gc in my java courses
crazy woman
to show how to get finalized objects finalize() to run before program stops
dang
where sound of dying cat
finalize() is deprecated
ik
its subject for removal
yeah
why would you use System.gc?
only saw @Deprecated(since="9")
systems with limited resources kindercrowd
where forRemoval=true
to gc my objects so i can see finalize() actaully runs
hopefully its an old algorithm which blocks other threads
probably was coding on java 8
you?
ah
so now it is
only 1024 objects lol
Can you even catch oom
why not
I mean
catch(OutOfMemoryError e) { Runtime.getRuntime().halt() } hehe
The JVM shuts down when it’s encountered, no?
Ah
have you ever tried to override it
no
why
also that font
ninjad me
No spaces
no empty lines you mean
Yes that
the plugin you are trying to shade into your
my teacher codes half in dutch/ english
why should i have them
sure schools teach in their local language but I'm still against that
i'm running russian telegram blog
all of my words are on russian
same as my strings in code
specially here in portugal where tons of words contain ´`^~ç
just to make people understand
just to fuck with variable naming
ide will complain
what does a russian keyboard look like?
same as english
we just have second layer below english letters
with russian latters
are they mapped to the correct non russian letter?
wdym?
or do you have some other ordering
just alt + shift
no they are not АБВГД
this russian O
same as QWERTY
ЙЦУКЕНГ
O О
no difference
between russian o and english one
the biggest problem is when you forgot to switch language
that's what I mean with mapped
no they are not
you have a new order
cause I though there are only some russian symbols that look totally different
A = A
like a P is not a p in russian, right?
Б = B
it's r
yea exactly
brrr
and p is п
hello?
yeah
nice
where wodka
p is R?
водка
looks very sussy
vodka
д amogus
isnt that a D
yeah that's d
dmogus
i still dont believe ur a girl
well
we mostly write cursive
so russian д is like d
анд russian b is similar to b
are there differences between upper and lowercase?
sometimes I wonder how tf some people join my network
for default we have different Б and б
I just looked at my console and some dude joined from poland
through the proxy
on my test network
is the rounded one the lowercase?
that's restricted to a subdomain and port
Здраво !
what is this? в
v
UFF
УФФ
Discord has weird rusisan F
looks like line on eye
basically the line is bigger
Does russians have љ or њ ?
idk what is this
so no
л н
seems complicated
first is for hard pause
second for softing letter
so Ф is like F sound
and ФЬ is th
hm
in Germany we have some similar stuff I guess? like "sch" is "shhhh" and "ch" is... idk how to spell it xD
well on their own Ь and Ъ have no pronounsuation at all
I see
we just call them soft sign or hard sign
Well esperanto is love
all those `^ etc can be so annoying to remember
I can pronounce them
lez go
I'm from Bulgaria
voice message
only dwayne rock johnson
these two letters are in the Bulgarian alphabet
and many words are formed with these letters
so I can pronounce them very easily
well, in bulgarian then I guess
yeah we are both slavic
i should say that russian has the biggest amount of rules
cuz we have word generation algorithm
река trasnfers to междуречье
by adding prefix между which means between
so река is а river
and междуречье is a place between rivers
Ь cannot be pronounce if it doesn't contain an "o" after the letter. If it contains an "o" it's pronounce like "yo" Ъ is like "uuh"
and I thought German is a difficult language
Ь is really similar to Й
its basically same in Serbian
I thought about learning russian but seeing all those rules kinda demotivates me xD
like река and међуречје
the biggest amount of rules
is in russian
chinese doesn't count
rules are related to hieroglyphs
This year I have Russian classes
not to actual words
but I'm in the start
the only rule in chinese is the don't have r sound
at all
ri (sun) on chinese is zhi on english
also g in the end is like Ъ (hard) in russian
hang on chinese is han(hun maybe)
and han on chinese is han' on english
soft n
pronounce this "ъй"
omg
easiest languages at this point are programming language smh
except lambdas
esperanto gonna be easier
{} ;
I imagine programming being in german xD
i had hard times remembering that these "" are quotes
and this ; is a semicolon
cringe words
{} curvy brackets
() circle brackets
"if" would be "wenn" or "falls", "else" would be "sonst" or "andererseits" lmao
square brackets bro
what is this
()
oh i see
"klammer" in ger
in Bulgarian
lel
they're prounced the same
&
chat silenced
ampersand
i usually call it eight
cuz similar
or 7 sometimes
do you guys know what we call ß in german?
cuz it's shift 7
schreiber
something connected to pencils
you have this letter here
"scharfes s" or "dreierles s"
which translates to "spicy s"
lol
and triple s or smth like that
yea
white was spelled "weiss" years ago, now we use "weiß"
which is never k
always s
circle
idk why english is so dumb
but our С is same as C in circle
only
yeah funny word, each c is pronounced differently
yeah
our C is S
I think in German there aren't any words that contain a C by itself, only CH I guess
and English C is Ц
otherwise we use CK or K only
basically
for example when we say подъезд(pod yezd)
we swap d on the end with t
when pronouncing
pod yezt
just to make words softer when we say it
so we are unlike german xD
stadt
yea
and German was very angry
exactly
well we have strong R which is not in english
mostly close to some italian
ravioli
same in Bulgarian
another weird thing is the exact same word being pronounced differently based on context
er sucht (he searches, sucht pronounced like "suuuuucht" (streching the u)
die Sucht (the addiction, sucht pronounced like it's spelled (short u)
well why do you cast your main to Plugin
where are you calling this
yeah cast it to JavaPlugin or just don't cast it
never cast it
Guide to dependency injection: https://www.spigotmc.org/wiki/using-dependency-injection/
where, not why
bruh intellij is tripping that I'm returning a HashSet instead of a Set
you out of date on ij or something
never expected to have to do this
IntelliJ is tripping me with code completions which I don't want
make your method return HashSet
does the constructor calls the method?
but HashSet extends Set
well at least he wouldn't need to cast
and ij will not argue
or just update IDEA or java version
where are you calling this method miningSpeedGiver?
but onEnable you're creating a new instance of the object
miningSpeedGiver();
and you're not calling it
This looks hella ugly
use a better theme then xD
bruh moment
yeah but you can also create a new variable which declares the object and after that call the method
it's more organized
grr why is this saving at the start if saving is the last thing I do
yet either mongo or gson are emptying the member set
ffs
hmm
cf.thenRun(cf2) doesn't ensure that cf2 will run after cf1
even then all of these cf's rely upon each other
and it all ends up at a supplyAsync on a single source
It's hella ugly and I gotta get going so see if you can spot the issue https://sourceb.in/3rOMLQwrtD
spot the issue in 200 lines of code hmm lol
idk lol
too much stuff happening there
hi bois
hi purple
hi illusion
what abour girls
by some chance, is your minecraft name Purple
I call everyone bois
nah
illusion wheres the issue?
idfk where it is
I just know that the data I'm saving is not the same data that is fetched
and that the data is being saved before it should be saved
would this fuck with collections within collections
sound like issues i had with my db
Map<String, Object> superior
i had an issue where if i delete a home and try to get to again, its gone, but whenever i relog its back lol
forgot to delete it on the persistent end lol
Let's try something else
i dont have methods to delete it lol
Yeah seems to work
just deleting all the ones that need to be deleted when saving them all
I'm wasting too much time
F
gonna get paid triple the money this week ❤️
imagine setting a timer
I add stuff into collection
save that collection into cache
get from cache, save to database
collection is now empty
meh I don't
wakatime does it auto
i find it useful but now im just running server on pi and tranferiing jar with filezilla every time
that's why I love wakatime
whats wakatime
you can easily graph availability
lol
where tf do you see that
what would happen when i interrupt main server thread lol
it would lag shit
👀
with Thread::interrupt
hey, what is the event for player sending message to chat?
AsyncPlayerChatEvent is highlighted as deprecated in my IDE
That means you're using the Paper API, you can still use that event.
How would I detect if there are at least 4 blocks directly surrounding a player excluding the block they are standing on? (if that makes sense)
are there any good papi tutorials?
p.getWorld().getBlockAt(p.getLocation().clone().add(1, 0, 0)).equals(Material.AIR), etc
how do I store a class name as a variable? so for example if you have
MyClass object = new MyClass();
would there be a way to accomplish the same thing by doing something similar to this?
Class clazz = MyClass;
clazz object = new Object();
if i store data like itemstack and ... on the InventoryHolder, will it cause problems ?
like if the inventory is no more of a use will java get rid of it or what
yeah but I can't use that for instantiation
so like I wouldn't be able to do ArrayList<clazz> list = new ArrayList<>()
get the constructor and do a newInstance
you can just do getConstructors[0]
or getDeclaredConstructor
ill try it ty
yeah i was wondering how i could make it work
but i think reflection might be good for what im tryna do
i think i have to lol
this is hot
Is there a way to create these structure block like borders for a region in spigot and if yes how?
probably store a function to get a new instance of smth
or good ol' reflection
so i have this loop where CustomEntity takes a entity type that extends entitycreature
for (EntityTypes type : types) {
list.add(new CustomEntity<???????>(loc, type, as));
}
the ???? is supposed to be like EntityCreeper, EntitySheep, etc.
depending on the variable type
yeah i guess so
but i cant do that right
i'm thinking about a Function<Entity, CustomEntity> lol but idk what you need it for
so basically i can make a custom class that extends every entity, like CustomCow, CustomZombie etc but every one of these classes will override path finding using identical code
are you overriding nms code?
so if I just have one CustomEntity<T extends EntityCreature> i can just put one identical path finding method for every single mob
Yeah but how does that help you
yes
i'm thinking just have a default method that does some stuff :/
but idk how things are set up
...
Not really, only if you retain the type at runtime
I have a java question, say I have a class for player data. If I put the Player as a variable in it, does it cost no extra memory and exist only as a referance thing or it takes as much memory as the Player class costs?
no more dealing with exceptions ig
Its significantly harder if you create a public library for the world to consume
the player is a ref
how large is it LOL
references are small so dont bother about it
You also never really need to instantiate one like that
Because you can always just infer
ty
And that can't fully represent types
a 6mb jar :C
why so big
For example Map<String, List<Integer>>
not for a plugin unless it's huge
6mb is huge for a plugin
<>
nah its normal if you use guice or okhttp e.g.
Why do you need okhttp
pvbble same whem you use var
You can make web requests in vanilla Java
The type is understated
why should you reinvent the wheel?
ij ultimate issue ig
ngl you could probably do that with normal java?
var x = "x"
???
It's not reinventing the wheel to use the standard library instead of shading fucking okhttp to make your plugin megabytes larger
But java is smart enough to figure out the type
well for generics you can instantiate them really
They’re at a higher level
No
They dont really have anything in particular that touches objects/instances all by themselves
But when you do know the base type you can
You don't actually need to know the generic types because they're erased at runtime anyways
So constructing only requires knowing the base class
Yeah
Then you take in a Supplier
Like a collection class
I don't really know what there is to show
A Supplier has a function to supply an instance of a given type
Wherever you need to instantiate that unknown type you take a Supplier<T> with T being the type
It's a functional interface
Collecting to an array is an example I guess
Let's say you have a List<String> you want converted to an array of lowercase strings
list.stream().map(String::lowercase).toArray(String[]::new)
The toArray call takes a Function<Integer, T[]>
Which is similar to a Supplier but it takes an int to indicate the size of the array
anyone knows what the dif is between sqlite DOUBLE and DOUBLE PRECISION?
I would guess they're the same
mmh no idea
Take a supplier
"instantiate a generic" doesn't make sense
You can't do new T() if that's what you mean
But you just take in a Supplier<T>
You take it as a parameter to your function
any way to make it check for multiple blocks at once? Instead of me having to copy that 16 times for each block and then another 9 for every block around the player.
it means you pass an argument that knows how to create instances of said type
and REAL seems to be the same as DOUBLE lol
public static <T> List<T> makeList(Supplier<T> supplier, int count) {
return Stream.generate(supplier).limit(count).toList();
}```
Or
List<T> list = new ArrayList<>();
for (int i = 0; i < count; i++) {
list.add(supplier.get());
}
return list;```
supplier.get() supplies an instance of T
So you could do
makeList(Math::random, 100)
This would get you 100 random numbers 0-1
help how to get dear variable (Plugin)
dear variable plugin
?di
Guide to dependency injection: https://www.spigotmc.org/wiki/using-dependency-injection/
Seems like you don't have one, if you're in the main plugin class you can use this
why would it work? use dependency injection to get your plugin instance ^^
Supplier<T> returns an instance of T lol
A Supplier<T> gives you instances of T
In this case, Double
Then the Supplier would need to pass them into the constructor it's calling
Thanks, But how to pass a variable to another class?
Or you would pass in a Function that can take in parameters and pass them through to the constructor to make an instance
?di
Guide to dependency injection: https://www.spigotmc.org/wiki/using-dependency-injection/
public <T> T[] makeArray(Function<Integer, T[]> arrayMaker, Supplier<T> itemMaker, int count) {
T[] arr = arrayMaker.apply(count);
for (int i = 0; i < count; i++) {
arr[i] = itemMaker.get();
}
return arr;
}```
makeArray(Double[]::new, Math::random, 100)
Same as
makeArray(i -> new Double[i], () -> Math.random(), 100)
does making anything async make any performance difference?
It can
Is there a way to check what kind of generator the player has in their inventory
for example while iterating through a list
In what sense
It can
Generator?
Spawner*
A guy asking for su domain help was arguing with another
Bukkit.getScheduler().runTaskAsynchronously(Main.get(), () -> {
for (int i = dataList.size() - 1; i >= 0; i--) {
PlayerData data = dataList.get(i);
if(data.getP().getUniqueId() == p.getUniqueId()){
p.getPersistentDataContainer().set(new NamespacedKey(Main.get(), "dataID"), PersistentDataType.SHORT, (short) i);
p.getPersistentDataContainer().set(new NamespacedKey(Main.get(), "lastMenuID"), PersistentDataType.BYTE, (byte) -1);
break;
}
}
});
``` anything wrong with this?
Yes, but doesn't a spawner in the inventory always return pig? I want to know if he's a sheep spawner cow...
I need more info about what you're trying to do before I can help though
Yes
why async?
Redempt when is your cmd framework rexoded
Looks like you should be using a map
What do you mean
It's already good to go basically
Hmn I dont recommend that
guess i fucked up
It's much better than RC already especially because it has unit tests
i did before but i reset the server daily I thought there is no need
still..
Map<UUID, PlayerData>
how slow it can possibly get because I dont think it can make a big problem when I do it async
idk
I would use a
List<UserData> users;
for (PlayerData data : users) {}
Just use a map ffs
You don't need an async loop over an array checking equality of a field to find one specific element
Use a map
but I want to store the index to persistentdatacontainer to get the data by index when I need
does this make any sense
Sorry for asking but first before coding its really recommend to learn java before
I know it can get slow
but doesnt it only effect the player who joined when I use async?
Use a map
use a map
next question: what is a map
changed it today
??
theres no reason to use async here
Agree
I got it wrong then :D
no it doesnt
ok ill change it
I thinking he didnt learnt kava
Either that or logic problems
had issues with async before too
Rust plugins when
Yes async is really painfull
logic problem I thought when I use async it would only make a pause for the playerjoined event thread for that player onl
I have problems with it
Can't have async issues if your code won't compile
lmfao
anyways, there no need to do it async, your code isnt doing some expensive computations (hoping your list doesnt contain 2 million users tho)
if you'd for example load an user from the database, ye then async is useful
amount of different players join in a day
M a p
i got it
well youre using a map now anyways so doesnt matter
Redempt he is trolling
lol
I have dm conclure to take Actions
verano on weed again?
You have tell him a Map in a round of give
i should get alcohol
Smirnoff😍
GOOD idea
smirnoff what
Let go to drink and just do our things
then my code will complain even more
changed smth in ij settings and now @Language("SQL") is yelling at me 🤔
🤷♂️
worked before
thats not how a char works mate
I mean audio like talking instead of texting or callong
thanks
hmm i can manually inject language thro ide settings but that goes brr
Fourten
Why do you use langannot!
Just add a plugin
I dont know why you are reinventing the wheel if its already invented
@sterile token ! (Sorry for ping) I found the solution for my problem (check thread)
👍
Not worry for ñinging
cuz @Language worked before lol
Is it possible to process an event after it has been processed?
I need to modify a brewing stand inventory after inventory click events inside of it have been processed
wdym after it has been processed? after the tick has happened?
After the event has been passed down to other event handlers and is considered complete
i.e. after any potential changes to the inventory have been made
Including vanilla behaviour
if youre still in the tick when the event happened ig
well i mean if the tick of the event has passed you are modifying an event that wont change stuff in the game anymore
Yeah, but I can't check for every brewing inventory every tick
I need to be able to catch a event and add a post process hook or smth like that
hi guys im trying to make practice core plugin and i really dont know how should i remove all blocks from map when game ends ?
should i try to save every coordination of block that player placed and then replace that block with air
or does someone have better idea ?
Disable world saving
and how should i work with that
so if that is off (in server properties i guess) it is not a problem to make players be able to place blocks
You call setAutosave(false) on the world
And you disable saving on every ChunkUnloadEvent
and if i have many players and all of them want to play unranked builduhc how do i put them on the same map ?
Should do the trick
You can't easily
Make duplicates
and what would be the best the best way of keeping players that are on one map
should i save them in list per world
or should i do something else
day 20 of watching paint dry waiting for plugin ideas to come to mind
Create a new world for each one
Then you can just call getPlayers() on the World
spigotmc website is not loading for some reason, how can i send the achivement pop up to a player
happens
declaration: package: org.bukkit.entity, interface: Player
probably Advancement
you need
Player.getAdvancementProgress()#
i want it to be like my own material name description etc...
should i use packets ?
i have to get spoonfeeded cause spigotmc is not loading
if check-host works for you guys check it for iran