#help-development

1 messages Β· Page 317 of 1

buoyant viper
#

nice

tardy delta
#

smh

buoyant viper
#

ah yes, dying at age 16 instead of 80

desert marten
#

I was looking at this exact code yesterday lol

tender shard
#

do people who got birthday on feb 29th, celebrate on 1st march of 28th feb?

#

or do they only celebrate every 4 years?

#

except every 500 years

#

except every 4th 500th year

#

questions over questions

tardy delta
#

day before or after

tender shard
#

but before brings bad luck

lapis lark
#

Well, using a site to do it manually.. Not sure if it is a great solution

kind hatch
#

Yea, not ideal, but it's better than nothing. NMS isn't well documented in the first place so I'm not surprised by the lack of conversion tools.

tender shard
#

?switchmappings

tender shard
#

this might help you ^

kind hatch
#

It's gotten better. The mappings are one major step.

#

I mean, it's certainly a lot better than trying every single obfucsated .a() or .b() method and hoping it works.

tender shard
#

yeah definitely

#

however there's one downside

#

when spigot used their own mappings, there were certain fields that was always the same

#

e.g. EntityPlayer.connection

#

so you could use the same code with reflection for 1.16, 1.15, 1.14

#

now it's either ServerPLayer.a or SefverPlayer.d or Server.f

#

ofc you can use mojang mappings but then you gotta reobfuscate for every single version

#

it would be nice if spigot would just use a remapped jar instead of reobfuscating

#

idk why they dont do it

kind hatch
#

See, that's why I avoided reflection for the most part. I kept finding that things were changing too much between versions so I switched to abstractions.

tender shard
#

yes, ofc that's better

#

but the best idea would be that the actual spigot.jar would use mojang mappings internally

kind hatch
#

I thought that's what the spigot-remapped jar was at first.

tender shard
#

paper e.g. has a feature in paper-dev or paperweight or however it's called, to do that

kind hatch
#

But apparently it wasn't.

tender shard
#

hm no clue

#

also fuck mojang

#

why obfuscate if they release the mappings anyway

#

that's so pointless. Yes, it saves maybe 7mb of disk space

#

but who cares about 7mb

kind hatch
#

Legal licensing I guess?

tender shard
#

Mojang could just release the server.jar unobfuscated and everyone would be fine

#

and then say "here you go, feel free to write plugins, but do not redistribute our own copyrighted code"

#

everyone would be happy

kind hatch
#

I mean, the EULA pretty much says that already.

#

They might as well at some point. They made the brigadier library open source. I don't see why they couldn't just do that with other parts of the game as well.

sterile token
buoyant viper
#

turns out my php.ini was reading from the wrong php.ini file lol

#

or well, getting overriden by one in a different location

river oracle
#

It's not like they are trying to prevent piracy you can get both client and server for free πŸ€·πŸ½β€β™‚οΈ

humble tulip
#

what was wrong with this pr?

remote swallow
#

look at the diff

kind hatch
buoyant viper
#

well MIT is really a

#

"do wtf u want with it"

remote swallow
#

what about do what ever the fuck you want license

buoyant viper
#

pretty close to WTFPL except its a bit nicer sounding for legal teams

kind hatch
#

I wonder if the MIT License could be classified as public domain.

buoyant viper
#

i think only CC0 does that

kind hatch
#

Hmm @wet breach. I added a couple more hikari config settings and was able to reduce the number of leak connection errors. Granted, I don't really understand the full extent of what they do, but it used to spit out multiple errors and now it looks like it's just one.

wet breach
#

which config settings?

#

I could probably explain them

kind hatch
#
    config.addDataSourceProperty("useServerPrepStmts", true);
    config.addDataSourceProperty("useLocalSessionState", true);
    config.addDataSourceProperty("rewriteBatchedStatements", true);
    config.addDataSourceProperty("cacheResultSetMetadata", true);
    config.addDataSourceProperty("cacheServerConfiguration", true);
    config.addDataSourceProperty("elideSetAutoCommits", true);
    config.addDataSourceProperty("maintainTimeStats", false);
#

Those are additional. Before it was just

    config.addDataSourceProperty("cachePrepStmts", "true");
    config.addDataSourceProperty("prepStmtCacheSize", "250");
    config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
wet breach
#

prepare statements isn't just a piece of code in Java, its part of the Driver API

kind hatch
#

Which seems to be standard.

wet breach
#

they tend to be more optimal, and basically setting that option turns all statements into prepared statements

#

There is metadata in mysql, and basically caching that can help speed up future queries or subsequent ones

#

SetAutoCommits doesn't do anything unless you configured the DB to not use them or the server. By Default MySQL has it enabled so your setting doesn't do anything

#

not sure how many prepared statements you have

#

but I don't think you have 250 of them

kind hatch
#

How is that measured? Total in code or during runtime?

wet breach
#

believe that would be total in code, and the sql one is the runtime

#

so one is the objects, the other is the actual queries

#

don't quote me on that lol, would have to look at the source code to verify

kind hatch
#

Hmm, so that leaves useLocalSessionState and rewriteBatchedStatements. The latter seems obvious enough, but what about the former?

quaint mantle
#

how to get player nickname?

sterile token
undone axleBOT
sterile token
#

Look for Player class, and then you will have all the player properties, method names, what returns, what arguments they requiere, etc

tidal crystal
#

Hi guys! I have a question related to the Spigot & Bungeecord development. Is there a fix in the works for CVE-2022-1471? I've seen that intellij was reporting that problem :p

remote swallow
#

the what now

tidal crystal
#

is a vulnerability that allows malicious and arbitrary code execution through yaml files.

wet breach
pseudo hazel
#

the fix is to use the SafeConstructor or whatever that is

wet breach
#

ultimately it doesn't matter

remote swallow
tidal crystal
wet breach
#

it is not the duty of a group like spigot to protect you from yourself

tidal crystal
#

xD yeah, I know, but it might be wise to help people. I wanted to know so I could create a PR for Bungee at least to help :p

wet breach
#

it would also be wise for people to not download jars from random people as well

#

so anyways, I fail to see it being a vulnerability since said vulnerability mainly relies on the end user to perform

tidal crystal
#

yeah I know. All I wanted to know if the developers were working on something for it or not. I wanted to help them

wet breach
#

you are more then welcome to make PR's

#

?CLA

#

?cla

undone axleBOT
tidal crystal
#

yeah, that's the main reason I was asking, it won't be useful to just re-create the work they're already doing πŸ˜„

wet breach
#

make a pr that provides the relevant fix

tidal crystal
#

thanks for the info anyway

wet breach
#

if its of acceptable quality, odds are it just might get accepted

#

but yeah this is a vulnerability that really doesn't matter when we have things like reflection in Java

#

that do like worse things

harsh badge
eternal night
#

1.8.8 kekw

#

check line 286 in the LunarClientAPI class

eternal oxide
#

probably the wrong version

eternal night
#

is it not ?

#

oop

#

no I presume it is not

eternal oxide
#

its kinda both

#

its a full client but there is a server plugin for added functionality

#

If I remember

#

Seems not I can;t see any DL for their API

remote swallow
#

its on github funnily enough

eternal oxide
#

their website is terrible

remote swallow
#
GitHub

Bukkit API for interacting with Lunar Client. Contribute to LunarClient/BukkitAPI development by creating an account on GitHub.

GitHub

A Bukkit plugin that makes Lunar Client integration easy - GitHub - LunarClient/BukkitImpl: A Bukkit plugin that makes Lunar Client integration easy

#

yeah

eternal oxide
#

For a full list of mods, visit our mods page. I can;t find a mods page

#

just the same crappy website

sterile token
eternal oxide
#

yeah, click that, it shows no mods list

sterile token
#

oh right

#

Its really shity

#

hahaha

#

That why always Vanilla >> Every shity 3rd parties

final monolith
#

How i can disable server achievements?

#

code

sterile token
#

You can use game rule

final monolith
#

nah, i want code

sterile token
#

Yes via code

#

Im saying

final monolith
#

πŸ€”

sterile token
#

You can get the world, then get the game rules and set the ahivement game rule to false

final monolith
#

Oh, thanks!

#

ive noticed.

sterile token
#

Maybe there is one more efficient

sterile token
sterile token
#

I need some recomendations what would be the most efficient way for parsing my custom placeholders?

tardy delta
#

show code

sterile token
#

I havent write so far

tardy delta
#

πŸ’€

sterile token
#

I was thining about using regex but i gived up

tardy delta
#

about what placeholders are we talking tho?

sterile token
#

So far i think something like the next code, will be for simple text placeholders (they wont depend on the player)

Formatter format(String text, Object... args)

Im stuck inside the args part

tardy delta
#

uhh what placeholders

#

text.formatted(args) if thats what you mean

sterile token
tardy delta
#

String#replace?

#

probably slow but who cares for a minecraft plugin

sterile token
#

My goal is to pass something like:

Placeholders placeholders = plugin.getText().getPlaceholders();
String input = "Hello %name%, your age is %age%";
String formatted = placeholders.format(input, "name", "Test", "age", 16);
#

Im just strugging at the Placeholders#format(String, Object...) cuz i need keep each args, divided by 2

#

So the pattern is the next: ["var-1-name", "var-1-value", "var-2-name", "var-2-value", etc]

tardy delta
#

whats difficult about that?

sterile token
#

πŸ’€

tardy delta
#

and why would you use regex

sterile token
tardy delta
#

im in a parsing mood so id just loop through the whole string, look for % signs

#

constructing a parameterized lang key or smth

river oracle
#

Seems easy just match inside grouping symbol than loop through and replace the place holders

sterile token
sterile token
tardy delta
#

creating an object that wraps the string and has functionality to bind placeholders to it

river oracle
#

No it's also fairly easy to apply

river oracle
tardy delta
#

what even is a keymap?

cedar laurel
#

Does the Spigot Forum have an API?
I wanted to make an integration with a bot for Discord, to deliver automatic roles to those who buy a premium plugin

sterile token
rotund ravine
lunar schooner
#

Hi. Is it intented for the bukkit package string minor version to not match the game's minor version? I'm running 1.19.3 but getting v1_19_R2

echo basalt
#

Yes

quaint mantle
#

ok so some people said the session ID isn't sent to the server for security reasons (which is good) but i was browsing through mcp and found this in net.minecraft.client.Minecraft

lunar schooner
#

Oh, TIL

#

What would be the recommended way then to get the game's minor version?

quaint mantle
quaint mantle
#

thanks lmao

#

so the server doesnt recieve session 100%?

rotund ravine
#

Not the token no

sterile token
tardy delta
#

uh what

sterile token
rotund ravine
quaint mantle
#

also does anyone know how to properly load mcp in intelliJ so that pressing ctrl + P shows the definitions?

tardy delta
#

uh properties doesnt implement map but hashtable, maybe that smth

#

but i mean

compact haven
#

You can get it as properties though

#

a πŸ—ΊοΈ

quaint mantle
compact haven
#

JESUS FUCK

tardy delta
#

just need a way to iterate over the entries

compact haven
#

iPhone I’m done with your auto correct

buoyant viper
#

so .forEach(entry -> {});

tardy delta
#

wait you can just do properties.forEach

#

tf

buoyant viper
#

hmm

lunar schooner
buoyant viper
#

idk its type or methods so i was just basing off what u sent

rotund ravine
buoyant viper
rotund ravine
#

@tardy delta do properties.forEach

lunar schooner
buoyant viper
rotund ravine
#

Is that a thing

buoyant viper
rotund ravine
#

Oh

lunar schooner
#

Some splitting later, and I've got my major and minor versions working again :)

rotund ravine
#

My bad

tardy delta
#

just made smth simple @sterile token

sterile token
#

Oh ookk, i will base on that

buoyant viper
#

smh

sterile token
tardy delta
#

cuz i dont have smth spigot related open

buoyant viper
#

dam

tardy delta
#

might wanna do a better parsing than StringBuilder#indexOf but whatever

buoyant viper
#

.replaceAll AbsoluteHalal

sterile token
sterile token
tardy delta
#

replaceAll ir regex

buoyant viper
#

.replace AbsoluteHalal

sterile token
tardy delta
#

meh a properties object is threadsafe

buoyant viper
#

couldve sworn there was some method in String class to do a non-regex replaceAll

#

this is gonna bug me now

tardy delta
#

replace replaces all occurrences

buoyant viper
#

oh it is replace

tardy delta
#

im wondering why people havent made a better version of the String class

#

immutability ye but whatever

buoyant viper
#

string utils class

compact haven
#

wdym people

tardy delta
#

apache commons ig

compact haven
#

like SDK developers?

#

because a new String class would just be hell

tardy delta
#

idk just developers that thought, damn this impl sucks

buoyant viper
#

sucks that it cant be extended on

compact haven
#

I don’t think you can extend or modify the impl of String

tardy delta
#

one that doesnt need to mess with charsets and internal conversions before it can do anything

compact haven
#

it’s final class no?

tardy delta
#

you cant

#

yes

buoyant viper
#

yeah u cant extend it sadgery

compact haven
#

kekw

tardy delta
#

wondering what would happen if you could actually extend it

#

string constant pool would probably break

compact haven
#

NoCaseString extends String

lunar schooner
#

The 8th constructor argument to PacketPlayOutRespawn in 1.19.2 was boolean keepAllPlayerData, this is in 1.19.3 byte dataToKeep. Is there any resource on what exactly this data is?

#

I'm assuming its bitflags, though

remote swallow
buoyant viper
tardy delta
#

did you know that String.class.getClassLoader() is null?

buoyant viper
#

is that the case for all java.lang classes

tardy delta
#

nailed me

buoyant viper
#

Wat

tardy delta
#

wasnt sure about 'every class'

buoyant viper
#

neither am i and i am in bed too lazy to get out and test

lunar schooner
#

Oh right, forgot about wiki.vg. It lists a totally different number of variables though 🀣

tardy delta
#

why are you in bed

buoyant viper
#

bc im bored

#

and just ate

#

so a little tired

tardy delta
#

just ate the fried rat

lunar schooner
#

So looking at the source and mini's mappings, I'm guessing its a bitfield, setting it to 0xFF is probably fine, considering it's used to determine what playerdata is kept ( I think)

quiet ice
#

I believe there are like 100-ish classes that need to be initialized before anything can happen in the first place.

tardy delta
#

:o

quiet ice
#

Plenty of those probably aren't loaded by any classloader

tardy delta
#

they are just loaded by the system then

quiet ice
#

well JVM

twilit wharf
#

What would be the best way to override a default crafting recipe? I know that I can loop through the iterator and make my own, but I saw somewhere that there are hidden recipes that then get ignored. I saw that you can do it through NMS, but the examples were out of date and I couldnt find the modern versions. What is the best way to replace the default crafting recipes?

rotund ravine
#

The iterator or the events pertaining to the recipe Crafting events, smelting events etc.

twilit wharf
#

the Bukkit.recipeIterator()

quaint mantle
#

anyone know where the Start.java class is used? in src/minecraft/Start.java (found in MCP)

chrome beacon
#

Probably in the start command

#
  • manifest
rotund ravine
quaint mantle
chrome beacon
#

Arguments are passed in the startup command

worldly ingot
#

Start.java is probably Main

topaz cape
#

I injected into the players netty channels and tried to override PacketPlayOutNamedEntitySpawn to change how a player looks like into an entity and it worked! only 1 issue though

#

When you join the server or switch the world the player goes invisibile

#

instead of spawning

#

but when you change the render distance settings or walk around he'll be visible back

#

does anybody have an idea what could have happened there

marsh hawk
#

Does anyone know if the playEffect for Step_Sound has like an initial delay or something? For some reason it always spawns the effect with a noticable small delay of a few ticks.

quaint mantle
#

also I recompiled MCP where is the outputted jar

worldly ingot
#

No clue. I haven't touched MCP in donkey's ages because modern tools like Forge and Fabric facilitate client modding

#

I don't even know what method you're referring to that accepts args. Is it a main method? If so, the args are probably passed to the program via the IDE

quaint mantle
quaint mantle
#

also does anyone know where this is in the files?

dry yacht
frank kettle
#

if i have a server texture pack, is it possible to know when a player "finishes download/loading" the texture pack? because players get stuck mid air or can be attacked while they cant move at all in that process?

remote swallow
quaint mantle
#

is there a community around MCP no one seems to know how to properly recompile the jar and where the output file is

remote swallow
#

why would you need mcp

river oracle
#

what the fuck is MCP that makes me think about Pocket Edition lol. If its some modding thing there is 0 reason not to use Forge or Fabric though

remote swallow
river oracle
remote swallow
#

now they do

quaint mantle
#

but its not recompiling with my changes

#

where can i find people who know about mcp

river oracle
#

also why are you asking in spigot

#

and not forge or something

remote swallow
#

why do you even need mcp

quaint mantle
remote swallow
#

wanna know somethign really cool

#

all the docs on this

remote swallow
quaint mantle
#

client side

remote swallow
#

why though

river oracle
#

spigot isn't a modding api

quaint mantle
river oracle
#

musta gotten banned from forge lol

#

iirc they don't tolerate outdated versions

quaint mantle
#

yup

river oracle
#

you're lucky spigot is nice. I think those tryna support 1.8.8 still is dumb especially with mods

next plume
remote swallow
river oracle
worldly ingot
#

especially if they use git archive, work in untrusted repositories, or use Git GUI on Windows.
This likely doesn't affect a lot of people in this cord, but it's still good to be up to date just in case

#

Thanks o/

river oracle
#

my browser has an update too

#

mmmm I love librewolf

next plume
#

Last time I updated git was 16 months ago. πŸ€ͺ

worldly ingot
river oracle
quaint mantle
#

so if no one knows how MCP works how can I change the minecraft client side code? an example of a recompiled 1.8.9 jar would be forge

remote swallow
#

this has nothing to do with modding, 1.8 is heavily outdated and that just seems like a bad idea

worldly ingot
quaint mantle
#

and the forge jar is obfuscated

#

i have an app called recaf

remote swallow
#

wait until you realise that mcp stands for mod coder pack

quaint mantle
#

but it only works on non obfuscated jars

worldly ingot
#

I don't imagine there's much you can't do with Forge that you would need MCP

quaint mantle
#

the difference is my mod would show up in the minecraft launcher

#

but with my own selection of mods

#

it shows up here

remote swallow
#

that looks like multimc

quaint mantle
#

except it goes in the mc launcher

#

Is there a method to do this without having gay shit

#

Bukkit.getCommandMap().register(pluginName, command);

remote swallow
#

getCommand('command').setExecutor

quaint mantle
#
  1. spigot always has a bunch of annoying things like that (ur lucky in this case as EpicEbic said)
  2. get cancelled for putting down gays
quaint mantle
remote swallow
#

getCommand("commandName").setExecutor(new ClassThatExtendsCommandExecutor())

quaint mantle
quaint mantle
quaint mantle
spring minnow
#

how do i stop creepers from exploding?

#

i mean, i would need them to stop even from doing the explosion animation

#

so i can't just cancel EntityExplodeEvent

quaint mantle
remote swallow
#

have you never touched the spigot api

quaint mantle
spring minnow
#

chill

remote swallow
#

that was for yourboykyle

spring minnow
quaint mantle
#

i read nms more

remote swallow
#

so you should know the method name of a listener, does not matter

spring minnow
quaint mantle
#

im supposed to remember every event's name?

remote swallow
#

the event name no

#

you said a method name

quaint mantle
quaint mantle
remote swallow
#

you should have the name of the Command from the constructor, otherwise use getName

spring minnow
quaint mantle
#

i dont think that u can cancel the creeper animation in normal spigot

#

if u used NMS probably

spring minnow
remote swallow
spring minnow
#

just though about it at the moment

#

thanks anyway for the help, appreciate that

lunar schooner
#

Hi, I noticed PlayerOutInfoPacket is no longer a thing in 1.19.3, is there a replacement for this one?

quaint mantle
remote swallow
#

couldnt tell you

#

?jd-s

undone axleBOT
remote swallow
#

check javadocs

eager jacinth
#

Hi guys, please help with caching. Right now the caching works like this: player logged in - user retrieved and cached, player disconnected - removed from cache and updated in database. But I want to make it so that a user can be retrieved even if he is not on the server. I understand how to do this, I just need to check if the user is cached and return it, and if not, get it from the database and cache it, but the problem is different. I get users asynchronously, that is through the scheduler (?), so I have no idea how to implement this.

        User result = cached.get(name);

        if (result == null) {
            /*

              fetchUser(name, user -> {
                  if (user != null) cached.put(name, user);
              });

             */
        }

        return cached.get(name); // <-- I don't think that it's a good idea
    }```
rotund ravine
#

Completeable futures

humble tulip
#

This is supposed to be split into multiple classes but I'm too lazy to do it

upbeat hornet
#

how can I create a list for my custom config file?
Example:

CustomConfig.get().addDefault("CoolItem.lore[0]", "Example Lore");
// Exepected Outcome:
// CoolItem:
//  lore:
//  - 'Example Lore'
remote swallow
#

set CoolItem.lore to a list

upbeat hornet
#

How can I do that?

remote swallow
#
List<String> veryCoolList = new ArrayList<>();
veryCoolList.add("the imposter");
CustomConfig.get().set("CoolItem.lore", veryCoolList);
#

you shouldnt really need to use .addDefault

#

put the config.yml in resources and trigger saveDefaultConfig onEnable

upbeat hornet
torn shuttle
#

I want to take a minute to appreciate that someone installed per world inventories, installed my plugin then left a 1 star review because they forgot they are using per world inventories and think I for some reason added that to my plugin

#

I rate that rating a 5/5

remote swallow
#

and there is still a way to do taht

rotund ravine
#

saveResource

humble tulip
#

lmfaooo

remote swallow
#

?configs

undone axleBOT
remote swallow
#

boom

upbeat hornet
torn shuttle
#

I've just been having some very inspired reviews

remote swallow
remote swallow
rotund ravine
remote swallow
#

it uses it

#

read the link

rotund ravine
#

nty

remote swallow
eager jacinth
humble tulip
#

i made that callback class before i knew abt completable futures

twilit wharf
humble tulip
upbeat hornet
rotund ravine
#

That’s fine.

humble tulip
#

Set<BukkitTask> tasks = Collections.newSetFromMap(new WeakHashMap<>());
this should be safe right?

ivory sleet
#

mye

humble tulip
#

ty

upbeat hornet
#

Is it possible, when prompted to give a path to a yaml file, to specify the whole file?

Example:

String[] mystrs = config.get().getStringList("All file");
// Would return a list of all strings in a list
tender shard
#

this makes no sense

#

getStringList returns a string list from your config

#

you cannot save it as a single string

upbeat hornet
#

nvm

tender shard
#

and what does this have to do with a path to a file?

#

can you show your config file? maybe this helps us understanding in what you're trying to do

upbeat hornet
#

well you need to specify a path

Cool_Item:
  name: "&9DIamond sword"
  lore:
  - "&7Diamond sword"

That function would return an array with {"&9DIamond sword", "&7Diamond sword"}

tender shard
#

uhm I still don't really understand what you're trying to do

hazy parrot
#

ig get every string entry in yaml config

daring pilot
#

is anyone can help me

tender shard
#

no

daring pilot
#

01:52:38 [INFO] [/66.181.184.88:25126] <-> InitialHandler has connected
01:52:42 [INFO] [VPN Killer] - AkaMN - Passed Checked

01:52:42 [WARNING] Plugin listener esas.vpnkiller.features took 3,692ms to process event PreLoginEvent(cancelled=false, cancelReasonComponents=null, connection=[AkaMN,/66.181.184.88:25126] <-> InitialHandler)!
01:52:42 [WARNING] Event PreLoginEvent(cancelled=false, cancelReasonComponents=null, connection=[AkaMN,/66.181.184.88:25126] <-> InitialHandler) took 3,693ms to process!
01:52:47 [INFO] [AkaMN] disconnected with: Could not connect to a default or fallback server. Incorrectly configured address/port/firewall? io.netty.channel.ConnectTimeoutException
01:52:47 [INFO] [AkaMN] -> UpstreamBridge has disconnected

tender shard
ivory sleet
#

ConfigurationSection::getValues where deep=true for the first parameter

upbeat hornet
#

Thanks I'll try it

rotund ravine
#

You don’t need it

humble tulip
#

?

#

oh

#

so

#

I have a bunch of tasks that I'm creating that I want to ensure are cancelled. I don't know how many tasks there will be and I don't want to have to remove the task from the map everytime the task is cancelled (or if it's a delayed task when it's ran)

#

basically i wanna be able to create and forget abt the tasks

#

and when im ready to clean them up, just check the set and cancel all

regal scaffold
#

Hey! Can I get pointed towards some resources to understand and develop my own framework to facilitate plug-in dev in the future.

river oracle
#

are you looking for knowledge on an API plugin or just something to shade in

regal scaffold
#

I want to understand what a framework is, how it works to facilitate plugin dev, how to include it seemingly into your plugin and that type of stuff

river oracle
#

I don't think any plugin frameworks exist, but if you just want to throw a library together I could help you with that

#

I myself have never made a framework

regal scaffold
#

Well if you don’t mind us typing for a sec

#

What’s the difference between a framework and a library then?

#

Why do some people call it framework ( custom and private modtly ) and does it work in the same way than a library would then do?

river oracle
regal scaffold
#

I’ll get to reading. Give me a few

river oracle
#

this is in java script, but similar concepts apply

regal scaffold
#

Great, appreciate it

#

So let’s say, @river oracle . If I wanna make something that assists me in the making of, for example, GUI elements, including acciΓ³n buttons, items, positioning, etc. that would refer to a library no?

river oracle
#

firstly you have to kind of know what you want to make, but you can simply make a new maven project than deploy it to a repository service like, reposilite, nexus (both locally hosted)

#

I have an example on my github

#

one second

regal scaffold
#

But let’s surround this example in the following as an example

river oracle
regal scaffold
#

Something that allows

  • easier GUI creation
  • easier command registration
  • easier SQL management
#

How would one approach that

river oracle
regal scaffold
#

Not what I meant

#

I meant, the process of creating a library, how do you make something that facilitates that type of stuff, for example I saw 1 framework which made adding commands easier by the usage of annotations. I just can’t understand how something I make like that can be implemented inside another project

river oracle
#

maven shade / gradle shadow plugin

#

allow inclusion of other projects uploaded to repository hosting services

#

that's all that is really going on behind the scenes

#

if you want to learn how to use Annotations take a look at how to parse them with Reflection

hazy parrot
#

When you add library to another project, you are basically making all that library code appearing inside of that project jar

regal scaffold
#

Just to clarify a library is like very similar to an API right?

#

If not the same thing

river oracle
#

API is just an interface of code

hazy parrot
#

Api has like a much wider spectar

river oracle
#

this is a pretty good explanation

regal scaffold
#

OH ok I get it

#

I think

river oracle
#

you'd be looking to make a Library though

regal scaffold
#

Now I’m more interested in understanding

river oracle
#

so don't worry about the buzz words

regal scaffold
#

How does a library help simplify stuff

#

Like, how does one separate the functionality into a library

#

How Can making a library make is easier adding a commands

river oracle
#

all a library did is a massive colleciton of utilities and pieces of code that you can reuse across projects

#

so instead of copy and pasting you write it once

regal scaffold
#

That a great high level of abstraction is required

river oracle
#

yes libraries require higher levels of abstraction because its for many projects to implement not just one

regal scaffold
#

Ok that helps

#

So let’s say I wanna simplify the commands things, instead of making the whole method blablsbla

river oracle
#

just take a look at what i do

regal scaffold
#

I use my library to make a high level abstraction, add all the checks in there

river oracle
#

here is what I do for commands

regal scaffold
#

Reading it right now

river oracle
#

note I don't use annotations

regal scaffold
#

As we’re typing

#

Ok going to that file

river oracle
#

I hate annotation command frameworks

tender shard
#

why

regal scaffold
#

Is there a reason

#

Or just personal

tender shard
#

personal

#

ACF is awesome

river oracle
#

its personal

#

I prefer flexability and usually I have my command stuff in yml files for owner to decide most of the shit

regal scaffold
#

Holy shit so many words in that file it’s confusing

#

Can you show me

#

An example how you would implement

#

That, registerSubCommand method

tender shard
#
@CommandAlias("@listCOmmand")
public void onListCOmmand(...)
#

then you can declare what listCOmmand is

regal scaffold
#

He said he didn’t use

#

A notations

river oracle
regal scaffold
#

@river oracle Explain something as well, trying to understand how it all connects.

How does simply adding the command to the Map<String, Command> actually do anything at all?

river oracle
#

My stuff is like

public class ThingCommand extends Command {
  
  public ThingCommand(){
      super(new Label("thing", "thing.admin", new String[]{"things", "thangs"}
  }
}
river oracle
#

its called in the native executor

#

if you want to see where I convert to Bukkit you need to look at MegumiCommandBridge.java

regal scaffold
#

Holy crap that’s a lot of stuff I don’t understand

#

Clearly I got a lot to learn

river oracle
#

though as @tender shard if you want a nice command library without hastle just use ACF I'm sure enough people here use it to help you

#

also ACF has an array of features that could take a while to implement / perfect yourself

regal scaffold
#

I see

river oracle
#

if ACF isn't your cup of tea you can always look at Lamp which is another impressive and nice command framework

regal scaffold
#

Alright alright enough of libraries

#

Now I have another question

#

Sorry if I’m asking too much

regal scaffold
#

Some days ago we were fixing maven stuff here and someone said

#

β€œYou do not wanna shade vault”

tender shard
#

ACF is probably the best command framework

rotund ravine
#

Yes

river oracle
regal scaffold
#

I understand what shade is

tender shard
river oracle
#

no reason to shade vault

regal scaffold
#

But how would you know

#

Not to shade vault

#

Why do you know

rotund ravine
#

Vault is a standalone plugin

#

Do not shade a lib that is standalone

#

You don’t shade protcollib either for example

tender shard
#

because their docs say you to use scope "provided"

regal scaffold
#

What happens if you do shade vault? Nothing unless the server you shade it on installs the plug-in as well?

river oracle
# regal scaffold But how would you know

Think of it this way.

Shade if... When you boot up the server you have no other access to that code. E.g. no server jar, no libraries folder, no plugins folder.

Do not shade if... You have access to the code through the Plugins Folder, Libraries Folder, or Server Jar

Shading libraries you don't need to shade will end up causing Class Not Def Found errors and stuff won't be set up correctly

tender shard
regal scaffold
#

Ok exactly what I thought

#

What happens if

#

2 different plugins

#

Shade the same lib

tender shard
#

that's no problem

river oracle
#

nothing happens because they are working off completely different code

regal scaffold
#

Aaaaaaa I see

#

Ok ok that’s pretty cool

hazy parrot
#

Nothing if its same and compatible version

rotund ravine
#

We use relocation for that @regal scaffold

tender shard
#

shading basically means you copy/paste the code of what you shade into your own project

rotund ravine
regal scaffold
#

But then shading isn’t meant to not have users install dependencies right?

hazy parrot
#

But there might be some problems with different versions, where you have to relocate

regal scaffold
#

Cause it could cause issues

tender shard
rotund ravine
#

Just relocate to be safe, plus it’s easy

tender shard
#

yes

#

I'd always relocate. but in modern spigot versions, it should work fine even without relocating

#

it should work fine, at least

regal scaffold
#

Technically couldn’t I shade a random plugin that I use as dependency and it would work in most cases without needing to install that dependency jar in the plugins folder?

river oracle
#

I've never had issues with not relocating my lib

wicked remnant
#

is it possible to have a final Inventory in my InventoryHolder implementation? I'm asking because Bukkit.createInventory takes an InventoryHolder...

tender shard
#

you can shade libraries and stuff, but not a complete plugin

wicked remnant
#

Spigot does not support jar-in-jar, unlike Fabric

regal scaffold
rotund ravine
regal scaffold
#

And last question for now, I’ve actually learned so much more

regal scaffold
wicked remnant
tender shard
#

just make it non-final

#

oh wait

#

you can

#

easily

#

oh no wait, I'm mistaken

#

you cant, I guess

rotund ravine
#

There’s no need to do what he’s asking

tender shard
#

yeah it doesnt matter whether sth's final or not

regal scaffold
#

As in maven

#

Just doesn’t find it

#

Ignore the provided, it’s set to compile

humble tulip
#

?di

undone axleBOT
humble tulip
#

^for a spigot forum post

regal scaffold
#

It’s not related to that, it’s on why I wouldn’t be able to find the plug-in on the repo

tender shard
regal scaffold
#

Yessir

#

And refreshed

tender shard
#

?paste your pom please

undone axleBOT
regal scaffold
#

Hmmmm gonna take a sec

#

TeamViewer on ipad

tender shard
#

it seems like their repositry URL is broken

#

you gotta add /releases to the repo url

regal scaffold
#

Alright let me try that

tender shard
#

<dependency>
<groupId>org.screamingsandals.simpleinventories</groupId>
<artifactId>SimpleInventories-Core</artifactId>
<version>1.0.6.7</version>
</dependency>

#

that's the only thing they have in their repo that's named like "simpleinventories"

regal scaffold
#

Could this mean it’s heavily out of date?

#

It added, at least

tender shard
#

if you wanna go for version2, this is the latest:

<dependency>
  <groupId>org.screamingsandals.simpleinventories</groupId>
  <artifactId>core-bukkit</artifactId>
  <version>2.0.2-SNAPSHOT</version>
</dependency>
<repository>
  <id>sandals</id>
  <name>ScreamingSandals Repository</name>
  <url>https://repo.screamingsandals.org/snapshots</url>
</repository>
#

yeah their repos are very weird

regal scaffold
#

Wtf that changed a lot

tender shard
#

for version 1.X you need the "releases" repo, for 2.X-SNAPSHOT you need the snapshots repo

regal scaffold
#

I couldn’t find that on their github

compact haven
#

it's called investigation

tender shard
#

I just opened the repo link from the github and searched through it

#

here ^

regal scaffold
#

Aaaaaa I see I see

#

Thanks alex couldn’t have done that from mobile

tender shard
#

np

compact haven
#

reposilite :)

tender shard
#

nexus >

compact haven
#

yeah, until you want something lightweight and simple

#

kekw

tender shard
#

you can however also always just clone the current github repo of that plugin/library, and then do mvn install, then you got the latest version in your repo @regal scaffold

compact haven
#

I've hosted both, while nexus is definitely more configurable, reposilite is much nicer looking, loads quicker, and takes up much less memory

compact haven
#

I guess a benefit of nexus is that you can host more than just a maven2 repository, but like... who actually does that

regal scaffold
#

Might use that method

tender shard
tender shard
#

in this case:

compact haven
#

yep, can agree with that

tender shard
#
  1. clone the repo to some directory
  2. run "gradlew publishToMavenLocal"
#

then you got it in your local repo

regal scaffold
#

❀️

#

Dope dope thankss

tender shard
#

np

#

on linux you gotta use ./gradlew instead of gradlew

regal scaffold
#

On windows but thanks

#

Lol @tender shard

#

Because I’m on mobile I actually didn’t even want to download that one

#

I got lost in my tabs

tender shard
#

lol what did you want to download

#

WHEN DOES MY MACBOOK ARRIVE

regal scaffold
#

Still trying to decide which framework is best for gui

#

Comparing options on mobile is terrible tho

#

I need the ability to allow users to add items in a specific slot as well as typical other features

#

I found one but it’s lost in my tabs and no chance of finding it so going through them again

tender shard
#

oh wait, you are talking about minecraft ingame guis

#

lol

#

sorry

regal scaffold
#

Lmaooo

tender shard
#

yeah sorry I'm currently writing a GUI desktop so yeah

#

which version are you using?

#

When I do GUIs, I usually just add a "tag" to clickable items using pdc, e.g. "action" -> "nextPage", then in InventoryClickEvent I check for that action adn then do the appropriate stuff

regal scaffold
#

Version of what exactly? The problem I have is most API don’t let me access the slot where I need the user to be able to drop an item and then get what that item is

tender shard
#

version of spigot api

regal scaffold
#

You don’t even use a library to make guis?

#

Latest

tender shard
regal scaffold
#

That’s suffering tho

tender shard
tender shard
#

but I didnt find any GUI framework that I like

regal scaffold
#

Man I just need to find the 1 I saw earlier

#

That allowed me to have a slot

#

For the player to add items there and then I’ll just not use the library to get what the item is

tender shard
#

have you checked the spigotmc resource list?

regal scaffold
#

Yes those are the ones I checked

tender shard
#

ah ok

regal scaffold
#

Pretty sure it’s one of those

tender shard
#

hm

#

the only thing I know is InventoryFramework

regal scaffold
#

I checked it

tender shard
#

(out of that list)

regal scaffold
#

Doesn’t allow it

tender shard
#

sad

regal scaffold
#

Gonna go

#

1 by 1

#

Again

tender shard
#

you could pull request it lol

regal scaffold
#

What

#

Oh

#

Like on IF

#

lmao

tender shard
#

add the feature you are missing to IF

#

yeah

regal scaffold
#

Im not sure my knowledge is big enough

#

To understand a random guys api

tender shard
#

OH DAMN ALMOST 6am, that means I can go take a bath in one minute

regal scaffold
#

And add what I need

#

@tender shard noob question

#

Just off the bat

quaint mantle
#

I am trying to make an animation of a falling object (small structure composed of multiple blocks) is my best bet to use a schematic and repaste it a bunch?

regal scaffold
#

If you see this

#

Without api knowledge

#

It should be possible to interact with the lore property after it’s been created

#

Technically and very broad

#

Like let’s say you wanna change that lore later, the api shouldn’t technically matter to access that property, right?

torn badge
#

What would you guys say is the most efficient way to store locations so I can find the closest one the fastest?

#

I have some special blocks saved in cache, and when an item is dropped, I need to find the closest of those blocks within a set distance

#

Right now I’m saving those blocks mapped to their chunk, that way I only need to check a few chunks within the distance, but maybe there is a better method?

#

I thought about using a TreeMap, but how would I compare locations?

buoyant viper
tender shard
tender shard
tender shard
torn badge
tender shard
#

And do you care about exact location or just block locations (like, doubles, or just ints)!

#

Thats NOTHING

torn badge
#

Just block locations

#

But I need to find the closest position hundreds of times per tick

tender shard
#

You should start to worry if you got a hundred thousand locations. Everything less, do it however you like

torn badge
#

No it creates lag

tender shard
#

What exactly creates lag?

#

Show your code please

torn badge
#

Finding that nearest block

tender shard
#

Then you are probably accidentally loading chunks

torn badge
#

No I use my own class with just the coordinates

tender shard
#

What exactly are you trying to achieve?

torn badge
#

It’s just the algorithm on finding the closest location, because for a 15 block distance you have 9 get calls in the HashMap + x comparisons to find the smallest distance from those within those chunks

#

So that’s at least 20 calls per dropped item, which could easily add up to 1000 per tick

tender shard
#

What locations do you actually need to find?

#

You could take a look on how NMS does it

torn badge
#

Of some placed special blocks

tender shard
#

Eg sheep going to grass blocks

#

One sec

#

Check out the MoveToBlockGoal from nms

#

Do you actually need to recalculate your stuff on every tick?

#

Wouldnt once per second be enough or sth?

#

You can btw also do it async using ChunkSnapshots

#

Ofc you gotta refresh those from time to time, but as said - what do you need it for?

torn badge
#

It’s called whenever an item drops, because I need to cancel the drop if there is such a block nearby

tender shard
#

Oh

#

Like

#

ItemSpawnEvent?

torn badge
#

Yeah

tender shard
#

You could create a Mal<Chunk, Location> or sth

#

Map*

#

Sorry im on the phone lol

torn badge
#

Yeah that’s what I currently have

tender shard
#

Ah i see

#

And whats the issue with that?

torn badge
#

Map<Chunk, List<Location>>

#

It’s way faster than a pure List, but still not as fast as I would like it to be

tender shard
#

Btw tiny tip; nested collections are nasty. Rather create a new class called ChunkLocationList that implements Map<Chunk, List<Location>>

#

Nested generics are always nasty, thats why nasty and nested sound so similar

torn badge
#

A TreeMap could drastically reduce the get calls needed, if I found a good way to sort locations

#

I was thinking about using the distance from the world origin as the comparator

tender shard
#

distanceSquared in this case please

torn badge
#

Yeah

#

But I don’t know if that would even work

tender shard
#

I still dont know what your plugin does, so its hard to think of better alternatives :p

torn badge
#

There are just special blocks you can place which pick up dropped items

buoyant viper
#

hoppers AbsoluteHalal

vital yacht
#

You could just make smaller chunks like 4x4

#

And multiple chunks point to the same β€œspecial block”

#

It depends how many special blocks you have and their range

torn badge
#

Because it would take more get calls in the Map

tranquil stump
#

anyone know of a plugin or method to make a server joinable via eaglercraft. its 1.8.8 in the browser and you could maybe use via version?

shell leaf
#

Does any of you know a registration plugin which when you log in to a website is automatically written to the whritelist then to say use wordpress

charred blaze
#

Can someone give me an example how to spawn redstone particle? I'm struggling on blockdata

gleaming grove
formal jolt
#

Hello, i'm trying to make a bow which fire two arrows. But the second arrow trigger the events too and so it fire arrow endlessly.

I have try to store data in the arrow and to store the arrow inside an array but it seems it dont work.

@EventHandler
    private void onUseBow(ProjectileLaunchEvent event){
        if(!(event.getEntity() instanceof Arrow)) return;
        if(arrows.contains(event.getEntity())){
            arrows.remove(event.getEntity());
            return;
        }
        if(!(event.getEntity().getShooter() instanceof Player)) return;

        Player player = (Player) event.getEntity().getShooter();
        ItemStack itemStack = player.getInventory().getItemInMainHand();

        if(itemStack == null || !itemStack.hasItemMeta() || !itemStack.getItemMeta().getPersistentDataContainer().has(new NamespacedKey(Main.instance, "TYPE_CHROMATIN"), PersistentDataType.STRING) ||
                !itemStack.getItemMeta().getPersistentDataContainer().get(new NamespacedKey(Main.instance, "TYPE_CHROMATIN"), PersistentDataType.STRING).equals("BOW")) return;

        Bukkit.getScheduler().scheduleSyncDelayedTask(Main.instance, new Runnable() {
            @Override
            public void run() {
                arrows.add(player.launchProjectile(Arrow.class, event.getEntity().getVelocity()));
            }
        },5L);

    }```
humble tulip
#

That changes

#

Oh wait

#

Nvm

#

I'm on mobile read your code wrong

formal jolt
#

Oh okay !

humble tulip
#

Called isArrowBeingFired

formal jolt
#

I found a sort of work arround

If i spawn the arrow as an entity and set the player, velocity, ... later it works

humble tulip
formal jolt
#

And you solution dont work if two player use the bow at the same time.
Or i would need to use an HashMap to store one boolean for each player

humble tulip
#

Evem if 2 players use the bow at the same time, it's processed at different times

#

Try my solution

charred blaze
humble tulip
#

Yours doesn't work because projectilelaunch event is called before the arrow is returned to be added to the set

formal jolt
#

Yeah but first player would use an arrow, boolean is set to false the second use the bow the boolean is set to true it doesnt launch a second arrow

and the first would have the second arrow launch a third arrow

humble tulip
#

Try my solution

formal jolt
#

The second arrow is delayed so it still have a 15 tick gap

humble tulip
#

Yes

#

That's why you set to true in the runnable

#

Before you launch the arrow

#

Then set to false if it's true in projectilelaunch event

#

You don't even have to set to false in projectile launch event

#

You can do like
IsArrowBeingFired = true;
launchArrow()
IsArrowBeingFired = false;

formal jolt
#

yeah i see now

humble tulip
#

Actually this looks better

formal jolt
#

yeah but it wouldnt work anymore if i add more arrows

humble tulip
humble tulip
#

Fire as many arrows as you'd like between setting it to true and then to false

#

If it's true in the listener, don't set it to false just return

wet breach
#

Either you do it like that or you use a counter. Anytime it is a 0 fire 2. If its 1 just return and reset counter back to 0.

#

Dont need anything complex to solve this problem πŸ™‚

lunar schooner
#

Hello. I'm working on updating my plugin for 1.19.3 from 1.19.2, but noticed PacketPlayOutPlayerInfo has been removed. Is there a suitable replacement for this one?

eternal night
#

I presume spigot has it under Mojang names now?

#

The concept of the packet still exists

lunar schooner
#

Thats what I thought too, and I came accross ClientboundPlayerInfoRemovePacket, but it doesn't yield the same result (refreshing the skin)

chrome beacon
#

Yeah that's the remove packet

lunar schooner
#

Oops, ment to paste ClientboundPlayerInfoUpdatePacket

lunar schooner
#

Yep sending those two, but yet I end up with a Steve skin, rather than the set skin (which is visible for other players)

eternal night
#

are you creating the player info update packet properly

#

its layout changed

lunar schooner
#

I do believe so, using the constructor (EnumSet arg0, Collection arg1) , the EnumSet containing 1 action: ADD_PLAYER, the Collection containing the EntityPlayer

#

I've tried the static method createPlayerInitializing as well

eternal night
#

that would be the right one yea

#

the latter one

lunar schooner
#

Thats what I was hoping yeah. First sending the remove packet followed by the add packet yields a default skin though

#

Curious if the original Info packet was split out further than just the new remove and info update packets

eternal night
#

no

#

game profile is synced with the ADD_PLAYER action

#

which is the part that holds the skin

lunar schooner
#

And that is why I'm so hopelessly lost 🀣

#

I set the skin data on the game profile, send a infoRemove, infoUpdate, respawn, experience, position and finally a heldItemSlot packet

wet breach
#

Need to update the tab list too

#

Which is what clients primarily use to obtain information in how to display other players on the client

lunar schooner
#

Is that used for the self player too? As from the perspective of another player things do work

wet breach
#

Not entirely sure lol

#

But worth checking out

#

Typically that is all you really needed to mess with other then updating game profile

lunar schooner
#

Shouldnt the info update packet also update the tab list? According to wiki.vg anyways

wet breach
#

Well could have changed recently. Havent messed with 1.19 series yet

lunar schooner
#

Fair

#

Interesting, looking at the client logs:

Ignoring player info update for unknown player d8a083de-0ed6-4cba-ad50-1c5887365a92

Yet printing the players UUID on the server does yield that UUID

wet breach
#

Well try sending a tablist packet with updated info

#

Interesting it says unkown player lol

lunar schooner
#

Okay uhm, I think I might declare myself stupid

lunar schooner
#

my packet abstractions implement a Packet interface. That interface has a send method implemented in the interface, and an Object getInner to get the actual nms object

#

as my packet abstractions are just record PacketName(Object inner)

#

so I had this:

public record ClientboundPlayerInfoUpdatePacket(Object inner) implements Packet {

    @Override
    public Object getInner() {
        return null;
    }
}
#

Spot the problem? 🀣

wet breach
#

Nice one

lunar schooner
#

Time to add an Objects#requireNonNull in the Packet πŸ˜‚

wet breach
#

Dont recommend that

lunar schooner
#

Do tell?

tardy delta
#

record Packet(Object getInner) πŸ‘¨β€πŸ¦°

lunar schooner
#

An if clause with a warning might be better, even though the error is most likely to be caught in development

wet breach
#

Only use that if it is an api and you are imolementing thus in control to detect nullness. If you use that on something that can be null it will throw an error that is different and not make it obvious that the object is null when you stated to the jvm it cant be null

lunar schooner
#

Fair fair

#

for error-cleanlyness I'll use a Logger#warn

paper viper
#

Lets say i have a strider
Entity strider = ...
how do i give it a sattle?

wet breach
#

Need to get a valid instance of an entity that is spawned

paper viper
#

Entity strider = Bukkit.getWorld("testw").spawnEntity(toSpawn, EntityType.STRIDER);

#

is that valid enough?

wet breach
#

Not sure if that works. Anyways, it should be a matter of setequipment

paper viper
#

there is no method called setequipment/setsattle/givesattle

#

1.19.2

chrome beacon
#

There is

#

The strider is a steerable entity

paper viper
#

which entity are you importing?

wet breach
#

Also instead of using base entity, why not use stryder object

chrome beacon
#

^^ also use the spawn method that takes a consumer

wet breach
#

Oh olivo beat me

paper viper
#

yea i need the org.bukkit.entity.Strider

wet breach
#

You should always use the appropriate entity object. Cast when you need more generic object. Or you can cast up but that is just more work lol

chrome beacon
paper viper
#

thanks

vital yacht
tardy delta
#

in the best case they are

torn badge
knotty meteor
#

Does someone know if there is a swimspeed function for 1.12.2?
Because i cant find it.

torn badge
#

So I have so cal get() for all chunks in range, collect all blocks from the value list and then iterate over all of them to find the closest

paper viper
#

and how do i put the player onto the strider then?

remote swallow
#

strider.addPassenger

paper viper
#

i teleported after that πŸ˜€

lilac dagger
#

why am i getting the usages annotations?

remote swallow
#

its intellij, it shows how many times that variable is used in your code

#

right click them to hide it

lilac dagger
#

nice, thank you πŸ˜„

glossy venture
#

whats the best way to run code when an object is garbage collected? i know about Object#finalize() but ive seen Java internals use like a Cleaner class or something which seems like it may have to do something with it

#

well when its about to be collected

rotund ravine
#

?xy

undone axleBOT
glossy venture
#

i need to free some off heap memory when the OffHeapStack gets collected

verbal slate
#

Guys, help, what can I do about it?

glossy venture
#

ill just use finalize, prob wont be collected often anyways

#

so if it works its fine

knotty meteor
#

Does someone know if there is a swimspeed function for 1.12.2?
Because the swimmingspeed functions for newer versoind doesnt exist in 1.12.2

remote swallow
#

iirc swimming got added in 1.13

glossy venture
#

yeah

#

in aquatic update

#

cant swim below 1.13

rotund ravine
glossy venture
#

unless you use mods

rotund ravine
#

?jd-

#

?jd-s

undone axleBOT
rotund ravine
#

@glossy venture @remote swallow You have always been able to swim, just not the new swimming way.

remote swallow
#

well yeah

rotund ravine
#

I am sure he’s just asking about increasing his speed in water

glossy venture
#

boost velocity in water

#

dont think theres a method for that built in

knotty meteor
rotund ravine
#

Not in the api i think.

verbal slate
glossy venture
#

dont think it is without manually modifying velocity or smth

rotund ravine
knotty meteor
#

Hmm yea i will try with velocity, thanks!

glossy venture
verbal slate
glossy venture
#

though idk if that can be done with just PlayerMoveEvent might have to listen for packets

random schooner
#

hello

#

someone who can help me with some plugins?

glossy venture
#

unless you mean developing

#

plugins

random schooner
#

yes

#

i have listbans

#

and i cant fixed

glossy venture
#

what

#

litebans?

#

or custom

random schooner
#

y pay for this plugins

#

i pay*

glossy venture
hazy parrot
#

If you pay for plugin, you probably want to ask plugin dev

rotund ravine
random schooner
#

and the problem is "Databased"

#

i don't know how to make it

glossy venture
#

bro we cant help with plugins

#

move to help server

#

or ask the dev

random schooner
#

here is more to webpage

remote swallow
worldly ingot
verbal slate
glossy venture
#

so the Cleaner class is related