#off-topic

1 messages · Page 519 of 1

fallow crow
#

etc

#

<o/

#

tbh plugin wont even need many updates

#

because its not version dependant

elfin minnow
#

imma obf a waterbottle

fallow crow
#

do it

elfin minnow
#

yall aint getting the secret code

fallow crow
#

i have diff obfuscators i wonder if I layer them

#

I have paramorphism and ZKM

elfin minnow
#

if water === true
set water === turtle

#

easy

fallow crow
#

if water*

boreal escarp
#

First time when I have seen an obfuscated code I was like "wtf code like that?" 😂👌

elfin minnow
boreal escarp
#

noob*

fallow crow
boreal escarp
#

What does Something<?> means?

eternal apex
#

is that even obfuscated?

fallow crow
#

ye

eternal apex
#

? is a wildcard generic gaby

boreal escarp
#

a

fallow crow
#

im not sure what setting its on

eternal apex
#

what shit obfuscator made that

#

it barely looks obfuscated

elfin minnow
#

when he wants to obf leveling tools pepe_sad2

fallow crow
elfin minnow
boreal escarp
#

Why do I have / want to do a lot of stuff but have no time omg

fallow crow
#

My entire life is only: study

#

Study and study all day.

boreal escarp
#

I need to finish a commission, to study for school, to learn C & I want to watch a serial smh

eternal apex
#

what u need c for

boreal escarp
#
  • some shitty project for school
#

Getting ready for uni, pig

eternal apex
#

use v, compiles to c

#

ez

fallow crow
boreal escarp
#

do what? xD

fallow crow
#

Between Pascal and Phyton, which is easier?

sterile parrot
#

py

eternal apex
#

python

boreal escarp
#

Isnt Pascal too old?

eternal apex
#

python is pretty old too

fallow crow
#

But never too old to be used to study..

eternal apex
#

ehh

#

i hope vlang gets somewhere, looks really cool

fallow crow
#

In our school still learns about Pascal

boreal escarp
#

Same here tbh

#

Not doing it by myself but ik

eternal apex
#

ay at least you guys have programming courses in your schools

boreal escarp
#

I dont GWmythicalHyperREEEE

#

Stupid me didnt went to a cool hs "based" on programming

fallow crow
#

Well.. we had the recent test about Pascal, but the friend and/or someone behinds me keeps asking me about the code (obviously they aren't expert or intermediate in English)

#

Got me in a hell life enough to miss a single semicolon in the code line ._.

boreal escarp
#

Why dont you move to a school where you have programming classes @eternal apex ?

fallow crow
#

It was only 15min test, and knowing my friend next to me doesn't have much time, so he snatch my test paper to copy it, and my teacher didnt even notice..

boreal escarp
#

I wanted to but comparative to me you know everything

eternal apex
#

Not sure if it’s different in Romania, but I can’t simply switch school, nor would I want to. I’ve got friends, don’t want to try make new ones. Also, sorry if this makes me sound egotistical, but try to see it as a problem of the school system and not my ego, but I doubt any high schools in the area could improve upon my current knowledge. I’ll just have to wait for uni

boreal escarp
#

I can agree with the last sentence haha

#

And isnt like you can switch the schoom at any time you want but there's a way

fallow crow
#

piggy u a minor then?

#

never knew

woven prairie
#

😮

eternal apex
#

well to expand on the last point, I actually have had a java teacher once. The school brought him in as an experiment. Unsurprisingly, none of the students were engaged, I finished the work far before anyone, and my skills far exceeded that of the teacher.

boreal escarp
#

Too smart for his age, I have to say that

#

I need to find a way to focus on learning stuff, I get bored & distracted pretty easy kms

eternal apex
#

I find the best way is to have someyhing you’re developing for. Back when I first started on java, my reason was I wanted custom plugins on my server.

fallow crow
#

SAME

eternal apex
#

it’s very hard to learn a language without goals

fallow crow
#

I started when I was little because I wanted a cool server, but couldn't afford to hire dudes

#

so I turned to learning

#

and here I am like 6 years later 😂

eternal apex
#

if you don’t have goals, you need some, so go onto the languages relative forum, or a community around the language, and ask for someone to give you some goals.

fallow crow
#

piggy how old r u

eternal apex
#

117

boreal escarp
#

11,7?

eternal apex
#

not yet

rough river
#

new job oof

fallow crow
#

so you're 17

#

or 11

rough river
#

what i will do there

fallow crow
#

one or the other

eternal apex
#

neither

fallow crow
#

more than likely 17

boreal escarp
#

It sucks that I dont have irl friends involved into programming

velvet crescent
#

He's 117

#

Aka well aged pork

woven prairie
#

I'm 12

eternal apex
#

can vouch on the above statement

boreal escarp
#

They are all into alcohool and such

eternal apex
#

gian is indeed 12

muted fern
#

banned for being under 13 on discord

velvet crescent
#

Kek

woven prairie
#

lel

eternal apex
#

has been 12 for as long as I’ve known him

boreal escarp
#

😂

#

He and Ashe from pokemon

muted fern
#

=multi spin

honest thistleBOT
#
New XP Multiplier...
eternal apex
#

oo

boreal escarp
#

Wew

fallow crow
#

hype

#

time to spam

muted fern
#

=multi

honest thistleBOT
#
Your XP Multiplier:
fallow crow
#

LETS GO

#

everyone gotta chat now

boreal escarp
#

Smh fc

fallow crow
#

nice

boreal escarp
#

Im eating rn

fallow crow
#

great multi

#

just keep chatting

muted fern
#

eat and type

#

ez

fallow crow
#

ye

#

just chat shit so u get your xp

woven prairie
#

eZ

fallow crow
#

poggers

boreal escarp
#

Oh

fallow crow
#

see

boreal escarp
#

Yea

fallow crow
#

rofl

#

xp grind bois

velvet crescent
#

Shame I'm in school tho lmao

fallow crow
#

u can still chat shit

#

just think of something random

velvet crescent
#

ShitShat?

fallow crow
#

dchat

eternal apex
#

shit shack

fallow crow
#

vk2gpz

#

that timing

#

vouchers already advanced asf

#

just cuz i have my own utils 😂

woven prairie
#

o

velvet crescent
#

Gonna hopefully finish this whole eco today and start on the enchants

fallow crow
#

hype

#

cant wait to see

#

4,200 xp to go

velvet crescent
#

It'll be private so </3

fallow crow
#

o

#

thought it was a commission

velvet crescent
#

Ye

boreal escarp
#

Pig why dont you make premium plugins

fallow crow
#

xd

#

pig is too open src focused

#

im guessing

velvet crescent
#

I'll let u see it on mah test server

fallow crow
#

kinky

velvet crescent
#

Very

fallow crow
#

💦

eternal apex
#

i don’t have any premium plugin ideas

#

well i do, but I don’t care enough to implement them

#

also, I try to avoid paypal at all costs, and that’s the only gateway spigot offers

fallow crow
#

ye same

#

I have many bad experiences w/ them

#

but sadly most places require it

boreal escarp
#

Piggypiglet.store ez

fallow crow
#

my new PayPal is even set so I can withdraw money to my bank, but I can't pull money from them

eternal apex
#

In future, I might actually have a thing on my website like that gaby

#

so I can accept stripe

fallow crow
#

im looking rn for xenforo stripe actually

boreal escarp
#

Cant wait for my mother to come home and yell at me cuz I didnt went to school :))

eternal apex
#

won’t be selling resources, it’d be a place clients can pay for commissions

fallow crow
#

no addons

#

cuz mcpf is fucked rn

#

cuz of paypal

#

nobody can buy

eternal apex
#

even if I did sell premium plugins, they’d still be open source

#

perhaps I’d even have a link to jenkins on the gh page

fallow crow
#

its a shame xenforo dont have built in support

#

for buying products

boreal escarp
#

because it's a forum software?

#

js

fallow crow
#

makes no sense

#

they have a resource manager addon

#

so surely that addon should let people sell..?

boreal escarp
#

ught time to install word ...

woven prairie
#

Docs > Word

boreal escarp
#

google docs?

woven prairie
#

Ye

boreal escarp
#

smart mf

muted fern
#

Paint > Docs > Word

woven prairie
#

ofc

eternal apex
#

etch a sketch > paint > docs > word

boreal escarp
#

I'm cryting after seeing the project plan 😐

fallow crow
#

HAHA

#

I got told a method on how to verify my paypal

#

without bank etc

#

and it worked, mcpf is working now

#

its out

jagged pollen
#

o Hype

woven prairie
#

So pricey xD

muted fern
#

Seems that way

fallow crow
#

eh its in a suitable figure for what it does

muted fern
#

Whats it even do

#

Lets you get a placeholder from another server?

fallow crow
#

ye

#

not seen anything made before

muted fern
#

Papi3 has that planned iirc

fallow crow
#

o nice, for now can be another plugin

#

took me ages to figure

muted fern
#

Just seems odd to charge $5 for something when papi does all the hard work 😉

boreal escarp
#

:)))))

#

rip

fallow crow
#

eh

#

Agree to disagree honestly

#

Otherwise you may as well say the same to TE addons

muted fern
#

Don't get me started on those

#

lol

fallow crow
#

hahaha

#

ik, I don't agree with those

woven prairie
#

lol

fallow crow
#

I'll reshuffle my pricing a little, as this is what I want

#

most expensive to least

#
HQ Bundle: $12.99
Tools: $9.99
SkyBlock Setup: $6.99
Tags: $4.99
Piggys: $2.99
Globalholders: $1.99```
#

seems fair

magic summit
#

@sterile parrot Yes it's very specific because I can't find any plugin that does this...
Plugins like BungeeSignsUltimate don't have any option to display text depending on the MOTD of a server....
And none of the minigame plugins I want to use has any bungee feature except:

  • Change MOTD based on current state
  • Auto-join players to game on join
  • Send them to a specific server on leave/end of game
fallow crow
#

prob something you'd need custom

magic summit
#

Thought about making a plugin

#

Which would use plugin messaging channel to send updates

fallow crow
#

ye

#

only thing is they require real players 😦

magic summit
#

?

fallow crow
#

plugin messaging

#

it always needs real players on each side

#

for it to be able to send

magic summit
#

I don't think so

fallow crow
#

it does

magic summit
#

Or how else would LP work then?

fallow crow
#

only way around is sockets

magic summit
#

Give me a valid proof (from spigot staff) that it requires players

fallow crow
#

I mean you can search spigot yourself, but I know from testing my spoofer

#

and other plugin messaging ones

#

even maxim himself 😉

#

only way around is via sockets

#

BTW: I don't want to rely on having players online

eternal apex
#

issa true andre

#

player has to be on the server for a message to get through

fallow crow
#

hahaha

#

so makes me think of assert

honest thistleBOT
#
✳️ Global Multiplier Expired!

The global multiplier has ran out and has been reset!

boreal escarp
#

RIP

#

no

#

come back

#

@muted fern GWmythicalFeelsSadMan

nocturne jolt
#

whats that?

boreal escarp
#

=multi

honest thistleBOT
#
Your XP Multiplier:
boreal escarp
#

that x9

nocturne jolt
#

ranking stuff? lol

boreal escarp
#

ye

twin dune
#

1x9=9

#

Do math lol

nocturne jolt
#

lol

elfin minnow
nocturne jolt
muted fern
jagged pollen
fallow crow
#
# Vouchers v4.0 Configuration
# Configure your 'example' voucher here.

item:
  name: "&bExample Voucher"
  lore:
    - "&7Go into the plugin folder"
    - "&7to edit this voucher."
    - "&7"
    - "&7plugins/Vouchers/voucher/example.yml"
  glow: true

rewards:
  test:
    chance: 100
    actions:
      - "[broadcast] Example Action!"

settings:
  permission: true
  blacklist:
    region:
      - "bad_region"
    world:
      - "bad_world"```
#

opinion?

#

on config layout

eternal apex
#

you should use the correct codeblock language

fallow crow
#

oh ye

#

oops

#

Vouchers will be per file, so cleaner

#

Just not sure whether I should move everything out

jagged pollen
#

U cant set the material?

fallow crow
#

o shit

#

i forgot LOL

#

ty

jagged pollen
#

mat and data pls

fallow crow
#
item:
  name: "&bExample Voucher"
  lore:
    - "&7Go into the plugin folder"
    - "&7to edit this voucher."
    - "&7"
    - "&7plugins/Vouchers/voucher/example.yml"
  glow: true
  material: PAPER
  data: 0```
#

ye

jagged pollen
#

It looks good

fallow crow
#

or

#

I could do

#

material: PAPER;0

#

but eh

jagged pollen
#

Not needed, but maybe add a custom permission?

fallow crow
#

may be confusing and I was gonna but people would get confused

jagged pollen
#

up to u..

fallow crow
#

it would mean if people say "people cant use it"

#

I can say vouchers.use.<id>

jagged pollen
#

Oh yea

fallow crow
#

I've got a fast NBT lib I can use for this, may even use mysql/sqlite

#

for storing limits

#

so u can use it server wide

jagged pollen
#

noice

fallow crow
#

poggers

#

i wanna add a ton of dev hooks to it as well

velvet crescent
#

Wow and now that I'm home there's no more multi -.-

sterile parrot
#

@fallow crow what were some of the remote dev job requirements you stated for yourself, as iirc you have searched for one but did not find any right?

magic summit
#

You guys perhaps know what mysql command I have to use to create a user (with password of course) and a database with same name where the user has full rights on?
I don't have phpmyadmin setup and imo is it not really worth to be setup for this....

sterile parrot
#

CREATE USER 'user'@'hostname';
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';

#

don't forget to flush privileges afterwards

eternal apex
#

u forgot to create the db

velvet crescent
#

Anyone else know the feeling when you accidentally blast your volume instead of your screen brightness

eternal apex
#

CREATE DATABASE dbTest;

sterile parrot
#

oh thought he had one already

eternal apex
#

he said create a user and database ¯_(ツ)_/¯

magic summit
#

I'm not 100% sure about the hostname... Should I just use 127.0.0.1 when it is on same machine?

eternal apex
#

yep

sterile parrot
#

use localhost

#

easier to type

velvet crescent
#

It's been 9 days since I published my resource.. Still not accepted

eternal apex
#

on what?

velvet crescent
#

mcm

sterile parrot
#

I still wonder how you guys have so much time

eternal apex
#

school holidays

#

and i don't sleep

boreal escarp
#

Lmao lemmo

#

I barely have time for sleep

fallow crow
#

@velvet crescent you’ll be waiting 2-3 weeks

velvet crescent
#

I mean I got messaged day 1 to confirm it was me (since the resource is also on spigot)

#

so kek

fallow crow
#

Togo

boreal escarp
#

It's vlang new, Pig?

fallow crow
#

Rofl

eternal apex
#

still in alpha gaby

#

releases officially in december or something

boreal escarp
#

Interesting

#

how does it looks like?

eternal apex
#

go

magic summit
#

And how could I check if everything was successful?
It says Query OK, 0 rows affected (0.001 sec)

eternal apex
#

& python

boreal escarp
#

snippet? xD

eternal apex
#
fn main() {
    println("Hello")
}```
boreal escarp
#

ah

eternal apex
#

that compiles into c++

boreal escarp
#

All I know it's that py it's ugly

sterile parrot
#

M# is a new lang too

eternal apex
#

link?

boreal escarp
#

lemon lang when?

sterile parrot
#

I made a tiny language in python once

#

but M# is for a new operating system from ms

eternal apex
#

another snippet gaby

#
fn main() {
    go loop()
    go loop()

    mut keep := 0

    for {
        keep++
    }
}

fn loop() {
    for i := 0; i < 10; i++ {
        println(i)
    }
}```
#

just messing with it's multithreading

#

anyone know what markdown library discord uses?

sterile parrot
#

simpleast

#

written in kotlin

boreal escarp
#

why cant ppl use the same format for all languages p.p

eternal apex
sterile parrot
#

converted to java for use in discordsrv

#

yes

eternal apex
#

aight, thanks

sterile parrot
eternal apex
#

what does it use for syntax highlighting implementations? textmate, or some other type?

sterile parrot
#

no clue

#

I'm literally going to kill myself if I have to work with frontend once more

eternal apex
#

yea i avoid that shit at all costs

sterile parrot
#

this even uses bootstrap but yet it just is absolute shit

#

I hate it

eternal apex
#

only thing I really use from bootstrap is the grid

#

the rest I end up remaking eventually

#

grid is the only component I ever actually need

sterile parrot
#

this is built in laravel so bootstrap is available

eternal apex
#

hopefully I can get my framework's http library good enough so I never have to venture into that territory

#

short of storing some cookies

sterile parrot
#

why did you make a http library though

eternal apex
#

I didn't really make one

#

it's just nanohttpd

sterile parrot
#

there's enough great open source projects

fallow crow
#

yuck bootstrap

#

tailwind all the way

eternal apex
#

my library is just a wrapper around nanohttpd to handle configuration and boilerplate

sterile parrot
#

ah okay

eternal apex
#

also authorization and ssl generation, but that's a wip

woven prairie
#

how can i code

eternal apex
#

once you turn 13 you'll be allowed to gian

sterile parrot
#

thing is this should've been finished already yet I lose all motivation due to frontend

eternal apex
#

what u making?

sterile parrot
#

can't disclose that

eternal apex
#

what's with proguard in general

#

I've seen it quite a few times recently, in places I can't understand

#

like on okhttp

#

why would okhttp be proguard obfuscated?

fallow crow
#

proguard

#

yuk

sterile parrot
#

is not only for obfuscation

eternal apex
#

charlie, that obfuscation you showed earlier was basically proguard level

sterile parrot
#

it is used for optimization and shrinking too.

eternal apex
#

oh

fallow crow
#

i think it wasnt on a high setting, all my configs are diff

eternal apex
#

o lemmo

#

u be trolling me

#

half trolling me

#

this is only the simple markdown

#

do you know what it uses for code blocks?

fallow crow
#

is it good practice to store your objects inside your object as a static?

boreal escarp
#

Lemmo the memer

fallow crow
#

E.g. have a Voucher object, with a static hashmap inside with your vouchers

#
public class Voucher {

    private static Map<String, Voucher> vouchers;

    public static Map<String, Voucher> getVouchers() {
        return vouchers;
    }```
eternal apex
#

no

fallow crow
#

because its persistent, and makes sense

#

o

eternal apex
#

never do that

#

i'm sure there's a good explanation for why, but i'm not the person to give it to you

fallow crow
#

I read somewhere thats why

#

thought it made sense

#

then you can do Voucher.getVouchers()

eternal apex
#

it's an object though, it's designed to be initialized

fallow crow
#

ahh seems fine

#

from what people say

#

ill make a manager anyway as may be cleaner

#

but eh

eternal apex
#

it might be ok to declare the list as a constant, however the getter shouldn't be static

fallow crow
#

seems fine from what i read

#

ahh I see

eternal apex
#

even then, the list should be constant, so you need to initialize it with an empty arraylist

fallow crow
#

if I went with a VoucherManager, what would be the best approach to let others access it?

eternal apex
#

well, I use guice

fallow crow
#

a static getter insied there insyead?

eternal apex
#

so I chuck @Singleton on top, and do @Inject private VoucherManager voucherManager;

fallow crow
#

oh wow

eternal apex
#

typically though, I'd say flat out avoid static in objects

#

it's simply redundant

#

and could have unintended side effects, so actually potentially dangerous

fallow crow
#

I want to build this plugin where devs can hook

rough river
#

IT support/ project analyst what about is this job oof

#

idk

nocturne jolt
#

Gosh i even forgot that what plugins discord is this 😖

sterile parrot
#

@fallow crow btw did you see my question

fallow crow
#

@sterile parrot no? whats up

#

ahhh

#

wdym

sterile parrot
#

LemmoTrestoToday at 2:58 PM @Charlie what were some of the remote dev job requirements you stated for yourself, as iirc you have searched for one but did not find any right?

#

yeah

#

well you searched for a remote dev job right

fallow crow
#

ye

sterile parrot
#

what was the criteria you searched for

fallow crow
#

Java development / web dev

sterile parrot
#

nothing specific you searched from in the company?

boreal escarp
#

Web dev is most of the time a remote job, isnt it?

fallow crow
#

Frontend I don't mind

#

if the data is there

sterile parrot
#

and @eternal apex if you were to look for a developer job, what would be your criteria?

fallow crow
#

how comes also?

#

Collecting data or something?

sterile parrot
#

not collecting just trying to draw a picture out of asking a few people

#

it's for private use.

fallow crow
#

oh

#

inb4 a freelance portal like that dude here

eternal apex
#

honestly, I'm starting to think developing for people isn't necessarily for me, I'm going to consider teaching

boreal escarp
#

Damn

fallow crow
#

tbh I'm thinking of dropping dev

eternal apex
#

teaching computer science just to be specific

fallow crow
#

to do something else

#

like boring

#

because seemingly insurance is big money

woven prairie
#

oof

sterile parrot
#

I've thought about that too, since teaching computer science would be fun

fallow crow
#

plus it wouldn't be too complex

sterile parrot
#

but I think that might be something I'd rather do at a later age

fallow crow
#

because you'd teach from basics

#

means u can teach the right way too

#

E.g. liskov principle

eternal apex
#

you don't start on liskov lol

#

if I were going to teach liskov, I'd start at the actual beginning, srp

#

then go through it in the proper order

woven prairie
#

I was gonna do compsci

#

Teach*

eternal apex
#

if I were to look for a job as a developer though, it'd be strictly backend. Extremely lenient deadlines, if any at all. Preferably have to work in an office, not open office though. don't care about the money. java only right now.

I don't know if this is extremely unreasonable, as I've never looked for a professional job.

fallow crow
#

id like something from home, even if its only starting money

#

Or even project based

sterile parrot
#

it's hard to just have someone work from home

eternal apex
#

I'll only work from home when I've got enough experience. I'll get distracted too easily

#

a workplace is the only place where I'll be able to focus

sterile parrot
#

I work from home sometimes if necessary

fallow crow
#

the thing I find it embarrassing myself if I was at somewhere

woven prairie
#

It's such a distraction honestly

eternal apex
#

home work or workplace work?

woven prairie
#

Home

sterile parrot
#

but yes you get distracted very easily

#

and you miss out on talking with the others, helping each other out etc

eternal apex
#

oh

#

free food actually

#

that's a requirement

sterile parrot
#

sitting on a problem with multiple

fallow crow
#

I was listening last night to a podcast about distractions actually

#

and the idea of saying no to picking up your phone

#

in uncomfortable situtations

eternal apex
#

that's not my issue

#

my issue is all the shit I've got going on in the background

#

i'm working for 10 mins on a project, then I get bored and open up csgo

#

get bored 10 mins later, open up rainbow

#

then I go onto my email

fallow crow
#

ye I do that

eternal apex
#

oh, a new email from quora

#

oh, look at that idiot, he's asking about some idiotic stuff

fallow crow
#

Like I'll sit and think ugh im bored, ill go on cod

#

or w/e

sterile parrot
#

lmfao why do I also do this

#

besides the gaming

fallow crow
#

hahaha

woven prairie
#

lol

fallow crow
#

one idea I've had is to not have discord on my pc

#

but only on my phone

#

so I check less often

sterile parrot
#

like the quora too just gaming is replaced with discord or some other stuff

fallow crow
#

from 10pm I have my phone set to silence notifications

#

so if I use it, I don't start clicking and staying up

eternal apex
#

I do good work at night

fallow crow
#

same

eternal apex
#

not because of the lack of distractions though

#

my brain gets so tired, it can't process distractions, the only thing I can do is code

#

the distractions are most certainly still there

fallow crow
#

Honestly I work better at night merely because I'm sitting on my own, no family around me

#

and my eyes are focused on the screen

#

nothing around me

#

I sit in the dark

sterile parrot
#

I think most devs are better in the night lol

eternal apex
woven prairie
#

I don't even consider myself a dev anymore, welp

fallow crow
#

One big issue I have, and @woven prairie can so relate because we discuss this often - we both start projects and never / rarely finish them.

#

You get a bold idea, and jump to it

#

I think I may put all my other projects on backburn and work on my primary project, which in my case is Spoof

eternal apex
#

Well I read some common sense the other day

#

I used to think that motivation was the only factor behind why someone could make something

#

so when motivation runs out, the project dies

#

this simply isn't true

#

you need to force yourself to work on something

#

motivation only lasts for the tiniest time, to get the project started

#

that's it's job, it's job isn't to keep you working

fallow crow
#

I have some motivation to spoof merely because its reoccurring money

eternal apex
#

if you can get past that barrier, then you'll be able to work on it, and experience the illusion of joy, at least sometimes

fallow crow
#

but I need to push myself to advertise it more

#

And think of new ideas to add

boreal escarp
#

@sterile parrot can I be your first student? GWcmeisterPeepoLove

eternal apex
#

anyway, at least that's the logic I've read, and can understand. While it's not particularly relevant to personal projects, as there's really no downside if you choose to give up on those, hopefully the barrier is significantly easier to cross when actually working for a living. If not, i'm screwed, and will need to look for another career

boreal escarp
#

I hope so

fallow crow
#

I just need to start forgetting about other projects

#

and focus myself on 1-2

jagged pollen
#

That happens all the time for me

boreal escarp
#

All I need besides motivation it's a partner to work with

eternal apex
#

oh god working with others can be really difficult

jagged pollen
#

Yeaaaa

eternal apex
#

if you get a partner, make sure they're either of the same skill, if not higher than you

jagged pollen
#

I hate working with someone

fallow crow
#

Yeah I work alone

boreal escarp
#

If I'm alone I get bored very fast

#

which sucks

fallow crow
#

I might have to setup affiliates for spoof

#

just found out about a cool feature

#

never knew this existed on this platform

boreal escarp
#

what platform?

fallow crow
#

gumroad

boreal escarp
#

ah cool

fallow crow
#

if someone referred 10 people tha tstayed monthly

#

its $50 a month for person

boreal escarp
#

o

young temple
#

o

fallow crow
#

xd

#

So if you think you can get sales hmu

#

25% cut per person

eternal apex
#

File.separator basically redundant, / automatically gets converted

fallow crow
#

oh rly i didnt know that

#

also i forgot if (!voucherFolder.exists()) {

eternal apex
#

also

#

async

fallow crow
#

how

eternal apex
#

bukkit has a scheduler, use it

fallow crow
#

in a bukkit thing?

#

ahh

sterile parrot
#

don't even need to do + '/' can even just use a comma (as in 2nd argument)

fallow crow
#

oh

#

damn

eternal apex
#

you're registering files in the same class as your main, that breaks srp

fallow crow
#

ah shit 😂

#

well im learning

velvet crescent
fallow crow
#

what would I call it

#

no

eternal apex
#
} catch (IOException | InvalidConfigurationException e) {
                        e.printStackTrace();
                    }```
don't blindly print stack traces, handle it properly
fallow crow
#

just log a warning?

eternal apex
#

call it something appropriate for what the class will achieve

fallow crow
#

VoucherManager ig

eternal apex
#

no, shut down the plugin with a nice message

#

vouchermanager is quite ambiguous, it sounds like a memory manager for voucher objects

#

but we're talking about configs

#

so no, vouchermanager wouldn't be appropriate

fallow crow
#

what would you call it

eternal apex
#

that's complicated

#

my file system is spread out over a lot of different classes

#

technically, the storing happens in a class called FileManager though

velvet crescent
#

@sterile parrot What did you mean by putting my packages inside packages?

fallow crow
#

So I'd call FileManager which would add vouchers to VoucherManager I'm guessing?

sterile parrot
#

@velvet crescent like a tree

#

show your current project's tree

velvet crescent
#

Ignore the error

eternal apex
#

no, that breaks the dependency inversion principle charlie

#

maybe interface segregation aswell

sterile parrot
#

@velvet crescent that's how it should look

eternal apex
#

FileManager handles files, why would it need to interact with VoucherManager?

fallow crow
#

to create the objects

sterile parrot
#

that's what vouchermanager should be doing

fallow crow
#

To load into memory

sterile parrot
#

not filemanager

velvet crescent
fallow crow
#

Even I am

#

I said about adding to vouchermanager

#

and then everyone says diff

boreal escarp
#

wy tf does your tree looks like that

sterile parrot
#

@velvet crescent do you see the difference between my tree and yours

velvet crescent
#

hmm lemme fiddle around

boreal escarp
#

it's me.frosty.lenchants as main folder then everything else it's inside that

fallow crow
#

Piggy please guide me, what classes would I have setup

eternal apex
#

charlie, filemanager shouldn't have any references to vouchermanager, and vise versa. You should have another point where the data is extracted from your filemanager, and parsed into the vouchermanager

fallow crow
#

Because my guess was that FileManager would loop, load the yaml data and then push it to somewhere to store into memory

eternal apex
#

i.e, you have a storage interface, with an implementation for your filemanager

fallow crow
#

even VoucherManager.addVoucher()

#

or w/e

eternal apex
#

when populating the vouchermanager, it uses said storage interface to get the data

fallow crow
#

Confused honestly

eternal apex
#

look into the solid principles

#

i and d are what we're looking at here

#

interface segregation principle & dependency inversion principle

#

especially the latter

fallow crow
#

Ahh, but this is why I asked for you to explain how you would do it

eternal apex
#

well, for starters I don't store data in flatfile

#

I use databases

fallow crow
#

I only use databases for player data

#

not voucher settings

eternal apex
#

I then have an abstract class in my mysql library, called MySQLManager, which is an implementation of my Manager api, which supports auto population from the configured table

#

basically, it starts off with a simple object mapper

#

converting db rows to objects, and objects to db rows

#

on app startup, it will find mysql managers, and populate them with the tables they configured

fallow crow
#

eh fuck it, looks like I'm going my way

#

cuz I'm so confused here

eternal apex
#

the key principle is, when I implement mysqlmanager, I don't actually touch any mysql code

fallow crow
#

if I can't interact with other classes to add my data

eternal apex
#

it all happens at a higher level

#

the concepts are the same for your situation

#

you have an object mapper, which maps your fileconfigurations to Voucher

#

at a higher level, something gets the data from your configs, feeds it to the mapper, and populates the manager

#

in my case, my Table class handles object mapping, and provides the ability to fetch everything from the table

fallow crow
#

ah

eternal apex
#

my MySQLManager then grabs the stuff and populates the underlying data structures

fallow crow
#

Ahh I see, so in simple terms with me, if I have a FileManager I call on enable

#

what should my filemanager do to build these vouchers

#

and load into memory

sterile parrot
#

nothing

fallow crow
#

but then they won't ever be loaded

sterile parrot
#

that's not the job of filemanager

fallow crow
#

but filemanager still needs to store the data it fetches

#

unless when I create Voucher object

#

that auto adds to storage

eternal apex
#

you store the raw FileConfigurations in a list, or map, or whatever

#

my filemanager uses a map with string ids

#

the object mapper converts the FileConfiguration into a Voucher

#

then, you feed the manager the mapped objects

fallow crow
#

like this?

#

its commented out cuz well, not made

eternal apex
#

yep, except you won't be initializing VoucherManager from that code

#

that once again, breaks srp

#

Manager is ambiguous, it allows you to assign several different responsibilities to a class when there's only meant to be one. It's hacky, but it is what it is. Even though you can do that though, it still has it's limits, and initializing a seemingly irrelevant class in that code hits the limit.

fallow crow
#

So what should I do in simple terms now I have this data

#

have a static vouchermanager method?

#

VoucherManager.setup(List<YamlConfiguration>)

eternal apex
#

you need to follow liskov

#

FileConfiguration, not YamlConfiguration

#

I believe at least

fallow crow
#

ahh didn't realise fileconfiguration was the main class

eternal apex
#

I'm pretty sure it is, you'd have to double check

sterile parrot
#

also don't use assert in production

fallow crow
#

ye ive never used assert before just did it for now, but is it that bad?

#
                List<FileConfiguration> fileData = new ArrayList<>();

                for (File file : files) {
                    try {
                        config.load(file);
                        fileData.add(config);
//                config.get(get)
                    } catch (IOException | InvalidConfigurationException e) {
                        vouchers.getLogger().warning("Failed to load voucher '" + file.getName() + "'. Reason: " + e.getMessage());
                        vouchers.getServer().getPluginManager().disablePlugin(vouchers);
                    }
                }

                VoucherManager.setup(fileData);```
eternal apex
#

ontop of that, a static setup method would suffice principally wise, but it's still a code smell imo. Object mapping & manager population should really be happening elsewhere, at least with the way you're doing it.

fallow crow
#

no errors shown (with fileconfig object)

eternal apex
#

boi

#

in your filemanager

#

you have no reference to VoucherManager

#

it's that simple

fallow crow
#

its not

#

because you explain oddly

#

Its a learning curve to me

#

I'm here to learn just like anyone else, and I'm showing my code as I go to understand this SRP stuff

sterile parrot
#

first step is: do you know what srp stands for

fallow crow
#

ye u explained it before

eternal apex
#

srp is relatively simple, you're in for a treat when you hit isp and dip

fallow crow
#

single responsibility, that each class should do its own thing

#

so I'd have another class which mapped each file to its fileconfig

#

and returned the list

eternal apex
#

that's what I do

#

i've got a "FileConfigurationFactory"

fallow crow
#

throw it in my Common class is fine?

#

oh

#

thats good ye

eternal apex
fallow crow
#

ill have a shot before looking at yours

sterile parrot
#

you have a Common class!?

fallow crow
#

to see if I grasp it

#

ye

#

it has like 5 methods in it

sterile parrot
#

what is it supposed to do

#

and what do those 5 methods do

fallow crow
sterile parrot
#

you should name it a lot better

eternal apex
#

should be called MessageUtils instead

sterile parrot
#

yea

fallow crow
#

ahhh I c ty

#

done

velvet crescent
#

Gotta say tho, I like how the Founder Cape looks

fallow crow
#

ye

velvet crescent
#

that gold is butiful

eternal apex
#

is that for minecon attendees?

fallow crow
#

nah

#

for the new realms capes

#

they release exclusive capes on there

#
public class FileConfigurationFactory {

    public FileConfigurationFactory() {
    }

    public List<FileConfiguration> map(File[] files) {
        YamlConfiguration config = new YamlConfiguration();

        List<FileConfiguration> fileData = new ArrayList<>();

        for (File file : files) {
            try {
                config.load(file);
                fileData.add(config);
            } catch (IOException | InvalidConfigurationException e) {
                // TODO: Sort this shit.
            }
        }

        return fileData;
    }
}```
#

this?

sterile parrot
#

liskov tho

fallow crow
#

ah shit ye i missed 1 thing

#

i did it on line after

eternal apex
#

redundant constructor

fallow crow
#

i can just get rid of it?

#
public class FileConfigurationFactory {
    public List<FileConfiguration> map(File[] files) {
        FileConfiguration config = new YamlConfiguration();

        List<FileConfiguration> fileData = new ArrayList<>();

        for (File file : files) {
            try {
                config.load(file);
                fileData.add(config);
            } catch (IOException | InvalidConfigurationException e) {
                // TODO: Sort this shit.
            }
        }

        return fileData;
    }
}```
sterile parrot
#

java generators an empty constructor automatically if none found

fallow crow
#

ahhh I see

#

never knew that

eternal apex
#

you can make that method static

sterile parrot
#

but this class will only have one method which does not need to be instantiated

#

so I see no reason to have this

#

yeah one of the solutions is to make it static

fallow crow
#

oh its fine?

#

dope

eternal apex
#

also, I assume you're going to be getting an instance of your main in the catch block

fallow crow
#

ye

#

I am

#

just need to figure best way for it

eternal apex
#

so, assign a constant, use JavaPlugin#getProvidingPlugin to get an instance

fallow crow
#

oh dope

eternal apex
#
private static final Vouchers VOUCHERS = JavaPlugin.getProvidingPlugin(Vouchers.class);```
fallow crow
#
public class FileConfigurationFactory {
    private static Vouchers vouchers = JavaPlugin.getPlugin(Vouchers.class);

    public static List<FileConfiguration> map(File[] files) {
        FileConfiguration config = new YamlConfiguration();

        List<FileConfiguration> fileData = new ArrayList<>();

        for (File file : files) {
            try {
                config.load(file);
                fileData.add(config);
            } catch (IOException | InvalidConfigurationException e) {
                vouchers.getLogger().warning("Failed to create voucher '" + file.getName() + "', reason: " + e.getMessage() + ".");
                vouchers.getServer().getPluginManager().disablePlugin(vouchers);
            }
        }
        return fileData;
    }
}```
#

oh getproviding

#

1s then

eternal apex
#

needs to be final, vouchers should also be all caps as it's a constant

fallow crow
#

never knew that

#

damn

#

learning

eternal apex
#

does Vouchers not extend JavaPlugin?

fallow crow
#

it does

eternal apex
#

doesn't matter, just change Vouchers to JavaPlugin

fallow crow
#
public class FileConfigurationFactory {
    private static final JavaPlugin VOUCHERS = JavaPlugin.getProvidingPlugin(Vouchers.class);

    public static List<FileConfiguration> map(File[] files) {
        FileConfiguration config = new YamlConfiguration();

        List<FileConfiguration> fileData = new ArrayList<>();

        for (File file : files) {
            try {
                config.load(file);
                fileData.add(config);
            } catch (IOException | InvalidConfigurationException e) {
                VOUCHERS.getLogger().warning("Failed to create voucher '" + file.getName() + "', reason: " + e.getMessage() + ".");
                VOUCHERS.getServer().getPluginManager().disablePlugin(VOUCHERS);
            }
        }
        return fileData;
    }
}```
#

hows this?

#

Also ty for guidance

eternal apex
#

it's OK

#

yikes

#

move the FileConfiguration declaration into the try

sterile parrot
#

why

fallow crow
#

^

eternal apex
#

he's overriding the same object every iteration

fallow crow
#

I thought I only create it once

eternal apex
#

unless load returns a new instance

fallow crow
#

it does

eternal apex
#

what the fuck

fallow crow
#

iirc

sterile parrot
#

don't even need to make an instance

#

it has a static load method from file

eternal apex
#

use that then

boreal escarp
#

#off-topic does anybody know how to solve Integrals? xD

sterile parrot
#

but yea current code wont work

fallow crow
#
    public static List<FileConfiguration> map(File[] files) {
        List<FileConfiguration> fileData = new ArrayList<>();

        for (File file : files) {
            fileData.add(YamlConfiguration.loadConfiguration(file));
        }
        return fileData;
    }```
eternal apex
#

back onto my OK rating, only way it could be better at this point is with a proper filemanager, which I assume you've gotten rid of, due to the fact that you're reading files in the factory, which should also be async btw. A dependency injection framework would also help ofc 😉

#

otherwise, looks good

fallow crow
#

xd if u teach me your framework

#

I'll use it

#

😉

sterile parrot
#

if it doesn't use guice it's always ok with piggy

#

😛

eternal apex
#

i'll make an exception for dagger and springs di thing

#

i gotta write docs for my framework

fallow crow
#

it should be async, no?

#
public class FileManager {

    public FileManager(Vouchers vouchers) {
        new BukkitRunnable() {
            @Override
            public void run() {
                YamlConfiguration config = new YamlConfiguration();
                File voucherFolder = new File(vouchers.getDataFolder(), "vouchers");

                File[] files;
                if (!voucherFolder.exists()) {
                    try {
                        voucherFolder.createNewFile();
                        files = voucherFolder.listFiles();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

                files = voucherFolder.listFiles();

                if (files != null) {
                    VoucherManager.setup(FileConfigurationFactory.map(files));
                }
            }
        }.runTaskAsynchronously(vouchers);
    }
}```
#

cuz its being done in there

eternal apex
#

o so u do still have that

fallow crow
#

ye

#

xd

eternal apex
#

ah ok

#

yeah so that's all g then

fallow crow
#

ty boss

eternal apex
#

o

#

almost all g

fallow crow
#

😮

eternal apex
#

VoucherManager.setup not allowed my dude

#

not in that class anyway

fallow crow
#

how should 1 transform

eternal apex
#

o couple issues actually

fallow crow
#

never good

eternal apex
#

so

#

in your filemanager, you'll want to save the fileconfigurations to the class itself

#

like a list of FileConfigurations stored in it's instance

fallow crow
#

yeah

eternal apex
#

rename FileConfigurationFactory to FileConfigurationMapper

#

and here's where u gotta make a choice

#

you can either make a nice little expandable framework, or hardcode logic into the mapper class

fallow crow
#

if we go with 2nd for now

#

😂

eternal apex
#

in that case, it's gonna look something like this

#
Voucher voucherMap(FileConfiguration data) {
    return new Voucher(data.getString("name"));
}```
fallow crow
#

so that goes into FileConfigMapper?

eternal apex
#

ye

#

integrate what's currently in FileConfigurationFactory to FileManager

#

and store the stuff u need in the FileManager instance

#

then, if you've done it correctly, you could do something like this to get a list of Vouchers

fallow crow
eternal apex
#

vouchermap is in it's own class

#

FileConfigurationMapper

#

if done correctly, you should be able to do something like this

List<Voucher> vouchers = fileManager.getVoucherConfigs().stream().map(FileConfigurationMapper::voucherMap).collect(Collectors.toList());```
fallow crow
#
public class FileConfigurationMapper {
    public Voucher voucherMap(FileConfiguration data) {
        return new Voucher(data.getString("name"));
    }
}
#

and wow

#

where would what u wrote go? in filemanager?

eternal apex
#

not in filemanager

fallow crow
#

VoucherManager?

eternal apex
#

no

#

I guess whatever point which should logically have access to both

#

unfortunately, that's probably your main

#

ideally it'd be a manager for managers

fallow crow
#

ye was gonna say main but i thought you'd be like

#

SRP!!

#

unless I create a PluginManager

#

but wrong name prob

#

could be confusing

eternal apex
#

I'm not sure what would be a good spot tbh, since this isn't as abstracted as it should be

fallow crow
#

ye

#

otherwise I can give u repo access if u want

eternal apex
#

yeah no

fallow crow
#

😂

manic canyon
fallow crow
velvet crescent
#

that's a nice theme

velvet crescent
#

what theme is that 😏

eternal apex
#

it's material theme

fallow crow
#

ye your thing is confusing lmao

#

so far

#

ik i'd specify outside etc

#

So from my thoughts I guess I would store those vouchers somewhere

#

in a manager or w/e

eternal apex
#

w/e?

fallow crow
#

whatever

eternal apex
#

yeah, a manager

fallow crow
#

VoucherManager would take my list?

#

and store it

eternal apex
#

yes

fallow crow
#

for my fileconfigmapper would I pull everything from the config to store in a voucher object?

eternal apex
#

yes

fallow crow
#

because I have like 5/6 things from that config, but dope

eternal apex
#

just pass the relevant config section then

fallow crow
#
public class FileConfigurationMapper {
    public static Voucher voucherMap(FileConfiguration data) {
        return new Voucher(data.getString("id", "unknown"), new ItemStack(Material.PAPER), data.getBoolean("settings.permission"), data.getStringList("settings.blacklist.regions"), data.getStringList("settings.blacklist.worlds"));
    }
}```
#

this basically

#

is it

#

and yes ik material is hard coded rn, will sort at a later date

#

public class Vouchers extends JavaPlugin {
    private FileManager fileManager;
    private VoucherManager voucherManager;

    @Override
    public void onEnable() {
        fileManager = new FileManager(this);
        voucherManager = new VoucherManager(fileManager.getVoucherConfigs().stream().map(FileConfigurationMapper::voucherMap).collect(Collectors.toList()));

//        voucherManager.getVouchers();
    }
}```
#

is that following everything correctly?

eternal apex
#

it's acceptable

#

this is as far as most developers will go, and it's good enough

#

but it can be better

fallow crow
#

I guess next step you'd mean inject stuff?

eternal apex
#

no, but I don't really want to explain this any further

#

the logic just gets more and more complicated, I can't easily explain it

fallow crow
#

ahh I see yeah

#

Thanks for your help so far with everything, slowly will grasp it

#

At least now I can pull the vouchermanager object from my other classes

#

and handle as needed

#

for my listeners, how should I do that?

eternal apex
#

Not sure what you're asking

fallow crow
#

sorry didn't explain, for registering my listeners

#

how should I do that, a separate class?

eternal apex
#

I use a separate class, but in terms of bukkit development, it's fine to use main

#

simply because you're not expected to follow the principles to such a high standard

fallow crow
#

Eh I may as well go full board if I'm gonna do it

#

and use a separate class

#

ListenerManager or EventManager ?

velvet crescent
#

1st imo

fallow crow
#

@/piggy would u use a manager for it? perhaps take a list of classes

#

and for each one it registers or w/e

eternal apex
#

I don't have a manager for listeners, since I don't wrap them with any other apis

fallow crow
#

oh

fallow crow
#

should it be a util?

#

ahhhh

eternal apex
#

it finds any class implementing Listener

#

and registers it

fallow crow
#

that requires your stuff tho

#

doesn't it?

eternal apex
#

yeah but you wouldn't be doing it like that

#

you'd just be registering them manually

fallow crow
#

oh

eternal apex
#

register(new Listener1())
register(new Listener2())

#

etc

fallow crow
#
public class EventManager {
    private static final JavaPlugin VOUCHERS = JavaPlugin.getProvidingPlugin(Vouchers.class);

    public EventManager(List<Class> events) {
        for (Class event : events) {
            VOUCHERS.getServer().getPluginManager().registerEvents((Listener) events, VOUCHERS);
        }
    }
}```
#

but i realised

#

prob not good

sterile parrot
#

make a varargs method

fallow crow
#

oo oke

eternal apex
#

logic shouldn't be handled in the constructor

fallow crow
#
public class EventManager {
    private static final JavaPlugin VOUCHERS = JavaPlugin.getProvidingPlugin(Vouchers.class);

    private Class[] events;
    public EventManager(Class... events) {
        this.events = events;
    }
    
    public void register() {
        for (Class event : events) {
            VOUCHERS.getServer().getPluginManager().registerEvents((Listener) event, VOUCHERS);
        }
    }
}```
#

the cast ofc wont work

#

but u get my point

eternal apex
#

there's no reason not to directly initialize the listeners in that class

#
private static final Listener[] LISTENERS = {
    new Listener1(),
    new Listener2()
};```
#

be careful though

fallow crow
#

ahh I c

eternal apex
#

you're getting into semi static abuse territory

fallow crow
#

should I just not use static

#

and do in constructor

eternal apex
#

up 2 u

fallow crow
#

is that a good move?

eternal apex
#

a good move would be using guice

boreal escarp
#

lol

#

Pig is in love with guice

fallow crow
#

doesn't that add bulk

#

to the end jar?

eternal apex
#

that's not even a factor

#

should never exclude a library because of it's size

fallow crow
#

I don't like having a huge plugin jar

#

esp for those with crap internet

sterile parrot
#

it won’t get that huge

fallow crow
#
public class EventManager {
    private static final JavaPlugin VOUCHERS = JavaPlugin.getProvidingPlugin(Vouchers.class);
    private static final Listener[] LISTENERS = {
            new InteractListener()
    };

    public EventManager() {
        for (Listener listener : LISTENERS) {
            VOUCHERS.getServer().getPluginManager().registerEvents(listener, VOUCHERS);
        }
    }
}```
#

this gucci?

eternal apex
#

again, logic shouldn't be in the constructor

#

ever

fallow crow
#

wat

#

u said above, no?

eternal apex
#
PiggyPigletToday at 11:44 PM
logic shouldn't be handled in the constructor```
#

I did say above

fallow crow
#
public class EventManager {
    private static final JavaPlugin VOUCHERS = JavaPlugin.getProvidingPlugin(Vouchers.class);
    private static final Listener[] LISTENERS = {
            new InteractListener()
    };

    public void register() {
        for (Listener listener : LISTENERS) {
            VOUCHERS.getServer().getPluginManager().registerEvents(listener, VOUCHERS);
        }
    }
}```
velvet crescent
eternal apex
#

good

fallow crow
#

no

#

and ty

eternal apex
#

now, talk to someone slightly more experienced than me and double check if that's not static abuse

#

because I couldn't tell you

velvet crescent
#

oi

#

if it works it works GWcmeisterPeepoShrug

fallow crow
#

ye ima remove the static

pale grotto
#

@velvet crescent don't minimod

eternal apex
#

@pale grotto don't minimod

pale grotto
#

lol

fallow crow
#

tbh i dont need static

#
public class EventManager {
    private final JavaPlugin VOUCHERS = JavaPlugin.getProvidingPlugin(Vouchers.class);
    private final Listener[] LISTENERS = {
            new InteractListener()
    };

    public void register() {
        for (Listener listener : LISTENERS) {
            VOUCHERS.getServer().getPluginManager().registerEvents(listener, VOUCHERS);
        }
    }
}```
pale grotto
#

that was a chain reaction

boreal escarp
#

@eternal apex dont megamod

fallow crow
#

thats prob best way

#

@boreal escarp dont giganticmod

boreal escarp
#

Fair enough

fallow crow
#

rofl

#

didnt know another word

pale grotto
#

that was fun

eternal apex
#

vouchers should be static

pale grotto
#

although I think piggy is angry at me

eternal apex
#

it's a singleton throughout bukkit

fallow crow
#

oh

boreal escarp
#

Just as usually CoLe

pale grotto
#

just as usually

fallow crow
#
    @Override
    public void onEnable() {
        fileManager = new FileManager(this);
        voucherManager = new VoucherManager(fileManager.getVoucherConfigs().stream().map(FileConfigurationMapper::voucherMap).collect(Collectors.toList()));
        new EventManager().register();
    }```

```java
public class EventManager {
    private static final JavaPlugin VOUCHERS = JavaPlugin.getProvidingPlugin(Vouchers.class);
    private final Listener[] LISTENERS = {
            new InteractListener()
    };

    public void register() {
        for (Listener listener : LISTENERS) {
            VOUCHERS.getServer().getPluginManager().registerEvents(listener, VOUCHERS);
        }
    }
}```
#

bang tidy amirite piggy

pale grotto
#

your English is more broken then my car 😉😘

#

love u Gaby 💞

boreal escarp
#

p.p

eternal apex
#

yeah, that's fine

velvet crescent
#

than*

eternal apex
#

though, time for another cliff hanger

fallow crow
#

thanks for your help, I think ima take this plugin slowly

eternal apex
#

you'd be initializing that class via new, so might aswell pass the vouchers instance via dependency injection

sterile parrot
#

I wonder how spoof looks like internally

fallow crow
#

errrrr

#

LOL

boreal escarp
#

:))

#

bad

fallow crow
#

how would one do that pig

sterile parrot
#

he be selling it for loads, has a forum for ‘quality plugins’

#

xd

fallow crow
#

xd

jagged pollen
#

lol

fallow crow
#

spoof is nice money a month

#

just need to 10x what i have rn

#

and i be ballin