#help-development

1 messages · Page 574 of 1

tender shard
heavy prairie
#

from what ive seen it disables it instantly but lemme restart it just in case

untold jewel
#

Make sure to have every class start with an uppercase letter. Also I would recommend checking for any errors in console

#

(the lettering will not affect the plugin but its good practice)

pseudo hazel
#

it should give you a reason as to why its getting disabled

heavy prairie
humble heath
pseudo hazel
#

?paste

undone axleBOT
hazy parrot
#

Cannot invoke "com.enderelite.EndereliteMaster.getConfig()" because "this.plugin" is null

humble heath
#

how do i fix that

hazy parrot
#

initialize this.plugin

humble heath
#

can you vc i share screen

hazy parrot
#

i can't

#

your plugin variable is null, give it some value

#

you can also send code

humble heath
hazy parrot
#

you only declared it

#

also dont use minecraft logger

heavy prairie
#

after public Mysql sql;

pseudo hazel
#

thats declaring it

#

not initializing it

heavy prairie
#

oh yeah i have translation problems

pseudo hazel
#

initializing means to give it a value

humble heath
pseudo hazel
#

please just use paste for code

eternal oxide
#

?paste

undone axleBOT
pseudo hazel
#

these txt files are annoying

heavy prairie
#

here

humble heath
pseudo hazel
#

yes but where does that class get created

#

i see

humble heath
heavy prairie
#

if anyone could help

pseudo hazel
#

those private variables are getting initialized probably before your constructor updates the plugin value

#

so just set those variables in your constructor

#

then you are sure its in the right order

humble heath
#

so how do i fix that

pseudo hazel
#

like I said

#

set those variables in the constructor

pseudo hazel
#

?paste

undone axleBOT
humble heath
#

i have made my mysql class run last in the list and it still giving same error

pseudo hazel
#

show updated code

humble heath
pseudo hazel
#

you didnt change your mysql constructor

#

which is what I meant

humble heath
river oracle
#

What am I doing wrong here? I totally feel like Its something stupid. So basically I'm trying to run a task at a given time. I'm using my own custom scheduler for this (as it schedules in seconds / minutes and on another thread) https://paste.md-5.net/uqacuzukec.java

What i know so far is the task starts, but when the time runs nothing happens. The even doesn't trigger I've tried using sysouts that doesn't print. what am I missing?

humble heath
eternal oxide
#

you never set public static EndereliteMaster plugin;

pseudo hazel
#

when you create the instance of the mysql class, your host variable will try to get the plugin to get the hostname

#

but that happens before this.plugin is set

eternal oxide
#

ah in addMisc

pseudo hazel
#

no

#

im talking about the Mysql constructor

heavy prairie
humble heath
humble heath
#

no sql class

tender shard
pseudo hazel
#

that does not change the order

#

?learnjava

undone axleBOT
pseudo hazel
#

you just set the variables in the constructor

#

how can this be hard to understand

heavy prairie
# tender shard show plugin.yml
name: VDPsTreasureHunt
version: '${project.version}'
main: vaggelisdapro.vdpstreasurehunt.VDPsTreasureHunt
api-version: 1.19
commands:
  getarmor: vaggelisdapro.vdpstreasurehunt.commands.commands

tender shard
#

it should be like this:

#
commands:
  getarmor:
    permission: vaggelisdapro.vdpstreasurehunt.commands.commands
humble heath
#

so that is all the help i get learn jarva

river oracle
#

you clearly don't know the fundamentals

#

we can't really help you with spigot if you don 't know java

pseudo hazel
#

jackson, I literally told you what to do 3 times by now

humble heath
river oracle
#

Java != Python code order doesn't mean execution order

pseudo hazel
#

if those words I said dont mean anything to you, look it up or learn java

tender shard
humble heath
#

all those classes work i am just struggeling with mysql

heavy prairie
river oracle
tender shard
#
commands:
  getarmor:
#

this will also work

heavy prairie
#

okay

#

so just that line after getarmor: was wrong?

tender shard
#

yes

heavy prairie
#

oh-

pseudo hazel
#

does the task get stopped?

river oracle
#

no

#

it just

#

doesn't

#

do anything

river oracle
humble heath
#

i got the code from a youtube tutorial and it worked for him

pseudo hazel
#

yes

humble heath
river oracle
#

oh no CodedRed

pseudo hazel
#

this code in isolation looks fine

river oracle
humble heath
#

i coded all my other cod my self and it works perfectly i am just trying to learn mysql

pseudo hazel
#

yes because he is using string literals or constants and doesnt depend on the plugin instance

#

your sql is fine

river oracle
pseudo hazel
#

its just your class construction thats broken

river oracle
#

that seems like such static abuse

#

also make sure you construct all your fields in your constructor

#

its kinda what constructors are for

#

that way you know your plugin won't be null

pseudo hazel
#

yes thats what I have tried to tell them for like 10 minutes

humble heath
#

can someone plz edit the code or show me an example that is how i learn

river oracle
#

you really should be working with raw java before spigot

pseudo hazel
#

lets start with the basics, do you know what a constructor is?

cinder abyss
#

Hello, how can I use custom ChatColor ?

river oracle
#

like you wanna make a hex

humble heath
#

how a plugin class is laid out to retrive code in certen order

pseudo hazel
#

ChatColor.of("#ffffff")

#

bungee*

cinder abyss
river oracle
pseudo hazel
#

no you dont

#

you import bungee chat color

#

and use chatcolor.of

undone axleBOT
cinder abyss
river oracle
pseudo hazel
#

no thats what it will get translated to

#

you can construct it using hex strings

#

im 120% sure since it works in my plugins

cinder abyss
pseudo hazel
#

it is text

river oracle
#

you should never use spigot ChatColor anyways

cinder abyss
river oracle
#

its archaic

pseudo hazel
#

you do chatcolor.red + "bla" and it works

orchid trout
#

does anyone know how to remove these messages?

#

i only found code that removes some parts of it

orchid trout
#

yeah i tried that

#

ill try again

river oracle
#
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.LoggerContext;
import org.slf4j.LoggerFactory;

LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
Logger rootLogger = loggerContext.getLogger("org.mongodb.driver");
rootLogger.setLevel(Level.OFF);
((LoggerContext) LoggerFactory.getILoggerFactory()).getLogger("org.mongodb.driver").setLevel(Level.ERROR);```
#

you could probably use log4j to retrieve mongo's logger as well

hard socket
#

how can I hide myself too?

hazy parrot
#

what

trail coral
river oracle
#

but you can't hide yourself from yourself

hard socket
trail coral
hard socket
#

it works for other but how can I not be visible in f5

trail coral
#

give urself invisibility

pseudo hazel
#

since thats not how it works

river oracle
#

with no particles

hard socket
river oracle
#

you can set it to not use particles

#

packets maybe?

trail coral
pseudo hazel
#

why do you need to hide from yourself

#

is the real question

trail coral
#

just go into spectator mode

pseudo hazel
#

lol

hard socket
river oracle
trail coral
orchid trout
river oracle
#

ik its crazy

#

log4j is so freaky guys remember that one bug they had

pseudo hazel
#

you can probably make yourself invisible from packets

trail coral
#

@hard socket

#

rate the new pfp

river oracle
glacial narwhal
#

Does anyone know how to make boolean command ?

tender shard
#

you check the args array, then you can either use Boolean.parseBoolean(String) or just check manually if the arg equalsIgnoreCase true or false

humble heath
#

is this better as it6 now workes

karmic mural
#

I'm going travelling and not sure if I will have internet... With that said I wanted to create an offline copy of the docs so I can still work and access docs if needed. I tried following the guide on spigot website but I got stuck on running the command. I'm not sure what parts of the command to replace with filepaths, and what those filepaths I'm putting there should lead to. Any insight is greatly appreciated. https://www.spigotmc.org/wiki/creating-offline-javadoc-for-the-spigot-api/#wikiPage

tender shard
worldly ingot
sacred berry
#

Does anyone know how I can implement chatgpt into spigot, using api

tender shard
humble heath
#

that i would like to know about chatgpt

sacred berry
sacred berry
#

use chatgpt's api*

trail coral
deft thistle
#

How do I get the plugin that called the event? (for my custom event)
I can just add a private final Plugin plugin and insert it into the constructor, but since registering a event listener needs to have a plugin passed to it I'm sure there is some sort of way.

trail coral
#

wdym the plugin that called the event

deft thistle
#

Currently doing as such

public class PlayerJoinArenaEvent extends Event {

    private final ArenaModel arenaModel;
    private final Player player;
    private final Plugin plugin;
    public PlayerJoinArenaEvent(ArenaModel arenaModel,Player player,Plugin plugin) {
        this.arenaModel = arenaModel;
        this.player = player;
        this.plugin = plugin;
    }

    @Override
    public @NotNull HandlerList getHandlers() {
        return null;
    }

    public ArenaModel getArenaModel() {
        return arenaModel;
    }

    public Player getPlayer() {
        return player;
    }

    public Plugin getPlugin() {
        return plugin;
    }
}
trail coral
#

oh i get it

pseudo hazel
#

if chatgpt has an api I assume its like a standard rest api or whatever

deft thistle
#

Because I need a plugin object to register metadatavalue

public class ArenaJoinListener implements Listener {
    @EventHandler
    private void onArenaJoin(PlayerJoinArenaEvent playerJoinArenaEvent) {
        ArenaModel arenaModel = playerJoinArenaEvent.getArenaModel();
        Player joiningPlayer = playerJoinArenaEvent.getPlayer();
        Plugin plugin = playerJoinArenaEvent.getPlugin();
        joiningPlayer.setMetadata("locationBeforeArena", new FixedMetadataValue(plugin,joiningPlayer.getLocation()) );
        joiningPlayer.setMetadata("currentArena", new FixedMetadataValue(plugin,arenaModel) );
        String message = String.format("%s §ejoined the arena! (%d/2)",joiningPlayer.getName(),arenaModel.getCurrentPlayers().size() );
        arenaModel.annunceMessage(message);

    }
}
#

or I'll just handle that logic on the arenamanger class

#

I don't know where it's more correct to put that

#

That or I move the metadata lines to here, doing it this way:

    public void teleportToArena(Player joiningPlayer,String arenaName ) {
        if( this.arenaExists(arenaName) ) {
            ArenaModel arenaModel = this.getArena(arenaName);
            joiningPlayer.setMetadata("locationBeforeArena", new FixedMetadataValue(plugin,joiningPlayer.getLocation()) );
            joiningPlayer.setMetadata("currentArena", new FixedMetadataValue(plugin,arenaModel) );
            joiningPlayer.teleport(arenaModel.getLobbySpawn());
            arenaModel.getCurrentPlayers().add(joiningPlayer.getUniqueId());
            Bukkit.getServer().getPluginManager().callEvent(new PlayerJoinArenaEvent(arenaModel,joiningPlayer,plugin));
        }
    }
#

Maybe
teleportToArena should teleport the player to the arena, and do the FixedMetadata stuff
ArenaJoinListener should annunce the joining message and add the uuid of the player to the arena model player list (?)

#

I don't know if I split the logic or not

trail coral
#

bro im trying to learn guis and my brain is fried 😭 i slept at 8am yesterday

deft thistle
#

like triumph

#

life saver

river oracle
#

Like spigot guis or just guis in general

deft thistle
#

love it

trail coral
river oracle
#

Triumph is

#

A thing

trail coral
river oracle
deft thistle
#

I believe it's 1.8.8+

trail coral
trail coral
river oracle
#

Upgrade your java knowledge frfr

#

Basically though InventoryHolder bad

#

Is all you need to know

trail coral
#

i need something a lil more specific

river oracle
#

I can help later I'm out rn

trail coral
#

im making a xp converter gui so i put an item in on the left and get xp back on the right, idk how to do that efficiently

pseudo hazel
#

wdym get xp on the right

#

like a bottle of xp?

trail coral
#

custom items with custom durability

#

100 durability = 100 xp bottles

pseudo hazel
#

oh wait you were the one asking for the trade menu earlier right?

trail coral
#

yep

#

didnt understand shit

#

from smiles docs

pseudo hazel
#

well

#

start small

#

start by opening an inventory with an item in it

#

that will send a message/print to console whenever you click on it

ocean hollow
#

Items that are in the player's inventory and store MetaData will be resumed after a server restart?

trail coral
#

alr made that

pseudo hazel
#

and then we'll talk

#

okay

#

then make it able to cancel the event if its in certain slots

trail coral
#

I dont wanna make something inneficient or cause a dupe glitch cuz its for my server and im limited on time so even tho it will have bugs i dont want it to be too bad lmao

pseudo hazel
pseudo hazel
pseudo hazel
#

but you shouldnt cause too many bugs though

#

?pdc

trail coral
#

alr ill try and come back in a few hours with a bunch of bugs

pseudo hazel
#

okay well then you should stop crying and try some things out

#

yes

river oracle
trail coral
#

ill reference it here and there tho

river oracle
#

Example this is my inventory lib it's extremely lightweight

#

And is very similar to 7smile7s

trail coral
#

like idk why i need certain features etc.

river oracle
#

Look at the source

trail coral
#

i want to understand properly

pseudo hazel
#

you don't need most features in your case

trail coral
#

yep

pseudo hazel
#

just go from what you already have

sacred berry
#

How do I do this? "No legacy enum constant for BLACK_STAINED_GLASS_PANE. Did you forget to define a modern (1.13+) api-version in your plugin.yml?"

pseudo hazel
#

show plugin.yml

#

also what did you type to get that error

sacred berry
#

Plugin yml:

main: me.Bamle.Main
name: Test
author: Bamle
version: 1.0
Put api-version: 1.13+

commands:
  staffchat:
    aliases: [sc, s]
    usage: /staffchat

  shop:
    usage: /shop

  fly:```
#
ItemStack glass = createItem(Material.BLACK_STAINED_GLASS_PANE, " ");

private static ItemStack createItem(Material material, String displayName) {
        ItemStack itemStack = new ItemStack(material);
        ItemMeta itemMeta = itemStack.getItemMeta();
        itemMeta.setDisplayName(displayName);
        itemStack.setItemMeta(itemMeta);
        return itemStack;
    }
#

ops

pseudo hazel
#

api-version: 1.19

#

or whatever

sacred berry
#

noticed it now, thanks

pseudo hazel
#

well maybe I want my plugin to run in 1.2

#

dont judge

#

now you're stretching it

shadow night
#

There was bukkit for 1.2?

#

We gotta backport bukkit lol

#

Who agrees?

orchid gazelle
#

No

orchid gazelle
#

1.8.9 + 1.12.2 + latest is enough

pseudo hazel
#

correction, 1.19 + latest is enough

orchid gazelle
#

No

#

Latest because latest, 1.8.9 because pvp was good then, 1.12.2 because it is the best for modding

pseudo hazel
#

why would you mod on a plugin server

#

and good is subjective

orchid gazelle
#

Client forge, server spigot?

pseudo hazel
#

but since liek hald of teh community agrees with you, I will give you 1.8

eternal oxide
#

Some things can only be done in mods. Others a plugin is much easier

orchid gazelle
#

Bukkit is basicly a modding api, for servers

pseudo hazel
#

wdym

orchid gazelle
#

And in general, keep forge 1.12.2 support up by keeping the 1.12.2 community up with spigot

pseudo hazel
#

well its just sad that mods wont grow to more recent updates

#

like

#

I know the game has terrible performance

#

but like

#

idk

#

i guess im ranting

orchid gazelle
#

90% of all mods either did a port that ruined the mod itself or just did not update

pseudo hazel
#

you mean ruined as in feature wise or ruined as in code wise

orchid gazelle
#

Feature

pseudo hazel
#

yeah

orchid gazelle
#

And also textures

#

Like wtf fuck all those new mod textures

pseudo hazel
#

well thats poor decision making

#

well i prefer some modern mod textures compared to most older textures from older mods

tender shard
pseudo hazel
#

yeah

#

i mean once you're past the 1.8.9 mark, the next best is latest from what I can tell

orchid gazelle
#

1.12.2

pseudo hazel
#

i dont know many servers on 1.12

#

but I dont really play a large variety of multiplayer servers often

orchid gazelle
#

I don't know any modpacks I like on 1.13+

pseudo hazel
#

well yeah

orchid gazelle
#

1.12.2 basicly half-died but its still by far the best

pseudo hazel
#

but I dont know why bukkit is relevant for forge mod packs

orchid gazelle
#

If more people play 1.12.2 bukkit, more people play 1.12.2 forge

pseudo hazel
#

I mean if you are just talking about minecraft versions in general, then I agree

#

well if it half died, how can it be the best

orchid gazelle
#

I indeed write all my modpacks for 1.12.2 only

#

Because things suck above that

#

It is impossible to make good expert packs in 1.13+

pseudo hazel
#

well yes

#

but how often have you used bukkit for that

#

xD

#

its not impossible

orchid gazelle
#

Also im maintaining a clientside 1.12.2 mod for a 1.12.2 server

pseudo hazel
#

but certainly harder lol

tender shard
#

73% are on 1.19+
87% are on 1.16+

the remaining servers are on 1.12 or 1.8

orchid gazelle
#

only if they would bypass it

shadow night
#

do worlds with spaces work?

orchid gazelle
#

By unsigning

#

No idea

tender shard
shadow night
#

and that actually runs?

#

without any problems?

pseudo hazel
#

yeah

#

unless some plugins fuck it up

#

but it would be pretty hard to

shadow night
#

does yaml allow spaces in keys? Like

key with spaces: data
tender shard
shadow night
#

hmm, ig

#

I don't wanna save data in worlds like that but it's good I know that

tender shard
weak bear
#

Hello I have this error can you help me

pseudo hazel
weak bear
#

"UPDATE housepurchase SET OWNER = "+owner+" WHERE ID = "+this.id

#

here is my request

eternal oxide
#

use prepared statements

weak bear
#

that does'nt work too

pseudo hazel
#

and your database is valid?

weak bear
#
            PreparedStatement preparedStatement = connection.prepareStatement("UPDATE housepurchase SET OWNER = ?, IS_OWNED = ?, IS_BUY = ? WHERE ID = ?");
            preparedStatement.setString(1, player.getName());
            preparedStatement.setBoolean(2, true);
            preparedStatement.setBoolean(3, true);
            preparedStatement.setInt(4, id);
            System.out.println(preparedStatement.toString());
            preparedStatement.execute();```
#

I tried that

#

yes she's valid

#

I can INSERT AND SELECT

eternal oxide
#

you can only UPDATE on an existing record

#

Caused by: java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'Spectr2155e' in 'field list'

weak bear
#

Here is my colums

#

I dont understand why he want to get a column named with my username

#

maybe broken sql request

#

Thats the print in console

#

com.mysql.jdbc.JDBC42PreparedStatement@13cbeb25: UPDATE housepurchase SET OWNER = 'Spectr2155e', IS_OWNED = 1, IS_BUY = 1 WHERE ID = 766016

thin isle
#

When I type "/", a lot of commands are suggested for tabbing, how can I remove them? I tried with the TabCompleteEvent, but at that time the event is not triggered

weak bear
#

yes

#

look

eternal oxide
#

no clue then

#

unless you are connected to the wrong db

weak bear
#

no I do INSERT and that's work

#

but the error say that he doesn't know the column Spectr2155e I don't understand

#

can I insert value where is not empty ?

eternal oxide
#

that error doesn;t match the sql satatement you are showing here. are you sure you are not also running some other quiery?

hazy parrot
#

is Query.java:37 that update query ?

#

because as elgar said, it doesn't quite match

fluid river
#

i need help

#

so

#

plants and bamboo don't grow on loaded chunks since 1.9

#

they only grow in area near online player

flint coyote
#

on loaded? you mean unloaded

fluid river
flint coyote
#

oh that's what you meant

#

I understood that as "never grows when a chunk is loaded"

fluid river
#

So, can i create a "fake" player so crops will actually grow around him

#

the chunk is force loaded rn

#

but when i leave it, plants don't grow

tender shard
fluid river
#

1.9

#

the 1.8.8 brother

eternal oxide
#

By force loaded do you mean you added a chunk ticket?

flint coyote
#

Since fake players are usually purely packet based since you can't do new Player() it isn't that easy

fluid river
#

chunk.setForceLoaded(true);

#

the command block runs just fine

#

when i'm 99999 blocks away

#

and all redstone thing work

#

if i set it back to forceLoaded(false) everything just stops

#

just as it should

eternal oxide
#

try a chunk ticket instead of forceloaded, not sure forceLoaded ticks them

fluid river
#

It does

#

as i said

eternal oxide
#

ok

fluid river
#

mobs do spawn

#

redstone works just fine

#

and command block commands

#

if i unload the chunk back, evetything stops, as it should

#

except fucking plants

#

they just don't grow until i decide to fly nearby

#

tho, when i change randomTickSpeed they grow faster(but when i fly away they stop growing, but everything else works fine)

shadow night
#

Plants grow from random ticks which require a player nearby, don't they?

fluid river
#

yeah

flint coyote
#

Yeah it does no longer work without players. You might do some hacky reflection to pretend there still is a player. Would have to dig deep into mojangs code though.
And if you are unlucky it's not a "one time load" boolean but an actual calculation per loaded chunk

eternal oxide
#

I'll ask, does this also happen on Spigot as guaranteed you are running a fork?

fluid river
#

and forceloading chunk doesn't help that

shadow night
#

I didn't read the whole thread so idk

flint coyote
#

But yes, also spigot

fluid river
#

so

trail coral
#

i forgot how to take an argument for a class that extends another 🤦

fluid river
#

can you give me some advice on how do i create a fake player

trail coral
#

Class<GUIHandler> isnt gonna work cuz i dont need the class itself

fluid river
#

also it should be invisible lol

#

just for that purpose

tender shard
flint coyote
fluid river
#

can you please provide some code

#

and do i have to do this remapping thing

#

and import nms

flint coyote
#

What I'm trying to say is: Packets are not stored on the server

eternal oxide
#

fake player uses nms (usually) so changes every version

trail coral
flint coyote
#

Therefore a fake player won't tick your chunk

fluid river
fluid river
shadow night
eternal oxide
#

if it's only one version you can use an Entity fake player

#

that will tick your chunk as its seen as an actual player

trail coral
#

Class<? extends GUIHandler> would this work? or would it return the class itself and not the contents inside if you know what i mean

fluid river
#

i'm too lazy to google

flint coyote
fluid river
#

or at least links

trail coral
#

private HashMap<UUID, GUIHandler> inventoriesByUUID = new HashMap<>();

this should work no?

#

oh wait i didnt save my file so

trail coral
#

yeah it did work

eternal oxide
#

you only need call nmsWorld.addNewPlayer to make it a server side player

fluid river
#

it does have coords?

#

in method

trail coral
# fluid river what are you doing

i was trying to make a hashmap of a inventory uuid and a class that handles it but i had an error with registering the handler class, like i couldnt put uuid, this in the hashmap even tho the class extended guihandler

eternal oxide
#

one sec I'll throw you some old test code I did. no longer works but woudl be simple fo ryou to update. It will show you how to do Fake players

fluid river
#

thanks elgarl

#

freejavalessons bless you

pseudo hazel
#

is elgarl short for e-girl?

shadow night
#

ElgarL is a really nice person

trail coral
#

elgarl blushing rn

eternal oxide
fluid river
#

isn't there some 1-method solution to just spawn a fake player and forget about his existance

flint coyote
#

if you build one 😛

pseudo hazel
#

probably

fluid river
#

NPCFactory.createNPC(loc.add(loc.getDirection().setY(0).normalize().multiply(4)), "ThisIsATest", NPCFactory.skin3);

pseudo hazel
#

thats called over abstracting

fluid river
#

is that the part which creates a player

#

@eternal oxide

#
public static Npc createNPC(Location location, String name, @Nullable String[] skin, @Nullable Consumer<Npc> function){

        DedicatedServer nmsServer = (DedicatedServer) NMSUtils.getDedicatedServer();
        ServerLevel nmsWorld = (ServerLevel) NMSUtils.getServerLevel(location.getWorld());

        GameProfile gameProfile = new GameProfile(UUID.randomUUID(), name);
        Npc npc = new Npc(nmsServer, nmsWorld, gameProfile, null);

        if (skin != null)
            npc.setSkin(skin);

        spawn(npc, location, function);

        return npc;
    }```
#

there it is

eternal oxide
#

no

fluid river
#
private static void spawn(Npc npc, Location location, @Nullable Consumer<Npc> function) {

        ServerLevel nmsWorld = (ServerLevel) NMSUtils.getServerLevel(location.getWorld());

        npc.setPosRot(location);

        if (function != null)
            function.accept(npc);

        nmsWorld.addNewPlayer(npc); // Add to world so we trigger Events in Bukkit.
        showAll(npc);
    }```
#

and there

eternal oxide
#

As you require it to be seen as an actual player to grow yoru plants it has to be added to the world, this will cause messages to be sent to it. These will crash your server as there is no client attacherd

fluid river
#

so what do i do

eternal oxide
#

you have to prevent any packets being sent to teh fake player

#

I literally gave you all the code you need

fluid river
#

so i need some code again

pseudo hazel
#

such are the woes of a programmer

fluid river
#
@Override
    public void send(Packet<?> packet) {
        // Empty as we never want to try an send packets to a fake player.
    }```
#

cool

#

?1.8

undone axleBOT
pseudo hazel
#

damn right its too old

trail coral
#

how would i get what type of interaction it is in InventoryClickEvent. like if a player is placing a block in or getting one out

#

cause i want to allow placing in curtain slots but not the others

round finch
trail coral
shadow night
#

I bet there is an enum with all kind of inventory event actions stuff

tender shard
#

these are all "placing" items

shadow night
#

"Place some" nice

trail coral
#

thanks

trail coral
tender shard
#
public boolean isPlaceAction(InventoryAction action) {
  return action == InventoryAction.PLACE_ALL || action == InventoryAction.PLACE_ONE || action == InventoryAction.PLACE_SOME;
}


@EventHandler
public void onClick(InventoryClickEvent event) {
  if(isPlaceAction(event.getAction()) {
    event.setCancelled(true);
  }
}
trail coral
#

yeah thats what i did

#

if(placing && e.getSlot() == OUTPUT_SLOT_1 || placing && e.getSlot() == OUTPUT_SLOT_2);

#

now

#

im wondering if this would return true if either side are true

#

so if placing and slot is outputslot1 OR if placing and sot is outputslot2

#

right?

#

@tender shard

tender shard
#

I'd just do it like this

if(placing) {
  if(event.getSlot() == 1 || event.getSlot() == 2) {
    ...
trail coral
#

ah true

#

thanks btw

tender shard
#

np

#

if you have more than one slot, you could also use a Set or sth

#
    private static final Set<Integer> PROHIBITED_SLOTS = Set.of(0,1,2,3,4,5,6,7,8);
    
    public static boolean isProhibitedSlot(int slot) {
        return PROHIBITED_SLOTS.contains(slot);
    }
#

or with a switch/case or whatever

trail coral
tardy delta
#

always nice to see what methods the jvm inlines lol

#

perfect formatting

native bramble
#

scoreboard not showing to a player

public void createScoreboardExp(Player player){
        ScoreboardManager manager = Bukkit.getScoreboardManager();
        assert manager != null;
        Scoreboard board = manager.getNewScoreboard();

        Objective objective = board.registerNewObjective("expManager", "dummy", "Опыт");
        objective.setDisplaySlot(DisplaySlot.SIDEBAR);

        Score score = objective.getScore("Exp:");
        score.setScore(1);

        player.setScoreboard(board);
        System.out.println("New scoreboard was created!");
    }
#

func triggers when player joins to server

tardy delta
#

delay it with a few ticks

#

looks like jit compiler seems to ignore my code lol

eternal oxide
#

When jit is telling you it can code better

native bramble
#

is it ok to use Bukkit.getScheduler?

tardy delta
#

oh damn those method calls must becomes very hot then

eternal oxide
#

yes runTask

native bramble
#

ty

tardy delta
#

(61 bytes) callee is too large ah cmon 61 bytes too large to inline

#

jit only optimizes my constructor 💀

#

callee uses too much stack inline ah yes

prisma sorrel
#

https://pastebin.com/T3nhUgjc

My code is not working, i'm trying different things for a few hours now but nothing works.
It doesn't get the arraylist, so the selectedspell is null.

tardy delta
#

where

prisma sorrel
#

spellManager.selectedSpells.get(player);
This is the begin of the problem.

#

That returns null.

tardy delta
#

never use a player instance as key

#

uuid

eternal oxide
#

for a start, use player UUID not the player object. The object does not persist between logins

prisma sorrel
#

Okay, i will do that later. Thanks for the tip 🙂

tardy delta
#

and dont expose collections

eternal oxide
#

if it's returning null you havn;t put anything in it

tardy delta
#

holy, a simple integer increment

cinder abyss
#

Hello, how can I make <Entity>#setCustomNameVisible(true); only visible for 1 player ?

tardy delta
#

plugin.data null

eternal oxide
#

if this.data is null it means pluign.data is null when you create the instance of this class

tardy delta
#

fast as a ninja

eternal oxide
#

🙂

tardy delta
#

got nothing better to do actually

pseudo hazel
#

this will not update data if you set this correctly after you already created this object

#

for that you just need to save a reference to your plugin

#

to get your updated plugin.data

#

which is 90% what you want

humble heath
#

but the class still works this code still works

#

@EventHandler
public void onEntityExplode(final EntityExplodeEvent event) {
if (event.getEntity() instanceof Creeper) {
event.setCancelled(true);
}
}

pseudo hazel
#

which you already have

#

so instead of data just use plugin.data

eternal oxide
#

that method doesn't access data

pseudo hazel
#

yeah ofc it will work then

#

data is null

#

so anything with data will fail

#

I mean

#

idk what else to tell you

ruby mesa
#

how can I only give a player 2 slots?

#

like you can only see 2 slots

pseudo hazel
#

visually?

ruby mesa
#

ye

pseudo hazel
#

you mean like hotbar or inventory slots?

ruby mesa
#

hotbar

pseudo hazel
#

not possible without a resourcepack

ruby mesa
#

kk

cinder abyss
#

Hello, how can I make <Entity>#setCustomNameVisible(true); only visible for 1 player ?

ruby mesa
#

i'll prob just put like barriers on hotbar slots then except 2

#

and make it impossible to move

humble heath
#

like this

pseudo hazel
#

you can code it so it works, but it will feel weird without it visually showing I guess

ruby mesa
#

it's whatever ill try

pseudo hazel
#

yeah or barriers

pseudo hazel
#

didnt read wat you sent above

ruby mesa
#

yea np

#

on place of barrier, cancel event

#

smth like that would work

humble heath
#

thank you that worked

native bramble
timid hedge
#

Does anyone know why this dosent work? i am notting getting any cooldown
cooldown.setCooldown(player, (Config.get().getInt("Cooldown")) * 60 * 1000, TimeUnit.MILLISECONDS);

tardy delta
#

are we supposed to know what that does

humble heath
eternal oxide
orchid trout
#

?notworking

undone axleBOT
#

"Does not working" is a useless statement. Please describe what exactly is not working, what you expect it to do, and what actually happens. If you get any console errors, also ?paste the entire stacktrace.

chrome beacon
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.

eternal oxide
#

why not just pass it as seconds?

#

TimeUnit has many

chrome beacon
#

Minutes

orchid trout
#

why pass it as seconds when you can pass it as milliseconds

eternal oxide
#

because his config entry would be messy

humble heath
chrome beacon
#

?conventions

chrome beacon
#

Also database on the main thread 💀

#

Anyways as the error says you have a syntax error in your sql

humble heath
#

?

timid hedge
tender shard
# humble heath https://paste.md-5.net/vevexanixu.java

why are you using a Boolean instead of a boolean? Why are you using Boolean.valueOf(true)? why are you casting a TextComponent to a BaseComponent? Why are you doing sql stuff on the main thread if you don't need that data right away?

eternal oxide
#

line 34 typo

#

PreparedStatement ps2 = plugin.sql.getConnection().prepareStatement("INSERT IGNORE INFO enderelite" +"(NAME,UUID) VALUES (?,?)");

trail coral
#

ive been stuck on a problem for like 10 mins and turns out i didnt register the event 💀

tender shard
trail coral
#

yeah i did

#

and then i realised non of them ran

humble heath
#

what is the typo @eternal oxide

eternal oxide
#

INTO

silent steeple
#

whats the enum name for colored dye legacy

pseudo hazel
#

I mean how legacy are we talking

#

not all colors had dyes

silent steeple
#

1.8

pseudo hazel
#

idk if they added legacy dyes after the fact

#

but I doubt it

humble heath
#

Part 2 is here! In this video, I go in-depth explaining how to use info from the MySQL database! A longer video because I believe once you master this you can master anything :) I hope you all enjoy it.

Download XAMPP: https://www.apachefriends.org/download.html
SQL Info: https://www.w3schools.com/sql/sql_syntax.asp

Want more videos?
Become a ...

▶ Play video
pseudo hazel
#

like what color do you want

humble heath
#

it sais to use info not into

silent steeple
#

red, yellow, green, cactus

pseudo hazel
#

hmm

#

those should exist

trail coral
humble heath
#

what

silent steeple
#

what name is it

eternal oxide
#

INFO is not an sql keyword

silent steeple
chrome beacon
#

With damage value

silent steeple
#

what is the damage value for each color

chrome beacon
#

You can google that

tender shard
humble heath
#

thank you that fixed it

silent steeple
tender shard
#

if I would be forced to use the shitty 1.8 API, I'd use XMaterial for stuff like dyes etc

silent steeple
#

what is xmaterial

worldly ingot
tender shard
humble heath
#

i did not copy and paiseted i hand rote

cinder abyss
pseudo hazel
#

idk

#

never worked with packets

cinder abyss
#

🤣

pseudo hazel
#

but its not something you can do without

#

or without nms

cinder abyss
pseudo hazel
#

which is like the same thing

cinder abyss
worldly ingot
#

The creator typo'd INFO instead of INTO but failed to rectify that at all anywhere in the video, which is a shame

humble heath
#

if to add 1 point in a database is set what would it be to deduct is it remove

tender shard
#

reminds me of // Plugin shutdown logic comment that every second plugin has in their otherwise empty onDisable() method lol

glad rune
#

hi guys can someone help me?

tender shard
#

?ask

undone axleBOT
#

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

glad rune
#

?ask

undone axleBOT
#

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

glad rune
#

Can someone help me pls

tender shard
#

dude

glad rune
#

What?

tender shard
#

read this

humble heath
#

Ask the question and we will try to help

glad rune
#

Ok

#

Can anyone help me code a plug-in

tender shard
#

do you know java

humble heath
#

ok

#

yea do u know java

glad rune
#

No

tender shard
#

?learnjava

undone axleBOT
tender shard
#

then learn java beforehand ^

glad rune
#

But I thought we can call and make it

#

Can’t we call?

pseudo hazel
#

no

tender shard
#

you need to learn basic java before you can do plugins

pseudo hazel
#

thats sadly not how it works

#

if you find someone that does it for you tahts fine

glad rune
#

But I watch a 1 hour video and I learned nothing

pseudo hazel
#

but this is not the place to ask

tender shard
glad rune
#

Ok

silent steeple
#

invalid material XMaterial.red_dye

#

cold

chrome beacon
glad rune
#

ok:(

chrome beacon
#

Programming isn't something you learn in a day much less 1 hour

glad rune
#

wait can you mae a plugin and i wanna see it!

pseudo hazel
#

there are plenty of plugins on github you can look at

silent steeple
#

what is the enum material for piston 1.8

glad rune
#

but i wanna make it myself

chrome beacon
#

Start by learning basic Java

glad rune
#

k

silent steeple
#

BASE right

chrome beacon
timid hedge
tender shard
#

i think they're using my Cooldown class from JeffLib

timid hedge
#

I am

chrome beacon
pseudo hazel
#

simple question, how expensive is UUID.random()?

timid hedge
# chrome beacon Which contains almost no info

Here
Im not getting the cooldown

cooldown.setCooldown(player, (Config.get().getInt("Cooldown")) * 60 * 1000, TimeUnit.MILLISECONDS);

@Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (sender instanceof Player) {
            Player player = (Player) sender;
            if (player.hasPermission((Config.get().getString("Permission")))) {
                if (!cooldown.hasCooldown(player)) {
                    cooldown.setCooldown(player, (Config.get().getInt("Cooldown")) * 60 * 1000, TimeUnit.MILLISECONDS);
                    player.setFoodLevel(20);
                    player.sendMessage("§7You got full hunger.");
                } else {
                    if (cooldown.getCooldownRemaining(player, TimeUnit.MINUTES) >= 1){
                        player.sendMessage("§7You need to wait §f" + cooldown.getCooldownRemaining(player, TimeUnit.MINUTES) + " §7minutes and §f" + (cooldown.getCooldownRemaining(player, TimeUnit.SECONDS) - (cooldown.getCooldownRemaining(player, TimeUnit.MINUTES) * 60)) + " §7seconds.");
pseudo hazel
#

I assume its not that expensive but I wanna double check

chrome beacon
#

Yeah it shouldn't be expensive

tender shard
pseudo hazel
#

okay thanks

tender shard
#

btw that's not how it works, you cannot just do TimeUnit.MINUTES and then get the remaining part as seconds. you should only get the remaining cooldown in seconds, then calculate that into minutes and seconds yourself

#

if e.g. the remaining cooldown is 90 seconds, then getting it with minutes will return 1, and getting it with seconds will return 90

ocean hollow
#

what is this

noble lantern
tender shard
#

you could just do it like this

int minutesRemaining = secondsRemaining / 60;
secondsRemaining = secondsRemaining % 60;
noble lantern
#

morning alex hazzywave

tender shard
#

hi

timid hedge
noble lantern
#

use the modulus

#

its the remainder operator sign

tender shard
pseudo hazel
#

oh did discord update their default profile pics?

tender shard
ocean hollow
pseudo hazel
#

or am I seeing a coincidence

noble lantern
#

Are you using that intellij plugin or mc development?

tender shard
# ocean hollow

does your .jar actually contain the class? open it with winrar or sth

ocean hollow
tender shard
#

gthandcuffs != testhand

ocean hollow
#

oh lol

noble lantern
#

prolly got the groupid different in your pom

ocean hollow
noble lantern
#

where tf does gthandcuffs come from lmao

try ctrl + f and search for that word?

ocean hollow
noble lantern
#

sorry

#

ctrl + shift + f

#

searches whole project

ocean hollow
noble lantern
#

what in tarnation

tender shard
#

run mvn clean package

#

after changing the package name

river oracle
#

when you change stuff is it possible to have intellij show you all the errors you created. For example I just added to a constructor, but no errors pop up right away so I have to manually look around and its annoying asf

noble lantern
#

right click maven error -> jump to source

river oracle
#

honestly still not sure if my workflow on vsc is just better than intellij

noble lantern
#

dunno, all preferantial 😛

#

vsc sounds like a pain to develop mc on though CH_Kek

river oracle
#

how so?

#

I'm curious what the preconceived notions are

noble lantern
#

ive never used it for any compiled languages ive always used it for like javascript or similar

pseudo hazel
#

I mean vsc is just an ide at this point

eternal oxide
#

my only issue with vsc is MS requiring me to regularly log in to use it

pseudo hazel
#

how so

river oracle
#

so its open source

noble lantern
#

im too used to intellij's keybinds at this point to switch tbh

pseudo hazel
#

I dont have to log in anywhere xD

river oracle
noble lantern
#

yeah i cba for all that lmao

eternal oxide
river oracle
pseudo hazel
#

do you mean visual studio or visual studio code?

noble lantern
#

they need to make the 2 more distinct in difference

#

because names are too similar for 2 totally seperate things

eternal oxide
#

is there a difference? I've hardly ever used it

river oracle
river oracle
pseudo hazel
#

well vs code is a beefed up text editor

eternal oxide
#

my bad then I'm refering to VS

pseudo hazel
#

and vs is a crappy over engineerd ide that works about 75% of teh time

river oracle
#

VSC is just addon funtime

#

lol

pseudo hazel
#

yeah

#

but honestly its not that bad

ocean hollow
#

how to make it so that the entity cannot push the player?

noble lantern
river oracle
ocean hollow
#

thx

tender shard
#

all those GUI editors are such a pain anyway, I usually just write gridbag layouts through code, imho that's easier and faster

noble lantern
tender shard
river oracle
young knoll
#

Gridbag is nice but being able to plop stuff almost anywhere is great

silent steeple
#

why is Material.BREWING_STAND invalid

noble lantern
noble lantern
silent steeple
#

its valid but doesnt show up in my gui

#

1.8

noble lantern
#

then the way its getting put into your GUI is likely wrong

silent steeple
#

every other item works..

#

also whats the material name for bone meal

young knoll
#

In 1.8?

silent steeple
#

ye

young knoll
#

Ink sac with some silly meta value

noble lantern
#

oh god i forgot about that

#

same with panes too r_baby_cry

silent steeple
#

yeah ink sack 16 doesnt work even tho its meant to be 16

noble lantern
#

make sure to set the damage, its not called meta deta directly

young knoll
#

16?

silent steeple
#

oh maybe its 15

young knoll
#

There should only be damage values from 0-15

silent steeple
#

yeah must be 15

#

and about the brewing stand

tender shard
silent steeple
#

send them

tender shard
#

BREWING_STAND is the block, BREWING_STAND_ITEM is the item

silent steeple
#

oh

noble lantern
#

why are you on 1.8 r_baby_cry

#

you making this so hard on yourself

ivory sleet
#

af

tender shard
#

yeah in 1.13+ almost all items and blocks are the same material

pseudo hazel
#

actually?

noble lantern
#

why wouldnt it be

#

its a cryptic function iirc

ivory sleet
#

yes

#

SecureRandom

pseudo hazel
#

okay

#

well I just need a way to quickly get some id for a thing im making

ivory sleet
#

ah

tender shard
#

if I need random UUIDs, I usually just generate a few hundreds in onEnable() and then reuse them later

pseudo hazel
#

I just want to overlap

ivory sleet
#

custom impl

pseudo hazel
#

yeah a pool could work

shadow night
#

Whats the difference between random and securerandom?

tender shard
#

or just throw a few longs made by ThreadLocalRandom into the UUID constructor

ivory sleet
#

dont pool it lol

noble lantern
tender shard
noble lantern
pseudo hazel
#

its for inventories so I guess I could instead use the slot instead of some arbitrary id

young knoll
#

How expensive is namedUUIDFromBytes

shadow night
noble lantern
#

theres a vid on it

#

nothing is truly random

tender shard
noble lantern
#

computers are predictable believe it or not if you have the right information

young knoll
#

I believe big cryptography companies use stuff like lava lamps

ivory sleet
#

SecureRandom is also seed based

pseudo hazel
#

yeah boi, my rng is hooked up to a lava lamp 😎

young knoll
#

A full wall of them actually

shadow night
#

Hmm, can't you do some weird stuff with using a seed to get some semi-random bytes from the computer and then combine that with the current timestamp or something?

ivory sleet
#

I mean

#

u have shit that uses atoms

#

and shit that uses hardware, or mouse movement etc

tender shard
ivory sleet
#

yep

shadow night
#

Just take all possible factors and do make it random as possible

young knoll
#

I must know what the entropy source is

noble lantern
#

self seeding Smirk

young knoll
#

Does every CPU have a small ant on meth for sourcing entropy

#

If not they should consider it

shadow night
#

Like add the color value of each pixel to each other, add the brightness, use that as a seed to generate a number with the usual random, then multiply the previous result by that random number and you have some random random number

noble lantern
#

sounds expensive

pseudo hazel
#

nvm I can just use a counter value xD

#

im not gonna need more than MAX_VALUE anyways lmao

shadow night
#

We should make the most expensibe random random

ivory sleet
#
    public static UUID randomUUID() {
        var random = new Object() {
            static RandomGenerator instance = new SplittableRandom();
        };

        byte[] randomBytes = new byte[16];
        random.instance.nextBytes(randomBytes);
        randomBytes[6]  &= 0x0f;  /* clear version        */
        randomBytes[6]  |= 0x40;  /* set to version 4     */
        randomBytes[8]  &= 0x3f;  /* clear variant        */
        randomBytes[8]  |= 0x80;  /* set to IETF variant  */
        return new UUID(randomBytes);
    }

@pseudo hazel

#

uses a normal splittable random instead

pseudo hazel
#

whats the diff

ivory sleet
#

faster

#

much faster

pseudo hazel
#

okay

#

well like I said I think a counter is easier for my implementation

#

thansk for the help

noble lantern
#

imma use that in musepluse

ivory sleet
#

yea

tender shard
young knoll
#

So no meth ants

noble lantern
#

we need more meth ants in this world

#

wakes up

Want to test some bugs

minecraft:

river oracle
noble lantern
#

amd

river oracle
#

lol nvidia crads break on me like this all the time

#

only stopped breaking after switching to linux ironically

ocean hollow
#

so, how can I make entity not Collideable?

noble lantern
#

use LivingEntity#setCollidable

#

checkif Entity is instance of living entity

ocean hollow
#

so i just need to do this?

noble lantern
#

just call it directly

tender shard
ocean hollow
noble lantern
#

yeh just that is fine

tender shard
noble lantern
#

chicken is secretly server operator?!

#

😮

tender shard
#

all entities are OPs lol

young knoll
#

All mobs are

noble lantern
#

WTF

young knoll
#

Entities can run commands

noble lantern
#

i was just making a joke damn lmfao

young knoll
#

Via /execute

tender shard
#

it's because they are commandsenders (/execute @e[...])

noble lantern
#

didnt know they were actually ops lmfao

orchid trout
#

oop 🤮

noble lantern
#

so theoretically i can make chickens ban people...

Honestly thats amazing

ocean hollow
tender shard
#

we need a public server that's secretly owned by a chicken

young knoll
#

Isn’t there like an addCollidableExemption

ocean hollow
#

so what should i do?

noble lantern
#

are you trying to lead players 💀 this feels like some prison system hahaha

You could try setting the player to non collidable as well maybe

ocean hollow
#

I did this initially, it doesn't work.

tender shard
ocean hollow
#

does this problem have no solution?

noble lantern
#

most people would use packets for somethin like this tbf

silent steeple
#

@EventHandler
public void kitClick(InventoryClickEvent e) {
System.out.println(i.getContents());
if (e.getInventory() == i) {
e.setCancelled(true);
}
}

The sout statement works but the event isnt cancelled

river oracle
ocean hollow
# noble lantern most people would use packets for somethin like this tbf
    EntityChicken entityChicken = ((CraftChicken) chicken).getHandle();

    PacketPlayOutEntityVelocity velocityPacket = new PacketPlayOutEntityVelocity(entityChicken.getId(), new Vec3D(0, 0, 0));
    entityPlayer.playerConnection.sendPacket(velocityPacket);

    PacketPlayOutEntityMetadata metadataPacket = new PacketPlayOutEntityMetadata(entityChicken.getId(), entityChicken.getDataWatcher(), true);
    entityPlayer.playerConnection.sendPacket(metadataPacket);``` chat gpt gave me that
tender shard
ocean hollow
tender shard
#

what even is "i"?

silent steeple
tender shard
#

== is fine, it's simply not the same inventory

#

as I asked earlier - what even is "i"?

silent steeple
#

i changed == to .equals an it works

silent steeple
#

why does .equals work but == doesnt

#

.equals returns this == obj

river oracle
#

i is not the same as inventory

#

so therefore it shouldn't be cancelled

tender shard
#

for inventories, equals is the same as ==, as it just calls the underlying NMS inventory's equals method, which isn't declared -> Object.equals()

river oracle
silent steeple
#

oh so thats why like for example playerjoinevent you cant do e.getPlayer.getName() == you must use .equals

tender shard
loud steeple
#

why cant i ss

tender shard
#

because youre not verified

#

!verify

undone axleBOT
#

Usage: !verify <forums username>

loud steeple
#

iv never been on forums

#

i can still type in this discord?

#

i have a .yml file but its called paper-plugin.yml

tender shard
loud steeple
#

and its not detecting ti

tender shard
#

you need a plugin.yml file

#

not a paper-plugin.yml file

sacred berry
#
@EventHandler
    public void onPlayerInteract(PlayerInteractEvent e) {
        Player p = e.getPlayer();
        if (!(e.getAction() == Action.RIGHT_CLICK_AIR)) return;
        if (!(e.getItem().getItemMeta() == stick.getItemMeta())) return;
        if(!p.hasPermission("bamle.stick")) return;
        p.sendMessage("Test");
    }

Why doesn't this work?

loud steeple
#

why did it autogenerate with that?

#

using inteliji idea

tender shard
echo basalt
#

LIGHT THEME

tender shard
#

light theme, for bright people

remote swallow
loud steeple
#

i do want paper, i heard paper is just a 2nd version of spigot

remote swallow
echo basalt
tender shard
#

rename your paper-plugin.yml to plugin.yml

remote swallow
loud steeple
#

my ide doesnt allow it.

echo basalt
#

weak

river oracle
#

Paper is banned form their ide

#

confirmed

#

based ide

loud steeple
#

how is there 15+ options

sacred berry
loud steeple
#

and no rename wtf

#

f2 doesnt work

tender shard
echo basalt
#

It's refactor

#

shift f6 usually

loud steeple
#

shift-f6 what the f-

#

f2 is litturaly global

river oracle
#

why are you using a ide you aren't familiar with

echo basalt
#

or umschalt if you're a lawyer

silent steeple
#

u can change it