#help-development

1 messages ยท Page 1244 of 1

thorn isle
#

does this give you an idea how we might do this?

polar forge
#

by doing maybe

#
BlockBreakEventListener listener = new ToggleCommand(uhmmmm);```
echo basalt
#

what am I witnessing

thorn isle
#

you're on the right track but it's a bit lopsided

#

you're constructing a ToggleCommand object, so the variable type it goes into must also be ToggleCommand

chrome beacon
thorn isle
#

so we'd have

ToggleCommand listener = new ToggleCommand(uhmmmm);
#

also, the name listener isn't a very good name for this variable, is it? it's a command, not a listener

#

so let's change it to

ToggleCommand command = new ToggleCommand(uhmmmm);
echo basalt
#

let's get this straight

  • Every time you call new you're creating an object
  • You want to pass the same object both to setExecutor and your listener's constructor.. but why?

In order to call a method from your ToggleCommand class you need to have access to an instance of it. The way we do this is by holding it in a variable, and passing the value of that variable in the listener's constructor. That way, any method fired on the listener class will always have context to what value we're passing

chrome beacon
#

Just let vcs handle this

echo basalt
#

sure

chrome beacon
#

More people will just cause confusion

polar forge
thorn isle
#

place that line in your main plugin class and let's see what you have

polar forge
#

i think we might want to remove the uhmmm part

thorn isle
#

sure

polar forge
#
 @Override
    public void onEnable() {
        // Plugin startup logic

        ToggleCommand command = new ToggleCommand();

        getServer().getPluginManager().registerEvents(new BlockBreakEventListener(), this);
        getCommand("togglealert").setExecutor(new ToggleCommand());

    }```
echo basalt
#

How many instances of ToggleCommand are you creating there?

thorn isle
#

right; now, remember that we want to pass the command to the setExecutor and the BlockBreakEventListener constructor

#

and we don't want to do that by calling new each time, but by passing the variable we just created

#

how'd we go about this?

polar forge
#
getServer().getPluginManager().registerEvents(new BlockBreakEventListener(command), this);```
#

uhmmm

thorn isle
#

very good

#

and then the setExecutor?

polar forge
#

remains the same

#
        getCommand("togglealert").setExecutor(new ToggleCommand());```
thorn isle
#

how many times does new ToggleCommand() appear in your code in total?

polar forge
#

2, one in the variable and the other in setExecutor

thorn isle
#

but we only want to call it once, remember?

#

otherwise you are creating two commands

polar forge
#

well we did

#

once in the set executor

thorn isle
#

once, ever

#

you must not call it twice or else you have two commands and that's not what we want

polar forge
#

then we can pass command inside setExecutor?

thorn isle
#

so remove that second constructor call and instead pass it the one we constructed earlier

#

yes, that's right

#

let's see the end result

polar forge
#
package me.egitto.griefnotifier;

import me.egitto.griefnotifier.listeners.BlockBreakEventListener;
import org.bukkit.plugin.java.JavaPlugin;

public final class GriefNotifier extends JavaPlugin {

    @Override
    public void onEnable() {
        // Plugin startup logic

        ToggleCommand command = new ToggleCommand();

        getServer().getPluginManager().registerEvents(new BlockBreakEventListener(command), this);
        getCommand("togglealert").setExecutor(command);

    }




    @Override
    public void onDisable() {
        // Plugin shutdown logic
    }
}
thorn isle
#

this is correct

#

now, something of a tangent, but why do you think we don't want two commands?

#

in other words, why is it important that we call new ToggleCommand exactly once?

polar forge
#

bc then we have 2 seperate sets

thorn isle
#

that's right

#

we would have one set that's updated by the command

#

and another set used by the listener -- but it'd always be empty, because it's never updated by the command

#

now you can access the ToggleCommand, its methods and fields, in the listener class

#

next, you would want to create a method on ToggleCommand to determine whether a player is in the toggled list, and then call that method from the listener

#

let's see the two classes once you've done this

polar forge
#

u mean public boolean?

#

onCommand etc

thorn isle
#

a public method that takes a Player, or a player name maybe, up to you, and returns a boolean; if the player is in the toggled list, true, otherwise false

#

and like all methods, it should be named something descriptive, for example isToggled

polar forge
#
public boolean isToggled(String playerName) {
    return toggledPlayers.contains(player.getName);
}```
thorn isle
#

right

#

then, in the listener class, call that method and use the boolean it returns to determine whether to send a message or not

polar forge
#

if (command.isToggled(player.getName())) {
        player.sendMessage("You are toggled!");
        return true;
    } else {
        player.sendMessage("You are not toggled.");
return false;

    }```
thorn isle
#

let's see the two classes

polar forge
#

togglecommand

thorn isle
polar forge
#

which

thorn isle
#

togglecommand

polar forge
#

yea its already in there

thorn isle
polar forge
#

it is

remote swallow
#

its inside your other method

#

that is basic java

thorn isle
#

oh ๐Ÿคก

#

yeah no that's not how you define a method

polar forge
#

look im sleepy

remote swallow
#

like it was said like almost an hour ago, you should go and learn java first kekw

polar forge
#

its 11;30 pm

thorn isle
#

method declarations go directly under class definitions

polar forge
#

thats why im taking too much to respond

#

i sleep and wake up

polar forge
#

ive already learned it

thorn isle
#
public class ToggleCommand implements CommandExecutor {

    Set<UUID> toggled = new HashSet<>();

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String s, String[] args) {

onCommand here is a method definition; your new method should look the same

#

that is, it should be indented 4 spaces, and it should be within the curly brackets of the class -- not inside another method

chrome beacon
thorn isle
#

for example

public class ToggleCommand implements CommandExecutor {

    Set<UUID> toggled = new HashSet<>();

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String s, String[] args) { 
        //method body
    }
    
    public boolean myNewMethod(String myParameter) {
        //method body
    }
}
polar forge
#

i already resolved it

thorn isle
#

and yes these are the absolute java basics you definitely should know these

umbral ridge
#

hey, on player async chat event, no matter what i set the message to, it will always default to <PlayerName> : {my custom stuf.... . . .. }

<Sp3eex> {i can edit this}
but not anything before

thorn isle
#

either way let's see your command class once you've put the method definition where it should go

polar forge
#
package me.egitto.griefnotifier;

import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

import java.util.*;

public class ToggleCommand implements CommandExecutor {

    Set<UUID> toggled = new HashSet<>();

    public boolean isToggled(String playerName) {
        return toggled.contains(playerName);
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String s, String[] args) {

        if (cmd.getName().equalsIgnoreCase("togglealert")) {
            if (!(sender instanceof Player)) {
                sender.sendMessage(ChatColor.RED + "You Must Be In Game To Run This Command");
                return false;
            }
            Player player = (Player) sender;

            if (toggled.contains(player.getName())) {

                player.sendMessage(ChatColor.RED + "Toggled Off");
                toggled.remove(player.getName());
                return true;
            }

            player.sendMessage(ChatColor.GREEN + "Toggled On");
            toggled.add(player.getName());

        }
        return false;
    }
}
thorn isle
#

much better

#

now, go into the listener class and call that isToggled method from there

thorn isle
#

btw does the TOTAL_WORLD_TIME statistic record ticks or milliseconds or seconds

chrome beacon
#

ticks

polar forge
thorn isle
#

right

remote swallow
#

are you sure thats what you want if you only want to send it for toggled people

thorn isle
#

now, do we still remember what we were trying to do from the start?

#

we want to broadcast the alert message only to op's who are toggled

polar forge
#

yes

thorn isle
#

so... rather than sending them "you are toggled", what should we send them?

polar forge
#

player.sendMessage(message)

thorn isle
#

that's right; and we only want to do that if what?

polar forge
#

  if (toggled.contains(player.getName())```
thorn isle
#

we're not in the command class, remember; we're in the listener class, and here we have to call the method you just created

#

so that'd be if (listener.isToggled(player.getName()))

thorn isle
polar forge
#

yes

#
if (listener.isToggled(player.getName())) {
                player.sendMessage(message);
            } else {
                player.sendMessage("Toggled Off");

            }```
thorn isle
#

close enough

#

build the plugin and see if it works

polar forge
#
     if (toggled.contains(player.getName())) {

                player.sendMessage(ChatColor.RED + "Toggled Off");
                toggled.remove(player.getName());
                return true;
            }

            player.sendMessage(ChatColor.GREEN + "Toggled On");
            toggled.add(player.getUniqueId());

        }
        return false;
    }
}```
#

xhould i remove this from command class

thorn isle
#

let's hear why you think it should be removed

polar forge
#

Ill go sleep now

#

ill test it tomorrow

#

ill let u know

thorn isle
#

i'll probably forget about this by tomorrow, be sure to resend the classes and a description of your problem

sharp yoke
#

why there is no EntityDamageByEntityEvent#isCritical method ? im using spigot-api 1.21.4-R0.1-SNAPSHOT

chrome beacon
#

Because no one has added it to the Spigot API

sharp yoke
#

uh

vernal oasis
#

There a way to get the recipe/output of an autocrafter?

west quarry
#

I have so many plugins but my server says i have zero
i have 30 plugins in the file but my server says 0

robust saffron
vernal oasis
#

i suggest PlugmanX for testing

#

I saw that md_5, ty

orchid brook
blazing ocean
#

probably shaders

orchid trout
#

most likely that new hologram display thing and its riding you

sly topaz
#

my guess is that it is a title with a bunch of negative spacing

solid cargo
#

Nvm thats quite dumb and easy to work around

slim wigeon
sly topaz
#

I get the auto-supplying in block place, but what would you be supplying in the pickup event

umbral ridge
#

well

#

that is interesting

#

XD

sly topaz
#

wana know the type? Secret

umbral ridge
#

yea

#

lol

slim wigeon
#

Don't worry about it, I got it fixed. I trying to fix another issue, something strange is happening with the PC. I have multiple servers running on the PC and one server, not related to spigot is binding to this virtual IP which is my NordVPN. So annoying

umbral ridge
#

should i rewrite this

slim wigeon
sly topaz
# umbral ridge

I mean, I'd hate to look at it but it doesn't seem to be doing anything particularly harmful

#

if you feel like refactoring, go for it

umbral ridge
#

its a way to retrieve data from custom yaml files

slim wigeon
chrome beacon
undone axleBOT
umbral ridge
#

i could have made getString, getInt, blahblahblah, but get() seemed cool to me

#

set() and get() and delete() and save() is what I have, i think its nice... maybe ill have to refactor,.. meh

#

โ˜• ๐Ÿšฌ

ocean gorge
#

why error?

rough drift
#

show us the message

ocean gorge
rough drift
#

but that's odd

ocean gorge
#

already

#

is Amazon Corretto broken? xD

young knoll
#

Autoboxing has left the building apparently

ocean gorge
#

๐Ÿ˜ฆ

#

i caught Java lying, this time i won

#

ok, i fixed it by changing the JDK

umbral ridge
#

how do you add a jar file as dependency in pom.xml?

#

i have the jar locally

rotund ravine
#

Install it locally

#

mvn-install

umbral ridge
#

do i have to download maven or is it somewhere already?

#

can i run the command within the project command line?

rotund ravine
#

Go look up how to mvn-install jar files

#

Then u can use the file as if it were in ur local maven repo

umbral ridge
#

yeah found something

#

man in Eclipse this was much simpler, i could just add a jar as a dependency in like 5 seconds and here it takes 5 hours

chrome beacon
#

Not really

#

It's one command

#

Oe just a file path in a system path

umbral ridge
#

yeah it's one command but mvn isn't recognized as a command in my project command line

young knoll
#

I mean you can still use jar dependencies in IntelliJ

chrome beacon
#

Don't use system path though

young knoll
#

But you shouldnโ€™t

umbral ridge
#

so what, download maven? and do some stuff there?

umbral ridge
chrome beacon
#

You need to do so yourself or run it fron Intellij

#

Or just use the file path of the maven executable directly

chrome beacon
#

Then you don't need the jar

#

Run maven install in the api project

#

And then depend on it like normal

umbral ridge
#

yea i still need to add environmental variable

#

where is maven installed by default? with intellij?

chrome beacon
#

Don't remember

#

Also you can just run the task from Intellij

umbral ridge
#

ok

young knoll
#

You can set up a publish task for your api

#

And then publish it to maven local

chrome beacon
#

That's for gradle

#

In maven you don't really need anything extra

quaint mantle
#

Hello can someone explain or help me why my PlayerInteractEvent Listener gets called multiple times with one rightclick?
I get the outprints "test" and "test2" 3 times?

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

I would appreciate any help! i cant manage to fix it somehow

young knoll
#

?interact

#

Dangit what is it

chrome beacon
#

They do check the hand

young knoll
#

Oh

chrome beacon
#

Anyways that appears to be the Paper API

quaint mantle
#

Oh dang nevermind i forget my listeners are getting registered with reflections too so i just had it registered multiple times

#

my bad

eager hawk
#

I made a new project, added my server.jar as external jar to my project, but when i try to do 'extends JavaPlugin' it does not recognize JavaPlugin aka I can't import it

#

What am I doing wrong?

eternal oxide
#

what spigot version?

eager hawk
#

1.24

eternal oxide
#

?bootstrap

undone axleBOT
#

Bootstrap Jar
The main spigot-1.18.jar is now a bootstrap jar which contains all libraries. You cannot directly depend on this jar. You should depend on Spigot/Spigot-API/target/spigot-api-1.18-R0.1-SNAPSHOT-shaded.jar, or the entire contents of the bundler directory from your server, or use a dependency manager such as Maven or Gradle to handle this automatically.

Please read the release notes for further information: https://www.spigotmc.org/threads/9-years-of-spigotmc-spigot-bungeecord-1-18-1-18-1-release.534760/#post-4305163

eternal oxide
#

better to use a build system (Maven)

#

?maven

undone axleBOT
eager hawk
#

alr will check it out

#

ty!

surreal hornet
#

to everyone dm me and tell your problem at website you get 110% accurate and fast reply

rotund ravine
#

?interact

#

?playerinterqct

chrome beacon
#

?interactevent

undone axleBOT
#

The PlayerInteractEvent may be called once per hand. If you only want code to be executed once, you can check the result of https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/player/PlayerInteractEvent.html#getHand(), then decide functionality.

For example, only executing code if the main hand was used:

@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
    if (event.getHand() != EquipmentSlot.HAND) { // * if the hand used is NOT the main hand:
        return; // do not progress past this point  |
    }
    // provide functionality
}
rotund ravine
#

Ahh

#

Go make a synonym for interact

eager hawk
chrome beacon
#

Eclipse works fine if you want to

eager hawk
#

Bcs for school we always work w Eclipse

#

Oh alrighty

eternal oxide
#

I use Eclipse

rotund ravine
eager hawk
#

Aighttt

chrome beacon
#

but Intellij can generate a plugin project for you with the McDev plugin

eager hawk
#

All those tutorials use IntelliJ as well thats why i was asking

#

don't see a lot of eclipse tutos

#

Bcs ive never worked with a pom.xml before so i'm doing some searching

eternal oxide
#

just create a new Maven project in Eclipse

eager hawk
#

Yeah but first I gotta setup that pom xml for that

eternal oxide
#

no

#

you create a blank maven project in Eclipse

eager hawk
#

oh?

eternal oxide
#

then edit the pom

eager hawk
#

oh damn

#

thats crazy

#

LMFAO

#

ur him

#

ty

#

What do I select as Archetype from the list?

eternal oxide
#

none skip it

eager hawk
#

I can't click next without selecting one

eternal oxide
#

I'll have to open my ide to look

#

but I know you can choose none

#

ah, first screen,

#

tick the top box, no archetype

eager hawk
#

Oh I see indeed, thanks

#

Sorry for all the questions, kinda new to me

#

And IntelliJ tutorials dont rlly help since they just use the mcdev plugin

eager hawk
#

Because I have this rn:

<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>me.vuxaer</groupId>
  <artifactId>WarpsPlugin</artifactId>
  <version>1.0</version>
  <name>Warps</name>
  <description>A plugin that handle warps</description>
  <repositories>
    <!-- This adds the Spigot Maven repository to the build -->
    <repository>
        <id>spigot-repo</id>
        <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
    </repository>
</repositories>

<dependencies>
    <!--This adds the Spigot API artifact to the build -->
    <dependency>
           <groupId>org.spigotmc</groupId>
           <artifactId>spigot-api</artifactId>
           <version>1.21.4-R0.1-SNAPSHOT</version>
           <scope>provided</scope>
    </dependency>
</dependencies>
</project>
#

but I think I'm missing a build section

eternal oxide
#

not really needed

eager hawk
#

To build the plugin

#

I suppose I do Run -> Maven build

#

But what do I put in Goals ?

eternal oxide
#

yes, Eclipse will use defaults if there is none

#

clean package

echo basalt
#

damn it's been a while since I did the T... reifiedType hack

#

this one :)

public <T> Whatever<T> createWhatever(Params here, T... hacky) {
  Class<T> type = (Class<T>) hacky.getClass().componentType();
  return WhateverWrapper.wrap(type, ...);
}
eternal oxide
#

you need a plugin.yml

echo basalt
#

elgar talking with ghosts

eternal oxide
#

I can hear them ๐Ÿ™‚

eager hawk
#

Hahaha

#

I have a plugin.yml but I think I found my mistake

#

Restarting my server rn

#

NVM UGH

#
name: Warps
version: 1.0
description: A plugin handling warps.
author: Vuxaer

main: me.vuxaer.main.Main

commands:
    warps:
        description: Teleport to the current warps location
        permission: warps.tp
    setwarps:
        description: Set a new warps location to your current location
        permission: warps.setwarps

permissions:
    warps.*:
        description: Gives access to all Warps commands
        children:
            warps.tp: true
            warps.setwarps: true
    warps.tp:
        description: Allows you to tp to the current set warps location
        default: true
    warps.setwarps:
        description: Allows you to set a new warp location
        default: false
#

Doesn't this look right?

smoky anchor
#

?main

eternal oxide
#

the error you posted said it had no plugin.yml

#

likely you put it in the wrong place

#

it shoudl be in a src/main/resources

eager hawk
#

It is in there tho

eternal oxide
#

my resources is in a different location but fix that part

eager hawk
#

do i just put src/main/resources there?

#

ty btw

eternal oxide
#

probably main/resources

#

as there is already a src directory defined

#

but try whichever works

eager hawk
#

and how do you run ur project when u already have a build section defined in ur pom?

eternal oxide
#

same way. maven build

#

your run configuration should save if you give it a name

#

in Eclipse

eager hawk
#

Im still having this stupid yml error

#

ugh

#

I can't send images in here unfortunately

eternal oxide
#

?paste your pom. Then show an image of your project structure

undone axleBOT
eternal oxide
#

?img

undone axleBOT
#

Can't send images? That's because you're not verified! Use !verify to complete verification.
Alternatively, you can upload screenshots to any image hosting site and share the link.

Here's some screenshot utilities that you can use to upload images.
Lightshot: https://prnt.sc
Imgur: https://imgur.com/upload
Flameshot: https://flameshot.org

eager hawk
#

!verify PowerVlogs

undone axleBOT
#

Usage: !verify <forums username>

eager hawk
#

!verify PowerVlogs

undone axleBOT
#

A private message has been sent to your SpigotMC.org account for verification!

eager hawk
#

dont mind this old childish name XD

#

idk why it's displayed like that btw rlly weird

#

but should still be right

eternal oxide
#

what version of spigot are you wanting to build for?

eager hawk
#

server is 1.24

#

but I think that plugin only uses features that should work in 1.16 as well

eternal oxide
#

then you need to change the source/target for the correct java version, 21 I think

#

ok

eager hawk
#

idk it keeps saying my plguin.yml is invalid

#

idk why

eternal oxide
#

open the built jar in your target folder with any archive program

#

check if the plugin.yml is in there

smoky anchor
rotund ravine
#

It does now

eternal oxide
#

I assumed he ment .4 so latest

smoky anchor
#

we're on 1.21.4 ...

eager hawk
#

Just latest yea

#

i meant that ye sorry

eager hawk
surreal hornet
#

Hello

#

What help you need

eternal oxide
#

try src/main/resources main/resources and just resources

#

See which works for you

#

one of them will

eager hawk
#

Now there is a plugin yml inside finally xp

#

but still getting the error

#

wait

eternal oxide
#

its yaml so use spaces not tabs

#

for indents

#

two spaces for each indent is usual

eager hawk
#

it indented automatically but ill try

cursive adder
#

Hi guys, I want to know if there is a way to change the pathfinders of an entity after it has been created? I leave the initpathfinders empty, and when I want to add them after that through the goal selector, they stay in place, as if I hadn't added anything. And if there is, how can I clear the existing pathfinders? My version is 1.16.5

eager hawk
#

Ty for all the help bro <3

eternal oxide
#

np

eager hawk
#

Do my commands need to have return true or false at the bottom?

#

i suppose true?

chrome beacon
#

yes

#

false is used if they fail

upper hazel
#

IDEA does not recognize yaml property declaration usages in project how fix it?

#

and why yAml if config is yml

chrome beacon
#

yml is just the short form of yaml

#

yaml is the name of the format and .yml is the extension

#

you can use .yaml as well if you want

smoky skiff
#

How make a pvp force enable in a pvp arena using pvp manger plugin and world gaurd

worldly ingot
# eager hawk

If you mean the fact your packages aren't nested, make sure this setting is enabled

#

It defaults to flat for some reason

eager hawk
#

I have it hierarchical actually

#

My other projects arent like that

#

But this one is

#

idk

blazing ocean
#

does hypixel use master!?

eternal night
blazing ocean
#

true

#

(lynx I sent that link yesterday smh)

worldly ingot
#

Btw, for sync Hypixel use proxy and databases.
Checks out

#

We do, in fact, use proxy and databases

#

They also say Citizens isn't public which is pretty funny

blazing ocean
#

wtf is a citizen

eternal night
eager hawk
#
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (sender instanceof Player) {
        Player p = (Player) sender;
        if (p.hasPermission("warps.setwarps")) {
                warpLoc = p.getLocation();
        }
    }
    return true;
}

How do I save this warpLoc somewhere so it doesn't reset when restarting the server?

blazing ocean
blazing ocean
eternal night
#

I wanted to ping choco in paper general when you posted it

#

but I was scared

blazing ocean
#

kek

eager hawk
blazing ocean
#

?configuration

#

?config

#

fuck

eager hawk
#

i prefer tutos that r not yt videos

eternal night
blazing ocean
kind hatch
eager hawk
#

like j texts yk

#

ty!

kind hatch
#

FRICK

blazing ocean
#

gottem

eager hawk
#

speedrun

#

xp

blazing ocean
#

?configs

undone axleBOT
blazing ocean
#

smh

eager hawk
#

I've added all the methods to create the config, but do I also need to create the config manually in my file structure, or will they do that automatically?

kind hatch
#

Need to have it in your file structure so that it can be created (if necessary) with the #saveResource() method.

#

It'll go in your resources folder.

eager hawk
#

ty!

eternal oxide
#

use the default config

#

and first line in onEnable do saveDefaultConfig();

#

every time your server starts your plugin will creatre a new config, IF one doesn;t already exist

kind hatch
#

I mean, if it's the only thing they are putting in the config, sure.
But if they want to add anything else, then the default config is just gonna get crowded.

eternal oxide
#

its his first plugin so best to keep it simple

#

and its a warp plugin so it's not going ot be super complex

kind hatch
#

Maybe, but if they make a lot of warps, that's a lot of config data.

eternal oxide
#

makes no difference, its going in a file wether its a custom config or the default

#

its still just a Map/file

worldly ingot
eternal oxide
#

He's scared because you are a big bully

eternal night
#

your recently revealed split personality just has me frightend

worldly ingot
#

I see

eternal night
#

(and again, missing husky updates, but I am having my finance guy work on the invoice)

umbral ridge
#

what is that

#

did not assign a file to the build artifact

#

where is [Help 1]

chrome beacon
#

What command did you run

eternal night
#

Are you running like install:install

umbral ridge
eternal night
#

dont

#

run install, not install:install

umbral ridge
#

I wanna use the file in other projects

#

but how

chrome beacon
#

Run install

kind hatch
#

Lifecycle -> Install

chrome beacon
#

^^

umbral ridge
#

ok thanks xD now that ive installed it

#

i can use it in other projects

#

as dependency?

chrome beacon
#

Yes

kind hatch
#

^

chrome beacon
#

yeah

eternal night
#

the install plugin thing only runs the install bit, but it would first need to package, compile etc

#

the install lifecycle does all of that

umbral ridge
#

so this <dependency>
<groupId>dev.spexx</groupId>
<artifactId>permissions</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>

#

what about the repository

chrome beacon
#

No need to specify one

#

It will use your local maven repo

kind hatch
#

Install puts it in your local .m2

umbral ridge
#

"dev.spexx:permissions๐Ÿซ™1.0 was not found in https://jitpack.io during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of jitpack.io has elapsed or updates are forced

Try to run Maven import with -U flag (force update snapshots)
"

#

do i invalidate caches?

#

or what XD

chrome beacon
#

Is that the same dependency information

#

as in the project you installed

umbral ridge
#

no

chrome beacon
#

Then that would be the problem

umbral ridge
#

why is it trying to find my dependency in jitpack.io repository

#

my dependency is installed locally

chrome beacon
#

It's checking every repo

#

since it's not installed locally

umbral ridge
#

it is i just installed it locally

chrome beacon
#

at least nothing with that dep info is

kind hatch
#

Make sure your groupId and artifactId matches the project pom that you are installing.

umbral ridge
#

ohh now it worked i think

#

if i make any changes in powerpermissions plugin, is it auto synced here? in other project, where im using it?

kind hatch
#

No, you have to run install every time you make changes.

umbral ridge
#

or do i need to change versions

#

ohh i see

#

ok works XD ty

#

awesome

blazing ocean
#

i love reinventing luckperms

umbral ridge
#

I prefer something lightweight rather than 1.7mb or 90% crap i dont need

#

XD

chrome beacon
#

Just rewrite it all in rust then

#

Get rid of all the bloat

#

or just C

umbral ridge
#

assembly

ocean gorge
umbral ridge
#

luckperms to me is like buying a car with 250hp, ... im happy with 100, i dont need more and dont want more

#

the most famous thing is not always the best for everyone

rotund ravine
rotund ravine
chrome beacon
#

and the 100hp needs a lot of maintenance to get working

#

or just straight up needs to be build from parts

eager hawk
#

I can use getConfig().getString(...) to pull properties from the config, but is there also a way to add new properties using commands?

#

for example /addwarp name, which adds a new warp w/ the location to the config

eternal oxide
#

getConfig().set(...

eager hawk
#

alr, thanks!

#

What am I supposed to put in here?

eternal oxide
#

that should be filled in for you

eager hawk
#

I think it got deleted when I replaced my pom with your example not sure tho

eternal oxide
#

https://maven.apache.org/xsd/maven-4.0.0.xsd

#
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>```
#

I'd try just F5 on teh pom first

eager hawk
#

Yea not gettin errors anymore now

#

I replace my project tag with urs (even though it was the same) but that seemed to fix it

eternal oxide
#

a hidden typo probably

eager hawk
eternal oxide
#

set(path, null);

eager hawk
#

I suppose the property itsself stays in the config then

#

Just without any data inside of it

wet breach
#

if you are using the api to remove data from a yaml file, setting it null removes both the property and the tag

eager hawk
#

I saw it got removed indeed, amazing :)

wet breach
#

the only reason the tag stays is because there was more then one property

eager hawk
#

Ty for the explanation!

polar forge
#

hey everyone

#

So i had this plugin, called tpto plugin, it lets u tp to another world

#

but if i do /setmap <nameMap> it tell me this error on line 27 at SetMapCommand

blazing ocean
#

?nocodew

short pilot
#

hey guys in recent spigot versions 1.21 how do you set target goals or even make them for custom entities?
any examples? would appreciate it

blazing ocean
#

?nocode

undone axleBOT
#

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

polar forge
#

but on line 27 there isnt any code?

remote swallow
#

arrays start at 0

#

basic java knowledge once again

chrome beacon
#

That would be your best examples

polar forge
blazing ocean
#

correct

polar forge
#

same error

blazing ocean
#

sounds like somebody didn't recompile

polar forge
#

wdym recompile

#

i did

#

or maybe not

#

i forgor to remove old file

glad prawn
#

is that paper

polar forge
polar forge
#

why do i get the usage if i do /tptomap <mapName>

eternal oxide
#

because after your teleport you fall through instead of returning true

polar forge
#

i never understood the return thing

eternal oxide
#

you are also going to get multiple Does not exist messages the more maps you have

#

do not for loop over the section

polar forge
#
if (section.equals(mapname)) {
                            player.teleport(map);
                            sender.sendMessage(ChatColor.GREEN + "You Have Been Teleported To " + mapname);
                            return true;
                        } ```
#

like that

eternal oxide
#

yes

polar forge
#

this should work hopefully

#

it doesnt

glad prawn
#

Learn to read stack trace

remote swallow
#

there is no maps config section

umbral ridge
#

how is PDC tied to a block? if I push it with a piston, will it still have the data? what if enderman takes it and drops it on the ground?

eternal night
#

PDC isn't tied to blocks that can be moved

umbral ridge
#

ohh I see how about a grass block and the enderman situation

#

XD

eternal night
#

PDC doesn't exist on blocks, it exists on block entities

#

e.g. Chest

#

The grass block does not have an attached block entity

#

so it cannot have a PDC

umbral ridge
#

but chunk can have a PDC

#

so blocks can too?

eternal oxide
#

no

umbral ridge
#

you can store pdc into a block or you can't?

eternal night
#

That is a chunk

#

not a block

eternal oxide
#

that is NOT a block

umbral ridge
#

I know i did it in the past for limited creative but i cant find the project anywhere

young knoll
#

?blockpdc

undone axleBOT
umbral ridge
#

I somehow saved pdc into a block

eternal night
#

There are projects that use the chunk PDC to store block information yea

eternal oxide
#

you did not store IN a Block

umbral ridge
#

and then on break event i retrieved pdc from it

young knoll
#

It stores it in the chunk using the blocks location as a key

eternal night
#

they handle "moving" by angry event tracking

young knoll
#

Essentially

#

What is angry event tracking

eternal night
#

A lot of screaming

young knoll
#

I see

umbral ridge
#

ohh

#

i see

bright crest
#

Anyone know if there is an easy way to run commands through a locally running spigot server's console then read the output in real time? I dont want to stop the server, get the log, then read it, then open the server again to get the log file, that takes too long, I need it to be in real time beyond just like praying there's a python library I can use.

#

thinking of using subprocess but if there is a more direct way that spigot has that would be way better

eternal night
#

rcon?

remote swallow
#

do you not have a console?

bright crest
bright crest
#

rcon seems to be what I need ill look into it

#

seems like rcon is very unsecure

urban cloak
#

just dont make the port reachable from outside

#

obviously its insecure because it allows connections to execute commands

bright crest
#

is there a way to expose like a secure rest endpoint with authentication then

thorn isle
#

you can write a plugin for it

#

from there you can run the commands over rcon via loopback or pass a custom commandsender to Server::dispatchCommand and forward the command feedback it gets as the response

sly topaz
thorn isle
#

for output you can use your own commandsender

#

when a command is run with a commandsender, that commandsender receives the command feedback

#

implement it and pass it to dispatchCommand and have the feedback get piped to the rest api response

urban cloak
#

well command feedback is hard to define

#

not all commands return the result directly

#

some send it as a chat message

slender elbow
#

you cannot implement custom CommandSender

thorn isle
#

if it's feedback it gets sent to the command sender

#

if its a global broadcast to all players it's not feedback

thorn isle
slender elbow
#

the dispatchCommand call will blow up not knowing how to turn your custom impl into something it can take a CommandSourceStack from

thorn isle
#

maybe it has been changed since but it worked fine in 1.17

#

after a quick look into nms source it looks fine

thorn isle
#

that doesn't get used for plugin commands however

slender elbow
#

sure, then only some commands work, while a whole other category of commands don't

#

I'd say just use tmux & ssh tunnel, no need for half assed custom solutions

thorn isle
#

i remember originally grabbing or spoofing a command block as the command sender, though i don't remember how i got the feedback from it

tidal fog
#

how can i access the motd of a server and the playerlist? (this wouldnt be a plugin just a general app to update info about my server :D)

buoyant viper
#

u would have to send a ping to the server methinks

#

idk what the way to do that is tho, consult protocol wiki

tidal fog
#

protocol wiki?

buoyant viper
tidal fog
#

ty ill look into it

buoyant viper
young knoll
#

?protocol

sick wave
#

hey, curious to know what everyone else uses when it comes to versioning. I've been trying to get a semver system going on my repo along w a changelog flow. I've been looking at commitzen, but it involves using python, it formats and bumps the version based on the commit message.

rough ibex
#

What's wrong with doing it yourself

#

derermining if you've made breaking changes

short pilot
#

hey guys in recent spigot versions 1.21 how do you set target goals or even make them for custom entities?
any examples? would appreciate it

#

im not sure how to find how mojang does it

sullen marlin
#

You can look at the decompiled source in the work/ folder to see how Mojang does it

daring light
#

Is there a way to disable structure generation in a World? I'm dynamically creating worlds on command but I would like them to be flat with no structure generation

#

Thanks

sullen marlin
#

WorldCreator.generateStructures(false)

dark arrow
#

is it possible to use protocolib make fake blocks

buoyant viper
#

i think u can make fake blocks with the spigot api

dark arrow
mellow edge
#

Yes it is but using just packets can cause desync and flight issues

dark arrow
smoky anchor
#

I think these sendXXX methods in Player do what you need

mellow edge
#

sendBlockChange will send a fake block change packet to the client while the server will remain unchanged

smoky anchor
#

Does the server handle the flying issue ? so it does not kick you if you stand on a fake block.

mellow edge
#

No

#

If you stood on that block you could be kicked

#

Because the actual block can be a non solid block thus causing the server to think a player is flying

dark arrow
mellow edge
#

I mean make the actual block a barrier block or smth

dark arrow
#

is it true that updating real block is slower and laggier then sending fake packets for pixel art or playing animation and stuff

mellow edge
#

Depends on what you are trying to do. Simply setting the block state to grass block on the server won't affect performance.

dark arrow
smoky anchor
#

setting real block = physics and light updates, send packets
sending a packet = just build the packet

smoky anchor
kindred valley
#

Sorry...

mellow edge
#

For large animations if they will be frequently changed that will affect performance a lot.

dark arrow
#

its like 10fps

mellow edge
#

Depends on each pc.

kindred valley
#

yes for sure

#

yes depwnds on it

dark arrow
#

so using packets is always better right as it will only needed client side while changing blocks will also put load on server

rotund ravine
#

Not always better

smoky anchor
#

wouldn't say "always" but in your case it may be better

kindred valley
smoky anchor
#

You can always benchmark it :D

mellow edge
#

As I said it depends on a lot of factors. If you will have this animations all around the world then yes, it could.

kindred valley
dark arrow
#

thanks a lot guys

kindred valley
#

no problem if you need more help ill be right here....

wet breach
#

the advantage of going packet route vs using the api is mainly entity and nbt data. Since the server ticks entities(now possible to have non-ticking entities) and has additional data the server likes to fill it, it is advantagous that you might now want the server to handle that stuff and not be aware about it.

#

however, these days there is a lot in the api where going packet route isn't really necessary as much ๐Ÿ™‚

daring light
dark arrow
#

is there any resouce pack that only contains 256 colors and teh blocks are retextured to 256 colors , i need it for detailed pixel art and i tries to edit resource pack with python but there are lot of non cube blocks or multi texture blocks which gets reuined , so if there is such resouce pack that already did it pls tell me

dark arrow
smoky anchor
young knoll
#

Noteblocks have over 1000

#

You can also do a trick with horse armor and display entities to have full RGB โ€œblocksโ€

smoky anchor
#

Well you can, but I don't think you should for 10k blocks ๐Ÿ˜ฌ

daring light
#

Why does Bukkit.getWorld(); return null even if the world exists?

eternal oxide
#

if it returns null the world is not loaded

daring light
#

Should I use WorldCreator to load the world in?

eternal oxide
#

that depends. is it a custom world?

daring light
#

Yeah it's a superflat world I create in my plugin

eternal oxide
#

then yes

#

BUT don;t load it before the base worlds load

daring light
#

Curious

eternal oxide
#

because you will break the default load order and may break some other plugins

daring light
#

Thanks

eternal oxide
#

Not all plugins get worlds by name. Some use teh load order, so [0] is always the main world

sly topaz
#

break them

fair rock
#

Make them suffer

eager hawk
#

How do you add suggestions when typing?
I would like to add all the available warps here

fair rock
#

Implements TabCompleter?

eternal oxide
#

in tabComplete return a List<String> of your warp names

sly topaz
#

does that work for brigadier suggestions

eternal oxide
#

No clue

sly topaz
#

I think you got to use a command framework for this if it doesn't, as Spigot doesn't expose brigadier by default

eager hawk
sly topaz
#

well, rather, you're better off using a command framework rather than trying to use brigadier natively

eternal oxide
#

implement TabExecutor instead of CommandExecutor on your command class

eager hawk
#

oh ok and then add unimplemented methods

#

i see ty

#

what is a common used package name for this?

#

or

#

Will I still be able to define the command itsself in the same class

eternal oxide
#

Yours would likely be WarpCommand

fair rock
#

i was confused after reading "instead of"

#

Implement CommandExecutor and TabCompletor in the same class

eternal oxide
#

WarpCommand implements TabExecutor

fair rock
#

So you can implement the command and the tab completion in the same class

sly topaz
#

TabExecutor is just a convenience interface that implements both CommandExecutor and TabCompleter

eternal oxide
#

TabExecutor is just CommandExecutor and TabCompletor in one

#

I typed too slow

sly topaz
#

2 fast 4 u

fair rock
#

Yeah that make sense

eternal oxide
#

Its early and I've not had my Wheatabix

fair rock
#

Its early and im sitting in a damn meeting since 2 hours

sly topaz
#

meetings ๐Ÿคฉ

eager hawk
#

So,

@Override
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {    
    return new ArrayList<>(plugin.getConfig().getConfigurationSection("warps").getKeys(false));
}

should do the job?

sly topaz
#

everyone's dream activity in any field

eternal oxide
#

yes

eager hawk
#

alrighty

sly topaz
fair rock
#

;:C

marble sage
#

does anyone know how I can add items from a plugin onto a shop?

For example add the sellwands from axsellwands to economyshopgui free version so players can buy them.

sly topaz
#

also you may want to check whether the configuration section exists before, just in case the user messes up the config

eager hawk
eternal oxide
#

They bought Pizza because you were not there. It was intentional

jagged thicket
#

they were celebrating your absent

sly topaz
eager hawk
#

alr ty!

fair rock
#

You all so mean sniff Jokes a side, they wonderful

dark arrow
#

omg thats so better , do we even need mods lol plugins and resources does the dream work

#

ok i know we need mods i just said it as a joke

smoky anchor
#

man, I had a message ready and everything

dark arrow
#

you can still send it always better to learn new things

#

so i can add around 800 custom blocks with note blocks alone noice

sly topaz
#

people usually limit themselves when it comes to plugins as it may produce performance issues however you don't have to worry about that with mods, as you can optimize those in a much tighter way

dark arrow
#

yah if we only need features in most efficient way mods are better , as plugins can add a lot but are inefficient

eager hawk
#

Is there a way to code a instant teleport when entering a nether portal without having the screen to like get drunk or whatever it is xp

sly topaz
#

yes, you just have to teleport them as soon as the PlayerPortalEvent is triggered

dark arrow
eternal oxide
#

The time to teleport also depends if its in the same world or another

eager hawk
#

Im new to spigot so don't rlly know all the events yet

#

Yeah its from the overworld

smoky anchor
eager hawk
#

I suppose you cannot disable a loading screen between two worlds

eternal oxide
#

Not disable, no

eager hawk
#

Yeah makes sense

sly topaz
#

uh you may actually have to listen to the PlayerMoveEvent and check if they're inside a portal actually, not too sure when exactly the PlayerPortalEvent triggers

dark arrow
smoky anchor
eager hawk
eager hawk
eternal oxide
#

That fires when ANY Entity contacts a portal block

sly topaz
#

ah that was the event I was looking for

#

nothing popped up in the javadocs as I searched PlayerPortal... so I thought I was tweaking lol

eager hawk
#

What are common named classes for this sort of things? I suppose something like PortalListener?

eternal oxide
#

be more descriptive

#

if its for handling Nether portals

smoky anchor
#

"APlayerHasEnteredTheNetherPortalBlockSoWeCanSendThemToTheNetherRightAway.java"

eager hawk
#

thats crazy

#

๐Ÿ˜‚

eternal oxide
#

perfect ๐Ÿ™‚

eager hawk
#

NetherPortalEnterListener

#

smth like that

eternal oxide
#

yep

eager hawk
#

bettt

sly topaz
#

I would just register this listener in-line tbh, it'd be very small

smoky anchor
#

btw found the gamerule

#

1.20.3

sly topaz
#

that's nice

eager hawk
#

This might be a dumb question, but is there a way to update the plugin without needing to restart the server each time?
Since I can't replace the .jar file when the server is enabled, I need to stop the server to be able to replace it and then start the server again to run it

rotund ravine
#

Yes

#

Donโ€™t do it, just rerun the server each time

eager hawk
#

Alrighty

eternal oxide
#

you can use an update folder

#

the server will pull new jars from teh update folder upon a restart

jagged thicket
#

why a seperate update folder?

eternal oxide
#

file locks

jagged thicket
#

oh, i have never experienced that tho

eternal oxide
#

when on Windows file locks are common

jagged thicket
#

oh windows ๐Ÿ’€

slender elbow
#

it'll also behave weirdly when the plugin tries to load a class/resource it hasn't loaded before

eternal oxide
#

also, if you just replace the jar (when able) you are likely to get left over classes in memory upon a reload

#

never reload

jagged thicket
#

Oh yeah reloading is weird ๐Ÿ’€

#

i made a freeze state for a mob and after reload it was still frozen but restarting fixed it

manic delta
#

Is it possible to detect when a player in creative duplicates an item with the middle click?

#

I ask at the moment because I am in the hospital and I have nowhere to develop

eternal oxide
#

yes/no good luck with creative

slender elbow
#

maybe InventoryCreativeEvent? outside of that creative mode is an absolute wildcard

eternal oxide
#

Yeah, you can detect a slot change but understanding if it was a middle click is going to be near impossible

slender elbow
#

the cursor itself might not be server sided at all

jagged thicket
#

you an check with nms i think

#

maybe im wrong

eternal oxide
#

possibly not. Much of Creative is purely client side

#

whatever the client says the server accepts

jagged thicket
#

( can people abuse this in building servers ? )

eternal oxide
#

for sure

jagged thicket
#

๐Ÿง 

slender elbow
#

in creative mode the client is the one that tells the server "these are the items i have in my inventory", when you put an item on your cursor it just tells the server there is now air in that slot, and when you put it down it tells it to "spawn this ItemStack i'm giving you"
with the InventoryCreativeEvent you can control what the itemstack becomes on the server but that's about it

#

the safe way of doing building servers is to not use true creative mode, but a faux one in survival with fly/god etc with an extra inventory to pick items from and such, think Hypixel Housing

jagged thicket
#

wait so the issue with items being deleted in creative mode is usually because of this?

jagged thicket
#

this is due to client or server?

slender elbow
#

no clue, that might be any kind of desync, I know nowadays both client and server have item drop throttling, it is possible that the client's throttler disagrees with the server's and desyncs, the server's throttler might disallow the dropping, but in creative mode it is the client that mandates what is in the inventory, it gets the final say on that

#

but that's just a theory

echo basalt
#

The found tag instance (ListTag) cannot store List

#

am I tripping or is there something weird going on

slender elbow
#

stacktrace? that's been fixed since 1.20.4 afaik

echo basalt
#

watch me get yelled at for using paper

jagged thicket
#

?whereami

jagged thicket
slender elbow
#

hehe

echo basalt
slender elbow
#

@eternal night thoughts?

eager hawk
#

any event / listener tuto's on the spigot pages?

slender elbow
#

from John PDC himself

eager hawk
#

?events

#

?listeners

slender elbow
#

idk the commands

echo basalt
#

and yes the list stores both types the same

#

this has always worked in 1.21.3, not sure if it's because I updated to 1.21.4 or what

jagged thicket
#

?eventapi

undone axleBOT
slender elbow
#

it's a weird edge-case on empty lists, I know that much

echo basalt
#

empty list.. hm

slender elbow
#

lynx will know better, he invented this api all by himself

#

when he wasn't doing the thesis

echo basalt
#

it might be empty yes

slender elbow
#

(not like he is anyway)

#

i know it's "fixed" on normal PDC, but apparently not on PDCView?

jagged thicket
#

bukkit event api is cool

#

i hate it when there isn't a good way to make it cancellable tho

#

๐Ÿ˜ญ

echo basalt
#

is it a .4 moment

#

I do have a getOrDefault I might just not save a list if it's empty

#

good enough let's pray this doesn't blow up

dark arrow
#

i managed to make 256 custom states of noteblock but i am having problem as when placed it changes it state due to block placed below it , any way to summon them with locked state

chrome beacon
#

I believe you need to listen to the BlockPhysicsEvent and check

echo basalt
#

there's prob a world config setting on paper too

#

which benefits perf

smoky anchor
#

Can you not set the block state with the force boolean ?

chrome beacon
#

Yeah but it will update as soon as something around it does

eager hawk
#

Is there a way to get the displayname from a block in the BlockPlaceEvent?

smoky anchor
#

Well ye, but assuming all they are doing is some animated pixel art in an enclosed space, the force would be all they need

smoky anchor
eager hawk
#

ohh yea

#

Can't i like make an ItemStack variable from the block that has been placed

#

And then get the meta from this itemstack

smoky anchor
#

what meta do you want to get ?

#

again, same problem

eager hawk
#

The displayname

#

oh

smoky anchor
#

that only returns ENG I believe

#

if it deosn't return the custom name

chrome beacon
#

It only returns what was set

#

If nothing was set it will return null

eager hawk
#

The thing is, I'm making a parkour plugin where a player needs to place a start and end pressure plate, and I want to check when a player places this specific pressure plate

eternal night
echo basalt
#

no

#

It's a list of strings

echo basalt
#

sometimes it's empty

chrome beacon
#

and then check for it on place

#

?pdc

echo basalt
#

I always store strings on it

eager hawk
#

Never heard of this before

#

Ty!

#

Will check it out

eternal night
#

Yea it do be rather weird

chrome beacon
#

It's basically just a wrapper for NBT tags

eternal night
#

Tho that error is higher up

jagged thicket
#

PDC is just nbt ๐Ÿ’€

#

?

eternal night
#

do you have replication steps, some code I can look at

slender elbow
#

hm yeah idk i can't reproduce it with just empty lists so, good luck

echo basalt
slender elbow
#

how's the thesis going? is it going?

eternal night
#

it is going

#

depressing

#

but going

echo basalt
#

there's like a lot of wrappers on wrappers going on

#

if you're willing to sit through it I can send detailed code but in general it's kinda whatever

eternal night
#

have you attached a debugger

#

You should be able to see everything you need with just a debugger at the utils.pdc.PDCContainer.getOrDefault call

slender elbow
#

everything?

#

๐Ÿคค

eternal night
slender elbow
#

hiss

eternal night
#

some things are obviously locked in our DMs dw

#

not everything

echo basalt
#

๐Ÿ‘€

eternal night
#

Yea I mean, the code is fine

#

I just need the state at that point in time

#

prior to the error

echo basalt
#

ug

eternal night
#

hence, attach a debugger

#

alternatively, I can compile you a custom paper jar

echo basalt
#

go ahead on that

slender elbow
#

he will backdoor your server

eternal night
echo basalt
#

I'm not running this locally idc

eternal night
echo basalt
#

backdoor my ass we have backups anyways

eternal night
slender elbow
#

he will send all the envvars and sysprops to paper's internal servers

#

all the plugin configs

echo basalt
#

I can't wait for it to blow up my logs with all the pdc spam

eternal night
#

It will kekwhyper

echo basalt
#

tps drops to a solid 4 when the error fires up

#

Ah but isn't logging async?
tps drops because of all the context switching

slender elbow
#

lmax disruptor ๐Ÿ˜Œ

echo basalt
#

and ArrayBlockingQueue

#

๐Ÿ™„

slender elbow
#

that does NOT look like lmax disruptor ๐Ÿ’€

echo basalt
#

๐Ÿ’€

dark arrow
#

finally ๐Ÿ˜ข , thanks a lot @smoky anchor for sticking with me and others too

echo basalt
#

welp /msg crashed my server instantly

#

this is gonna be a fun launch

eternal night
#

well, the jar is building, give me poor cpu a minute

echo basalt
#

venturechat doing weird things I need to update my fork

echo basalt
#

lynx can you make it only dump when there's an actual error pl0x

dark arrow
echo basalt
#

thanks in advance

echo basalt
#

perfect

#

we kinda read like every item every tick

eternal night
echo basalt
#

is there a way to read pdc without reading item meta

#

๐Ÿ‘€

eternal night
#

ItemStack#getPersistentDataContainer

echo basalt
#

perfect

#

I assume it's a view

eternal night
#

it is

echo basalt
#

well shit my pdccontainer is both read and write

#

time to abstract this into views

#

getting you logs in a sec

slender elbow
#

i love the stray adapter.isInstance(type, tag);

eternal night
#

it isn't

echo basalt
#

I'm assuming it's there to throw errors

eternal night
#

yea

#

its there to log exact faults in the matcher

echo basalt
#

but if it throws the error

#

log this shit will blow up

#

hm

eternal night
#

it doesn't throw errors

#

it yields a bool

#

.isInstance calls the matchListTag down the line

echo basalt
#

yeah it's still blowing up, got logs now

#

isInstance compare for ListTag for adapter List
isInstanceCompare for ListPersistentDataTypeImpl and pdt instance org.bukkit.persistence.ListPersistentDataTypeProvider$ListPersistentDataTypeImpl@57ebabbe
Matching list type byte. Expected 8; Found 10

eternal night
#

mhmmm

#

Welp

#

10 is compound tag

echo basalt
#

did I not send in code yet

eternal night
#

do you have the offending item?

echo basalt
#

yeah

#

I can spawn one in

#

it works fine until I write again to it

eternal night
#

can you write to it and then /paper dumpItem while holding it

echo basalt
#

gotta put the item aside it blows up tps when I hold it

eternal night
echo basalt
#

can I omit the lore?

#

it's like half the thing

eternal night
#

not in the dumpItem thing

#

the vanilla command could