#help-development

1 messages · Page 1828 of 1

tender shard
quaint mantle
#

Cloud Command Framework is cool

mortal hare
#

all command frameworks go through bukkit command api, even brigadier goes through it (in craftbukkit at least)

tulip owl
tender shard
#

np, there's many others but I prefer ACF - it was made by the PaperMC dev

tulip owl
tender shard
#

it's a bit complicated at first, I can show you some examples if you need any

#

but it's really way easier once you learnt the basics

tulip owl
#

When I get to using it I’ll ask 🙂

tender shard
#

oki

mortal hare
#

as you can see

#

this API involves bukkit command API events to do some tab completions

#

its just a wrapper for brigadier

tender shard
#

so?

calm star
#
    public void kothTimer() {
        BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
        scheduler.runTaskTimer(this, new Runnable(){
            @Override
            public void run() {
                KothMain.playerTimer ++;
            }
        }, 20);
    }
``` so smth like that?
mortal hare
# tender shard so?

so i just wanted to prove that its impossible to get brigadier working independently without modifying the spigot's code

tender shard
calm star
#

one timer per player

tender shard
tulip owl
tender shard
calm star
#

i need to add them to a list and iteate

#

ik

#

iterate**

#

just i want to get the timer working for me first

tender shard
# tulip owl Wow, looking at the examples I see what you are talking about

Here's a tiny example for a really basic command @tulip owl

package de.jeff_media.filteredhoppers.commands;

import co.aikar.commands.BaseCommand;
import co.aikar.commands.annotation.*;
import de.jeff_media.filteredhoppers.FilteredHoppers;
import de.jeff_media.jefflib.TextUtils;
import de.jeff_media.jefflib.data.tuples.Pair;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

@CommandAlias("filteredhoppers")
public class MainCommand extends BaseCommand {

    private static final FilteredHoppers main = FilteredHoppers.getInstance();

    @Subcommand("reload")
    @CommandPermission("filteredhoppers.reload")
    @Description("Reloads the configuration")
    public static void onReload(CommandSender sender, String[] args) {
        sender.sendMessage("§aFilteredHoppers has been reloaded.");
        main.reload();
    }

    @Default
    @HelpCommand
    public static void onHelp(CommandSender sender, String[] args) {
        Pair<String,String>[] help = new Pair[] {
                new Pair<>("giveitem","Gives you the magic hopper thing"),
                new Pair<>("reload","Reloads the configuration")
        };
        for(Pair<String,String> pair : help) {
            sender.sendMessage("§7/filteredhoppers " + pair.getFirst() + "§r - " + pair.getSecond());
        }
    }

    @Subcommand("giveitem")
    @CommandPermission("filteredhoppers.giveitem")
    @Description("Gives you the magic hopper thing")
    public static void onGive(Player player, String[] args) {
        player.getInventory().addItem(main.getMagicItem());
    }
}
#

and you register that command like this in your onEnable:

        PaperCommandManager commandManager = new PaperCommandManager(this);
        commandManager.registerCommand(new MainCommand());

(You want to use PaperCommandManager even when you're using Spigot)

calm star
#

i do get the error Cannot resolve method 'runTaskTimer(com.santapexie.santa_koth.KothCommand, anonymous java.lang.Runnable, int)' tho

tender shard
#

e.g. 20, 20 instead of just 20

tulip owl
tender shard
#

first number = initial delay, second number = further delays

mortal hare
#

does this API fixes the issues with minecraft namespaces for brigadier?

tender shard
tulip owl
#

Nice 🙂

tender shard
snow compass
tulip owl
tender shard
tulip owl
#

In the GH it shows examples

mortal hare
tender shard
#

what I sent has subcommands: "reload", "help" and "giveitem"

mortal hare
#

that way autocompletion of the command resolves with minecraft namespace

calm star
#

Cannot resolve method 'runTaskTimer(com.santapexie.santa_koth.KothCommand, anonymous java.lang.Runnable, int, int)' still get this

mortal hare
#

but i guess if it handles tabcompletion via bukkit command api

#

this shouldnt be an issue

tender shard
calm star
#
    public void kothTimer() {
        BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
        scheduler.runTaskTimer(this, new Runnable(){
            @Override
            public void run() {
                KothMain.playerTimer ++;
            }
        }, 20, 20);
    }
eternal oxide
#

longs not ints

tender shard
calm star
#

no

#

that is in my command class

tender shard
#

that's your problem.

calm star
#

oh

#

this isnt the plugin

tender shard
#

"this" has to be a reference to your main classes' instance

calm star
#

ye

snow compass
calm star
#

does it have to be in the main class then

tender shard
tender shard
#

just provide a reference to your main instance

calm star
#

k done

tender shard
#

working now @calm star ?

snow compass
calm star
tender shard
#

oh by the way @tulip owl since you asked about tab completion: ACF will take care of basic tab completion like for the subcommands. I can show another example for custom tab completers if you like

mortal hare
#

seeing how aikar's command project is made make my dissapointed in myself

#

but hey

#

its 5 years old

tender shard
mortal hare
#

and has 60+ contributors

tulip owl
tender shard
#

ah, for that you can easily use sth like @Value

#

one sec

calm star
#
    public void kothTimer() {
        if (KothMain.kothStarted) {
            BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
            KothMain kothMain = new KothMain();
            scheduler.runTaskTimer(kothMain, new Runnable() {
                @Override
                public void run() {
                    KothMain.playerTimer++;
                    System.out.println(KothMain.playerTimer);
                }
            }, 20, 20);
        }
    }
``` this puts nothing in the console
#

when i use it like:

if(args[0].equalsIgnoreCase("start")) {
                    sender.sendMessage(ChatColor.GREEN + "King of the Hill started!");
                    KothMain.kothStarted = true;
                    this.kothTimer();
                }
tender shard
calm star
#

yes

tender shard
#

erm

#

why are you creating a NEW instance of your main plugin?

#

I am like 100% sure that you will got some console error

calm star
#

no error

tender shard
#

you can't instantiate your main class and you never want to do that anyway

young knoll
#

That’s a lie

#

There is no way you can do that without an error

calm star
#

no error

#

im not joking

tender shard
#

then you didn't restart your server after compiling your plugin again

calm star
#

i reloaded

mortal hare
#

he should get illegalargumentexception

tulip owl
#

Also, @tender shard should I use an API/wrapper for the config too?

mortal hare
#

because main class is already inited

calm star
#

oh

#

yes

#

oops

#

forgot to let is compile

#

before reloading

tender shard
#

yeah

#

So

#

you need a reference to your already existing main instance

calm star
#

org.bukkit.command.CommandException: Unhandled exception executing command 'koth' in plugin KingOfTheHill v0.1

#

ye

mortal hare
#

well its possible to instanciate new class

#

but the bukkit prevents you to do so

tender shard
#

either by dependency injection (passing "this" onto the other class instance) or by using a static getter to get your main classes instance

tender shard
#

ooh

#

I'm 99% of the time fine with the builtin YamlConfiguration

tulip owl
#

Okay 🙂

tender shard
#

of course it depends on what you're actually doing

tulip owl
#

Yea, just simple stuff atm but it could expand (custom plugin for a minigame thing)

tender shard
#

most of the time I have a class with lots of static final Strings, e.g.

#
public class Config {
  public static final String CHECK_FOR_UPDATES = "check-for-updates";
  public static final String DO_WHATEVER = "do-whatever";
}```
and then I do things like
```java
if(main.getConfig().getBoolean(Config.CHECK_FOR_UPDATES)) {
  // check for updates
}
calm star
#

'com.santapexie.santa_koth.KothMain.this' cannot be referenced from a static context

tender shard
#

yeah

#

?learnjava

undone axleBOT
tender shard
#

you can't use "this" in static contexts

#

because you don't have any instance

#

show your full main class pls, or at least the method where that error is thrown

#

@calm star There's two general ways to get your main instance into another class

#
  1. Method: Static getter

This is your main class:

public class Test extends JavaPlugin implements Listener , CommandExecutor {
    
    private static Test instance;

    {
        instance = this;
    }
    
    public static Test getInstance() {
        return instance;
    }
}

Then you can do Test.getInstance() in all other classes to get your main instance

calm star
#

i did that]

#

it works

tender shard
#
  1. Way is dependency injection

Main class:

public class Test extends JavaPlugin implements Listener , CommandExecutor {
    
    @Override
    public void onEnable() {
        new SomeOtherClass(this);
    }
}

OtherClass:

public class SomeOtherClass {
    private final Test main;
    
    public SomeOtherClass(Test main) {
        this.main=main;
    }
}
calm star
#

ok

#

how would i make a timer seperately for each player and make each stop and start independently?

tender shard
#

You'll need a Map

#

E.g. Map<Player,Integer> or Map<UUID,Integer>

runic mesa
#

What event would i use to increase all mobs health

tender shard
#

depends on when you want to do it

runic mesa
#

maybe like when they spawn type thing

tender shard
#

There's a CreatureSpawnEvent or sth like that

calm star
#

can you make maps static

#

or is that not advised

#

nvm

tender shard
#

of course you can. but you don't need to, you already have a reference to your main's instance

calm star
#

i can just use my static getter

tender shard
#

yep

#

but

#

do you actually need the map outside of your other class?

calm star
#

no not reallt

#

anyway, when i put it, how do i get the player / uuid?

tender shard
#

then you can just store the map as field inside your other class

tender shard
calm star
#

when its started, all players inside an area will start the timer counting up

tender shard
#

so already have a list of players inside that area?

calm star
#

if they leave the area, the timer stops

#

if they die it resets

tender shard
#

then you will have to check all online players, loop over them, check if they are inside the area, and if yes, put them into your map

calm star
#

i just have a ```java
@EventHandler
public void playerInBorder(PlayerMoveEvent e) {
Player p = e.getPlayer();
Location l = p.getLocation();
Border border = new Border(new Vector(-2,0,2), new Vector(2,256,-2));
if (KothMain.kothStarted == true) {
if (border.contains(l)) {
System.out.println("In Border");
//add players to list
}
}
}

#

listener

#

so would i add players to a list

tender shard
#

well you already have "p" there, so you already have the player

#

yourMap.put(p,0);

calm star
#

thats in a different class

#

ahh

#

i think i get it

#

I add players to a list, iterate through the list returning player, then I set the timer for that player to 0 with the map

#

and if they are not in the border, i just stop the stopwatch

hexed hatch
#

event.getEntity().setTicksLived(-32768);
Anyone know why this method does not allow anything less than 0?

#

With vanilla commands, I can set this to a negative value to make an item not despawn

#

/summon item ~ ~ ~ {Age:-32768,Item:{id:"minecraft:bow",Count:1b}}

#

Using this method, I get an error telling me I'm not allowed to do that

#

Which I find to be dumb and stupid and dumb

golden turret
#

i created a recipe manually here and the recipe book works now, it marks the recipe as available when i have the items, but when i click on them, it only takes the apple to the crafting table

#

the craft is the old 1.8 craft

#

but the gold block have a tag called "test"

hexed hatch
#

that's probably why

#

I don't think there's support for materials with modified meta

young knoll
#

Yeah the client just doesn’t understand

hexed hatch
#

does it work if you manually put it in there? I imagine it would

golden turret
#

yes

#

fuck

young knoll
#

I’m not sure if you can detect a click in the book, if you can then you can manually do it

hexed hatch
#

I think I tried once, I don't believe I was successful

young knoll
golden turret
#

yes it is possible

hexed hatch
#

ooh

golden turret
#

gg!

hexed hatch
#

what is that website? I really want to familiarize myself with the protocol

golden turret
young knoll
#

We should probably have an event for that

golden turret
#

yes

hexed hatch
#

wait what

#

people have written Minecraft servers in node?

#

what the fuck

#

who would do this

golden turret
#

you can find everything in this world

calm star
#

@tender shard in my timer method, how can i reference the player when putting my map?

young knoll
#

Someone asked here the other day about making one in python

tender shard
ivory sleet
#

If it’s for spigot, JavaPlugin::getPlugin, JavaPlugin::getProvidingPlugin

#

on top of that

#

You should rarely need to pass your main class instance down to a lower level component

tender shard
#

I do it fairly often and don't see any problems in doing so. E.g. when a listener wants to log something, or access the config

#

or if a command wants to reload the config

young knoll
#

Then you can pass the logger or config down

ivory sleet
tender shard
#

so I should pass my logger AND my config? I could instead just pass my JavaPlugin

tender shard
ivory sleet
#

Yes now your class is dependent on an instance of JavaPlugin

#

So whenever you need the logger

tender shard
#

of course it is, it accesses the logger and the config. and JavaPlugin provides both

ivory sleet
#

A side effect is that you also need the pass a java plugin instance

median vine
#

Spigot Plugin building error

ivory sleet
#

which makes the component less reusable

#

And it makes it coupled

#

which is problematic in a testing environment

tender shard
#

yes, my listener isn't meant to be used anywhere else. It was made for a specific plugin.

ivory sleet
#

And it’s fragile

#

I’m talking general code architecture

#

Passing your main plugin class to every other class is objectively worse than passing the dependencies directly

tender shard
#

If you would have read the post I sent, you'll notice it explains absolute beginner concepts. It's meant for someone who just gets started and wants to access something from their main class

#

If you already tell them not to do that at that point, noone would ever be able to start coding plugins

ivory sleet
#

Yes well, I mean you kinda asked for suggestions shrug

tender shard
#

and as I said - if a listener needs your logger and your config, there's no point in not providing the javaplugin

tender shard
ivory sleet
#

Your listener is tightly coupled to javaplugin

#

Thus whenever you want to instantiate a listener instance

#

You have to pass a javaplugin instance

tender shard
#

of course it is, it listens to some bukkit events

ivory sleet
#

Which ENFORCES mocking of javaplugin in a test environment

#

And it enforces mocking if you wanna reuse it in a different context

tender shard
#

and of the event class too

#

so you obviously don't have suggestions on how to explain beginners on how to get their config in a listener but rather on how to make the listener run in some testing environments

ivory sleet
#

Wat

#

I’m just saying passing the configuration directly is much better

#

Or whatever dependency you may have

tender shard
#

so what if the listener schedules a task?

ivory sleet
#

Yes that’s the issue with Bukkit

#

Anyways you can the create a middle class

#

Or middle level component

golden turret
ivory sleet
#

Which acts like a functionality of scheduling

#

And encapsulates the plugin instance

young knoll
#

That’s basically 99% of what I need a plugin instance for

#

Tasks

tender shard
#

yes but please let's not discuss this 😄 I was simply writing a tiny tutorial on how get your main instance from listeners, whether you think that's a good or bad idea, I'm sure you agree that 99% of beginners have that question at some point

ivory sleet
#

In that way you won’t have classes and functions jumping between high and low level

#

ye

tender shard
golden turret
#

yes

#

gradle

mighty sparrow
#

Are exit conditions a good practice in event listeners? If(...) return;

ivory sleet
#

Mfnalex I totally see why you’d pass da plugin instance so yeah and if it’s merely spigot it’s probably fine Ig

tender shard
young knoll
#

Thankfully you don’t need it for namespaced keys anymore

calm star
#

ive now done this:

public void kothTimer() {
            BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
            scheduler.runTaskTimer(KothMain.getInstance(), new Runnable() {
                @Override
                public void run() {
                    for (Player tempPlayer : KothMain.getInstance().playersInBorderList) {
                        KothMain.getInstance().playerTimer.put(tempPlayer, KothMain.getInstance().playerTimer.get(tempPlayer) + 1);
                        System.out.println(KothMain.getInstance().playerTimer);
                    }
                }
            }, 20, 20);
        }
``` but i get errors
golden turret
#

and idk how to make the maven config into gradle config

mighty sparrow
calm star
#
java.lang.NullPointerException: Cannot invoke "java.util.List.iterator()" because "com.santapexie.santa_koth.KothMain.getInstance().playersInBorderList" is null
        at com.santapexie.santa_koth.KothCommand$1.run(KothCommand.java:52) ~[Koth-0.1.jar:?]
        at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftTask.run(CraftTask.java:101) ~[patched_1.17.1.jar:git-Paper-386]
        at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:483) ~[patched_1.17.1.jar:git-Paper-386]
        at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:1567) ~[patched_1.17.1.jar:git-Paper-386]
        at net.minecraft.server.dedicated.DedicatedServer.tickChildren(DedicatedServer.java:490) ~[patched_1.17.1.jar:git-Paper-386]
        at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1483) ~[patched_1.17.1.jar:git-Paper-386]
        at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1282) ~[patched_1.17.1.jar:git-Paper-386]
        at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:319) ~[patched_1.17.1.jar:git-Paper-386]
        at java.lang.Thread.run(Thread.java:833) ~[?:?]
tender shard
#

I totally agree that it's not ideal

tender shard
mighty sparrow
#

Alright thanks

calm star
#

public Map<Player,Integer> playerTimer = new HashMap<>();

calm star
#

oh

tender shard
#

I hope it's okay to send my blog posts all the time 😄

calm star
#

sitll get error

tender shard
#

Everytime I answered the same questions 12 times I decide to just write it down in general so I don't have to rewrite the same thing again and again

#

So yes, @mighty sparrow , having a couple of returns is way better than having huge nested if statements

tender shard
young knoll
#

Someone make a compiler hack that accepts ifnt()

calm star
#

the first error i get comes from

    @EventHandler
    public void playerInBorder(PlayerMoveEvent e) {
        Player p = e.getPlayer();
        Location l = p.getLocation();
        Border border = new Border(new Vector(-2,0,2), new Vector(2,256,-2));
        if (KothMain.kothStarted == true) {
            if (border.contains(l)) {
                System.out.println("In Border");
                KothMain.getInstance().playersInBorderList.add(p);
            } else {
                KothMain.getInstance().playersInBorderList.remove(p);
            }
        }
    }
tender shard
#

my guess: your field "playersInBorderList" is always null because you never assign it

mighty sparrow
mighty sparrow
#

Ill show the code once im at home

calm star
#
public final class KothMain extends JavaPlugin {
    static BossBar kothBossbar = Bukkit.createBossBar("King of the Hill Event", BarColor.BLUE, BarStyle.SOLID);
    static Boolean kothStarted = false;
    private static KothMain instance;
    public Map<Player,Integer> playerTimer = new HashMap<Player, Integer>();
    public List<Player> playersInBorderList;

    @Override
    public void onEnable() {
        instance = this;
        this.getServer().getPluginManager().registerEvents(new InBorderListener(), this);
        this.getServer().getPluginManager().registerEvents(new PlayerJoinListener(), this);
        this.getCommand("koth").setExecutor(new KothCommand());
        serverTickEvent(this.getServer());
    }
mighty sparrow
#

For code, try sending it with

calm star
#

oh ye sry

mighty sparrow
#

?pasye

#

?paste

undone axleBOT
tender shard
calm star
#

ik i forgot my list

tender shard
#

oh yeah lmao

calm star
#

i think

#

ye

tender shard
#

I looked at playerTimer

calm star
#

lol

tender shard
#

yeah my first guess was right, you declare your list but never create it

mighty sparrow
#

By using ?paste, it doesnt flood the channel with code, I think its a better practice

tender shard
#

replace public List<Player> playersInBorderList; with public List<Player> playersInBorderList = new ArrayList<>();

calm star
#

ye

mighty sparrow
#

@tender shard you good with Kotlin?

calm star
#

now i get no errors

tender shard
#

I can read it

mighty sparrow
tender shard
#

but I never used it except to try it out a bit

mighty sparrow
#

Yes if you can read it its good

tender shard
#

yeah reading is no problem

mighty sparrow
#

Its the same librarys the bukkit logic is the same

#

Except im on paper

calm star
#

i get this error every second

[23:41:27 WARN]: [KingOfTheHill] Task #23 for KingOfTheHill v0.1 generated an exception
java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because the return value of "java.util.Map.get(Object)" is null
        at com.santapexie.santa_koth.KothCommand$1.run(KothCommand.java:53) ~[Koth-0.1.jar:?]
        at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftTask.run(CraftTask.java:101) ~[patched_1.17.1.jar:git-Paper-386]
        at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:483) ~[patched_1.17.1.jar:git-Paper-386]
        at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:1567) ~[patched_1.17.1.jar:git-Paper-386]
        at net.minecraft.server.dedicated.DedicatedServer.tickChildren(DedicatedServer.java:490) ~[patched_1.17.1.jar:git-Paper-386]
        at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1483) ~[patched_1.17.1.jar:git-Paper-386]
        at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1282) ~[patched_1.17.1.jar:git-Paper-386]
        at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:319) ~[patched_1.17.1.jar:git-Paper-386]
        at java.lang.Thread.run(Thread.java:833) ~[?:?]
#

because of

    public void kothTimer() {
            BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
            scheduler.runTaskTimer(KothMain.getInstance(), new Runnable() {
                @Override
                public void run() {
                    for (Player tempPlayer : KothMain.getInstance().playersInBorderList) {
                        KothMain.getInstance().playerTimer.put(tempPlayer, KothMain.getInstance().playerTimer.get(tempPlayer) + 1);
                        System.out.println(KothMain.getInstance().playerTimer);
                    }
                }
            }, 20, 20);
        }
tender shard
#

oh I already see

#

you try to increment a value for a player that's not in your map yet

calm star
#

sry gtg sleep il check tmrw

tender shard
#

check if the player is already in the map, if not, use 0 instead of Map.get(tempPlayer)

desert loom
#

getOrDefault would be good here

tender shard
#

yes

#

if a Map has that, idk rn, it probably does

desert loom
#

it does

tender shard
#

but anyway, again 😄 Does some one has any suggestions for the blog post I wrote about how to get the main instance in other classes, BESIDES that it's often not a good idea to actually require the main instance at all in other classes? 🙂

desert loom
#

is there a reason you use an initializer block instead of the onEnable method or something similar?

young knoll
#

Comic sans

tender shard
#

I'd rather set it as soon as possible instead

#

ALthough that happens almost never, I don't see any downsides in using the init block

desert loom
#

yeah there's probably not a downside. I was just curious

tender shard
#

also init blocks are fancy lol

desert loom
#

it does look cool

tender shard
#

yeah also static init blocks. I always use them e.g. when I need to get some enums by their names for some kind of map or sth

#

you can't

#

you can only get the string they entered

#

but e.g. if they entered "/tp" you can't know whether it's essentials TP or another plugins TP command

#

what do you need it for?

young knoll
#

I wonder if that event could provide a command instance

tender shard
#

use getMessage and split it by spaces

#

String commandName = event.getMessage().split(" ")[0]

#

that SHOULD return /tp when entering /tp bla bla

#

maybe it also just returns "tp" instead of "/tp", not sure

#

yeah it seems to include the /

#

All commands begin with a special character; implementations do not consider the first character when executing the content.

young knoll
#

It will never be null iirc

tender shard
#

it will never be null

#

and you also can't split by an empty string

#

getMessage() is @ NotNull and splitting it will also never return an empty array. it returns at least an array of length 1

tender shard
#

of course you could manually go through the command map

#

I just wonder why that would be useful in any case

young knoll
#

Mmh true

quaint mantle
#

Hi

tender shard
#

hi

quaint mantle
#

Any idea with this

#

ServerPlayer entityPlayer = ((CraftPlayer) player).getHandle();

#

returns java.lang.NoSuchMethodError: 'net.minecraft.server.level.ServerPlayer org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer.getHandle()'

young knoll
#

Use mojmap

tender shard
#

Yes

#

wrong mappings

quaint mantle
#

The NMS remapping is so mindfuck

#

I'm totally lost now

tender shard
#

are you using mojang remapped already?

quaint mantle
#

I used the <classifier>remapped-mojang</classifier> in my project

tender shard
#

do you also remap your final jar to use obfuscated mappings again?

#

like - do you have the "special-sauce" plugin in your pom.xml as well?

quaint mantle
#

I removed it earlier let's try it

tender shard
#

you MUST have it

#

the reason is:

#

you are coding against the mojang-remapped version but the server is using obfuscated mappings

#

so the server won't understand the mojang mappings

#

(note: in my blog post i'm using 1.18 instead of 1.18.1, you'll have to replace it for 1.18.1)

sudden reef
#

Hello, what's the best method to broadcast a message to the server?

#

Bukkit.getServer().broadcastMessage("") is deprecathed

young knoll
#

No it isn’t

#

You use paper

sudden reef
#

ah.

#

Wait what

#

Why is it deprecathed in paper?

eternal oxide
#

ask paper

young knoll
#

Because they want people to use adventure

sudden reef
#

what about broadcast(message, permission)

young knoll
#

What about it

sudden reef
#

ok nvm

#

I think i can use that to broadcast to players with that permission and it's not deprecated in spigot

tender shard
young knoll
#

No

#

Adventure

tender shard
#

or that, my bad

#

anyway

#

you can SAFELY use the deprecated method

#

as long as spigot does not mark it deprecated, you are fine to use it

#

even when spigot sometime marks it deprecated, it won't be removed for, probably, years

#

although you should switch to the new version as soon as spigot marks it deprecated

#

in fact, everything that gets marked deprecated in paper, don't worry about it as long as it's not deprecated in spigot

#

and if you want your plugins to be compatible with spigot, do NOT use paper as dependency

sudden reef
#

Huh

#

I seen some plugins using paper as dependency and being compatible with spigot

quaint mantle
#
private void savePlayerStats(Player player) throws Exception {
        ServerPlayer entityPlayer = ((CraftPlayer) player).getHandle();
        MinecraftServer server = entityPlayer.getServer();
        PlayerList playerList = server.getPlayerList();

        Method savePlayerFileMethod = playerList.getClass().getSuperclass().getDeclaredMethod("save", ServerPlayer.class);

        savePlayerFileMethod.setAccessible(true);
        savePlayerFileMethod.invoke(entityPlayer);
        savePlayerFileMethod.setAccessible(false);
    }```

Seems like I am unable to access this protected method anymore
#

Getting [00:26:30 WARN]: java.lang.NoSuchMethodException: net.minecraft.server.players.PlayerList.save(net.minecraft.server.level.EntityPlayer)

#

It looks like this in the decompiled PlayerList class

#

protected void save(ServerPlayer entityplayer) {
        if (entityplayer.getBukkitEntity().isPersistent()) {
            this.playerIo.save(entityplayer);
            ServerStatsCounter serverstatisticmanager = entityplayer.getStats();
            if (serverstatisticmanager != null) {
                serverstatisticmanager.save();
            }

            PlayerAdvancements advancementdataplayer = entityplayer.getAdvancements();
            if (advancementdataplayer != null) {
                advancementdataplayer.save();
            }

        }
    }
young knoll
#

It’s not going to be mapped at runtime

sudden reef
#

I guess if you don't use things that aren't in spigot it works..?

young knoll
#

Correct

sudden reef
#

Ok.

tender shard
#

if you want to be compatible with spigot, you should use only spigot as dependency

#

if you know 100% what you're doing, you can use only paper as dependency and only call paper methods / classes if you checked they exist

#

if you're lucky, you can only use paper and don't check it and it might still work

tender shard
young knoll
#

Because I don’t know how to remap with gradle D:

tender shard
#

I don't know that too

#

perfect time to switch to maven 😛

#

or ask someone here who knows how to

young knoll
#

I haven’t found anyone

#

And maven is just meh

somber hull
#

So im making a plugin where you can open a gui, and put spawners inside. Then it calculates the XP and you can yoink it from the gui. My question is, what is the best way to keep track of the items in the gui for later use. Save the needed values, like what type, and then just generate the spawner from those values? Or just save the itemstack? Also is it bad to create a new gui everytime i want to update it?

somber hull
tender shard
#

I wouldnt worry about performance in GUIs

tender shard
tender shard
# young knoll And maven is just meh

it's not 😛 gradle is fine too, I just don't know enough to properly use it and have no reason to learn it as maven can do everything I need

somber hull
#

oh i wasnt paying attention, i thought you meant transferring to maven

#

wait

#

oh well

tender shard
#

yeah I meant "switch to maven" because they don't know how to do stuff in gradle

somber hull
#

got it

tender shard
#

but it was more a like a joke

#

obviously gradle could do it too, we just dont know how

#

and yeah, what'S wrong in simply saving the itemstacks @somber hull ?

somber hull
unique shuttle
#

Hello, I have two plugins. the second depends on the first, when reloading the first because I modify it or for some other reason the second stops working because the first was modified, is there any way to depend on a plugin without having this error?

unique shuttle
#

I understand that but normally I do it like this

#

haha

somber hull
tender shard
tender shard
#

if you changed any .jar files: restart the server. if you only changed config files: the plugin should have its own reload command for that

golden turret
#

is there a way to set a recipe here as craftable?

tender shard
#

no

#

the book is client sided

#

anyway did you try to switch to PDC?

golden turret
#

already did that

tender shard
#

hm that's really strange because it's totally working fine for me in my custom crafting manager plugin

#

let me compile it again for 1.18.1 and try again

#

@golden turret working 100% fine for me. Can you maybe show your FULL code on github or sth?

golden turret
#

yes just give me some time

tender shard
#

sure

golden turret
#

basically is that

#

ignore the lines with my nick

#

it was just to clear my recipes

#

to dont affect

tender shard
#

hmmm

#

you're mixing ExactChoices with MaterialChoices

#

maaaybeee

#

maaaaaybe

#

try to only use ExactChoice

golden turret
#

i wasnt

#

but i added the materialchoice

#

just to check

tender shard
#

then I have no idea, maybe wait for md_5 coming online and ask him directly

#

or create a forums post too

#

can't hurt to ask there as well

#

because I have no idea

golden turret
#

because i created a recipe 1 materialchoice and 1 exact choice

tender shard
#

all I can say is that I have a plugin that allows to use custom recipes using configs and it's working fine

golden turret
tender shard
#

and it also relies on PDC tags to identify its own custom items as ExactChoices

#

erm but wait

#

you're still using that wlib thing

#

did you write that yourself?

#

if you where's the source for that?

golden turret
#

yes

#

wizardlybump17/wlib

#

didnt commited the pdc change yet

tender shard
#

yeah okay then

#

it must be something wrong with how you are handling your Items internally

golden turret
#

maybe

#

because the recipe i said i created manually worked almost fine

tender shard
#

just for fun: try to print out the ItemStack when registering the recipe

#

and also print it out in the CraftItemPrepareEvent or however its called, the item that actually gets inserted into the matrix

#

and also print out their hashcode

#

see if both are the same

#

just as an idea for debugging

#

I suspect at least either the toString or the hashCode will return sth different for the actual recipe item and the item you try to use

golden turret
#

k

tender shard
#

can you maybe also push your WLib changes? I'll try to also do some debugging

#

any other dependencies required that I need to install locally?

golden turret
#

yes 🤡

tender shard
#

just the respective spigot versions?

golden turret
#

yes

tender shard
#

I got them all on my nexus so that's no problem

golden turret
#

🙏

tender shard
#

just push your changes and I'll see whether I find something 🙂

golden turret
#

this is issue is only with the recipe book

tender shard
#

okay gimme some minutes 😄

#

(probably longer lol)

#

pls teach me 1 thing @golden turret

#

what gradle task do I have to run to get WLib to my local mvn repo?

#

I have no idea about gradle

golden turret
#

gradle publishToMavenLocal

tender shard
#

thx

#

I now get this

#
C:\Users\mfnal\IdeaProjects\WLib\core\src\main\java\com\wizardlybump17\wlib\WLib.java:5: error: cannot find symbol
import com.wizardlybump17.wlib.command.reader.EntityTypeArgsReader;
                                             ^
  symbol:   class EntityTypeArgsReader
  location: package com.wizardlybump17.wlib.command.reader
golden turret
#

forgor

tender shard
#

`paste

#

?paste

undone axleBOT
tender shard
#

full gradle log

golden turret
#

pushed

tender shard
#

k 1 sec

#

oki worked, thx

#

okay and how do I now build the finished .jar in the actual plugin? ^^

#

I find those gradle tasks so confusing

#

with maven I always just do mvn clean install and done 😄

golden turret
#

gradle shadowJar

tender shard
#

alrighty

#

I'll do some debugging but don't count on me pls

golden turret
#

and go to core/build/libs/WLib-v.jar

#

ok

tame jolt
#

How can i get the players prefix when they talk in chat? This isn't working for me.

import net.luckperms.api.LuckPerms;
import net.luckperms.api.model.user.User;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;

public class Events implements Listener {



    TestPlugin plugin;
    public LuckPerms lp;
        public Events(TestPlugin instance) {
        plugin = instance;
    }


    @EventHandler
    public void onChat(AsyncPlayerChatEvent e) {

        Player p = e.getPlayer();
        User user = lp.getPlayerAdapter(Player.class).getUser(p);

        if (user.getCachedData().getMetaData().getPrefix() == null)
            return;

        String prefix = user.getCachedData().getMetaData().getPrefix();

        Bukkit.broadcastMessage("test");

        Bukkit.broadcastMessage(prefix);

        e.setFormat(plugin.getConfig().getString("PREFIX") + prefix + e.getPlayer().getDisplayName() + ": " + e.getMessage());
    }
}```

ERROR:
https://www.toptal.com/developers/hastebin/wilajanile.properties
#

There are no errors loading the plugin. Just when i talk in chat, there is no prefix that shows. Only my name

golden turret
#

where is the instantiation

tender shard
#

the error message even says "this.lp" is null

#

your IDE should have underlined your usage of lp.doSomething too

tame jolt
#

Nothing is underlined. It says there are no problems found. Would i be easier to use LP for the groups, or using Vault?

thick gust
#

Where do I get those classes from? Is there a specific library? (1.18.1 Spigot API)

golden turret
#

vault

golden turret
tame jolt
#

Now how much easier is it tho? Because i feel like im close right now using LP.

tender shard
golden turret
#

i would use vault because it will work with any permissions plugin

tender shard
#

There is no EntityPlayer or PacketPlayOutWhatever in the mojang mappings

#

Yeah, always use Vault instead of directly accessing LuckPerms

tame jolt
#

Gotcha. Its just all the examples and stuff about vault are outdated that ive found. Are there examples somewhere that are updated?

tender shard
#

Although tbh noone really uses any other perms plugins except really big servers who don't bother to update because they suck and are stuck in the past

tender shard
thick gust
tender shard
#

EntityPlayer is called ServerPlayer IIRC

#

and it's in another package as well

#

PacketPlayOut... is now called Clientbound...

hexed hatch
tender shard
golden turret
#

yes

tame jolt
#

There would be nothing like this right? I wish xD

e.getPlayer.getPrefix()```
hexed hatch
#

I had no idea there was support for custom ingredients

#

That is delicious

tender shard
#

I think it exists since a loooong time already 😄

#

but yeah I also tend to miss new things

thick gust
tender shard
#

e.g. BlockFace#getOppositeFace

tender shard
#

how many classes do you get errors for?

#

if it's a few, I'll look it up for you

thick gust
hexed hatch
tender shard
hexed hatch
#

Oh

tender shard
#

It exists since AT LEAST 1.13 IIRC

thick gust
#

Actually before I'm going to list them

hexed hatch
#

Oh wait

#

I see it

#

I'm just an idiot

tender shard
#

😄 everyone is, sometimes

hexed hatch
#

Yeah well I'm one at all times 😎

thick gust
#

Do you know how to solve the following problem with Inventory titles? Gotta identify my inventories and I figured out that is kind of outdated what I've done back then.

tender shard
#

you should never identify inventories by their title

thick gust
#

Also do you know the SUCCESSFUL_HIT updated sound? (Villager buy sound)

#

The enum value seems to got deleted

tender shard
#

nah sorry you'll have to look through the list and see for yourself

#

it was probably just renamed to something including "VILLAGER"

thick gust
#

Might be ENTITY_VILLAGER_TRADE

#

That's the only similar thing to it

tender shard
#

just try it with /playsound

thick gust
#

Aight thx

tender shard
#

Yo @golden turret

thick gust
#

Shall I also include the previous packages?

tender shard
#

any idea why I get Cause: error: invalid source release: 17 although I set intellij to run gradle with java17?

#

my OS's default JDK is still 16 but I set IntelliJ to use java 17

tender shard
#

I'll try to find the new names for you

golden turret
#

this is in wlib?

tender shard
#

no wlib built fine

thick gust
#

Yeah I think I don't have all packages left

tender shard
#

it's the plugin itself

thick gust
#

I spammed the Import Hot key on some classes sometime ago so some got lost i think XD

tender shard
#
02:16:06: Executing 'shadowJar'...

> Task :compileJava NO-SOURCE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :shadowJar UP-TO-DATE
> Task :api:compileJava FAILED
2 actionable tasks: 1 executed, 1 up-to-date

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':api:compileJava'.
> error: invalid source release: 17

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 318ms
02:16:06: Execution finished 'shadowJar'.

golden turret
#
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists```
thick gust
#

I try my best tho

golden turret
#

gradle.properties

tender shard
#

there's no gradle.properties lol

#

do I create it in the root? or inside bukkit or api?

golden turret
#

gradle/

ivory sleet
#

create gradle/gradle-wrapper.properties

tender shard
#

there is no gradle.properties too

#

oh that one I have

golden turret
#

/wrapper

ivory sleet
#

oh yeah

tender shard
#

yeah and what do I add there?

ivory sleet
#

distributionUrl=https://services.gradle.org/distributions/gradle-7.3.2-bin.zip

golden turret
#

it should be there 🤔

tender shard
#

yes, it's there

ivory sleet
#

then reload the gradle project

#

as if it was a maven one

tender shard
#

I haven't changed anything but I'll try

#

nothing changed

golden turret
#

my intellij config is like this

ivory sleet
#

btw can u go to build.gradle

tender shard
golden turret
#

in settings

tender shard
#

yeah one sec

golden turret
#

not project settings

tender shard
#

ah yeah that was the problem

#

no idea why it has an additional setting for that

#

got it compiled, ty

thick gust
#
- GameProfile (com.mojang.authlib.GameProfile)
- Property (com.mojang.authlib.properties.Property)
- Base64 (org.apache.commons.codec.binary.Base64)
- EntityPlayer
- CraftPlayer
- PacketPlayOutSpawnEntityLiving
- PacketPlayOutGameStateChange
#

Only ones i could find so far.

#

I update you if i find more

tender shard
#

okay first @thick gust

#

are you using maven?

thick gust
#

Nope

tender shard
#

oh FML

thick gust
#

Dunno what that even is

tender shard
#

hm

thick gust
#

Just some plugins some1 recommended me to use

tender shard
#

well anyway

#

so

#

class and and two are still called the same, but they are in their own .jar file now

thick gust
#

y that sucks

tender shard
#

you can find it by doing this:
Run Buildtools
Extract the final .jar
go to META-INF/libraries

thick gust
#

they should have kept it the way it was

tender shard
#

there's a file called authlib.jar or sth

#

add that to your classpath

thick gust
#

im on it hold on

tender shard
#

yeah lets do it step by step

#

but I can really recommend you to switch to maven

golden turret
thick gust
#

what's the advantage using maven

tender shard
thick gust
#

I am tired of using third party softwares like git, maven etc.

tender shard
#

hard to explain in less than 10 sentences

#

you are only tired of that because you never saw the benefits

thick gust
#

You know i was used to only have Java, the JDK and my Eclipse on my PC to get started

tender shard
#

I hated it too at first

thick gust
#

Okay okay lets setup maven then first

tender shard
#

in fact, you can see how much I hated it at first, one sec I'll get the link

thick gust
#

Ty

magic dome
#

Anyone know a non nms way to make a ridable enderdragon like in hypixel (looking for 1.18)

thick gust
#

What's nms again

#

Can't u just use the Enderdragon class

ivory sleet
#

native minecraft source

thick gust
#

And put the player as passenger

#

w8 was i just explaining nms way or wut xD

tender shard
thick gust
#

However i always made a Enderdragon using the specific class for it. then i put the player as passenger and kinda made the enderdragon dealing 0 dmg or not evne attacking the player dunno how anymore tho lol

tender shard
thick gust
#

fuckign hell i dont want to read

tender shard
#

you use eclipse right?

thick gust
#

for the love of god i just need a link xD

#

yes

golden turret
#

i will try using items manually them

thick gust
#

now dont tell me to switch to intellij

tender shard
#

any change you MIGHT switch to IntelliJ? Because I know that eclipse HATES projects being converted to maven

#

just a question

thick gust
#

...

#

Omg

ivory sleet
#

alex got a point

tender shard
#

that was the reason why I hated maven

ivory sleet
thick gust
#

Spigot changed in a fucking bad way

tender shard
#

because eclipse gets confused when converting an existing eclipse project to maven

thick gust
#

I gotta change my IDE, install 2 more plugins (Git, maven)

#

what comes next

tender shard
thick gust
#

shall I move my plugins to the bin and reinvent them?! xD

tender shard
#

spigot got better and better with every release

thick gust
#

Yeah cuz i have a life xD

magic dome
thick gust
#

There was a time I was really good at Spigot Coding

#

Seems like I gotta relearn thingsn ow

tender shard
#

okay @thick gust we can try it using eclipse

thick gust
#

Great as well

magic dome
#

I want to steer clear of nms because im not too good at it and don't wanna learn at the moment

thick gust
#

No fuck it i go all in

tender shard
#

create a new eclipse project, tell it to use maven

thick gust
#

Lets go IntellIj

tender shard
#

okay that's easier

thick gust
#

Got a cracked version

magic dome
#

Like I know it... just not that well

tender shard
#

no

#

it's free bruh

#

get the community edition

thick gust
#

Whatever

ivory sleet
#

lol

tender shard
#

and stop using cracked things

thick gust
#

I already have it

tender shard
#

free version is more than you ever need

magic dome
#

Homie just installed a virus ☠️

thick gust
#

Dunno if my workspace is correctly but yeah

tender shard
#

alright. did you import your eclipse project?

thick gust
#

Bro i forgot if this was the free version or not

ivory sleet
#

You can’t have a view of every project in IntelliJ

thick gust
#

I installed a lot of JetBrains software KEKW

tender shard
ivory sleet
#

Yes ik it’s a bit anti eclipse cult

thick gust
#

Wait wait wait

#

Do I have to rightclick EVERY PROJECT

#

And add this?

#

Or just a single workspace?

tender shard
#

oh wait

thick gust
#

Also can you tell me how to import eclipse projects?

tender shard
#

you opened your whole eclipse workspace dir lol

thick gust
#

Yeah xD

#

I want to import them once again to make sure i didn't miss any changes i just did while using eclipse u know

tender shard
#

File -> Open... -> Choose your plugin folder that you used in eclipse

thick gust
#

First of all lets do that

tender shard
#

NOT the whole eclipse folder

thick gust
tender shard
#

just your projects folder

thick gust
#

Okay okay ._.

tender shard
#

lets create a thread

golden turret
#

how could i create a new PersistentDataContainer? 🤔

thick gust
#

Yeah that will be fine. I'll do the same atm with VS Code lol

golden turret
ivory sleet
#

you dont create a pdc

#

I mean

#

its just api

tender shard
tender shard
golden turret
#

i mean

#

here

thick gust
#

Should I say Yes?

ivory sleet
#

you very rarely need to create one

sick herald
#

anyone know what im doing wrong?

tender shard
thick gust
#

So click No?

tender shard
#

@thick gust please create a thread in this channel

thick gust
#

Oh fuck how I do that

#

XD

golden turret
#

nvm, i just saw what i wanted to do

#

so, i changed EssenceTier#getBaseItem and Essence#getItem to raw pdc

#

and Essence.fromItem stopped working

#

no progress

#

wait

quaint mantle
#

How i can convert a String Array in a String? Example: My array contais "A" and "B", i need "A B"

golden turret
#

String.join

quasi patrol
#

How would I get the total count of an item a user has in their inventory that has a certain lore and item?

golden turret
#

iterate the inventory and check whil you increase an integer

quasi patrol
golden turret
#

get the item in the slot

thick gust
#

does some1 know the new class for PacketPlayOutGameStateChange mojang remapped?

golden turret
#

tip

#

packetplayout -> clientbount
packetplayin -> serverbound

thick gust
#

Just figured it out

#

ClientboundGameEventPacket

sullen marlin
#

why

#

what are you trying to do

#

there is probably API for it

hexed hatch
#

md_5 can you add a method so I can modify the Age value of entities?

#

not ticksLived

#

✨age✨

#

I want to make items like I can with this command /summon item ~ ~ ~ {Age:-32768,Item:{id:"minecraft:bow",Count:1b}}

#

to make them just not despawn without having to mess with the ItemDespawnEvent

sullen marlin
#

@hexed hatch setTicksLived does this for items

#
    public void setTicksLived(int value) {
        super.setTicksLived(value);

        // Second field for EntityItem
        item.age = value;
    }```
hexed hatch
#

then why doesn't it allow for negative values

#

It gives me an error telling me no

#

and that makes me very sad

tender shard
#

lol

#

imagine being alive for -7 ticks

hexed hatch
#

I often wish I was alive for -32768 ticks

young knoll
#

Mood

tender shard
#

btw is there really no table for spigot packet names / mojang packet names?

sullen marlin
#

open a feature request

hexed hatch
#

yes please teehee

#

uh

lavish hemlock
hexed hatch
#

Not gay

#

diet gay

tender shard
#

stop talking about gay stuff, I'm the only one here allowed to do that

lavish hemlock
#

that's kinda selfish

tender shard
#

anyway @sullen marlin small question: do you know anything about the recipe book having bugs regarding to Recipes ExactChoices?

lavish hemlock
#

everyone has the right to gay it up as they please

tender shard
#

yeah alright I take it back

hexed hatch
#

software developers

sullen marlin
hexed hatch
#

and their rampant homosexuality

tender shard
#

hmmm you got a link to that bug report?

sullen marlin
#

I suspect it is at least partially client related

tender shard
#

I didnt find anything regarding it

lavish hemlock
#

most software devs are LGBT in some way

tender shard
#

because my lib works fine with ExactChoices including itemstacks with custom PDC data

sullen marlin
#

especially because the server doesnt have anything to do with the red/green outlines or 'can craft' stuff

lavish hemlock
#

and if they aren't

tender shard
#

but I checked the source of the person who had problems with it today and the code seemed totally fine to me

lavish hemlock
#

they're just not very good at software dev

sullen marlin
hexed hatch
lavish hemlock
#

or both

#

uwu

hexed hatch
#

but you would know that, wouldn't you?

tender shard
#

yeah that's exactly the problem. However I wonder when it occurs because my custom crafting lib thingy didnt have this problem

#

really strange

tender shard
lavish hemlock
tender shard
hexed hatch
#

does someone want to make my jira feature request for me so I don't have to?

tender shard
#

yes

hexed hatch
#

god yes

tender shard
#

but I don't know how

#

lol

hexed hatch
#

that doesn't solve anything

#

because neither do I

tender shard
#

lmao

#

I never did ANY pull requests

hexed hatch
#

wow

#

what a leech

tender shard
#

all I see is a ton of patch files and I don't understand them

hexed hatch
#

you take and don't give, don't you

golden turret
#

@tender shard

#

could tou

#

pls

#

give me your build from wlib

#

i need that 🤡

tender shard
#

the final .jar?

golden turret
#

yes

hexed hatch
#

@lavish hemlock hey baby wanna make my jira post for age -32768

tender shard
#

sure I'll dm it in a sec

#

but er

tender shard
#

@golden turret I didnt change anything in the lib's source

lavish hemlock
#

I don't know how to use JIRA

hexed hatch
#

oh my god

golden turret
#

yes

hexed hatch
#

literally worthless

golden turret
#

but im in phone rn

lavish hemlock
#

well, I do, but I don't know how to with Spigot's system lmao

tender shard
#

ah okay

golden turret
#

and i need my lib

tender shard
#

DM me pls

lavish hemlock
tender shard
#

and tell me again your group id you used pls

hexed hatch
#

cry about it

golden turret
#

talking with me?

tender shard
#

yes

#

DM me

#

and tell me your group id for wlib

#

otherwise I wont find it in my repo

golden turret
#

com.wizardlybump17.wlib

tender shard
#

ok one sec

young knoll
#

If the issue is on Jira someone will look at it eventually

hexed hatch
#

coll sweetheart honey gravy baby darling wanna make my jira post for me

golden turret
#

also, do someone know a online app that can compile my source code from java?

lavish hemlock
#

make like a stereotypical black grandma and compare people to desert items, puddin'

golden turret
#

im in phone rn and i need to build a plugin

sullen marlin
#

lol

sullen marlin
#

can you not get to a PC in the next 24 hours

#

how could you need a plugin that urgent

golden turret
#

i can

#

but i dont want to

sullen marlin
#

let me guess

#

you're too lazy to get out of bed

hexed hatch
#

it's hard md

lavish hemlock
#

this is why I have a laptop

hexed hatch
#

bed warm and cozy, everything beyond it is pain and suffering

golden turret
#

not in bed

#

my pc is literally in my front

lavish hemlock
golden turret
lavish hemlock
#

sleep
eat
fuck
watch TV
browse memes

golden turret
#

what about us

sullen marlin
#

eat

hexed hatch
sullen marlin
#

bruh

lavish hemlock
#

well

hexed hatch
lavish hemlock
#

yeah

#

I like to pick apart my memory foam bed topper

#

it's tasty uwu

hexed hatch
#

drop the judgement

lavish hemlock
#

/j-esus christ I'm joking

hexed hatch
#

licking the crumbs sensually off of your covers

sullen marlin
#

yes love sleeping in crumbs

tender shard
hexed hatch
#

that's why you lick them off

lavish hemlock
#

or alternatively you just wear like

#

50 layers of clothing

#

so you don't feel them

golden turret
#

but md_5

tender shard
#

btw md_5 I'd like to insult you but I won't

#

for years I wondered how the auto responder worked on spigotmc

golden turret
#

where is the others md_?

hexed hatch
tender shard
#

and then just by accident discovered there's a donor forum and it's explained there

hexed hatch
#

or just grow up and live with the crumbs

lavish hemlock
#

is it legal to marry crumbs?

sullen marlin
#

killed em

tender shard
#

wtf even is a "crumb"?

lavish hemlock
#

your mum

hexed hatch
#

gotem

golden turret
#

😳

lavish hemlock
#

HA HA HA

golden turret
#

ha

hexed hatch
#

fucking destroyed

young knoll
#

There’s an auto responder?

sullen marlin
#

a small piece of food

tender shard
#

if you wanna make fun of my mom at least call her a BIG piece of food

#

smh

sullen marlin
#

like when you eat a biscuit and pieces break off onto the floor

tender shard
#

ahhhh

#

yeah I get it

hexed hatch
#

god he's so wise

sullen marlin
tender shard
#

my bf recently destroyed my bed and now I don't know what to do

sullen marlin
#

demand a new one

tender shard
#

yeah

#

I demand a new BF

#

who's up to replace my BF?

young knoll
#

MD is available

tender shard
#

nah

#

md_5 isnt gay enough

restive tangle
#

Rainbow profile.

tender shard
#

he also destroyed my expensive keyboard

#

by spilling beer over it

#

and it wasn't even proper beer

sullen marlin
#

sounds destructive

tender shard
#

it was some "energy drink / beer mix"

sullen marlin
hexed hatch
lavish hemlock
#

my dad mixes like

tender shard
#

nah he just tends to be a bit clumsy when he's drunk

lavish hemlock
#

gatorade and energy drink

#

I think

#

he insists that it's good but he's also the kind of person to enjoy peanut butter + sardines

tender shard
#

nah we got "pre"-mixed energy/beer things in germany. pretty disgusting if you ask me

sullen marlin
#

beer

lavish hemlock
tender shard
#

Here‘s the fool + the disgusting „beer“ on one pic

#

it's not even allowed to be called "beer", it may only be called "mixed beverage including beer" lol

sullen marlin
#

Ingredients / allergens
70% beer (water, BARLEY malt, hops extract), water, sugar, carbon dioxide, acidifier citric acid, aroma, guarana extract 0.04%, antioxidant ascorbic acid, taurine, aroma caffeine, caramel sugar syrup

#

the fk

lavish hemlock
#

bull semen

hexed hatch
#

what

tender shard
#

yes

sullen marlin
#

I am disappointed I cannot purchase this abomination in australia

lavish hemlock
#

you are disgusting

quaint mantle
#

wooowowoowowo

#

go #general bois

hexed hatch
#

don't tell us what to do

quaint mantle
#

:imagine:

lavish hemlock
#

only mdaddy_5 gets to tell us what to do

young knoll
#

CO2?

lavish hemlock
#

kill me

young knoll
#

Is it carbonated

hexed hatch
#

mdaddy_5

#

beautiful

trail lintel
#

Yo gamers, is it ok for me to use one of the existing minecraft items png files, just color shifted for my custom item in my resource pack?

hexed hatch
#

Should be fine as long as you don't try to sell them or something

trail lintel
#

awesome =] I figured it was probably fine, mojang seems to be pretty chill as long as you aint trying to make money

mighty sparrow
#

Is there a way to know if a player right clicked on a customblock from a datapack ?

mighty sparrow
#

How to create a custom block?

#

Do you have a link ?

young knoll
#

Note block states usually

#

So you can just check the state of what they clicked

hexed hatch
#

custom blocks really aren't a officially supported feature

#

but my go-to is using the petrified oak slab variants

trail lintel
#

How do I go about damaging an item? Doesn't seem to be anything related to durability in the ItemStack or ItemMeta classes

mighty sparrow
#

what?

trail lintel
#

Hmmm is that something I would have to cast to? A flag I have to set?

#

I know there is an unbreakable flag