#help-development

1 messages · Page 512 of 1

eternal oxide
#

monitor should provide a clone

young knoll
#

I want full integer priority

#

Obviously I will use Integer.MAX_VALUE because I’m important

worldly ingot
eternal oxide
#

lol

worldly ingot
#

but yes it should

young knoll
#

If you need to run after my events just use Integer.MAX_VALUE + 1

#

Easy

worldly ingot
#

Better yet, read-only interfaces for all events

#

They are you're right lol

young knoll
#

Plugins doing things improperly?

#

Impossible!

wet breach
young knoll
#

Programmers can never be wrong

#

Now if you’ll excuse me I’m off to extend ItemStack

eternal oxide
wet breach
#

as long as nms exists it should be fine

#

just replace all the default ones with the custom one 🙂

#

can't go wrong there

young knoll
#

Hang on imma discuss with MD about removing NMS in 1.20

young knoll
#

Yeah just use the API for everything

eternal oxide
#

With blackjack...

young knoll
#

I don’t care if there is no api for it, use it anyway

quaint mantle
#

Hello. I'm working on building a paintball plugin with different paintball minigames and I'm wondering if anyone would be interested in testing some things out with me tonight. Send me a DM 😄 Thank you so much. Any amount of time is appreciated. And afterwards, if you're interested in the project, I'll be looking for server staff too 😄

wary mauve
#

?paste

undone axleBOT
wary mauve
#

That's the error message ^

eternal oxide
#

check your startup log

#

latest.log from server

regal scaffold
#

Yeah indeed we decided to go with a packet solution instead.

young knoll
#

There isn’t an event for when the crystal grows?

regal scaffold
#

Nope

wary mauve
young knoll
#

I assume that could be integrated into the BlockGrowEvent

#

Maybe

regal scaffold
#

It's not

#

I tested every single event

#

Sucks but whatever

#

So packets it is

young knoll
#

We can implement that

regal scaffold
#

wym "we"

young knoll
#

Well

#

Spigot

regal scaffold
#

Yeah

#

I'll make a jira request ig

#

Technically if it gets accepted into spigot it goes accepted in all forks too right?

young knoll
#

Spam ping Choco to do it

regal scaffold
#

Like they all build from spigot

young knoll
#

Yes

regal scaffold
#

Alright

#

I'll make a jira request

#

Vote papi

young knoll
#

Do I feel like making a PR right now is my question

regal scaffold
#

👀

#

I don't think it's that complicated I've just never made a spigot pr myself and don't have the time available

#

I am interested in seeing how it would look though

#

Because I see a lot of .patches stuff going around and I'm interested in learning more just so busy lately

young knoll
#

Sadly you can’t view PRs unless you have signed the CLA

river oracle
#

I am too scared to work with patch files

#

seems just like I have to code java with 0 ide support

regal scaffold
#

Is that what prs are?

#

To like

remote swallow
regal scaffold
#

Do what my request is?

#

I literally copy pasted

#

The first other reuqest I saw

river oracle
regal scaffold
#

I just rememered this, wasn't gonna go turn on a server just to get the version

remote swallow
#

spigot is all patch files, bukkit and craftbukkit are real classes

regal scaffold
#

wait so

#

If I ask for like amethyst grow to be added to BlockGrowEvent

remote swallow
#

craftbukkit also has some nms patches

regal scaffold
#

That has to be done fully

#

From a .patch file?

remote swallow
#

its 1 pr on bukkit and 1 pr on craftbukkit

#

because thats all classes

regal scaffold
#

ohhhhh

river oracle
#

yeah you'd probably edit a patch file for craftbukkit

regal scaffold
#

That's interesting

remote swallow
#

cb is all impl of bukkit

regal scaffold
#

Don't really know how that works cfully just yet

river oracle
#

I'ma have to edit a patch file

remote swallow
#

what for lol

young knoll
#

It's actually no PRs on bukkit

regal scaffold
#

How much testing is done on this before they get accepted?

young knoll
#

Depends on complexity

river oracle
#

one of the enchanting events

regal scaffold
#

Is it gameplay testing? Or just testcases?

young knoll
#

In this case probably just gameplay

remote swallow
regal scaffold
#

Ah gotcha, interesting

#

Oh well, hope it gets added soon

young knoll
#

I assume you know this but you don't edit patch files directly

river oracle
young knoll
#

You will break things

river oracle
#

thats why I did not want to touch them

young knoll
#

Apply the patches, make your changes to the actual class in your IDE

regal scaffold
#

$5 pp f&f first person to submit the pr for adding amethyst to BlockGrowEvent

young knoll
#

And then rebuild the patches

remote swallow
#

just make sure to not commit nms to stash

regal scaffold
#

If you do it tonight coll I'll send you 10 🙂

remote swallow
#

you can buy nitro with that

young knoll
#

I don't think I am allowed to take payment XD

regal scaffold
#

Consider it a donation

river oracle
#

i'm pretty sure it'd be against CLA I'd have to read over it again

regal scaffold
#

Oh really?

#

tf

#

A donation is against it?

river oracle
#

donate to spigot :3

regal scaffold
#

Donate to md

#

Isn't that same as taking payment?

river oracle
#

I'd do it, but I have no clue

#

where tf

#

Amethyst shits are

#

and I'm also binge watching Great Pretender rn

river oracle
#

its worth

regal scaffold
#

yeah right lol

#

I see nothing in the CLA about payment

#

Coll see if it's allowed, if it is, I'll give you it for the pr. gtg for now

kind hatch
#

I think if md allowed payments for features, it would set a precedent.

regal scaffold
#

It's a ~10 minute thing at most

#

That benefits everyone

kind hatch
regal scaffold
#

In the CLA there's nothing about it either

river oracle
#

it'll get done eventually

regal scaffold
#

"eventually"

river oracle
#

you made a jira report right

regal scaffold
#

Yup

young knoll
#

Oh

regal scaffold
#

I know it will be done eventually

young knoll
#

Amethyst is kinda weird

regal scaffold
#

But since I do want it now is why I am offering, otherwise I would just wait

#

Still something that benefits anyone else using spigot and forks

#

I just don't have the time to go through all the learning process + cla + whatever is needed to do it myself at the moment.

remote swallow
#

dont need to learn anything for an api addition

#

just need to wait a day for md to inhale all your infomation

young knoll
#

This should technically still work

#

But amethyst is a special little guy

river oracle
young knoll
#

Well

remote swallow
#

it makes noise

young knoll
#

Each growth state of a crystal is a new block

remote swallow
#

and breeds allays

young knoll
#

Also the crystals themselves don't control growth

#

The block they are growing on does

regal scaffold
#

Tf

remote swallow
regal scaffold
#

That’s interesting lol

#

I guess has to do with game mechanics?

wary mauve
#

I'm trying to use this code from github in my plugin to copy and paste blocks. It throws a bunch of errors, like the things aren't being initialized correctly, and I'm not sure why.
https://github.com/TheGaming999/BlockChanger

This is the error message:
https://paste.md-5.net/ugomicigik.bash

GitHub

1.7 - 1.19 class that allows you to change blocks at blazing fast speeds - GitHub - TheGaming999/BlockChanger: 1.7 - 1.19 class that allows you to change blocks at blazing fast speeds

#

It's one java file, so I just copy and pasted it. Is there something I need to do to get it to work?

young knoll
#

So uhh

#

This is a bit awkward but

#

The BlockSpreadEvent does in fact fire each time the amethyst grows

#

@regal scaffold

regal scaffold
#

Wut

#

3 people tested it

#

It only fires when it goes to a different block not size

young knoll
#

The size is a different block

regal scaffold
#

Seriously? So blockspreadevent fires every time it grows to one of the stages

#

In the same location

young knoll
#

Yes

regal scaffold
#

How did 3 people test this and all say it didn’t

young knoll
#

small_amethyst_bud, medium_amethyst_bud, large_amethyst_bud, and amethyst_cluster

regal scaffold
#

Yeah

echo basalt
#

working on a new minigame system hmm

regal scaffold
#

Gonna do more testing ig

young knoll
#

I can show you the code I used

#
 @EventHandler
    public void onSpread(BlockSpreadEvent event) {
        if (event.getNewState().getBlockData() instanceof AmethystCluster) {
            Bukkit.broadcastMessage(event.getNewState().getBlockData().toString());
        }
    }
regal scaffold
#

You would imagine that we ruled it out before deciding on packets

young knoll
#

Output

regal scaffold
#

Ok so my jira is useless

#

Thanks coll

young knoll
#

No problem

regal scaffold
#

Send pp

young knoll
#

Idk if you can close the issue yourself, but you can edit/comment on it

regal scaffold
#

Yeah I will when I get back home

wary mauve
#

I'm trying to use this code from github in my plugin to copy and paste blocks. It throws a bunch of errors, like the things aren't being initialized correctly, and I'm not sure why.
https://github.com/TheGaming999/BlockChanger

This is the error message:
https://paste.md-5.net/ugomicigik.bash

It's one java file, so I just copy and pasted it. Is there something I need to do to get it to work?

GitHub

1.7 - 1.19 class that allows you to change blocks at blazing fast speeds - GitHub - TheGaming999/BlockChanger: 1.7 - 1.19 class that allows you to change blocks at blazing fast speeds

cerulean yacht
#

I'm looking at all the different licenses and what they mean and I was wondering if someone could clear something up for me. Let's say that I posted a free plugin with a public repo, I want to allow people to use and modify it for both private and commercial use but not redistribute it but rather contribute to the original. Is this possible, is there a license for it, do people do this in general?

eternal oxide
#

No matter the license pretty much no one is going to contribute back.

young knoll
#

Granted they aren’t likely to redistribute a modified version

#

Unless the original version becomes abandoned

south arrow
#

No clue where to ask this but to post premium plugins you need 80 posts, what does posts mean? Like forum comments etc?

young knoll
#

I believe it’s basically any post on the site

#

I think it matches the “messages” stat on your profile

wary mauve
south arrow
young knoll
#

I think the automatic update messages for plugins even count

young knoll
wary mauve
wet breach
undone axleBOT
wary mauve
wet breach
#

obviously you don't know it

#

so yes, the solution is to learn java so you can fix whatever problem it has

wary mauve
wet breach
#

point?

river oracle
#

its not being salty

wet breach
#

shhh

river oracle
#

its expecting you to know the basics of java before interacting with an API

wet breach
#

I wanted to see their response

#

so I could point out that it seemed like they came here to have someone fix their problem for them

#

instead of them putting in the effort

wet breach
rough ibex
#

It's called 'I'm not gonna sugarcoat it'

wet breach
#

oh looks like they chose the wrong time to insult someone

#

seems they awoken the rest of the spigoteers

rough ibex
#

Try again at 04:00 UTC

orchid gazelle
#

yoo

#

wtf you guys doing at 3:26am?

wet breach
#

well its only evening for me

orchid gazelle
#

oh lol

#

I just came from party because they all left :(

wet breach
#

perfect timing it seems

orchid gazelle
#

but I think im unable to code rn

#

idk if im actually able to think with this amount rn

wet breach
#

that is alright, the person here doesn't require your coding abilities 🙂

orchid gazelle
#

oh I wanna continue writing my project

#

but yeah

fallow latch
#

is there a way to set an itemstack's switch duration? (like the duration when u switch to an axe)

orchid gazelle
#

drunk coding is not very high quality coding

fallow latch
#

yeah

wet breach
#

doubt it, that is a client side thing

fallow latch
#

how about using nms

wet breach
#

not sure how that helps with client side thing

fallow latch
#

no like when its on cooldown u cant hit things right?

#

like the axe

wet breach
#

o.O

#

axes have cooldowns?

fallow latch
#

*crit things

echo basalt
#

but yeah that's just attack speed on the nbt

fallow latch
#

ohh

#

attack speed

echo basalt
#

you can't make it instant, I tried

fallow latch
#

that might be what im looking for thanks

fallow latch
wet breach
echo basalt
#

welp

#

now you do

fallow latch
#

yeah sorry lol

echo basalt
#

to like

#

decrease the speed

wary mauve
river oracle
#

its frank and to the point

#

learn java and you won't have stupid issues

candid kindle
#

heyo, im playing with sqlite and read online that i could create databases if i tried to make a connection and none was found, so im trying to do that, but im getting an issue: java.sql.SQLException: path to 'C:/sqlite/db/C:\Users\...\plugins\FlareHeroes\players.db': 'C:\sqlite' does not exist. anyone know what's up? here's my method:

    String url = "jdbc:sqlite:C:/sqlite/db/" + plugin.getDataFolder().getAbsolutePath() + "\\players.db";

    try (Connection connection = DriverManager.getConnection(url)) {
        if (connection != null) {
            System.out.println("The driver name is " + connection.getMetaData().getDriverName());
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
}```
echo basalt
#

basically

#

You're doing C:/sqlite/db/C:/Users/.../plugins

#

either remove the C:/sqlite/db/ or replace your getAbsolutePath with getName

wet breach
# wary mauve Im not trying to insult you, sorry. But telling me to learn java is less than he...

you are in the spigot/java development help channel, so it is assumed you know to some degree java/programming. If you do not, then you are in the wrong channel for help on your issue. You attempted to just use something in your project and it didn't work, but the solution is to modify where it is now wrong to work with modern versions. This requires learning java, but if you don't want to learn java that is fine, but still in the wrong place then for help and instead may want to look to the services section on the forums

#

I don't doubt someone here could update it for you, but you would have been better off asking for that then instead of asking for help on something you don't know and making it seem like you would put in the work to fix it.

echo basalt
#

man y'all arguing over some BS

wet breach
#

I am not even arguing

echo basalt
#

the project's outdated, just open a github issue and hope the author helps you out

#

It's not a basic issue like an NPE, you'd need to know a fair bit about nms in order to update this project

wary mauve
river oracle
#

plus the pain you have to go through to keep the NMS up to date isn't worth it

candid kindle
echo basalt
#

It's ok to ping

hollow birch
#

i have an interface for enchants and i want it to have a method handle() that takes in a number of different events so that when i implement it into a class i could use whatever event i want. i tried doing this with generics but couldnt figure it out anyone know how to do it?

cerulean yacht
#

idk if im understanding what you need but Event is an abstract class that all events extend you can take that in

hollow birch
#

i figured it out

#
    public <T extends Event> void handle(T e) {
        if (!(e instanceof StartMiningEvent)) return;
        StartMiningEvent startMiningEvent = (StartMiningEvent) e;
        startMiningEvent.setSpeed(MiningUtils.calculateSpeedWithEfficiency(startMiningEvent.getPlayer()));
    }```
#

ended up with this

sullen marlin
#

What is T adding

hollow birch
#

nothing tbh

#

it was just already there

#

from when i was trying other ways

rigid otter
#

How to set an entity scale?

river oracle
#

it looks cooler

buoyant viper
#

ie. Fabric with Pehkui

rigid otter
#

I want to set an Armor stand size

#

I make holograms using it. If its size is 0, then player can not touch it.

#

setVisible(false) player still can touch

#

and makes them cannot interact other blocks behind

echo basalt
#

setMarker

rigid otter
#

Ohh, thank you!

echo basalt
remote swallow
#

where would i start with trying to load a jar file from a direct download link onto the class loader so i could use it, somewhat like the libraries feature

brave sparrow
#

File downloading

#

Then class loading

river oracle
#

how do I synx CraftBukkit and Bukkit repositories on stash

remote swallow
#

wat

river oracle
#

all of the new pr's are just erroring

remote swallow
#

waht is synx

river oracle
#

for somer eason

#

synx*

#

sync*

remote swallow
#

oh

#

idk for stash lol

river oracle
#

like even after applying patches

#

I'm getting a shit ton of errors

#

wtf is PlayerExpCooldownChangeEvent

#

its giving me an error

#

could be my cache

#

no bukkit isn't in my cachewt

#

f

#

no TNTPrimeEvent nor PlayerExpCooldownChangeEvent

#

wtf

buoyant viper
#

r u looking at the right branch

river oracle
#

it was outdated

buoyant viper
#

F

past plover
#

is there a method to change a player's attack reach

river oracle
#

Nop that's client sided

tranquil stump
#

what do I use now that ItemMeta#setDisplayName is deprecated?

river oracle
#

Not paper

tranquil stump
#

oh

#

makes sense why I thought it wasn't deprecated before

#

alright to the paper server I go

brave sparrow
past plover
#

i might give it a shot

buoyant viper
#

Component.text("the thing", NamedTextColor.RED) for basic text

echo basalt
tall furnace
sharp bough
#

does anyone know about ACF and could give me a hand with a problem im having?
i basically want this command: /aar (arenaID) set (option)
where arenaID has to autocomplete to a given list that for now is defined this like

        manager.getCommandCompletions().registerCompletion("arenasIDS", c -> {
            Collection<String> list = new ArrayList<>();
            list.add("1");
            list.add("2");
            list.add("3");
            return list;
        });

and option should have a set of subcommands like this

an arena has:
- id --
- name --
.. set name "new name"
- display_name (deafult arena.name)
.. set dname "new display name"

this are some of my notes so far http://pastie.org/p/4JFLEj5QH4LGyKw9lrUpUh

rough ibex
#

Just ask away

sharp bough
past plover
sharp bough
cobalt thorn
#

Hi, im having an issues with my code for paginable but i tried everthing and doesn't work fine, the out of bound is caused by the register item that has only 1 item
Code Paginable: https://sourceb.in/ZlXUuiWBCc
Code: https://sourceb.in/yamxs6BnEa
Error:

java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 1
at jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) ~[?:?]
at jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) ~[?:?]
at jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266) ~[?:?]
at java.util.Objects.checkIndex(Objects.java:359) ~[?:?]
at java.util.ArrayList$SubList.get(ArrayList.java:1149) ~[?:?]
at net.rosamei.alixapi.guis.gui.PaginableInventory.setPage(PaginableInventory.java:100) ~[AlixAnimations-1.0.jar:?]
at net.rosamei.alixanimations.gui.AnimationsList.registerItems(AnimationsList.java:59) ~[AlixAnimations-1.0.jar:?]
at net.rosamei.alixapi.guis.gui.InventoryConstructor.open(InventoryConstructor.java:80) ~[AlixAnimations-1.0.jar:?]
at net.rosamei.alixanimations.gui.MainGui.lambda$registerItems$1(MainGui.java:49) ~[AlixAnimations-1.0.jar:?]
at net.rosamei.alixapi.guis.gui.InventoryConstructor.handleListener(InventoryConstructor.java:70) ~[AlixAnimations-1.0.jar:?]
past plover
#

how would i get a LivingEntity's main hand item (i forgot)

tender shard
past plover
#

got it

#

thanks

tender shard
#

np

tender shard
#

anyone knows how to get the "name" of a http status code in php?`
e.g. 200 -> ok"
401 -> "unauthorized" etc

rotund ravine
# tender shard anyone knows how to get the "name" of a http status code in php?` e.g. 200 -> ok...

You can use the http_response_code() function in PHP to get the HTTP status code name. This function will cause PHP to match and apply a Reason Phrase from a list of Reason Phrases that are hard-coded into the PHP source code¹.

Here is an example:

<?php
http_response_code(404);
echo "The error code is " . http_response_code();
?>

This will output:

The error code is 404 Not Found

I hope this helps! Let me know if you have any other questions.

Source: Conversation with Bing, 14/05/2023
(1) PHP: http_response_code - Manual. https://www.php.net/manual/en/function.http-response-code.php.
(2) php - How do I get the HTTP Status Code from an Exception thrown in .... https://stackoverflow.com/questions/63297586/how-do-i-get-the-http-status-code-from-an-exception-thrown-in-laravel.
(3) How do I get PHP errors to display? - Stack Overflow. https://stackoverflow.com/questions/1053424/how-do-i-get-php-errors-to-display.

tender shard
rotund ravine
#

Huh

tender shard
rotund ravine
#

Oh well

echo basalt
tender shard
rotund ravine
#

Guess ur making ur own function like this then

tender shard
#

I want to do sth like "get_http_status_code_name(404)"

rotund ravine
#

Apparently it is because the codes suck ass and the error should be in the payload

tender shard
#

I mean, I already got it hardcoded, but that's so ugly, I thought I can avoid it

rotund ravine
#

Guess not

tender shard
#

sad

echo basalt
#

java spring just has this

tender shard
#

that's nice but I'm using PHP, not spring 😄

echo basalt
#

and you'd just HttpStatus.resolve(404).getReasonPhrase

#

ah

#

im idiot

tender shard
#

basically I just want to have a generic error page where I can throw in whatever http code, so I only need one file for all the ErrorDocuments in apache

#

using intl_error_name also just returns [BOGUS UErrorCode]

#

yeah I'll just keep sticking with hardcoding the status codes, and hardcoding the most common explanatins

tender shard
#

lmao yeah this is not exaaaactly how it was supposed to work

quiet ice
#

Using IPv6 I see

quiet ice
tender shard
tender shard
west oxide
#

unless you want for each code a custom error msg

tender shard
#

the issue is that apache's ErrorDocument directive only allows a file but I cannot pass any get parameters

buoyant viper
#

what the fuck?

west oxide
tender shard
#

sth like this but I don't get it to work lol

buoyant viper
#

ive never seen PHP's security landing page

quiet ice
#

not php the programming language

eternal oxide
#

you are running out of items before you run out of slots

cobalt thorn
eternal oxide
#

you only have one item

cobalt thorn
#

yes i have only one

eternal oxide
#

but you are looping for how ever many slots you have

cobalt thorn
#

yes

eternal oxide
#

if there is only one item, what do you think happens when you ask for the next item for the next slot?

#

line 100

cobalt thorn
limpid nexus
sullen marlin
#

Hmm?

#

Not showing up in game or in the docs

#

I don't think any channel has been removed

limpid nexus
#

when i do this.getserver() in bungee it just doesnt know what to do with it

sullen marlin
#

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

charred blaze
#

whats wrong with this?

limpid nexus
#

I can do this ``` for (ServerInfo info : getProxy().getServers()){

    }```
eternal oxide
#

plugin has no getServer method, never has

limpid nexus
#

But if it gives me warning about not being able to use that while looping over the servers

#
        this.getProxy().
        this.getServer().getMessenger().registerOutgoingPluginChannel(this, "iso:chat");
        this.getServer().getMessenger().registerIncomingPluginChannel(this, "iso:chat", this);


        for (ServerInfo info : getProxy().getServers()){

        }


        getProxy().registerChannel( "iso:chat" );
        getProxy().getPluginManager().registerListener(this, new ChatPluginMessageListener());
    }```
sullen marlin
#

Or y know, update

sullen marlin
eternal oxide
sullen marlin
#

You need one for proxy and one for server

#

This seems like you're trying to mix two

charred blaze
#

huh discord sent it weird way

sullen marlin
limpid nexus
#

Totally confused

charred blaze
#

thanks

sullen marlin
#

It's unclear since your code uses methods from both

limpid nexus
#

the loop ignore that

#

I was playing with it

#

This is bungee not spigot

sullen marlin
#

What's the messenger stuff in your paste

#

Bungee has no messenger

#

@charred blaze do what you did but with the url I gave

#

The wiki is outdated and gradle keeps breaking it's config

charred blaze
#

ah yes i just copied this from your link

#

ok ill try

limpid nexus
#

Ah so i need to register this at the spigot level?

charred blaze
#

it worked

limpid nexus
charred blaze
#

Thanks

sullen marlin
#

That wiki seems to only have spigot code

#

You only need spigot code for the inbuilt plugin channels

eternal oxide
#

?pmc

eternal oxide
#

must be another for bungee. I remember reading one

#

thats for custom channels

quaint mantle
#

how can i check for the status of a bungecoord server

sand bone
#
- [Sat 12:03:45 ERROR Minecraft] Could not pass event PlayerMoveEvent to SimpleScore v3.12.2
java.lang.RuntimeException: An internal error occured.
    at ProtocolLib.jar//com.comphenix.protocol.reflect.accessors.DefaultConstrutorAccessor.invoke(DefaultConstrutorAccessor.java:22)
    at ProtocolLib.jar//com.comphenix.protocol.injector.StructureCache.lambda$newPacket$0(StructureCache.java:75)
    at ProtocolLib.jar//com.comphenix.protocol.injector.StructureCache.newPacket(StructureCache.java:83)
    at ProtocolLib.jar//com.comphenix.protocol.injector.StructureCache.newPacket(StructureCache.java:95)
    at ProtocolLib.jar//com.comphenix.protocol.events.PacketContainer.<init>(PacketContainer.java:130)
    at SimpleScore-3.12.2.jar//com.r4g3baby.simplescore.scoreboard.handlers.ProtocolScoreboard.createScoreboard$lambda-0(ProtocolScoreboard.kt:27)
    at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708)
    at SimpleScore-3.12.2.jar//com.r4g3baby.simplescore.scoreboard.handlers.ProtocolScoreboard.createScoreboard(ProtocolScoreboard.kt:26)
    at SimpleScore-3.12.2.jar//com.r4g3baby.simplescore.scoreboard.ScoreboardManager.updateScoreboardState$SimpleScore(ScoreboardManager.kt:89)
    at SimpleScore-3.12.2.jar//com.r4g3baby.simplescore.scoreboard.listeners.PlayerListener.onPlayerMove(PlayerListener.kt:43)
    at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor267.execute(Unknown Source)
    at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:77)
    at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80)```
#

I am getting this error

#

Someone help

buoyant viper
#

?whereami

eternal oxide
#

paper

sand bone
#

😂

#

Sorry

glad prawn
#

?paste

undone axleBOT
topaz atlas
#

Is there any way to have basically, a open hashmap, where the UUID is a key, and the value, does this work?:
private Map<UUID, UUID> myHashMap = new HashMap<UUID, UUID>()

#

is there a cleaner way to write it?

#

Because there is only one thing in the map, I wanted to reset varibles after a event but people here said I should use a hash map instead

eternal oxide
#

use a Set<UUID>

topaz atlas
#

there is two varibles, player1 and player2, now both of them are hash maps

eternal oxide
#

does player1 reference players 2?

topaz atlas
eternal oxide
#

then use a Set

#

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

topaz atlas
eternal oxide
#

reset?

topaz atlas
eternal oxide
#

what?

hazy parrot
#

there is no reason for you to do it, java gc exists

eternal oxide
#

why would you ever make anything null

#

you have scopes and gc to clean up

topaz atlas
#

that resets all the varibles, and stuff like that

eternal oxide
#

if you make a new instance it's all new

topaz atlas
#

actually

#

should I use gc? class reseting or hashset?

eternal oxide
#

no

hazy parrot
#

gc is automatically invoked, its not something you have to worry about

eternal oxide
#

you are throwing words at your screen and hoping some make sense

topaz atlas
topaz atlas
eternal oxide
#

then stop asking random questions and show some code so we can tell you where you went wrong

topaz atlas
#

?paste

undone axleBOT
eternal oxide
#

We don;t need "dumb" we need precise

delicate lynx
#

variables plz

eternal oxide
#

what is new HashMapUUID();?

#

there is no import

topaz atlas
#

Just now when I was about to make a hashset

hazy parrot
#

why you sent code which wont even compile

eternal oxide
#

so this code doesn;t compile at all then

topaz atlas
#

I just created that now, ima delete it, regardless, my issue still stands

hazy parrot
#

private HashMap<UUID, YourValueType> yourHashMap = new HashMap<UUID, YourValueType>();, seems you just drop random things you find on internet

eternal oxide
#

ok now tell us what you expect to happen and what actually happens

eternal oxide
#

I'm sorry but you were not following well

topaz atlas
topaz atlas
eternal oxide
#

line 144 woudl throw massive errors. Impossible to compile if (Bukkit.getPlayer(firstPlayer) == player || Bukkit.getPlayer(SecondPlayer) == player) {

#

you don't even have a second player variable

topaz atlas
#

Oh i fogot i deleted it

#

while trying to make hashmaps

#

ima just add it back

eternal oxide
#

ok so you are trying to start a battle between two players, when they have both clicked a sign the battle starts.

topaz atlas
#

Hint: my issue isnt a compilation issue lol.

eternal oxide
#

the battle should only be between these two players?

eternal oxide
#

ok create a record with two UUIDs

#
record Battle(UUID playerOne, UUID playerTwo) {}```
#

you can put that at the bottom of your class so it's only accessible from this class

#

in this class you add a Set<Battle> currentBattles = new HashSet<>();

topaz atlas
eternal oxide
#

when you get two players you create a new Battle passing their UUIDs

echo basalt
#

oo battles

eternal oxide
#

Then put that into the Set

#

when a player dies you check the Set for a Battle matching the playerOne and playerTwo

#

that way the battle continues until one kills the other

#

deaths by mob or accident will be ignored

topaz atlas
#

?paste

undone axleBOT
eternal oxide
#

doesn;t need one

#

it will never be used outside this class

rigid otter
#

I got NoSuchFieldException: knownCommands from the code below
But what problems with that?

Object result = getPrivateField(Bukkit.getPluginManager(), "commandMap");
SimpleCommandMap commandMap = (SimpleCommandMap) result;
Object map = getPrivateField(commandMap, "knownCommands");
@SuppressWarnings("unchecked")
HashMap<String, Command> knownCommands = (HashMap<String, Command>) map;
topaz atlas
#

smthin like that?

hazy parrot
tardy delta
rigid otter
#

Ahh, I see

#

So?

hazy parrot
#

so ?

eternal oxide
hazy parrot
#

show your getPrivateField method, we cant know how are you getting field

rigid otter
#

getPrivateField(Object object, String field)

Class<?> clazz = object.getClass();
Field objectField = clazz.getDeclaredField(field);
objectField.setAccessible(true);
Object result = objectField.get(object);
objectField.setAccessible(false);
return result;
topaz atlas
tardy delta
topaz atlas
# eternal oxide I recommend you throw all that code away

For my original code, not the class I just sent you, there are multiple events, you tolld me to add record Battle(UUID playerOne, UUID playerTwo) {} at the bottom of my main class, should the brackets in case all the code including events, im assuming no

eternal oxide
#

no

ivory sleet
#

Because setAccessible just overrides a flag for that particular AccessibleObject instance

river oracle
ivory sleet
#

So its completely useless

tardy delta
#

Fields not being immutable :(

rigid otter
ivory sleet
#

Na

#

Its useless practice

#

It can be good if u lend the accessible object to some other class where the original state is needed to be known

#

But like

#

Meh

#

Just do another reflective access at that point

topaz atlas
tardy delta
eternal oxide
#

all of you code is too much of a mess to be useable

ivory sleet
tardy delta
#

im wondering how much work they'll have to remove all that old securitymanager code uwu

topaz atlas
#

and hash with it

ivory sleet
#

Records are transparent immutable data carriers

#

Very useful (:

eternal oxide
#

you have classes with annotated EventHandler methods but the class doesn't extend anything. You have Fields all over with no rhyme nor reason for having them/

tardy delta
topaz atlas
ivory sleet
eternal oxide
#

none of the code you have posted would even compile

rigid otter
#

Wait, but what is the reason you don't make it public back? Make us easy to remove commands. Why if people still be able to use reflection to do that job?

topaz atlas
echo basalt
tardy delta
#

wondering how much warnings there are

topaz atlas
topaz atlas
#

I restored the varible and ran build

eternal oxide
#

no seriously, none of the code you have posted would even compile

ivory sleet
#

if someone were to use getDeclaredField again it wouldn’t matter whether u used setAccessible(false) again

topaz atlas
eternal oxide
#

not on the code you posted in the pastes you didn't

topaz atlas
tardy delta
#

that code looks worse than the code of my fellow students

topaz atlas
#

?paste

undone axleBOT
topaz atlas
topaz atlas
ivory sleet
#

Its just a glorified immutable hashmap if u wanna be realistic lol

tardy delta
#

you

topaz atlas
eternal oxide
#

close, that code will not compile either

ivory sleet
#

They’re immutable transparent data carrier by definition

topaz atlas
tardy delta
#

theres room for improvement

ivory sleet
#

meaning, no hidden data, no field reassignment

topaz atlas
topaz atlas
eternal oxide
#

I said to use a record as you are setting up a Battle between two players. It will only be between those two players and only ends when one of them kills the other

#

perfect job for a record

tardy delta
eternal oxide
#

you don't. It's a data container, thats all

topaz atlas
eternal oxide
#

so you are having the players click the same sign to setup a battle?

topaz atlas
#

does the record contain any code? or events?

topaz atlas
#

[Player1] and [Player2]

eternal oxide
#

why two signs?

topaz atlas
#

im not complaining tho

eternal oxide
#

So how do you know who is entering a battle? are there only two signs or more?

topaz atlas
#

I know it isnt that good of a method, setting varibles

agile anvil
#

The easiest way is to have a record (let's say Battle) making reference to two players (p1 and p2), you could add two booleans (p1Ready p2Ready) false by default. And when p1 click the p1 sign, just set it to true

#

Same for p2

#

And each time you change p1Ready or p2Ready, check if both are true : if it is the case then start the game

topaz atlas
agile anvil
#

Record Battle:

  • p1 : Player
  • p2 : Player
  • p1Ready : Boolean
  • p2Ready : Boolean
  • setReady(Player)
agile anvil
#

A record is pretty much a POJO but will automatically fill getter and setters for you

#

If you're not familiar just make a POJO

young knoll
#

I thought records were immutable

topaz atlas
young knoll
#

Ah

agile anvil
#

setReady will change the readiness state of players, and meanwhile check if both players are ready

topaz atlas
#

idk, my issue is I need to reset player 1 and 2 + the signs upon the battle ending

topaz atlas
agile anvil
#

Then add the signs to variables in the Battle object

topaz atlas
#

Ah ok

#

well that will be alot of change, and its late, so gn

topaz atlas
agile anvil
#

Ahah good night, night gives you advice

#

No

topaz atlas
#

bbefore I sleep

agile anvil
#

Forget records

topaz atlas
agile anvil
#

Records are POJO with automatically generated getter (and setters), but it's an abstract definition of course

#

Wdym by resetting ?

topaz atlas
#

The issue is

#

after one battke

agile anvil
#

Why should it go back to null?

topaz atlas
#

one pllayer is always loaded in the system, so if I were to click on any sign, it will just load me in the arena

#

thinking i am player 1 and player 2

topaz atlas
#

because it hasnt forgotten me from last time

ivory sleet
#

Record components by definition must be immutable

#

Which is against the definition of a pojo

agile anvil
topaz atlas
topaz atlas
agile anvil
#

I'll just check that

young knoll
#

Idk how I feel about records

eternal oxide
#

The point of using a record is so you can have more than one battle at a time. You delete the record when one finishes

young knoll
#

Since they don’t match the naming scheme I usually use

eternal oxide
#

nothing ever needs to change in a battle so a record is perfect

topaz atlas
ivory sleet
agile anvil
topaz atlas
ivory sleet
#

It goes against classic convention that all functions must be verbs

eternal oxide
#

I assumed you were doing more than one battle as you are messing with HashMaps

agile anvil
tardy delta
#

js hehe

topaz atlas
#

here

#

I wanted to re-register a class with spigot to reset my values

#

and people said use a hash map

ivory sleet
tardy delta
#

shouldve asked md5 to add :kekw:

young knoll
#

We need more emojis

tardy delta
#

instead of uwu

agile anvil
#

In your case : you want one battle. So keep your structure, just add the methods I told you.
PS: don't forget to check events if the player disconnect ect

young knoll
#

We have 250 slots and we only use 4

#

Shameful!

topaz atlas
#

bro two people here are telling me diffrent things, ill try a pojo, and if my data needs to be immutable ill just make it final, but it makes no sense to make it fina;

tardy delta
#

bruh discord

ivory sleet
tardy delta
#

you did?

ivory sleet
#

Ive suggested a lot of things mye

agile anvil
young knoll
#

Hostile takeover!

topaz atlas
tardy delta
#

maybe hes just a big uwu boy and thats why he let me add uwu

young knoll
#

Conclure becomes the new owner of the spigot discord

#

I’ll get the torches and pitchforks

tardy delta
#

wanna set some new rules

ivory sleet
#

Lmao coll

topaz atlas
# agile anvil That's because they misunderstood your assignment

So, have the key of a hashset be the uuids of player 1, and player 2, maybe two items, one with the value of player 1 and 1 with 2, because either player1 or 2 could triggerr it, the value will be the class in which the main code will run, and when the battle finishes, the onDeath event will see who won, get UUID and clear that instance fron the hashset

#

should I use hashset or hashmap?

#

Oh wait, hashmap

#

since im having a key

tardy delta
#

man this looks awful

agile anvil
#

Don't use hashset either hashmap

#

You don't need them

young knoll
#

For some things

#

Like their component methods

agile anvil
#

There can be only two players battling in your case

#

So two Player variables

tardy delta
#

go to minestom and there are record conventions everywhere

young knoll
#

Meanwhile the spigot component methods are all in a .spigot() class

agile anvil
#

@topaz atlas Duel class is the class you need to creating, and DuelManager the one you need to use for more than one battle at a time

young knoll
#

Both are kinda meh

tardy delta
#

who even thought about making a Player#Spigot class

young knoll
#

They can’t

tardy delta
#

cmon man be a lil more original

young knoll
#

You can’t have a getCustomName() for both String and Component

tardy delta
#

getCustomNameComponent()

young knoll
#

Yes but that’s ugly

topaz atlas
#

ok, ill try and make this structure for my code

tardy delta
#

strings are the best

chrome beacon
young knoll
#

Okay paper

tardy delta
young knoll
#

Choco also didn’t want to use customName() because it’s also kinda gross

#

And it steps on papers toes

tardy delta
#

booo

ivory sleet
#

I mean u have sendRichMessage in paper tho for instance

tardy delta
#

💀

ivory sleet
#

which takes a String

young knoll
#

Blasphemy!

ivory sleet
#

🥺

tardy delta
#

you should have both methods imo

young knoll
#

Also the fact that paper deprecated string methods is a big thing people dislike

tardy delta
#

if you want to send a raw string message, gotta wrap it in a component, nah man

young knoll
#

So yeah spigot isn’t going to do that

ivory sleet
#

somehow my one liner turned into a 25 liner

#

guess minimessage it is

#

:]

young knoll
#

Why can’t java just allow multiple methods with the same name and different return type

#

Smh my head

#

Literally trash language

tardy delta
young knoll
#

Next question

tardy delta
#

only way i use components now

young knoll
#

Why do you hate yourself

tardy delta
#

i use minestom components 🥰

#

which are probably the same one from adventure

young knoll
#

Fuck it I’m gonna invent a new component system

#

With blackjack and hookers!

tardy delta
#

also kinda nice for resourcepack messages

tardy delta
young knoll
#

It’s a reference

#

He didn’t invent the reference

#

I believe paper has said we should just use adventure

ivory sleet
tardy delta
#

hmm

cobalt thorn
#

https://sourceb.in/w7LBUF5j9p im so confused if i run the code in the start only pick the first but the other are not loaded and with the for() in a command detect all of them

tardy delta
#

conclure wants to see me irl now

young knoll
#

Is it even still adventure

#

Or is it Advntr

tardy delta
#

another thing: BossBar.bossbar()

#

cmon man be a lil more original

young knoll
#

Why not

ivory sleet
young knoll
#

BACK IN MY DAY all we had were strings

ivory sleet
#

stockholm in fact 🙂

tardy delta
#

i can give you a const char*

ivory sleet
#

Ooo

young knoll
#

BACK IN MY DAY all we had were holes in cards

#

Wait you live in Stockholm

#

Omg do you work for Mojang?!?!?!?1

tardy delta
#

F 84 hours of driving

neon brook
#

Hey, is there a better way than:

  • Stop your minecraft server
  • Compile your plugin
  • Restart your server
    For every changes you make and want to test?
young knoll
#

/reload

agile anvil
#

Compile while you stop, time saver

tardy delta
young knoll
#

Who puts in the updates folder when using /reload

#

Weird

neon brook
#

So I still need to manually change the version in pom?

tardy delta
#

me

young knoll
#

W e i r d

#

Just replace the old jar

#

Smh my head

tardy delta
#

passing my plugin over ftp already takes long enough

young knoll
#

You can on windows tho

#

Since I started developing spigot plugins 10 years ago

neon brook
#

Gimme your windows version

tardy delta
#

windows always complains about locks

young knoll
#

You can’t delete it

#

But you can paste over it

tardy delta
#

lol

agile anvil
#

Or just run your server through ide, you will also have a nice debugger 🙂

young knoll
#

Idk skill issue

#

I’ve done it on windows 7 and 10 so far as I can remember

agile anvil
#

Works on 11 too

young knoll
#

Try harder

agile anvil
#

Hit that ctrl C at least 5 times

tardy delta
#

true bill gates

young knoll
#

Yo did you also work at Microsoft and Valve?

#

Well source is in the name

#

It has to be open source

#

What’s next you’re gonna tell me OpenAI isn’t open?

neon brook
#

x)

tardy delta
#

ClosedAi just sounds bad

#

bad reputation

neon brook
#

ProfitableAi

tardy delta
#

GivemeyourphonenumberAI

#

thank you

#

oeh sweden

young knoll
#

Sveden

tall saffron
#

How could i like fuse my plugins into one?

tardy delta
#

copy your classes

#

and dependencies etc

tall saffron
#

Okay thanks

agile anvil
#

shadow jar 👀

tardy delta
#

gradle \👀

quiet ice
agile anvil
#

Oh yeah

warm mica
tardy delta
#

hmm?

#

oh new update

weak bear
#

Hello do you have any idea for sync a discord channel with my plugin pls

hazy parrot
weak bear
#

For being using for logs like when a player kill another send a message in a channel

quiet ice
#

Just use webhooks

#

They should be pretty easy to figure out since almost every malware out here sends their payload via discord webhooks

wide coyote
tall saffron
#

Is it possible to change the default welcoming message

#

like with this event : PlayerJoinEvent, i am now broadcasting the message i want to send

#

but cant i just like replace the default or smth like that

tardy delta
#

PlayerJoinEvent#setJoinmessage

#

or null to disable

tall saffron
#

oh yeah my bad

undone axleBOT
tardy delta
#

bing is a piece of shit change my mind

idle loom
tardy delta
#

oh nah dont make a new runnable for every player

#

probably also a infinite loop

idle loom
#

oh

tardy delta
#

what does your checkMaterial do?

idle loom
#

tbh I didn't make it

#

I'm just trying to ghet it to work

idle loom
tardy delta
#

and getRandomMaterial

idle loom
#
    public static boolean checkMaterial(Material material) {
        if(materialList.isEmpty()) {
            List<String> items = new ArrayList<>(Main.getConf().getStringList("blacklistedItems"));
            for(String item : items) {
                materialList.add(Material.getMaterial(item));
            }
        }


    public static Material getRandomMaterial() { return Material.values()[NumberUtils.randomInt(0, Material.values().length-1)]; }
#

idk, I could do that

tardy delta
#

that constructs a new array of a few thousand materials

idle loom
tardy delta
#

store it in a static final variable

idle loom
#

okay

young knoll
#

I thought java already cached enum values

proven sierra
young knoll
#

Wack

proven sierra
idle loom
#

or

#

wait

young knoll
#

Yes

agile anvil
#
    public static Material getRandomMaterial() {
        Material[] materials = EnumSet.allOf(Material.class);
        return materials[NumberUtils.randomInt(0, materials.length-1)];
    }
young knoll
#

Also iirc don't you not want that -1

#

Unless NumberUtils.randomInt is upper bounds inclusive

proven sierra
#

unless your numberutils method defies the norm

#

yea

tardy delta
#

as long as you dont make that enumset on every invocation

#

smh i miss local static from c++

young knoll
#

It remakes the set every time

tardy delta
#

just curious, what does NumberUtils.randomInt(0, materials.length-1) do

young knoll
#

I imagine it's just

#

ThreadLocalRandom's nextInt

tardy delta
#

i just want to see

proven sierra
young knoll
#

If I were you

idle loom
warm mica
young knoll
#

I would avoid treating Material as an Enum

tender shard
proven sierra
#

enumset uses the same underlying array

#

so not required for what you're intending it to be required for, either

tardy delta
#

you are not willing to create a new heap allocated set and copy 10000 materials in it on every invocation

tender shard
warm mica
#

That confused me as well

#

Also good luck getting a random entry out of a set

agile anvil
tardy delta
#

actually that enumset stores a long[] but same thing

young knoll
#

Discord doesn't have a compiler

tardy delta
#

its a bit vector

agile anvil
young knoll
#

I would stick with static final Material[] materials = Material.values();

idle loom
young knoll
#

Specifically an item?

#

Or any material

tall saffron
#

How can i change chat format?

idle loom
#

anything

#

really

#

anything a player can have in their inventory

young knoll
#

Ah so an Item

#

Hold on

tardy delta
#

probbaly dont want air

#

and barriers and stuff

tender shard
#
    private static final Material[] MATERIALS;
    
    static {
        MATERIALS = Arrays.stream(Material.values()).filter(Material::isItem /* Only use obtainable items */).toArray(Material[]::new);
    }
    
    public static Material getRandomMaterial() {
        return MATERIALS[ThreadLocalRandom.current().nextInt(MATERIALS.length)];
    }

this is how I'd do it

#

ofc one could e.g. change isItem to isBlock to only allow placable blocks, etc

#

lol

#

depending on what you need it for, you should ONLY consider materials where isItem is true, or where isBlock is true

    private static final Material[] MATERIALS;
    private static final Material[] BLOCK_MATERIALS;

    static {
        MATERIALS = Arrays.stream(Material.values()).filter(Material::isItem /* Only use obtainable items */).toArray(Material[]::new);
        BLOCK_MATERIALS = Arrays.stream(Material.values()).filter(Material::isBlock /* Only use placeable blocks */).toArray(Material[]::new);
    }

    public static Material getRandomMaterial() {
        return MATERIALS[ThreadLocalRandom.current().nextInt(MATERIALS.length)];
    }
    
    public static Material getRandomBlockMaterial() {
        return BLOCK_MATERIALS[ThreadLocalRandom.current().nextInt(BLOCK_MATERIALS.length)];
    }
quiet ice
#

avoid the usage of EnumSets and EnumMaps for Materials

idle loom
#

alright

#

thank you peepole

#

I shall try out this garbage

tall saffron
tender shard
#

AsyncPlayerChatEvent, use setFormat

undone axleBOT
tender shard
#
String format = "'%2$s' is what %1$s said";

e.g. would be 'hi' is what mfnalex said

idle loom
#

the javadocs hurt my head, but they help sometimes

sharp kayak
#

The default bukkit save is causing too much lag on my PaperMC 1.19 server, is there any alternative

sharp kayak
#

Tried, its not that

agile anvil
#

How do you consider the save to be "laggy" ?

tardy delta
#

well ye its an interface

young knoll
tall saffron
#

its soo confusing

tardy delta
#

kinda sucks that you cant longer use a switch then

tender shard
#

Materials, and every other enum that implements "Keyed" will soon be similar to the Enchantment class

idle loom
tardy delta
#

i want my own ways to implement switch alike behaviour now

young knoll
#

I mean

#

You can switch on the key

tardy delta
#

ye i cannot see that

quiet ice
tardy delta
#

that bytecode?

young knoll
#

It basically converts all enums to classes

remote swallow
#

you just have to use

switch (material) {
case Material.SOMETHING ->
}

young knoll
#

And splits material in half

tardy delta
#

ah class descriptor

quiet ice
tardy delta
#

still cant use an switch in the source code then

quiet ice
#

It's cursed beyond belief but should work

young knoll
#

A lot of it is getting converted by spigot

quiet ice
#

Only issue is that you cannot use EnumSets and EnumMaps - but switch-on-enum should work because the compiler only looks for ACC_ENUM - but not for java.lang.Enum

young knoll
#

You can use the sets

tardy delta
#

:O

#

gotta save that for later

young knoll
#

You shouldn't use them, but you can

quiet ice
#

Well you'd need to write a dedicated gradle plugin for that

tardy delta
#

to integrate with the compiler huh

quiet ice
remote swallow
#

gradle WOOOOOO

quiet ice
#

You can't do that with maven as far as I know (I have looked into doing something very similar previously)

young knoll
#

There is runtime ASM

tardy delta
#

im wondering why, in 2023 we are still using xml

agile anvil
tardy delta
#

but if you then look at gradle i understand it completely

idle loom
#

yeah

#

I thought so

warm mica
quiet ice
#

Honestly, groovy is a lot better once you spend the time to understand gradle.
But you really need to write two or three gradle plugins in java beforehand

idle loom
#

its setup kind of dumb

agile anvil
#

Cause as now you're getting a random material from all items while it's not in your list....

young knoll
#
/**
 * The "I can't believe it works" map.
 * It replaces every EnumMap with the ImposterEnumMap and uses a HasMap instead of an object array.
 * Used so that plugins which use an EnumMap still work.
 *
 * @deprecated only for legacy use, do not use
 */
idle loom
#

I think it's supposed to ensure the random material isn't on the item blacklist

agile anvil
tardy delta
#

500 lines of horror to me

agile anvil
idle loom
agile anvil
#

And rename your method to "isBlacklisted"

idle loom
agile anvil
young knoll
#

A crash dummy to use, instead of the old enums which matured to Abstracthood or Interfacehood and the baby enums which are still growing.

#

Enums grow up

idle loom
tardy delta
#

sleep is for the weak

idle loom
#

yes

#

you get it

agile anvil
#

So coffee instead

idle loom
#

I have coffee

tardy delta
#

thats what i tell myself every night and then wake up thinking what im doing with my life

agile anvil
#

Everything else than ristretto is not what we call coffee

idle loom
#

It does though

tardy delta
#

getting up at 7am for college smh

#

knowing that i will waste another 8 hours of my life

young knoll
#

You could simply filter blacklisted materials out when you make the original array

idle loom
#

idk man

#

I didn't make this