#help-development

1 messages · Page 684 of 1

unreal quartz
#

Well you only really need to override hashcode if you also override equals

tender shard
#

seems like I only dreamt that this annotation existed

#

because I cannot find anything about it

unreal quartz
#

Maybe the annotation had chicken wings

remote swallow
#

@Noveride("ClassName")

tender shard
#

only thing remotly similar I found is @OverridingMethodsMustInvokeSuper which is more or less the opposite

torn shuttle
#

man fluid sims in blender are substantially slower than I thought they would be

#

and, uh, unstable

smoky oak
#

blender in general is hard to use

torn shuttle
#

eh I don't find it hard to use

#

I've just never done fluid sims before

#

well, I never actually tried anything beyond observing that they work more like

shadow night
#

Fluid sims?

smoky oak
#

'because you clicked this plus instead of that plus that looks identical, you created a new tab instead of creating a new material' - Cpt. Disillusion ca. 2018

torn shuttle
#

it's been 5 years

#

blender doesn't look the same since then

#

that being said managing materials correctly is still a skill I've not fully mastered

unreal quartz
shadow night
#

I love and hate blender

torn shuttle
#

it's a great piece of software for something that is entirely free

smoky oak
#

i mean

#

the software is free on accident

#

soooo theres that

torn shuttle
#

that's a cool dismissive way of putting it

smoky oak
#

they named it before registering the domain

#

and then the domain they could've put a paid software on was already taken

torn shuttle
#

you think the blender corporation has just sort of failed to realize that people can download it for free decades after release?

smoky oak
#

so

#

free

torn shuttle
#

you know they could've just gotten a different domain if that's even a legitimate issue

grizzled oasis
#

asking about memory leaks, spark can help finding them and how i can identify them? (im just wonder because tps are low around 18.60 im hosting everything on my pc and playing with it)

torn shuttle
#

yes

#

you can get a memory dump

grizzled oasis
torn shuttle
#

low tps can be a million things

#

you don't know for sure that you have a memory leak unless you observe it happening

grizzled oasis
#

but not sure for the others (if they exist)

torn shuttle
#

lol good luck

#

I'm just going to go to the gym

grizzled oasis
#

for me seems not to be the case (1.19% the plugin on the total 19 TPS using enchants even heavier ones and pets and everything using)
0.75% CPU (Process)

Seems for me being good so i don't have to fix anything

rare rover
#

what's the best way to make things "regenerate" i'm wanting to regenerate lots of blocks and i dont think i should use multiple runnables, i could make a timer map

#

something like that

#

that has expirable keys

#

like each block will have a 5 second timer or something like that

warm mica
tender shard
warm mica
#

And a single scheduler that runs every tick and goes through x blocks from that queue

tender shard
#

yes

rare rover
#

that's what i did before yeah

#

with an expirable map

tender shard
#

well I wouldn'T use a map, you will always only need the first entry of that collection

#

or at least not an expiring map

rare rover
#

yeah okay, i'll do FIFO

rare rover
#

just an example ofc

tender shard
#

basically like that, more or less, yeah. I came up with this

rare rover
#

yeah okay 👍 my entry thing

#

no need for generics in the end

#

but

tender shard
rare rover
#

ye 🙂

gray merlin
#

Right, this isn't working.
In my project, I have two modules that are the core for everything to work: core and core-nms. Those two have a basis in 1.19-R0-SNAPSHOT and they have code shared all throughout the versions of my project.
Then we have the various modules for every version... Now, this used to work, and I used to be able to use mvn clean install package + grab all of the jars and they'd run fine, but ever since i came back the unsupported version error is coming up on 1.7.
I have core and core-nms on java 17 and my 1.7-Spigot on java 8, and of course they're incompatible. Is there a way to get them to run again?
(I lost all my previous configurations due to a pc wipe and the github repo was... push --force'd. I know, that was stupid, and I didn't foresee the consequences. I wanted a clean commit history because it was a mess and I didn't really have a commit pattern back then)

tender shard
#

neither core-nms

rare rover
tender shard
gray merlin
#

I can run lower java compiled code on higher right?

tender shard
#

yes sure

#

I always compile for java 8

#

that means my stuff works on java 8 and newer

gray merlin
#

Alright, thank you then! I think I know what to do next (Will take a bit of reformatting though)

tender shard
#

you'll have to simply change target and source to 1.8 in your pom.xml (or in every module's pom if you went the dirty way)

tender shard
#

no. 1.8 for java 8

gray merlin
#

Oh wait what? I don't have any definition in my POM for java versions though

#

I didn't even know that could be done

tender shard
#

you declare the java target/source level either in the properties section of your pom <maven.compiler.target>, or directly in the maven-compiler-plugin

#

you MUST have it declared

#

otherwise it wouldnt use java 17

gray merlin
#

Nevermind, I am stupid, I do have it declared

tender shard
#

in <properties>?

#

or in the <plugins><plugin> section for maven-compiler-plugin?

gray merlin
#

Yep,

<properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>```
#

I'll change that to 1.8

tender shard
#

you can do that in the parent pom, and then remove the properties section in ALL your submodules

#

then you don't have to change it a hundred times

gray merlin
#

Hmm, but I'm importing a new api version in every version (1.7 through 1.20), won't I need to compile them in their respective java versions?

tender shard
#

no

gray merlin
#

Ah, that's good

tender shard
#

well for the NMS modules i'd set the source and target to the same that the NMS dependency uses

#

but core MUST be on the lowest java you wanna support

#

so TL;DR:

Set source and target to 8 in the parent pom, then get rid of it in all submodules, except for submodules that are on mc 1.18+ you set it to 17 (only for the NMS module for those versions)

gray merlin
#

Yep... that worked and everything is now ok

#

Ah...

#

Mind if I bug you for a bit? I'm confused on some things

tender shard
#

np

gray merlin
#

On one thing actually that then relates to others

gray merlin
#

On my project structure in each module I have the module SDK option, which I assumed was what set the compiler version for the version I'm developing on...

#

But now I was enlightened to the target and source versions on the POM...

#

What are their differences?

tender shard
#

The SDK version defines which java version is used to run maven - you can use your latest indtalled for all modules

#

Jdk 17 can easily compile sth for java 8

#

I typically set the project SDK to the highest possible, and source/target to the lowest version the plugin/module/jar must run on

gray merlin
#

I see... Then when using Maven we set the JDK version to run maven, and then the target and source versions actually control the java version that the classfiles are compiled in?

tender shard
#

Is BountySeekers the parent pom?

gray merlin
#

Yes

tender shard
#

If so its enough to change JDK there since you‘ll typically run mvn only on the parent

gray merlin
#

I see...

#

And the language level is just for the editor right?

tender shard
#

No, the language level must be same as source/target

#

Eg if level is set to 17 you can use records but then you couldn’t compile that to run on java 8

gray merlin
#

Ah I see that makes sense

#

because J8 doesn't have records

#

so changing it up is pointless

tender shard
#

basically "language level" is IJ's version of source/target and "project SDK" is which JDK IJ uses to actually start maven

#

TL;DR:

  1. set <maven.compiler.target> (and source) to 8 (or 1.8, it's the same, weird naming scheme) for ALL module pom.xml's, except for modules that use MC versions that use java 17+
  2. but keep the project SDK at 17+, otherwise IJ and maven cannot access the NMS dependencies for MC versions with java 17+
gray merlin
#

Thank you!!!

tender shard
#

np

rare rover
#

since .poll removes the first element

hazy parrot
#

he gets value inside of while

rare rover
#

yes ik but it would still remove it, no? if i put poll inside the while it doesn't work since it removes the element

#

doesn't matter if it passes true or not

near mason
rare rover
#

its a runnable

#

runs every tick

near mason
#

i meant the while loop

rare rover
#

i mean it does .peek every tick to check if its null and the timer is true

near mason
#

oh sorry idk how but i saw it like System.currentTimeMillis() <= millsNow in the while loop

ripe moat
#

Someone that can help with boosted yaml?

chrome beacon
#

?ask

undone axleBOT
#

If you have a question, please just ask it. Don't look for staff or topic experts. Don't ask to ask or ask if people are awake or available. Just ask the question to the channel straight out, and wait patiently for a reply. Make sure you use the right channel regarding the topic of your question. Create a thread in case the channel is already in use!

quaint mantle
#

idk i forgor

tender shard
ripe moat
#

How do i create a folder with boosted yaml?

#

i can only find something about files

chrome beacon
#

You'd create a folder with regular Java I assume

sullen marlin
#

@kind hatch tbh double spaces can die "old English" is damn right

young knoll
#

Lol

#

I don’t think they teach double spaces anymore

autumn cave
autumn cave
near mason
#

why does this give error?

lilac dagger
#

there is no attack inside getHandle

chrome beacon
#

Why are you using nms

near mason
#

i just saw this in a spigot help thread

lost matrix
#

Cant you just call pl.attack(other); and be done?

onyx fjord
onyx fjord
near mason
#

oh yeah

onyx fjord
#

if thats the goal

near mason
#

april 3 2023

onyx fjord
#

strange

near mason
#

sorry april 3 2021

onyx fjord
#

what is your goal

near mason
#

to simulate a player hit

onyx fjord
#

with arm and everything?

near mason
#

no

#

just the damage

#

but the damage must be like the vanilla one

ember estuary
#

I tried updating my Plugin from 1.19.2 to 1.20.1 by running BuildTools with Version 1.20.1 and then changing every "1.19.2" in my pom.xml to a "1.20.1".
But it doesn't work, i get "Cannot resolve org.spigotmcspigot1.20.1-R0.1-SNAPSHOT".
Why, what am i missing?

onyx fjord
#

are you using nms

ember estuary
#

yea

onyx fjord
#

dont you need an argument like -remapped or something when building?

lost matrix
#

Are you using the specialsource plugin for remapping?

ember estuary
#

i have

    <dependency>
        <groupId>org.spigotmc</groupId>
        <artifactId>spigot</artifactId>
        <version>1.20.1-R0.1-SNAPSHOT</version>
        <scope>provided</scope>
        <classifier>remapped-mojang</classifier>
    </dependency>

so it should be remapped

onyx fjord
#

--remapped *

lost matrix
#

^

onyx fjord
#

when running buildtools @ember estuary

ember estuary
#

i'll try

near mason
#

how to ray trace entities?

lost matrix
#

From another entity or in general from X to Y

near mason
#

from a player

ember estuary
near mason
#

found out World.rayTraceEntities

lost matrix
# near mason from a player
  public LivingEntity getTargetLivingEntity(Player player, double maxDistance) {
    Location start = player.getEyeLocation();
    Vector direction = start.getDirection();
    World world = player.getWorld();
    Predicate<Entity> filter = entity -> entity instanceof LivingEntity && entity != player;
    RayTraceResult traceResult = world.rayTraceEntities(start, direction, maxDistance, filter);
    if (traceResult == null) {
      return null;
    }
    return (LivingEntity) traceResult.getHitEntity();
  }

Something like this

near mason
#

tysm

kind hatch
odd epoch
#

hey, is there an event that triggers when doing the pick block action in survival? i need to cancel that because it moves an item in my inventory which i don't want to move

sullen marlin
#

PlayerHeldItemChange?

odd epoch
#

doesn't that only trigger if the slot the player is holding changes? picking block doesn't make the slot change

#
  • the only parameters this event gives me are the both slots, but i need the item before picking in the main hand of the player and cancel if some display name equals something
#

im referring to the PlayerItemHeldEvent if that's what you meant

#

yup, tested it, PlayerItemHeldEvent doesn't fire if you use the pick block action to swap some inventory item with the held item

vapid grove
#

?paste

undone axleBOT
vapid grove
#

https://paste.md-5.net/etiseyoxos.java

Having a slight issue with my code.
If a user closes the spinner while its spinning, the gui attempts to reopen it as it should.
However, this results in the animation not working, and for items to be able to be pulled out of the inventory and such (however this is reverted after the gui is finished).

Is there any reason this may be doing this?

#

There is no error code, as this is a visual bug it seems.

north nova
#

also use ThreadLocalRandom.current() instead of new Random()

vapid grove
vapid grove
north nova
#

if you have a way of telling if the menu was reopened, call it after its reopened

vapid grove
north nova
#

but just try calling it first, im not sure it will solve your issue

#

but it's the first thing i'd try

vapid grove
#

tty

#

however

north nova
#

yeah

#

try that

north nova
vapid grove
north nova
#

well doesn't that infinitely loop then?

vapid grove
#

No

north nova
#

lol ok

vapid grove
# north nova lol ok

Sadly thats not working, even after placing updateInventory inside of generateSlots()
It shows the last frame that was generated onscreen after reopening, and ceases to function

#

Im starting to think this might be an issue that I may not be placing this in certain places

#

Ill do a double check thru that

#

That didnt fix it either, hm

north nova
#

hm

#

try delaying the menu reopen by 1 tick

ember estuary
#

Can i do .contains(player) on a Set<OfflinePlayer>, or will that give unexpected results when the player relogs? Or does it compare by UUID maybe?

north nova
#

you're much safer just using a Set<UUID>

ember estuary
#

Of course, but then I'd have to load the respective offline player for every uuid thousands of times

north nova
#

so cache it

#

Map<UUID, OfflinePlayer>

ember estuary
#

oh, i see

#

clever

north nova
#

lol

vapid grove
north nova
#

but im not sure this is the proper solution

#

¯_(ツ)_/¯

#

it works but feels sketchy

vapid grove
remote swallow
# ember estuary oh, i see

you can also keep a weak reference to the player instance directly if needed, just make sure you dont do anything with it after they've left

north nova
#

whats the other issue tho

vapid grove
#

So it could only run onClose once

north nova
#

interesting

vapid grove
#

Ill create a custom function called Disconnect for whenever I want the inventory to actually

#

disconnect from events

#
this.menu.menuCloseEvent(e -> this.menu.disconnect());
vapid grove
# north nova interesting

Actually, maybe I wont.
protected HashMap<Inventory, Consumer<InventoryClickEvent>> cEvnts = new HashMap<>();
protected HashMap<Inventory, Consumer<InventoryDragEvent>> dEvnts = new HashMap<>();
protected HashMap<Inventory, Consumer<InventoryCloseEvent>> xEvnts = new HashMap<>();

Do you have any idea if this will cause lag eventually or anything?

#

Lets say that in total, 10k inventorys were generated, with events

#

And none of them cleared

#

Will this harm anything or no

#

I restart my server automatically every 12 hours so if thats a factor hopefully thats ok

north nova
#

why are you doing this

#

have a

#

YourInventory.class

vapid grove
north nova
#

that contains the consumers

#

and the inventory

#

and use it

#

wtf

vapid grove
#

As that way its not doing this

north nova
#

bro wtf

vapid grove
#

I was too lazy to redo my code from a year ago lol

#

Its really bad

lilac dagger
#

Don't be lazy

#

Fix your code for our sanity and yours

vapid grove
#

Yeah, I am rn

#

I spent 3 days fixing my enchantment code, and my item managment

#

I didnt think it was that bad however tbh

north nova
#
@Builder
public class CustomInventory implements InventoryHolder {

    private final UUID uuid;
    private final Inventory inventory;

    private Consumer<InventoryClickEvent> onClick = $ -> {
    };
    private Consumer<InventoryCloseEvent> onClose = $ -> {
    };


    private CustomInventory(UUID uuid, String title, int size) {
        this.uuid = uuid;
        this.inventory = Bukkit.createInventory(this, size, title);
    }

    public static CustomInventory create(Player player, String title, int size) {
        return new CustomInventory(player.getUniqueId(), title, size);
    }
}```
#

and u can use toBuilder in lombok builder to do this

#
                .onClick($ -> System.out.println("click"))
                .onClose($ -> System.out.println("onclose"))
                .build();```
vapid grove
#

huh ok

remote swallow
#

no

#

dont use inventory holder

#

thats the wrong way

tidal kettle
#

hello how can i make my player invicible for like 2 sec?

smoky oak
#

player.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 2, 0, false, false, false));

vapid grove
#

tbh

#

its mispelt so either way

smoky oak
#

i cant fuckin read

vapid grove
#

me neither

scenic valve
scenic valve
# tidal kettle how?

Tons of ways, you can make it a command, register for a EntityDamageEvent, etc.

tidal kettle
#

ye i know

trim lake
#

Im stack with one think. I want make plugin witch will allow to disable/enable recipes. But problem is you cannot realy disable recepie in spigot If Im correct. So that means, you need get all default MC reciepies and save them somewhere. Thats issue for me 😄 How could I do that? I just cannot move, kinda can´t figure out how to and where I could save recipes.

tidal kettle
#

but i want to be invicible when i make a command

smoky oak
scenic valve
vapid grove
vapid grove
scenic valve
scenic valve
#

That should work for 1.8

scenic valve
#

to disable

#

or just e.cancel, don't remember which or if you need to do both cancel and set to air

trim lake
smoky oak
#

i think theres an event for when a player learns a recipe

#

you should be able to just cancel that if appropriate

#

if not god help you lol

#

or whoever knows nms in here

trim lake
#

Oh probably I know reason. It was because the gamerule doLimitedCrafting will not allow to learn recipe true command as well.

tranquil viper
#

i’ve never used it any plugins i’ve ever made in like 6 years

smoky oak
#

welll if you cant cancel the event normally it still exists in nms

#

which you would be forced to do in some cases to stop specific events

tranquil viper
#

gotchya

trim lake
#

I think just save recipes somewear would be best just to reanable them. Idk how and where lol 😄

tranquil viper
#

what’s your issue? you can’t cancel the crafting of an item?

trim lake
#

I was making this while ago... and I decied this will be best solution for some reason. I want to not show recipes in book (witch player cannot craft) and prevent them learning of them. They will be able to learn them but not basic MC style.

tranquil viper
#

I see. A few different ways you could go about this but I would do this; setup a database and whenever someone attempts to craft the item, make sure they’re in the database. If they’re not in the database, simply cancel the event/set the item to air. If their name is in the database then let the crafting occur as normal. You can add players to the database whenever they complete a quest. This is a good approach because you can track many different recipes and what not. Furthermore, if you want to make it even more efficient you can load the players & their data when the server starts!

#

If you don’t want to use a database .json is another great option 👍

onyx fjord
#

Or just a yml file

trim lake
#

Probably going to do that way. I guess there were some issues whit this way. But thanks for now.

blazing flare
#

How would I check if a given Recipe is an instanceof CraftingRecipe? I'm running into an instance where I'm doing recipe instanceof CraftingRecipe but upon runtime it would say noclassdeffounderror for CraftingRecipe. The subclasses, ShapedRecipe and ShapelessRecipe work fine. This is likely a Java thing I'm not familiar with, but I cannot seem to find much information about it.

young knoll
#

Make sure spigot is up to date

#

CraftingRecipe is fairly new

tender shard
tranquil viper
#

cause that’s boring and won’t teach you anything

tender shard
#

you'll either have a file with thousands of player entries or thousands of single files

blazing flare
slender elbow
#

good tradeoff

tender shard
#

it's always funny when people are relucant to use the player's persistentdatacontainer to store a player's persistent data

young knoll
#

But what if I overload their player data

#

Heh

tender shard
#

with a list of discovered recipes?

#

like vanilla does anyway?

warped shell
#

is there a way to save particles which have been spawned with #spawnParticle ??

#

as entities that is

young knoll
#

No

tender shard
#

they dont exist

young knoll
#

Particles are client side

warped shell
#

ah

tender shard
#

spawning a particle is just sending a packet - so all you can do is to store the parameters you threw into spawnParticle to spawn them again later on

warped shell
#

my goal was to save a list of particles and delete them when I spawn the next batch of particles

#

to avoid players spawning too many

tender shard
#

in that case, all you can do is to spawn less in the first place

blazing flare
# young knoll August 1st

You are correct, and it appears you are the author of said commit too! Took me a minute to find spigot commits, and when I did it only mentions PlayerRecipeBookClickEvent so had to dive into the commit itself to see 😛 Thank you!

warped shell
#

well there is sorta a minimum that I need to spawn, but its already optimized, so I will just rely on them despawning quickly

young knoll
#

The client does have a built in limit for particles

warped shell
#

ye

#

they dont run on the server tick then since its client side?

young knoll
#

Yep

warped shell
#

cool

#

and it spawn async so even better

#

ty

tender shard
#

you can also search the commit history directly in IJ with keywords

sage patio
#

what kind of command registration this is?

#

also there is no command secion in plugin.yml

#

any idea how can i make this plugin work? (well commands for now)

young knoll
#

Looks like some kind of command framework

#

I don’t use any so idk what one at a glance

#

ACF and cloud are popular

tender shard
#

definitely not ACF

sage patio
#

well i need this plugin to work again

tender shard
#

then just check the pom.xml or build.gradle for dependencies and you know what it is

sage patio
#

i've no errors

tender shard
#

then you're already done

sage patio
#

the plugin is running

#

but the commands are not working

#

i've tried to register one in plugin.yml, nothing happened

tender shard
#

well check the import name for BukkitBrigadierCommandSource and you'll know what it is

sage patio
#
import com.destroystokyo.paper.brigadier.BukkitBrigadierCommandSource;
#

hmm

slender elbow
#

:trollface:

trim lake
# tender shard why not just a permission / pdc tag lol

I will probably use permissions. Im not sure yet. Its going to be roleplay server so every player could have more character so every character can craft something else. Best solution would be some file where I will save witch recipes can character craft and on char select discover them to make RecipeBook accurate. But will need some work arround to make some way to lear recipe. Because If I cancel PlayerRecipeDiscoverEvent thats not allow learn true command as well.

slender elbow
# warped shell and it spawn async so even better

it's not like that really changes anything, it's basically converting between a couple of types, constructing the packet and pushing it through the netty pipeline which happens in its own thread already

tender shard
tender shard
trim lake
tender shard
#

I meant, use the PDC to store the "character"

trim lake
#

it depends If I will .yml file like this or PCD?

chadID:
  allowed-to-craft:
    - apple
#

just ex.

tranquil viper
#

json >

trim lake
#

I already made plugin witch have value where is character stored. Plugins will be connected.

slender elbow
#

that isn't even valid yaml lol

#

and that is quite the achievement tbh

trim lake
tender shard
#

unless that is supposed to be configurable, then sure use yaml, but still do not create one file per player or store any player data in yaml files

lost matrix
trim lake
#

I just want to make RecipeBook accurate so probably best way to achive that, Is just discover all recipes onCharSelect

tranquil viper
tender shard
lost matrix
#

If you want to sync the recipe book then you will need to use packets as the server
sends all recipes to the client when it connects.

trim lake
#

Yea, but is not displaying recipes witch player can´t craft

tranquil viper
#

I guess but once you learn how to properly use json there’s no real reason to use anything else like pdc for that much data, feel like everything’s safer in a json file

trim lake
#

at least for me

tender shard
trim lake
tranquil viper
#

one file

#

why would you need 1000 different files

#

just one file for the entire network and preload the data, maybe periodically save it

lost matrix
lost matrix
tender shard
tender shard
#

why reinvent the wheel with a huge json file lol

blazing flare
tender shard
trim lake
#

I dont think the server will be that big 😄 there would be like 200 chars max in dream so 😄

tranquil viper
#

idk i’ve used one json file multiple times and had no performance issues even on larger networks

tender shard
#

i didnt say it will automatically create performance issue, I just wonder why you claim it's so much better or easier than PDC

#

because PDC data is handled by the server automatically, allows you to store basically anything, and you can get/save data with exactly one line without any additional file/loading creating yo uhave to do yourself

tranquil viper
#

I’m just more comfortable with it, not necessarily saying PDC is worse. To that end I also am comfortable with PDC and just don’t see the use here.

trim lake
tranquil viper
#

I’ve found it easier in the long run tho especially when working with lots of data

lost matrix
#

I honestly think PDCs are best used for tags or for storing data in chunks, entities, blocks etc.
But using one file for all your player data is the naive beginner approach for smaller servers.

worldly ingot
#

You'll learn over time that a single file for all your data is just a bad idea overall lol

tender shard
#

^

#

and one file per player is also annoying, imagine a big server doing daily backups through SCP or SFTP and it has to transfer ten thousand of tiny files, it becomes extremely slow

lost matrix
#

zip it and clip it. Who does file by file backups 🙂

tender shard
#

for incremental backups, e.g. rsync/rdiff

#

i got daily incremental backups of the last 3 years, imagine how much space it'd take if you'd have to save a new 500mb file everytime just because one file inside has changed

lost matrix
#

I like using one file per player squirtle

tender shard
#

i did that too until people complained about their backups taking forever now and it's not in my power to tell them how to backup their data so I avoided doing that in the future

tranquil viper
#

I guess it just boils down to who you’re making the plugin for. I’m sure if you were making it for a specific network things would be different from something such as a public/premium plugin.

tender shard
#

the player .dat file changes everytime they play anyway, so why not use that to store player-related data

lost matrix
#

myeah. Cleanup issues for example. Admin removes plugin and is left with half a meg of permanent appendix on their player files.

tranquil viper
tender shard
worldly ingot
# tranquil viper Interesting, mind elaborating? I’ve never had issues using one file but I’d be o...
  1. Single point of failure. Corrupt or deleted file and you lose your whole data set
  2. Reading and parsing the file could take a while. If you want to get only a specific part of it you have to read the whole file to find it, then do that again and again and again for every time you want another specific part of the file. Or read it all into memory and you're suddenly using a lot more memory than necessary
tender shard
#

and if you save one player's data, you'll have to write the whole 500mb file

tranquil viper
#

I usually load and update the data locally and don’t touch the actual json until i’m saving, shutting down, etc

#

But yea I’ve never even thought of your first point lol

tender shard
#

then you'll keep thousands of data entries in memory that you don't need until that one player from 7 years ago joins again

lost matrix
#

Would also be my answer.

  1. It scales horribly because you need to keep all your data in memory, slowing down your
    startup times and clogging up your memory over time with data from players that havent
    been online for 2 years.
  2. The total data loss problem with one file
  3. Admins managing one file that is a couple MB in size is a horrible experience if they want
    to manually delete or alter a players data.
#

The only upside of one file is its simplicity.
You dont have to understand IO because you can just load everything once.

young knoll
#

SQLite and h2 are technically one file for all players

#

:D

slender elbow
#

yeah but they do big brain things

vapid grove
#

never realized how useful super and superclasses are

#

until a week ago

#

and my god am i loving it

median bronze
#

anyone know how i can make a discord bot that works with a plugin?

#

i could put stuff into a database and just check every now and then if I need to run anything but I was wondering if theres a simpler way

worldly ingot
robust helm
# sage patio

Using id "io.papermc.paperweight.userdev" version "1.5.5"(gradle) and i got kinda the same. The structure and all of that is the same, but ::execute and ::requires, provides CommandContext<Object> and not CommandContext<CommandSourceStack>

sullen marlin
#

?whereami

robust helm
drowsy helm
vapid grove
#

also, random question

#

does privating an event like InventoryClickEvent prevent it from registering properly

#
Bukkit.getServer().getPluginManager().registerEvents(this, Main.instance);

This is being ran, however, the actual event isnt firing

#

So im curious if that setting it to private may have been an issue

glad prawn
#

Nah

smoky oak
#

feel like we're missing code here but it shouldnt

vapid grove
# smoky oak feel like we're missing code here but it shouldnt
@EventHandler
    public void drag(InventoryDragEvent event) {
        if(event.getInventory().equals(this.inv)){
            onInvDrag.accept(event);
        }
    }
public InventoryFW(String name, int rows) {
        Bukkit.getServer().getPluginManager().registerEvents(this, Main.instance);
        this.inv = create(name, rows);
    }

Revamped class I made for an inventory framework

smoky oak
#

seems fine so idk

vapid grove
#

Calling super on a class that extends this does run the second code

#

Not the first

smoky oak
#

super just calls the constructor of the parent class

vapid grove
#

Im aware

#

I have classes like enchantments or items that do the same thing but without issue

#

So im very confused right now

#

Hm so I was right, seems that setting public void drag to private void drag prevents it from running at all

#

I wonder why setting it as a private doesnt let eventhandlers function

smoky oak
#

ah

#

its probs cuz it runs on annotations instead of reflection

vapid grove
#

I just didnt want outside access to that direct event

#

Was using consumers instead so that the function looks like so:

#
this.onInvClose = e -> cancelTrade();
smoky oak
#

i mean you need the event visible to run it

#

unless youre doing some cursed stuff

vapid grove
#

I assumed that implimenting listener would allow it to view it

#

Since technically it has direct access to the class

smoky oak
#

eh idk how annotations work exactly

#

i just know use annotation a here

vapid grove
#

Me neither, not my thing

#

Either or its fixed so it doesnt matter too much

echo basalt
#

Only exception is that it must be public on bungee

vapid grove
echo basalt
#

Then you must be doing something funky

#

This works

strong parcel
#

Is there a way I can check if a specific ItemStack exists? I want an item to only have one copy in the world.

drowsy helm
#

no

#

unless you keep track of EVERY item stack for EVERY player

strong parcel
#

Okay, I guess I will suck it up and use persistent whatever

drowsy helm
#

but that would be incredibly inefficient

rare rover
#

what's other things i should learn like FIFO, LIFO, ect?

#

wanting to know most of them

dense blaze
#

Would I be better to learn how to create custom inventories using spigot or just use a library to handle it for my WIP plugin?

rough ibex
#

learn

#

you are always better off learning first

dense blaze
#

Sounds good - will do

strong parcel
#

Does block.breaknaturally() trigger any events?

distant wave
#

will the PlayerToggleFlightEvent call even if the player isnt allowed to fly? so when he double presses space?

rough ibex
#

I believe not for PlayerToggleFlightEvent

distant wave
#

im looking for something like double jump so i though this would work

rough ibex
#

my mistake it does

#

it seems thats the way to do it

#

i don't know, test it

echo basalt
#

The way people do it is just by setAllowFlight -> ToggleFlightEvent -> set flying to false, setAllowFlight to false until reaching ground

#

and applying a vector

distant wave
echo basalt
#

Up to you

distant wave
#

what is regular jump velocity?

echo basalt
#

No clue, try numbers out

distant wave
#

this is what ive done, it works you can jump inifnitely, but how can i make still take fall damage?

echo basalt
#

You need to setAllowFlight(false)

#

And then check for PlayerMoveEvent, see if the player is on the ground and setAllowFlight(true)

distant wave
quaint mantle
#

How do I can get Display entities by raytrace?

echo basalt
#

uhh I doubt they have a hitbox

quaint mantle
#

RaytraceResult is null when I raytracing close to it.

vapid grove
#

Is there a reason for when I kick a player when inside of a PlayerJoinEvent it doesnt show the kick reason to them?
p.kickPlayer("Server is under maintenance.");

#

Or am I doing this incorrectly

#

java.net.SocketException: Connection reset

quaint mantle
#

Create 1 tick delayed task

vapid grove
#

Sometimes its that error, soemtimes not

rare rover
glad prawn
vapid grove
strong parcel
#

How can I make one of my plugins a dependency for another? I need to use some methods from it.

strong parcel
#

Does that grab the jar file from the plugins folder?

rare rover
#

you still need to add it as a dependancy through maven / gradle

distant wave
#

okay but how do i still make the player take fall damage when fly ended

rare rover
# rare rover

this just makes it so it loads after whatever it's dependent on

glad prawn
strong parcel
#

Okay, so how would I add it as a dependency in maven?

vapid grove
rare rover
strong parcel
#

It's something I wrote myself that is not published on the Spigot website

rare rover
#

oh

#

you gotta use jitpack then

#

for maven

#

if you want to make your project into a dependency without hosting it yourself

strong parcel
#

So I can publish it on JitPack or publish it on Spigot if I want to use it as a dependency in another plugin?

rare rover
#

ye

#

and you only need to publish it through jitpack

strong parcel
#

Okay, thanks!

rare rover
#

np 🙂

shadow night
#

I usually just install my plugin in local maven lol

strong parcel
shadow night
#

I don't remember how that's done right now and I'm not home to check it, sorry

strong parcel
#

No worries

distant wave
#

add maven-publish to your gradle plugins

#
publishing {
    publications {
        maven(MavenPublication) {
            groupId = 'org.gradle.sample'
            artifactId = 'library'
            version = '1.1'

            from components.java
        }
    }
    repositories {
      mavenLocal()
    }
}
#

and add this to your build.gradle

#

makle sure to replace the groupId etc.

strong parcel
#

Okay, I used jitpack to add it as a dependency in my pom.xml. However, I can't seem to access the methods in my classes even though they are public and static. The only way I found to access a method is to do something like Util util = Util.method. Otherwise, it doesn't even list the methods when I try to use one. Does anybody know why that is and how I can fix it?

quaint mantle
#

hi i need help

#

with scoreboard update

#
public class scoreboard implements Listener {

    private Plugin plugin;
    public void setPlugin(Plugin plugin) {
        this.plugin = plugin;
    }
    public void updateScoreBoard(Player p){
        int playersonline = Bukkit.getOnlinePlayers().size();
        ScoreboardManager manager = Bukkit.getScoreboardManager();
        Objective obj = manager.getNewScoreboard().registerNewObjective(ChatColor.YELLOW + "Lobby", "lobbyscoreboard");
        obj.setDisplaySlot(DisplaySlot.SIDEBAR);
        Score przerwa = obj.getScore(" ----------------");
        przerwa.setScore(4);
        Score przerwaa = obj.getScore(" ");
        przerwaa.setScore(1);
        Score nick = obj.getScore(" Nick: " + p.getDisplayName());
        nick.setScore(3);
        Score onlineplayers = obj.getScore(" Gracze online: " + playersonline);
        onlineplayers.setScore(2);
        Score site = obj.getScore(ChatColor.YELLOW + " www.playgroundhc.pl");
        site.setScore(0);
        p.setScoreboard(Objects.requireNonNull(obj.getScoreboard()));

    }

    @EventHandler
    public void scoreboardCreate(PlayerJoinEvent e){
        Player p = e.getPlayer();
        updateScoreBoard(p);
        new BukkitRunnable(){
            @Override
            public void run() {
                updateScoreBoard(p);
            }
        }.runTaskTimer(plugin,0,100);
    }
}```
#

scoreboard is not updating after other player join

#

how to fix it?

distant wave
#

i wrote this code real quick for the double jumping, is there any way to make it not cancenl fall damage

#

since now it cancels any fall damage

smoky anchor
#

My guess would be to set allowFlight to true a tick after the player touches the ground.

#

Also, don't use Player as a map key, use UUID instead. And don't forget to clear it when player leaves.

zealous glen
#

So is there just zero events for TNT now?

#

I tested like 10 different events and none of the let me know if TNT is unloaded, where the TNT moved, what entities the tnt applied velocity to idk

distant wave
smoky anchor
#

I think so.
The event probably gets called before the player hits the ground and takes damage, so setting allowFlight to true disables the ability to take falldamage

distant wave
smoky anchor
#

that information is controlled by client, it could also be sent together with the move packet

tall dragon
#

it could also very easily be spoofed :d

buoyant viper
#

i think there was a /solution/ at some point, like casting to Entity or LivingEntity w/e instead of calling it directly from Player

#

i say "solution" bc it was still pretty meh at best

distant wave
smoky anchor
#

player on slab, block right under can be air

tall dragon
#

that will most likely set it to true prematurely as well

tidal kettle
buoyant viper
#

damn masochist

vapid grove
#

As there are heavy differences between those versions

tidal kettle
#

Why ? ...

#

Oh ok

distant wave
buoyant viper
#

scheduler

smoky anchor
#

bukkit scheduler
runTaskLater

vapid grove
distant wave
#

ohh

vapid grove
#

Is there an efficient way of storing custom placed blocks other than a conf file

smoky anchor
#

pdc of chunk

#

in fact

#

?customblocks

#

?customblock

#

what is the command reee

vapid grove
#

I was using that

tall dragon
#

iz feri bad

vapid grove
#

But i meant like, storing its location for retriving it

#

Lets say i have a cobble gen for example

#

And even when the chunks unloaded i want it to generate

#

Yonow

smoky anchor
#

That sounds dumb

#

or like.. how do you want it to "generate"

distant wave
#

so like this its correct

#

right?

vapid grove
tall dragon
#

thats rlly bad

vapid grove
#

I want it to add 1 consistantly no matter what

tall dragon
#

like thousands of runnables being created for a few players

smoky anchor
smoky anchor
distant wave
vapid grove
smoky anchor
#

say, players have hundreds of generators, 1 in each chunk.
you would have to have each chunk loaded to add something to the pdc

#

that.. woud kill the server

vapid grove
#

Ill just store the last ms it was right clicked

vapid grove
#

And calculate how many multiples of 10 seconds passed

tall dragon
#

u can also just store when the chunk unloads

#

and calc dif when it loads

vapid grove
distant wave
vapid grove
tall dragon
vapid grove
distant wave
tall dragon
#

honestly i woulnt even mess with this ground shit. id just add an arbitrary cooldown to the jump

#

and not mess with move event at all

vapid grove
distant wave
#

after you run out

tall dragon
#

can also be shorter cooldown obv

distant wave
vapid grove
#
(milli/1000)*20

this is correct for milliseconds to ticks right

#

seems like it

smoky anchor
#

that's gonna be rounded to a second, not ticks I think
do milli / 50
I THINK, I am not good at math

austere cove
#

incorrect, it's just millis/50

vapid grove
#

this shows everyone i suck at math

#

👍

grim hound
#

Are the sync scheduler's tasks executed at the start of a tick or at the end of it?

#

Like: java void mainHeartbeat() { Server.executeMinecraftStuffAndServerLogic(); scheduler.executeTasks(); }
or

void mainHeartbeat() {
scheduler.executeTasks();
Server.executeMinecraftStuffAndServerLogic();
}```
or is it in-between?
topaz panther
#

is creating an Anti Storage ESP really that complex?

lilac dagger
warped flower
#

Hi there
We are a UK-based digital agency looking for a Minecraft plugin developer for one of our clients.
25hours/ week
Fully remote from anywhere
Java programming knowledge
Being responsive
Definitely paid job
Are you interested?
Please dm me or send your cv and any Minecraft plug-in you built to my email mo@tribes.agency

compact haven
#

idk how storage esp works, I don’t see why the server would proactively send storage contents before a interaction event is fired

grim hound
undone axleBOT
remote swallow
compact haven
#

oh yeah I’m fucking stupid

#

LOL

#

yeah that’s not really difficult

#

in fact it’s built into paper™️

remote swallow
#

smh

compact haven
#

?whereami

compact haven
#

ooops my bad

lilac dagger
#

and then look the line with a deobfuscator

grim hound
grim hound
#

got it

clear elm
#

how can i make the slots of the shops smaler in shopguiplus

grim hound
clear elm
#

yeah

grim hound
#

Bukkit.createInventory

clear elm
#

i only fint the amount of slots for the main gui but not for the shops

grim hound
grim hound
clear elm
#

no if i click on a shopcategorie how many slots it have

grim hound
clear elm
#

you now i can make /shop than i come to the main gui where i see all shops if i click on a shop i get into anothe gui how can i chnage the slots from the other gui

grim hound
#

and have different guis

compact haven
#

He’s not talking about development

#

@clear elm ^

buoyant viper
#

or well, they can show a snapshot of what was in their when it was last opened

#

(auto open all storage blocks in clickable radius and cache their items, render, recache after X ticks)

topaz panther
#

what do i use for ActionBar?

smoky anchor
#

Can you explain better ?

glad prawn
small current
#

Guys is there any better way to replace internal placeholders?
Other than replace chain

echo basalt
#

I have a placeholder object that does its magic

ivory sleet
#

I would consider some sort of lookup table

small current
sand lion
#

Please does anyone know why this is happening?

smoky anchor
#

iirc smithing tables merge/move nbt
So I guess your output item gets overriten ?

sand lion
#

That really sucks

smoky anchor
sand lion
#

I'll look into it, thanks for the help

sand lion
#

That's what I thought

small current
#
        return string
                .replace("{kills}", String.valueOf(data.getKills()))
                .replace("{killstreak}", String.valueOf(data.getKillStreak()))
                .replace("{best_killstreak}", String.valueOf(data.getBestKillStreak()))
                .replace("{deaths}", String.valueOf(data.getDeaths()))
                .replace("{kd}", String.format("%.2f", data.getKillToDeathRatio()))
                .replace("{cooldown}", generateTime(ArenaManager.getRemainingTime()))
                .replace("{name}", name)
                .replace("{balance}", String.valueOf(Math.round(VaultHook.getServerEconomy().getBalance(player))));

This was my old code, is there any better way to do internal placeholders?

echo basalt
#

Snakeyml has been here for a while, it's just that it has been updated in 1.19.4 iirc

small current
#

is there any project on github that used this

#

so i can understand the code better and use it

undone axleBOT
small current
#

i know all this

#

but i just dont know how to implement it

#

all those individual things you mentioned

#

i know how to use them

#

i dont know where and how to start @quaint mantle

#

alright i have this now what

#

i dont get what you are wanting me to do

#

if you got a code

#

please send it

#

ok

#

Spoonfeed hell naw

#

if i get a code i dont just copy-paste it

#

i asked for help and got a class

#

which i dont know what to do with it

#

so you mean having a class for each placeholder?

echo basalt
#

This mf ai generated

small current
#

i literally dont know what to do

zealous osprey
#

Not so quick question:
Is it possible to have multi-version MC support in a single jar without needing to use reflection?
Cause I've seen things being done with maven modules, but that seems like is meant for creating jars for different versions, rather than one jar for all versions.

ivory sleet
lunar wigeon
#

but when you work with NMS you need modules or reflection

ivory sleet
zealous osprey
#

I just realised that only one thing would break, so I'll just add a config that works for the various versions instead.

ivory sleet
#

Good luck :)

onyx fjord
#

and some magic

#

with stringbuilders

#

look at how papi does it

tender shard
# zealous osprey Not so quick question: Is it possible to have multi-version MC support in a sing...

https://blog.jeff-media.com/maven-multi-module-setup-for-supporting-different-nms-versions/
you'll end up with one .jar that supports all versions you implemented

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

echo basalt
#

Eh, you can go a bit more in depth

lost matrix
echo basalt
#

I'd use generics or something

#

for placeholders

#

Takes a bunch of effort though

#

But allows you to do some nice things like registerFixedPlaceholder(new Placeholder<Player>("name", Player::getName))

#

or something

#

Takes actual effort to write a full string processing system that has placeholders n shit

lost matrix
#

I would use a tree based approach for your tokens. Using one replace call for each placeholder
scales horribly. Here is an animation i made a while ago. Ive used this approach for chat filtering.

echo basalt
#

I remember a dude that made a phonetic filtering system

#

and had an api for it

lost matrix
#

Java has a tree set

echo basalt
#

this dud

lost matrix
#

Are you... familiar with PlaceholderAPI?

echo basalt
lost matrix
#

This plugin has been established for a decade now

echo basalt
#
public interface StringProcessor {

  String process(String input);

}
#

decorator time

lost matrix
#
public interface StringProcessor extends Function<String, String> {}

Makes it more compatible 🙂

echo basalt
#

ehh

#

I've been avoiding that

#

Makes it a bit more annoying to document and reverse-engineer

lost matrix
#

Oh interesting, why? Ive tried to do that where possible

echo basalt
#

You're applying inheritance to omit the method and override the type

tender shard
#

why the hell does MC complain about server.properties not found on first run? it's supposed to create it lol

placid moss
#

what is the issue tho

echo basalt
#

I don't think there's any scenario where a method would require a Function<String, String> and you'd pass a StringProcessor

#

Or well

lost matrix
placid moss
#

i think you need one when you first star the server or smth

#

idk

echo basalt
#

I don't think you should pass a StringProcessor on a method that requires a Function<String, String>. It'd be smarter to just require a StringProcessor in the first time

tender shard
lost matrix
tender shard
#

let's see

echo basalt
#

I wouldn't say that's more modular

#

It's like saying that you can make your code a lot more modular by just using Object everywhere

lost matrix
#

No that is not even close to a good comparisson

echo basalt
#

Function serves as a general purpose interface, making a distinct interface makes its purpose clear

tender shard
echo basalt
#

it also makes javadoc annoying as you'd have to document the class itself rather than the method

lost matrix
echo basalt
#

Like take this interface. Would it be appropriate to omit the method and just extend BiConsumer<T, CommandContext>?

#

I wouldn't say it's a good design decision

#

But hey that's just me

lost matrix
#

I think that would be very appropriate unless you add additional constraints to this class.
Adherence to common interfaces is desireable. Same goes for integration with Java streams and other Functional Features.
Why would you remove interoperability with existing java libraries.
The one thing i can understand is the concern about reduced clarity in some regard.
Ah and you cant evolve anymore.

tender shard
#

done

#

am I supposed to report it to spigot too? I mean it's obviously a vanilla issue but probably won't be fixed until 1.20.2 or 1.21

lost matrix
#

Imagine having a pipeline where multiple Function<String, String> are used and you need to
create a ton of anonymous classes for it

TextProcessHandler
  .with(someProcessor::handle)
  .with(anotherProcessor::handle)
  .with(thirdProcessor::handle)
  .build();

Instead of just passing the classes directly to it.

TextProcessHandler
  .with(someProcessor)
  .with(anotherProcessor)
  .with(thirdProcessor)
  .build();
echo basalt
#

I can't imagine a context where you have a Function<String, String> rather than a StringProcessor instance

#

Unless it's being provided by an external api

#

Except that external APIs generally don't provide you function objects

lost matrix
#

Those do exactly the same thing. I would not expect a StringProcessor but a Function<String, String> in my internals.

#

This way you could use any class from any library which implements those standard java interfaces.

#

With StringProcessor you need to create specialized classes. But i get the readability argument..

#

Its valid

echo basalt
#

We've just got different standards ig ¯_(ツ)_/¯

lost matrix
#

In this point we do ig

echo basalt
#

I haven't seen a single java class that implements Function<String, String>. I wonder if there's a dedicated interface for this somewhere in java std

lost matrix
#

Its not a primitive so i doubt it

echo basalt
#

hm

#

time we extend UnaryOperator instead of Function<String, String>

lost matrix
#

For primitives you got IntUnaryOperator (Function<Int, Int>)

lost matrix
echo basalt
#

But yeah what about javadoc'ing

#

Or would you inherit the Function's javadoc

lost matrix
#

In my point of view the interface has exactly the same functionality
unless you add additional constraints to the implementation. So i would inherit them.

echo basalt
#

What if there comes a day where I want to add a context parameter or something

#

Time to rewrite all internals? thonking

#

We can run with the argument that at the moment the interface provides idential functionality to Function<String, String> but in the future it may be revised

reef flower
#

Hi ! im trying to create a project but i have a problem, i get thjis error while "package" the project: Unsupported class file major version 61
. i'm shading and using Reflection btw

sullen marlin
#

your project java version is higher than your server java version

reef flower
#

My server java ?

sullen marlin
#

google the error

#

there's like 1000000000000000000000000 things explaining this

reef flower
#

already do but all help didnt help

#

i always have this error

lost matrix
sullen marlin
#

ok post the full error

#

are you using maven? gradle?

reef flower
#

Unsupported class file major version 61

#

just this

#

maven*

sullen marlin
#

whatever you are using needs java 17

lost matrix
sullen marlin
#

you do not have java 17

reef flower
#

i m using java 17 actualy

sullen marlin
#

uninstall all other java from your system

reef flower
#

and i tried with java 19

lost matrix
reef flower
#

i'm tring to "package" my project

sullen marlin
#

uninstall all other java from your system

lost matrix
#

Ok and how did you setup the projecto to use java 17?

reef flower
#

how ?

#

in project structure

lost matrix
tender shard
reef flower
#

my maven looks like this :

smoky anchor
lost matrix
smoky anchor
tender shard
undone axleBOT
sullen marlin
#

ur name is steve

#

doxxed

reef flower
tender shard
#

Duude

smoky anchor
tender shard
lost matrix
#

fk, sniped

#

alex why are you up already anyways

tender shard
#

99% of my posts here are „use 3.5.0“

reef flower
#

thanks !

#

that work now

smoky anchor
tender shard
lost matrix
#

lul

sullen marlin
#

and the nsa

#

dont forget the nsa

reef flower
#

oh my bad*

tender shard
#

And google

#

Since its a google form

lost matrix
#

They gonna feed that information to the birds and broadcast it through 5g directly into the chem trail fuel

smoky anchor
#

So it would not be like publicly searchable then ?

lost matrix
#

Its ok if you dont want your personal information on the internet

sullen marlin
#

no its not public lol

lost matrix
#

I wouldnt post my info with a megumi pb as well kappa

keen ferry
#

I'm making a custom fishing system. Is there a way to disable fishing? Like, remove the fish particles and prevent the bobber from lowering when it catches a fish

lost matrix
#

You can also set the bite chance on the FishHook

#

There is a ton of API around the FishHook. Play around with that.

tender shard
#

BITE is when the bobber goes down, but idk about the fish particles

lost matrix
#

I guess you can set the lure time to a very high value to prevent a fish from appearing

fervent prawn
#

I don't quite understand how to implement request waiting. For example, a player has sent a command that does something to another player, and he needs permission from this player to execute this command. In this case, how do I create a request, wait for a request, execute a command if the request is approved or cancel if rejected or the waiting time has expired?

#

Maybe anyone have some example?

young knoll
#

MD already fixed it

lost matrix
tender shard
#

he fixed it like 5 minutes after I opened the jira issue lol

lost matrix
#

You can use dates or a unix timestamp. Whatever feels appropriate to you.
But you need to check it either way.

clear elm
#

anyone german ?

tender shard
#

most people here

#

but this server is english only

clear elm
#

how can i change the slots in shopguiplus in the categories not in the main menü

lost matrix
#

Most people? I can only think of you, me and old man elgarl

tender shard
clear elm
#

mo

#

can you answer anyways

tall dragon
tender shard
#

germans definitely have a large %age on this discord

lost matrix
#

Isnt lynx swedish or something

tender shard
#

no

#

minidigger is german too and retrooper (or austrian?`)

lost matrix
#

Oh yeah minidigger

#

Yeah ok

tender shard
#

and also a shit ton of people here have "de.something" i ntheir package names lol

lost matrix
#

oof

tender shard
#

I have a feeling that this dude might be german too

tame coral
#

I'm not German but I learn German 👍

#

(it's very hard lmao)

tender shard
#

yeah I'd rather learn C++ instead lol

tall dragon
#

this facts

tame coral
#

Indeed

#

I wonder if there's a lot a fellow French people here

tender shard
lost matrix
tame coral
#

Nah that's very basic lol, I'm french I'm used to nouns having a gender

tender shard
tame coral
tame coral
#

Basically neighbors right

lost matrix
tame coral
#

The set rule is learn the genders

tender shard
#

no I mean portugal

lost matrix
#

You mean... belgium and france?

tame coral
#

Just because the language is similar doesn't mean it's the same country lmao

tender shard
#

i said it because imillusion often sends emojis of a red wine glass and a baguette

#

and that obv refers to france

tame coral
#

Nice

rough drift
tame coral
#

This felt like Americans saying Europe is a country

rough drift
#

Funny Americans

tame coral
#

That video is everywhere

tender shard
tame coral
#

Ahah good idea

rough drift
#

One time I was in a public VC with a friend and these two Americans join and start talking about American politics 💀

tame coral
#

Any Americans here tryna place Listenburg on a map ?

rough drift
#

We just DM'd eachother for a bit then left

echo basalt
#

I wonder how fun it'd be if we made tnt run but with ice

#

hm

rough drift
echo basalt
#

it's like tnt run

jagged quail
#

how to make java plugin in skript /s

echo basalt
#

but instead of sand

#

it's blue ice

tame coral
#

But you slide ?

echo basalt
#

no friction

echo basalt
#

easy to slip

tame coral
#

Oh god

rough drift
#

That actually existed a while back

#

I don't remember where I played it though

#

It was really fun

tame coral
echo basalt
#

boats

rough drift
echo basalt
#

that can jump

#

wait

#

horses

rough drift
#

it's marginally better on blue ice

rough drift
tame coral
rough drift
#

"boats that can jump"

...

"HORSES"

echo basalt
#

tomato tomato

rough drift
echo basalt
#

what if we put some boats in the middle of the track just to f with people

#

or make a dual layer arena

#

like 2 blocks thicc

rough drift
#

what would the 2nd block do

echo basalt
#

just act as a fallback

#

y'know

rough drift
#

For??

#

In case you travel trough a block?

echo basalt
#

yea

#

like

#

imagine falling into a 1-block hole

rough drift
#

Fucking Wraith 💀

#

ah

echo basalt
#

fuck I wanna write tnt run for shits n giggles now

#

bet it takes like 15 seconds to write that game

rough drift
#

It does

#

It literally does

echo basalt
#

I wonder if I should make a queue that ticks every 5 ticks or something

#

or just use move event

#

and what's the best way to cache positions so I'm not setting air to air

rough drift
#
on player move
if player is standing on BLOCK and block under is TNT
wait 5 ticks
remove block under player 5 ticks ago
remove block under block under player 5 ticks ago

if player y is less than 0
eliminate player
#

that's the logic for it

#

it's really not that complex

#

@echo basalt ^

#

No need to cache

#

just check the block under

echo basalt
#

yeah but that's a bit too aggressive

#

there's usually a 5 tick delay or something

rough drift
#

There edited

chrome beacon
#

or you could do it the old classic way and let the pressure plates handle the tnt ignition

rough drift
#

If it's with ice it won't fall

chrome beacon
#

ice?

simple girder
#

I've just started developing plugins and I am very confused anout something. I'm using Spigot version 1.20.1 when developing a plugin. How can I ensure that the plugin I'm developing can work with lower or higher versions?

chrome beacon
#

Compile against the lowest version you want to support
oh and don't forget to set api version to 1.13 in your plugin.yml