#help-development

1 messages · Page 1995 of 1

tall dragon
#

there is really nothing i could do with it except find where your code went wrong

quaint mantle
#

the stacktrake has me.(myname) in it and i dont want to leak my name

#

so no thx

tall dragon
#

yea. which is your package name right?

quaint mantle
#

yes

tall dragon
#

it also has a filename behind it right?

quaint mantle
#

yes

#

the eror says something about this sting
public static String a = this;

#

and whatever a nulleraccepton is

tall dragon
#

can you show me the whole class then.

quaint mantle
#

no thx

tall dragon
#

a nullpointer happens when you try to access something that does not exist bassically

quaint mantle
#

it has important secret code in it that i canot show or else you could steal it

tall dragon
#

so blur it or something

worldly ingot
#

Trust me, we have no interest in stealing code that generates a null pointer exception lol

tall dragon
#

yea... but its alright

quaint mantle
#

this is what it has
if (funytestcool.a == "test") {
sender.sendMessage("chungus");

tall dragon
#

well looks like funytestcool.a is null then

dawn hazel
quaint mantle
#

yes

dawn hazel
#

can you show us where its being defined?

quaint mantle
#

no thx

tall dragon
#

well how are we supposed to help you with so little information.

dawn hazel
#

well we cant help you if you dont provide the info we need to help you

quaint mantle
#

sounds like a personal issue

dawn hazel
#

what

tall dragon
#

huh?

dawn hazel
quaint mantle
#

but the only thing the thing should be is test

#

why should need else

tall dragon
#

you don't need an else.

dawn hazel
#

if the only thing it should be is test

#

then a isnt being defined as test

#

are you SURE you have something defining a as "test"?

#

and that the function is being called?

tall dragon
quaint mantle
#

yes but it still null

tall dragon
#

are you sure you define it before you attempt to run this code?

quaint mantle
#

yes i am sure

young knoll
#

Also you can’t compare strings with ==

quaint mantle
#

the comand does dotest() before checking for tes

dawn hazel
#

can we see dotest()'s code?

ebon coral
#

how do i fix

quaint mantle
#

yeah no sorry its not supost to be public code

#

is code for my upcoming spigot pugin

dawn hazel
#

to me it sounds like your a total beginner

#

i wouldnt recommend making plugins for the spigot resources yet

tall dragon
quaint mantle
#

ok fine one momet

#

private void dotest(){
funytestcool.a = "chungus";
}

dawn hazel
#

thats the code you were afraid of leaking..

tall dragon
#

still doesnt provide much more information tbh haha

#

we need to see where its being called

quaint mantle
#

it being called in commad

ebon coral
#

Wtf is that

#

LOL

tall dragon
sharp flare
tall dragon
#

where you test if a == "test"?

quaint mantle
#

public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
if (funytestcool.a == "test") {
sender.sendMessage("chungus");
}
dotest();
}

tall dragon
#

well this would not work already

dawn hazel
#

your calling dotest() before you check if its "chungus"

quaint mantle
#

how fix that

dawn hazel
#

put dotest(); before the if statement

minor garnet
#

sine a and a syringe it is probably not being initialized

tall dragon
#

im really not sure what you are trying to achieve with this code but.

public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
    doTest();
    if (funytestcool.a.equals("test")) {
        sender.sendMessage("chungus");
    }
}
#

this would initialize a before testing it.

minor garnet
quaint mantle
#

i do not trust your code

tall dragon
#

really!?

minor garnet
#

Use .equals()

tall dragon
#

ur trolling right?

sharp flare
#

first off when you're trying to ask for help with your code, source code is a way for others to help you

#

?learnjava

undone axleBOT
tall dragon
dawn hazel
quaint mantle
#

ok

tall dragon
#

if hacking would be only this easy

#

i would be neck deep in russia's banks rn

minor garnet
#

gtfo rs

dawn hazel
#

hahaha

if (noobcomputeruser) {
    hack();
}```
#

ohmagad i just hacked the government

sharp flare
#

and asking for help and expect others to help you without trusting anyone would be easy

tall dragon
#

i mean, there is no need for trust

#

there is nothing you can do with this code

ebon coral
#

I keep encountering this error when I try to build, can someone help?

dawn hazel
#

considering all the code does is check define and check a string, it doesnt take much to know its not malicious

minor garnet
#

Stealing someone else's code to compare strings

ebon coral
#

fakePlayer.a(IChatBaseComponent.a(this.items.getOrDefault(i, "")));

minor garnet
#

Some1 can help me with that

quaint mantle
#

you make dangosu code

dawn hazel
#

lmfao

tall dragon
dawn hazel
#

omagawd report me to the government im hacking people oh no!

sharp flare
tall dragon
#

but i think you cant use the class Dynamic

ebon coral
#

I'm not lol

#

It's saying I am or something

quaint mantle
ebon coral
#

It's annoying

sharp flare
#

oh nbt, I'm not familiar with nbt

#

I spent most of my time with pdc

dawn hazel
#

im done wasting my time

tall dragon
ebon coral
#

Any time I use ChatComponentText it throws this error, why?

#

fakePlayer.a(new ChatComponentText(this.items.getOrDefault(i, "")));

#

Or actually, it's only for setting it's display name it throws that error.. strange.

warm stirrup
#

Hi guys, srry but im a so confused with the docs, im trying to use the method "setSpawnLocation" that belongs to the class "World" but how?

young knoll
#

How what

#

It takes a location

hexed hatch
#

get the world object and use the method?

warm stirrup
#

Yea but i mean im not sure if i have to create an instance of the world class or what

young knoll
#

No

fossil lily
#

How can I find the amount of damage done by a player?

hexed hatch
#

No the world already exists

young knoll
young knoll
warm stirrup
#

When the player connects to the server

fossil lily
young knoll
#

The join event had a getPlayer method

#

Player has a getWorld method

young knoll
#

But that won’t account for crits or anything like that

fossil lily
#

Yea okay

warm stirrup
hexed hatch
fossil lily
hexed hatch
#

Ah

young knoll
#

Idk why you divide by 10 tho

fossil lily
young knoll
#

Ah

fossil lily
sharp flare
#

e.getEntity or e.getDamager

#

entity is the victim

fossil lily
#

ah

#

that makes more sense

#

thanks

robust pebble
#

yo

#

im tryna make a spiderman plugin which dream made

#

and my bat is moving even though I gave is slowness 100000

#

so I did bat.setAI(false);

#

would this work?

delicate lynx
#

try it

robust pebble
#

okay

warm stirrup
#

Guys, some one knows why when i start my server it show me a lot of message like this: [Worker-Main-2/INFO]: Preparing spawn area: 0% ??? and it remains at 0

young knoll
#

Does it actually remain at 0

#

Or does it just take a while

warm stirrup
#

it remains at 0 and after a while the server start to run as normally

#

but im not sure if because of that the server takes some time to start running

young knoll
#

Normally it does count up

#

But yes, the server has to load spawn before it starts

warm stirrup
#

Do you have installed the SetSpawn Plugin from Bukkit?

young knoll
#

No

warm stirrup
#

mmm well i guess that if the server doesnt crash is not a problem xddd

robust pebble
merry kindle
#

Is there a way of altering the piglin trades you get?

young knoll
#

You can do it via datapack

merry kindle
#

Is there no way of doing it in spigot? cause i don't really know how to create a datapack

brave sparrow
#

“Stores all data related to the bartering interaction with a piglin. This event can be triggered by a piglin picking up an item that's on its bartering list.”

#

Seems like you can’t make something barterable with that, just change the result

#

Which may work

#

Just important to note

merry kindle
#

Yeah may just drop the item on the piglin so im losing the throwing animation but i think it should be fine

young knoll
#

Yeah I assume you’d have to use a datapack to make an item barterable

#

I don’t think spigot can assign tags without a bunch of NMS

brave sparrow
young knoll
#

I’m not sure how easy that would be

#

Actually you can load datapacks at runtime

#

So tags should be mutable

merry kindle
#

but im still wanting to do my own custom and this seems to much for just a throw

sick herald
#

I am looking at a timings report trying to optimize my server, i am noticing that a large portion of the tick is spent on sync chunk loads, is there anyway that i could load them async? it is my plugin that is causing the this. my tps is fin it is at 20 and my MSPT hovers around 15 - 20 but it should be a lot lower in theory so im trying to optimize it

chrome beacon
#

Are you using Paper?

young knoll
#

Use PaperLib if you want to maintain spigot compat

sick herald
#

im using paper but not the paper api

young knoll
#

Otherwise just use the paper API

lavish hemlock
#

PaperLib ✨

sick herald
#

im teleporting players to a unloaded chunk, do you know if the paper api will load those chunks async? or sync via teleport

young knoll
#

They have a teleportAsync method

lavish hemlock
#

N i c e

sick herald
#

thank you

fluid nacelle
#

I'm looking to have a weak spot revealed for 1 player with a bow for other players, after deciding the location of it I'm thinking along the lines of spawning an xp orb via packets on the player and update it whenever the player moves but I feel that'd be too many packets and if it were server-side, it'd take up too much resources. Does anyone else have any other ideas?

last tulip
#

is there any code to import a custom map? just like multiverse plugins did?

brave sparrow
#

What do you mean by import a custom map

last tulip
#

when i paste the custom world in my server folder, server can't detect the world

brave sparrow
#

Bukkit#getServer#createWorld

last tulip
#

Bukkit.getServer().createWorld("newworld", World.Environment.NORMAL);
'createWorld(org.bukkit.WorldCreator)' in 'org.bukkit.Server' cannot be applied to '(java.lang.String, org.bukkit.World.Environment)'

grizzled pollen
#

inside should be org.bukkit.WorldCreator, not String and Environment

last tulip
#

ah it works, thanks!

sacred mountain
#

hey im getting this error. Anyone know why?

sharp flare
#

is that line 33?

sick herald
#

it should be an instance of main, not the class

#

example of my plugin

sacred mountain
#

yeah i cant because of the command framwork im using, im learning how to switch to ACF or the default bukkit.

sick herald
#

acf?

sacred mountain
#

aikars

#

command framework

#

looks qiute neat

#

can handle subcommands easily

river oracle
#

you should also checkout lamp which Is what i've been using it looks a great deal easier than acf

elfin steppe
#
List<Entity> nearby = p.getNearbyEntities(2, 2, 2);
        beastStands.removeIf((stand) ->
        {
#

Someone who can tell me the meaning of '(stand) -> {' ? Never seen that before when coding.

quaint mantle
#

You should start to use brigadier it is great

#

Even official vanilla use it

elfin steppe
#

I don't know what that is

quaint mantle
#

Go to mojang github organization

#

There is brigadier

sacred mountain
#

complicated

quaint mantle
#

Who cares it great 👀

sacred mountain
#

i care since

#

my brain is small

fringe hemlock
#

Uh...

[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  27.222 s
[INFO] Finished at: 2022-03-06T02:41:16-06:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4:install (default-install) on project craftbukkit: Failed to install metadata org.bukkit:craftbukkit/maven-metadata.xml: Could not parse metadata C:\Users\Mic_g\.m2\repository\org\bukkit\craftbukkit\maven-metadata-local.xml: in epilog non whitespace content is not allowed but got > (position: END_TAG seen ...</metadata>\n>... @17:2)  -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
Exception in thread "main" java.lang.RuntimeException: Error running command, return status !=0: [C:\WINDOWS\system32\cmd.exe, /D, /C, C:\Users\Mic_g\Desktop\e\apache-maven-3.6.0/bin/mvn.cmd, -Dbt.name=582a, clean, install]
        at org.spigotmc.builder.Builder.runProcess0(Builder.java:973)
        at org.spigotmc.builder.Builder.runProcess(Builder.java:904)
        at org.spigotmc.builder.Builder.runMaven(Builder.java:873)
        at org.spigotmc.builder.Builder.main(Builder.java:698)
        at org.spigotmc.builder.Bootstrap.main(Bootstrap.java:27)

This has never happened before? and then today randomly wont let me build any jars

grim oak
#

How would I check if a player has an entity on a leash, and get what the leashed entity is

sullen marlin
tardy delta
#

hi md

fringe hemlock
#

ok let me try that

sacred mountain
#

thats quite specific lmfao

tardy delta
#

decimalformat is something

sacred mountain
#

yes i know its a joke

#

i forgot to add that bit of code in

#

when i recoded the plugin

grim oak
#

hm?

somber hull
#

Oh my b

#

I didn’t understand the question

tardy delta
#

lmfao

somber hull
#

I thought he was making a relationship between two entities but no I’m wrong

#

One sec

tardy delta
#

like.. a marriage...?

#

a relationship between two entities 🤔

hardy swan
#

total participation relationship

tardy delta
#

even leashed

#

kinky

somber hull
#

@grim oak

#

I believe this should help

grim oak
#

thanks

somber hull
#

Oh yea

#

Wait

#

A hashmap would be used here

#

@grim oak so what I sent isn’t nescessarilly gonna help

#

Just

#

Make a hashmap

#

And put the player and the entity every time a entity is leashed

sacred mountain
#

hey how do you send code on the spigot forums

#

?

somber hull
#

Only problem is@leads break on their own sometimes

tardy delta
#

isnt it just html format?

somber hull
#

Maybe there’s an event for it?

somber hull
#

<code></code>

tardy delta
#

thats not even valid html

#

well maybe

#

who even puts a slash at the beginning

somber hull
#

Idk

#

I never learned html

#

I used it in TeamSpeak and on forums

tardy delta
#

wat

#

teamspeak?

lavish wave
#

In my config it setted a MemorySection. Why?

somber hull
tardy delta
#

oh

somber hull
tardy delta
somber hull
#

I think

#

Idk what your question is @lavish wave

lavish wave
#
translate:
  '5143': MemorySection[path='translate.5143', root='YamlConfiguration']
  '6850': MemorySection[path='translate.6850', root='YamlConfiguration']
  '14321': MemorySection[path='translate.14321', root='YamlConfiguration']
  '16136': MemorySection[path='translate.16136', root='YamlConfiguration']
  '6228': MemorySection[path='translate.6228', root='YamlConfiguration']
  '8593': MemorySection[path='translate.8593', root='YamlConfiguration']
  '11605': MemorySection[path='translate.11605', root='YamlConfiguration']
  '9077': MemorySection[path='translate.9077', root='YamlConfiguration']
  '11999':
    default: §6Datenschutzerklärung
    translation: §6Datenschutzerklärung
tardy delta
#

ye FileConfiguration works with MemorySections

#

how did you even set that path

acoustic pendant
#

Hello!
How can i use persistent data container here?

somber hull
#

I’ll help with this

acoustic pendant
#

I want to give data to the block i'm setting, the chest

somber hull
#

Ik persistent data very well

tardy delta
#

TileState#getPersistentDataContainer

somber hull
#

😡

acoustic pendant
#

but

somber hull
#

I’m on mobile

#

Not fair

acoustic pendant
#

from the block i'm setting?

somber hull
tardy delta
#

dont you need to update the block when changing the material? 👀µ

somber hull
#

Then modify it

lavish wave
acoustic pendant
tardy delta
#

lol why catching invalid config exeptions

#

what the hell are you doing lol

somber hull
#

Are you just making a config?

lavish wave
tardy delta
#

are you trying to set/ obtain a list?

lavish wave
#

No

somber hull
#

@lavish wave look up codedred config on YouTube

acoustic pendant
somber hull
somber hull
lavish wave
somber hull
#

Oh wait

acoustic pendant
somber hull
tardy delta
somber hull
somber hull
tardy delta
#

hmh

somber hull
#

I learned all the basics from him

#

A lot of bad stuff too tho

lavish wave
# somber hull Why

Because I want to have the control of the Configs, so I can change the system any time

tardy delta
#

i learned the basics from him and after that i had to learn it again cause it was bad

somber hull
tardy delta
#

🤔

somber hull
#

Cause whatever your doing isn’t right

acoustic pendant
somber hull
#

Hold up

#

I didn’t read your code lol

#

One sec

#

@acoustic pendant

#

I see

#

I see

acoustic pendant
#

yea?

somber hull
#

So

#

In your code

#

Just do state.getPersostentDataConrainer()

#

Does that not work?

#

Or did you not do that

acoustic pendant
#

but

tardy delta
#

persostent data conrairer 👌

sacred mountain
acoustic pendant
#

i want data for the chest

somber hull
#

Yes

acoustic pendant
#

not for the block i'm breaking

somber hull
#

You changed it to the chest

#

You changed the block to the chest

#

It’s a chest now

#

You can do one of two things

#

You can crate a new chest

#

And set it tk the broken block

#

Or do what your already doing

#

Wich is better probably

acoustic pendant
#

wait a sec, is not working i'm trying to fix it

somber hull
#

Wdym “not working” what’s “not working”

acoustic pendant
#

not spawning the chest

somber hull
#

Is there an error

#

Or is nothing happening

#

Cause if nothing happens

#

Then it’s probably your probability check failing

tardy delta
#

did you cancel the break event?

acoustic pendant
#

now works

somber hull
acoustic pendant
#

yea

#

now works xD

#

the thing is

#

I want to give this chest a persistent data

#

with e.getBlock works?

somber hull
#

Yea

#

Cause you changed it to a chest

#

As long as it becomes a chest before you modify it

#

Then it is a chest

#

But only if you make it a chest

#

It won’t spontaneously turn into a chest

#

You must make it a chest

#

Got it? @acoustic pendant

acoustic pendant
#

wdym

somber hull
#

Set the material to chest

#

And it is a chest

#

@acoustic pendant say it with me. If you turn the block into a chest, what does it turn into?

acoustic pendant
#

into a chest?

#

xd

somber hull
#

Yes!

#

Your picking this up quickly

acoustic pendant
#

you mean when i break it I check if the block is a chest?

somber hull
#

No like

#

You cancel the event right

acoustic pendant
#

yea

somber hull
#

That’s the first thing you should do

#

Then you do block.setMaterial chest

#

And now the block

#

Is…

acoustic pendant
#

yea yea

somber hull
#

I know you can do this

acoustic pendant
#

but i mean

somber hull
#

What does the block become?

acoustic pendant
#

is the check necessary?

somber hull
#

Never said to check lol

#

I’m literally just saying tk set the material to a chest

#

Couldn’t get more simple

acoustic pendant
#

ig

somber hull
#

Set the material to a chest and it becomes a chest. Then you can get the chest data

#

Got it?

acoustic pendant
#

yes lol

somber hull
#

You can’t go back in time just because you did e.getBlock before it was a chest

slate pendant
#

Hello, does someone know how to make some kind of communication between plugins?

drowsy helm
#

like on the same serveR?

#

just use an api

slate pendant
#

yes, same server

#

what api? Is there something in bukkit api for that?

drowsy helm
#

an api is a basic java thing lol

#

are they two of your own plugins

slate pendant
#

yes

last tulip
#

how to disable break for specific block? like only grass block

    List<Player> blockbroke = new ArrayList<Player>();

    public void onBlockBreak(BlockBreakEvent event) {
        Player p = event.getPlayer();
        if(blockbroke.contains(p)) {
            event.setCancelled(true);
            p.sendMessage("You can't break a block!");
        }
    }```
slate pendant
#

check e. getBlock(). getType() i think

#

compare with grass in Material class

#

(...worked for you?)

last tulip
#

hmm still didnt get it

slate pendant
#

oh, event, not e, i just name it "e"

#

event. getBlock(). getType()

#

if i remember it right

#

== or .equals Material. GRASS

#

(without spaces of course)

last tulip
slate pendant
tardy delta
slate pendant
#

I mean the most basic way is this

slate pendant
#

Do all plugins have same class loader?

#

Can they modify each others' global variables

quiet ice
#

No, every plugin has it's own classloader

quiet ice
slate pendant
#

no

#

class fields

quiet ice
#

Then yes, they can still see each other's classes

slate pendant
#

or how else can they communicate without own custom socket?

midnight shore
#

Hi! how can i get the blocks in radius of an entity? I want to make a Redstone Armor that activates all the near redstone circuits

last tulip
slate pendant
quiet ice
#

Just make sure plugin x loads before plugin y if plugin y requires a class from plugin x

slate pendant
last tulip
#

i confused why its nnot working, and i forget call it from main class xd

quiet ice
#

If you can see a class, you can also modify public fields within it - that is how java works

slate pendant
#

ok, thanks

slate pendant
quiet ice
#

The classloader in general is always irrelevant in java, however the consumer classloader must provide the supplier class from the supplier classloader if it is requested otherwise a ClassNotFoundException will be thrown

#

plugin.yml

slate pendant
#

ok, never saw anything about it there

quiet ice
#

never heard of (soft-)dependencies and loadbefore?

slate pendant
#

maybe, not sure

quiet ice
slate pendant
midnight shore
#

yeah but the question is how do i get the blocks near the entity

quiet ice
#

For loops

rough drift
# midnight shore anyone?

pos1 = subtract distance from each element of pos
pos2 = do the opposite of pos1

loop over all blocks from pos1 to pos2, and check if its what you want

slate pendant
#

maybe like this? It's my old code for finding is there a block nearby

quiet ice
#

for (int x = -3; x < 3; x++) {for (int y = -3; x < 3; x++) {for (int z = -3; z < 3; z++) {/* apply Pythagoras' Theorem here */}}}

slate pendant
#

but actually if I remember it checks a cube, not sphere

quiet ice
#

Yeah, you need to apply Pythagoras' Theorem

rough drift
#
Location pos1 = pos.clone().subtract(dist, dist, dist);
Location pos2 = pos.clone().add(dist, dist, dist);
World world = pos.getWorld();

int minX = (int) Math.min(pos1.getX(), pos2.getX());
int maxX = (int) Math.max(pos1.getX(), pos2.getX());
// do the same for y and z


for(int x = minX; x <= maxX; x++) {
  for(int y = minY; y <= maxY; y++) {
    for(int z = minZ; z <= maxZ; z++) {
      Block block = world.getBlock(x, y, z);
      // Do something
    }
  }
}
midnight shore
#

distance is the constant of the radius right?

#

or is it a box?

rough drift
#

to check if within a sphere do

#

Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2), Math.pow(z1 - z2, 2)) <= radius * radius or it was just radius instead of radius * radius, i forgot

#

try both

rough drift
vivid cave
#

item frames are entities, can we rotate them (not their content, i mean the item frame) to precise angles, position them on precise positions (more than just facing down, facing up, facing forward backward to the left/right, and more than just placing it to an extremety of the block, but like placing in the middle at coordinates 11.5 5 2.5 instead of 11 5 2)

rough drift
#

only cardinals

#

tho try

vivid cave
#

hm okay

ebon coral
#

Does anyone use gradle?

quiet ice
#

Actually, wtf is this

rough drift
quiet ice
rough drift
#

its been a while

midnight shore
#

hi, another question. How can i activate the redstone wire?

#

how does the BlockState work?

ebon coral
quiet ice
#

Ah, paperweight?

#

It's x * x + y * y + z * z to obtain the square of the distance between two positions

lost matrix
slate pendant
#

Oh, also, can I modify block state? And maybe even without updating blocks around it

quiet ice
lost matrix
rough drift
#

yep

#

set 2nd parameter of setblockdata to false

#

and it won't update

slate pendant
#

And what about forcing to update the blocks?

rough drift
#

i used it when i made physics in mc, very scuffed physics, but still

slate pendant
#

like to make them connected right

ivory sleet
rough drift
#

#Maven

quiet ice
#

Also, fun fact: Math.hypot computes sqrt (a² + b²) all while still acting correctly for very large values where an overflow would otherwise happen

slate pendant
#

I mean you set a wall of wall blocks and they don't get normal blockstate without an entity touching them (at least the tripwire block)

quiet ice
#

?jd-s

undone axleBOT
quiet ice
acoustic pendant
#

could someone tell me why is this spawning the grass block instead of the thing that drops seeds? xd

quiet ice
#

that should be right. Perhaps you are overriding your block change afterwards?

ivory sleet
midnight shore
quiet ice
#

it is more reliable, otherwise yeah, inferior

rough drift
ivory sleet
#

Nah

slate pendant
#

its different thing

ivory sleet
#

Gradle is just as reliable in my experience

quiet ice
#

GRASS is what he wants

quiet ice
rough drift
#

exactly

ivory sleet
#

What

rough drift
#

and then it just goes crazy

#

and you gotta remake everything

ivory sleet
#

I haven’t had any issues with that lol

rough drift
#

maven is much more stable

ivory sleet
#

Not really

quiet ice
#

Gradle 6 (or better said, groovy) breaks with J16+ for example

rough drift
#

yep

ivory sleet
#

Just update then

rough drift
#

making fabric mods is a pain

quiet ice
#

Old FG breaks with J9+
Many other gradle plugins break with J16+

ivory sleet
#

Many gradle plugins?

rough drift
#

i use j17 and latest gradle iirc, it always, ALWAYS gives me problems

ivory sleet
#

Gradle is pretty nice deprecating its api

rough drift
#

not once have i had it to what i wanted first try, unlike maven

ivory sleet
#

So no radical changes are being pushed directly

quiet ice
#

the cadix licenser plugin broke with J16+

ivory sleet
#

That’s one plugin

midnight shore
ivory sleet
#

I know of many that didn’t break the slightest

quiet ice
#

The shadow plugin also probably broke similar to maven's one

ivory sleet
#

Shadow released a new version

#

So it’s not broken anymore

quiet ice
#

Updating still takes time

ivory sleet
#

No lol

quiet ice
#

And in case of updating the wrapper is not as straightforward as running a command

ivory sleet
#

You just change the version number in your respective module

#

I mean it’s extremely simple once you understand how to do it

#

And it doesn’t take that much time to change version

#

Sure downloading the new gradle wrapper takes time

#

But that doesn’t inherently imply more unstability whatsoever

acoustic pendant
quiet ice
#

Either you do it manually (at which point you have to find a "donor" project which has an updated wrapper) or you downgrade java, then run the update command, then re-upgrade java. In Windoof world this is absolute pain, but thankfully there is alternatives
So you would think at least

ivory sleet
#

I don’t know what you’re talking about

rough drift
#

meanwhile, maven:

write your pom once, most likely never change it

ivory sleet
#

Like, you just change the version declaration and then reload the project basically

quiet ice
#

Gradle from time to time, chooses it's own (invalid) java home and I have no fucking idea from where it obtains it

rough drift
#

ofc you have to update dependencies, but thats that

ivory sleet
#

It’s not going to be more advanced than that

ivory sleet
#

Gradle can be just as simple as maven

rough drift
#

no

#

no it can't

ivory sleet
#

Yes it can lol

quiet ice
#

It only happens if I clone foreign gradle projects, likely they have a misconfigured gradlew script

#

But it just shows how much can go wrong

ivory sleet
#

Idk still that has never happened to me

quiet ice
#

Probably because you are not on a rolling release version so you never noticed that gradle is using a nonexistent java installation

ivory sleet
#

Only issue I have with gradle is their radicalism when updating api and such, tho it’s reasonable as the benefits of that exceeds the drawbacks

chrome beacon
#

Exclusing transient dependencies with Gradle gives me nightmares

rough drift
#

gradle:

  • Add repositories manually
  • Confusing syntax
  • Its gradle

maven:

  • You have mavencentral by default, that's a win ig
  • Clean syntax
  • Its maven

Conclusion: Maven wins over gradle any time of the year

chrome beacon
#

I tried for like 3 hours

tardy delta
quiet ice
ivory sleet
#

Confusing syntax is bs, learn the semantics and it’s just as intuitive

#

Adding maven central is literally one line

rough drift
#

actually

#

its 5

ivory sleet
#

No it isn’t

quiet ice
#

Gradle also has the pro of having more scopes

rough drift
#

repositories {
maven {
mavenCentral();
}
}

ivory sleet
#

What

rough drift
#

thats gradle

#

i've ever only seen it that way

quiet ice
#

compileOnlyApi, compileOnly, api and implementation are all lifesavers

ivory sleet
#

repositories {
mavenCentral()
}

#

Literally

rough drift
#

oh lmfao, wait yeah

ivory sleet
#

And you have to declare the repositories block in maven also

rough drift
#

still

#

no you don't

#

actually

ivory sleet
#

Wym still

rough drift
#

it has mavenCentral by default

ivory sleet
#

Yes but if you wanna add other repos

rough drift
#

so most repo's work

#

artifacts*

quiet ice
#

Also, gradle doesn't use mavenLocal by default, that can be a plus

ivory sleet
#

Pretty sure you can disable that with maven?

rough drift
#

Lmao i believe this is totally not biased towards gradle

quiet ice
#

probably, but it's a lot more complicated and I don't want to be biased

#

if somewhere is a more complicated, it might be as well impossible

ivory sleet
#

Well I don’t have anything against maven, tho I don’t believe a tool should be dissuaded from overall usage just because it might look less intuitive or be somewhat more complicated

quiet ice
#

Yeah

ivory sleet
#

Anyhow geol, in regards to the java home thing, I haven’t personally encountered that issue of yours but it doesn’t sound implausible that it could happen

quiet ice
#

I'm not sure how it even resolved the java home in the first place, it was an installation that once existed but then did not and wasn't my actual java home anyways.

#

But my system has a lot of bugs noone can understand (such as audio breaking whenever I close minecraft until I switch the audio output and apply a constant audio signal)

midnight shore
quiet ice
#

Casting???

ivory sleet
midnight shore
quiet ice
#

yes!

midnight shore
#

Oh

quiet ice
#

(just note that #getBlockData returns a clone, not the actual block data)

#

As least I think so, either way calling #setBlockData is safe

tardy delta
quiet ice
#

It still is an enum, but not for the long term

tardy delta
#

oh i still use it anyways

earnest forum
#

how do i get a block's break sound in 1.18?

#
Sound sound = Sound.valueOf("BLOCK_"+block.getType().toString()+"_BREAK");
breaker.playSound(breaker, sound, 1, 1);

im currently using this, is this like really bad or is it fine

true crest
#

Is there a way to create real "invsibile arrows"?

i'm trying to create a flying rock (riding the arrow), which should explode or something, once it lands.
currently i'm really struggling with the arrow itself,
i found out that i can destroy the package that is sent to the player, which contains the arrow.
But also "destroys" the fleight itself, so my rock just stands on the same position (until i rejoin, then it "landed" succesfully)

true crest
#

exactly

grim oak
# somber hull Make a hashmap

okay I followed your suggestion, and i now have a hashmap and every time a player leashes and entity if the player is not in the hashmap then it creates an entry which includes the player as the key and a list of Entities as the other value as the entry is make up of a player and a list of entities they have leashed Hashmap<Player, List<Entity>>. But i am new to this and I feel like the function i made to remove the entity is probably really inefficient and it works but returns some errors, and the main difficulty is that when an entity is unleashed the event doesnt give the player it was leashed to. this is how i did it, how else should i do it so it works more efficiently java public void onEntityUnleashed(EntityUnleashEvent event) { for (Map.Entry<Player, List<Entity>> entry: leashedEntities.entrySet()) { for (Entity entity: entry.getValue()) { if (entity.getEntityId() == event.getEntity().getEntityId()) { entry.getValue().remove(entity); getServer().getConsoleSender().sendMessage("Removed entity from the Hashmap. Entity id " + event.getEntity().getEntityId()); } } } }

tardy delta
#

i forgot but what's the difference between Collections.unmudifiableSet(set) and ImmutableSet.copyOf(set)?

vocal cloud
grim oak
#

aight ill try that thanks

ivory sleet
#

Second one generates an immutable shallow copy

#

let’s say you were to manipulate an element in set FourteenBrush brush

#

The former would also be updated accordingly to the manipulation, however the latter wouldn’t

slate pendant
#

Is it possible to change item nbt without the update animation for the player? (if he holds it)

#

Maybe some packet magic lol

slate pendant
#

ok

minor garnet
#

If is visual for player yes

earnest forum
#

how do i get a block's break sound in 1.18?

minor garnet
#

why can you change item nbt only for other players except player

slate pendant
#

no, I need the player see the change

#

(it's for the lodestone compass target)

quiet ice
#

you want to set the target of a lodestone?

#

You need to call CompassMeta.setLodestoneTracked(false)

slate pendant
#

But iirc even this way it moves in hand every target update

#

the update animation

#

it moves when I set the meta

trail pilot
#

error: https://paste.helpch.at/yawitimavo.bash
core:

else if (!plugin.invisibleList.contains( player )) {
                    for (Player members : Bukkit.getOnlinePlayers()) {
                        members.hidePlayer( plugin, player );
                    }
                    plugin.invisibleList.add( player );
                    String playerInvisible = plugin.config.getInvisiblePlayer(player);
                    player.sendMessage( ChatColor.translateAlternateColorCodes( '&', prefix + " " + playerInvisible ) );
                }```
slate pendant
trail pilot
chrome beacon
#

The issue is 1.8

trail pilot
#

java, or API?

chrome beacon
#

API

trail pilot
#

oh...

chrome beacon
#

That method is too new

#

Update your server or hide the player yourself

slate pendant
#

are you sure

#

you can use plugin, player arguments

#

I think its because you need both variables as players

trail pilot
#

hm..

slate pendant
#

or even only 1 player

#

i used this for older version (I mean newer version, sorry)

#

just 1 arg

trail pilot
#

yea

#

i see

#

1.8.8 api

#

1.18+ have 2 arg

#

les see if that work in all versions

#

should

#

yea its work perfectly

rough drift
#

is there a way to change an offline player's gamemode/health/position?

acoustic pendant
#

hello, for some reason this is spawning the grass block instead of the grass that drops seeds, could someone help me?

tall dragon
rough drift
#

yeah using the latter

patent flame
#

i have a question: how would you guys go about making a plugin that randomizes the loot drops every time you do let's say /randomize?

#

would it make sense to write into a datapack?

#

like change the loot .jsons

rough drift
#

I'd have a single random instance, and on block break get a random material, and drop that

#

or whenever you run /randomize, i use the random to generate a map like, original -> randomized

tall dragon
rough drift
#

and then drop accordingly

rough drift
#

np

tall dragon
patent flame
#

can i change block drops with <LootTables>?

tall dragon
#

listen to the blockbreakevent

#

and change the dropped block.

patent flame
#

but then i would need a list of all possible things and mark all used ones as not availible anymore since i want the drops to stay consistent

onyx fjord
#

is it possible to know if player holds shift when clicking inventory slot?

patent flame
#

and store every block drop

patent flame
tall dragon
tall dragon
patent flame
#

what it thought was to (re-)generate a datapack everytime that contains all the .jsons idk if that makes sense

tall dragon
#

minecraft also uses a weight system for their loottables

patent flame
#

yeah

tall dragon
patent flame
#

ic

tardy delta
#

why are there random {}?

tall dragon
#

no clue

bitter frigate
#

Hello,
I in 1.8.8 and I look for how have the block the player set when he empty à bucket. I have use PlayerBucketEmptyEvent but the block is final and I can't have.

Thanks for your repons.

Excuse for my english but I from french

tall dragon
ivory sleet
#

But that’s pretty useless as of now

tardy delta
#

oh

bitter frigate
tall dragon
#

so what is the problem with that.

#

should be possible

bitter frigate
tall dragon
#

why not. you can do PlayerBucketEmptyEvent#getBlock

patent flame
#

ok i think datapack it is becaaauuse i have multiple worlds and i have no fukkin idea how to only make the plugin work in one world and not the others and these worlds will get deleted and recreated and bla bla. Placing a datapack into the world folder upon creation is the best bet i think.

bitter frigate
#

@tall dragon

mortal cedar
#

Is it possible to generate structures in a void map with a ChunkGenerator? I made #shouldGenerateStructures return true but it doesn't seem to work

tall dragon
tall dragon
bitter frigate
patent flame
tall dragon
#

ehh okay.

patent flame
#

haha

tall dragon
bitter frigate
#

the getBlockClicked is the block whitch the player click and it is not the set block

tall dragon
bitter frigate
#

it works thanks you

tall dragon
#

np

viral temple
#

does anyone know if persistent data container on items can be seen by players (as item tags)?

young knoll
#

Yes

viral temple
#

well, shet

#

i know it says "4 tags"

#

or something like this

#

(depeneding on how many there are)

young knoll
#

If you have a mod you can view them

viral temple
#

well, that's bad then

#

i need to store a password on a book and the players not to see it

tall dragon
#

encrypt it :D

young knoll
#

Store a key in the book and then the password somewhere else

#

Mapped to that key

viral temple
tall dragon
#

but ur pretty better off with coll's solution

#

much safer

viral temple
#

I also been thinking about 2 way decryption

#

but makes thing even more complicated

#

and I don't know how to do it

#

like I want players to encrypt a book content and decrypt using a password

#

but I also want server owners to decrypt without knowing the password

jagged thicket
#

            FileConfiguration ple;
            File file = new File("plugins/VaultTax/PlayerData", "balance.yml");
            ple = YamlConfiguration.loadConfiguration(file);
            ple.set("Balance_" + player.getUniqueId().toString(), VaultTaxMain.getEconomy().getBalance(player));
            try {
                ple.save(file);
            } catch (Exception e) {
            }

            ple = YamlConfiguration.loadConfiguration(file);
            Bukkit.broadcastMessage("save");
        }```
#

this file is not getting saved

grim oak
#

if i store an entity in a variable/ array, is that entity unique for is it just a general entity type (say if i wanted to store a cow, would it store that specific cow i passed in, or will in just store the entity data for any cow in general)

jagged thicket
#

the "save" is broadcasted

viral temple
jagged thicket
viral temple
#

you shouldn't use / in file paths

jagged thicket
#

only on this method it does not work

viral temple
#

use File.separator

hybrid spoke
jagged thicket
#

but.. it works on other methods

viral temple
jagged thicket
#

oh

viral temple
#

found out by bugging my os once

#

thinking there is a folder somewhere when it was not

hybrid spoke
#

cringe who doesnt use linux or windows

young knoll
#

The file constructor handles that for you

jagged thicket
#

ok i will do that but does anyone kknow why is it not getting saved?

viral temple
jagged thicket
#

im on windows

viral temple
#

then \\ should be used

jagged thicket
#

bro..

#

did you read what i said

hybrid spoke
#

that doesnt make a difference

viral temple
#

bug out your OS 🙂

young knoll
#

You need a file.createNewFile in there

jagged thicket
#

the file already exists

viral temple
#

I used on a linux machine plugins/pluginName/customFolder and created a folder I couldn't delete or didn't actually exists even tho winscp was seeing it 🤣

#

probably it created an actual file instead with that name in the jar root folder and winscp thinking it was a folder xD

jagged thicket
#

hmm other classes and methods can acces and modify it

#

even this method can accces it but just can't modify it

#

shit

viral temple
#
 public static void saveBal(Player player) {

            FileConfiguration ple;
            File file = new File(plugin.getDataFolder() + File.separator + "PlayerData", "balance.yml");
            file.mkdirs();
            file.createNewFile();
            ple = YamlConfiguration.loadConfiguration(file);
            ple.set("Balance_" + player.getUniqueId().toString(), VaultTaxMain.getEconomy().getBalance(player));
            try {
                ple.save(file);
            } catch (Exception e) {
            }

            ple = YamlConfiguration.loadConfiguration(file); 
            Bukkit.broadcastMessage("save");
        }```
jagged thicket
#

i fixed it i dont know how

#

okay ty

#

i will do this now

#

so i should use getInstance() instead of plugin

#

as it is the main class

viral temple
#

yes, but don't use static as is bad practice 🙂 change it later 😛

sage patio
#

Hi, I've creatied a runnable like this

#

and using that like this

viral temple
viral temple
#

don't recreate the file if it exists 🙂

sage patio
#

but when i try to stop runnable like this, doesnt work

jagged thicket
#

            FileConfiguration ple;
            File file = new File(getInstance().getDataFolder() + File.separator + "PlayerData", "balance.yml");
            ple = YamlConfiguration.loadConfiguration(file);
            ple.set("Balance_" + player.getUniqueId().toString(), VaultTaxMain.getEconomy().getBalance(player));
            try {
                ple.save(file);
            } catch (Exception e) {
            }
            if(file.exists()) {

            }
            else{
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }

            ple = YamlConfiguration.loadConfiguration(file);
            Bukkit.broadcastMessage("save");
        }```
vocal cloud
sage patio
#

my problem is runnable does not stop

vocal cloud
#

Oh it's a tasktimer

#

mb

sage patio
#

Hi, I've creating a Bukkit Runnable like this

BukkitTask record = null;

and using that like this

if (args[0].equalsIgnoreCase("start")) {
            record = new BukkitRunnable() {
                int count = 0;
                @Override
                public void run() {
                  count++;
                }
            }.runTaskTimer(Main.getInstance(), 1, 1);
        }

and stopping that in this way, but doesn't stop

if (args[0].equalsIgnoreCase(("stop"))) {
            if (record != null) {
                record.cancel();
                Utils.sendActionbar(player, "&dDone !");
            } else {
                Utils.sendActionbar(player, "&dYou didn't recorded anything yet ...");
            }
        }
onyx fjord
#

whats a clean way to make java switch going thru all types of InventorySlot

#

like case: "FEET" etc..

tardy delta
#

looping thro the PlayerInventory#getArmorContents?

#

just a normal switch

onyx fjord
#
            switch (player.getInventory().getArmorContents().toString()) {
                case "FEET":
                    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "cosmin openwardrobe FEET " + player.getName());
                    break;
            }```
#

like that?

tardy delta
#

where are you getting the slot from?

#

like what determines which slot you want

onyx fjord
#

wut

#

i dont get it

tardy delta
#

you're trying to dispatch a command based on the slot

onyx fjord
#

yea

tardy delta
#

i assume a player is executing a command

onyx fjord
#

console has to do that

#

player has no perms

tardy delta
#

but how will the console know which slot to use?

onyx fjord
#
    public void onClick(InventoryClickEvent event, Player player) {
        if(event.isRightClick() && event.isShiftClick() && event.getSlotType().equals(InventoryType.SlotType.ARMOR)) {

            switch (player.getInventory().getArmorContents().toString()) {
                case "FEET":
                    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "cosmin openwardrobe FEET " + player.getName());
                    break;
            }
        }
    }```
tardy delta
#

your eventhandler signature isnt valid, remove the Player player

#

and get the player instead with event.getPlayer()

onyx fjord
#

it doesnt error or warn

tardy delta
#

compiler not

onyx fjord
#

Player player = (Player) event.getWhoClicked();

#

like that?>

tardy delta
#

ye

#

the best thing to do is probably check if the player even clicked an armorslot or just a random slot

#

so 100 to 103 are the slots you want to check for?

lavish hemlock
#

Minecraft is odd

tardy delta
#

wait

lavish hemlock
#

Although can't you actually retrieve equipment slots?

tardy delta
#

there is a slottype

lavish hemlock
#

Yeah

tardy delta
#

forgot that

lavish hemlock
#

You're also able to get the off-hand slot iirc lol

tardy delta
#

i think just do a switch which checks for the event.getRawSlot()

#

so like 100 -> FEET, 101 -> PANTS etc

onyx fjord
#
    public void onClick(InventoryClickEvent event) {
        if(event.isRightClick() && event.isShiftClick() && event.getSlotType().equals(InventoryType.SlotType.ARMOR)) {
            Player player = (Player) event.getWhoClicked();
            switch (event.getSlot()) {
                case 100:
                    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "cosmin openwardrobe FEET " + player.getName());
                    break;
            }
        }
    }```
#

like that?

tardy delta
#

lol im bad

#

uhh

#

smth liek that

onyx fjord
#

isnt there a way to just switch FEET HEAD etc...?

tardy delta
#

the slot doesnt have a name

#

and you can just change the event.getSlotType().equals( to event.getSlotType() == (

hearty swift
#

Exception: ionetty handler.codec Decoder Exception io.netty handler codec.Encoder Exception: Javaio.EOFException: fieldSize long! Length is 14129, but maximun is 5

#

help

tardy delta
#

?notworking lol

undone axleBOT
#

"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.

tardy delta
#

what are yo doing

hearty swift
#

update protocol 1.12.2 to 1.13

#

and it doesnt let me join

grim ice
#

can someone

#

explain this

tardy delta
#

im sorry i dont have my consumers talking

hearty swift
#

can someone help?

tardy delta
#

what is protocol? protocollib?

hearty swift
#

for mc 1.13

#

i update from 1.12.2

lavish hemlock
#

(Not what he asked)

tardy delta
#

lol what is that protocol you said

hearty swift
#

340 to 393

tardy delta
#

💀

lavish hemlock
#

(What the fuck does that even mean)

tardy delta
#

maow give me some bird seeds

hearty swift
#

the game protocol

lavish hemlock
#

Oh the server protocol?

hearty swift
#

same

#

yes

tardy delta
#

and what is that for a beast?

lavish hemlock
#

I wouldn't describe it as the same thing since the "game protocol" doesn't exist.

hearty swift
#

to update so the players can join from 1.13(updating from 1.12.2)

sage patio
#

How I can create infinity locations ?
creating a location each tick in a runnable

grim ice
#

i dont see how would that help

lavish hemlock
#

The only protocol in Minecraft is the one used for communication with a server

hearty swift
#

go to game file

grim ice
#

@lavish hemlock hi can u explain this

quiet ice
hearty swift
#

it is called protocol: (number) lol

grim ice
#

this just makes an object

#

of the class

#

that does the same thing as

#

new Object()

lavish hemlock
grim ice
#

just less straight forward

grim ice
lavish hemlock
#

Only let consumers use your interfaces and enums, not your implementations (concrete classes)

quiet ice
#

It doesn't mean that it needs to be a fully fledged implementation

#

You can just expose it as an interface

grim ice
#

what

lavish hemlock
#

Create an interface, have your implementation implement the interface, privatize that internal method, and only pass around the interface

#

You also need a method or factory that creates your implementation

grim ice
#

OOHHH

quiet ice
#
public interface ICar {
    public void driveInto(IDestroyable object);
}

Something like this

tardy delta
#

public 💀

#

lmao

lavish hemlock
#

Fun fact: All methods in an interface are public by default

quiet ice
#

I prefer to have implicit modifiers explicit

tardy delta
#

class Tree implements IDestroyable

lavish hemlock
#

Also fun fact: DON'T PREFIX IT WITH I

#

It's unconventional for Java

#

Conventional for C#, not Java

quiet ice
#

It is conventional in minecraft space

#

To some degree

lavish hemlock
#

Java prefers shit like Car (interface) and CarImpl/BasicCar/BaseCar/DefaultCar (impl/concrete class)

lavish hemlock
#

And ftr it's mainly conventional in Forge

quiet ice
#

Anyways, I used it to show that it is an interface, not a fully fledged class

grim ice
#

who cares about the I just let him continue explaining lmao

quiet ice
grim ice
lavish hemlock
#

Well it's a semantic property of an interface

grim ice
#

OH

lavish hemlock
#

I don't think you should be catering to people who don't know all interface fields are static

lavish hemlock
grim ice
lavish hemlock
#

No

#

Package-private

#

Define no modifier in a concrete/abstract class, that is package-private

quiet ice
young knoll
#

What’s the dif between package private and protected

#

I never remember

grim ice
#

Package-private?

#

is that a keyword

young knoll
#

No

quiet ice
#

You will treat the interface like a class, and thus forget that all fields are initialized when the class is loaded

grim ice
#

Oh

lavish hemlock
#

I mean I immediately saw a problem though

#

The fact that that is an improper way to use an interface

grim ice
#

if i define no modifier its gonna be default public

#

??

lavish hemlock
#

That only applies to interfaces

grim ice
#

wtf

#

ive had that info all the time

lavish hemlock
#

Since interfaces, until newer versions, cannot have non-public members

lavish hemlock
#

And that's just a property of convention

#

But, as you said, it is also just wrong

lavish hemlock
grim ice
#

for my main class

quiet ice
#

Illegal modifier for the interface method method; only public, abstract, default, static and strictfp are permitted

grim ice
#

since like

#

i cant say "what is my main class"

quiet ice
#

J8

lavish hemlock
#

Private methods were added to interfaces in Java 9

quiet ice
#

Exactly

young knoll
#

Lol

#

strictfp

lavish hemlock
#

R.I.P. strictfp

#

It will not be missed

young knoll
#

You can still use it though

lavish hemlock
#

Sure but it has no semantic meaning

young knoll
#

For the lulz

lavish hemlock
#

Also god I just saw this

#

Constructors weep in fear

grim ice
#

nah i fixed that

#

just didnt commit yet

young knoll
#

Is for me?

lavish hemlock
#

(Not only that but it is also a great example of ✨ tethering)

#

(Wait what word am I looking for)

tardy delta
#

heh saw it too

young knoll
#

Reminds me of the register methods in the enchantment class

#

People use it anyway :p

grim ice
#

i still dont get how would that apply

#

to me

lavish hemlock
#

Because having public internal methods goes against object-oriented programming principles (and therefore the point of OOP)

#

E n c a p s u l a t i o n

#

Only give people what they need and should use

grim ice
#

what

#

well

next stratus
#

At what point should I drop support for 1.8 -> 1.12? I paid someone to help with adding support and I feel like dropping support will be a waste of money to myself

grim ice
#

in the class conclure was referring to

lavish hemlock
#

Yes, there is

#
    /**
     * IMPORTANT NOTE: THIS SHOULD NOT BE USED OUTSIDE OF API INTERNALS. THIS IS NOT FOR YOU.
     *
     * @return StructureManager Object
     */
    public StructureManager getManager() {
        return manager;
    }
grim ice
#

not that

#

he was talking about stuff in api package

#

he said it was not abstracted

lavish hemlock
#

Oh well he's not really wrong

#

They seem more like util classes than API classes

tardy delta
#

is there some library for database operations?

lavish hemlock
#

Although I'm not sure to help...?

lavish hemlock