#general

3141 messages ยท Page 283 of 4

woven otter
#

@everyone

austere ivy
#

Be inclusive, think about the mexicans.

#

@everyjuan

worn ember
#

@everyoneexceptgayducks

austere ivy
#

(I'm legally allowed to make that joke as I'm hispanic)

worn ember
#

drops the n word
(i'm legally allowed to i'm white)

austere ivy
placid thicket
#

Almost rolled off bed and died. Yikes

#

Too late, u ded

austere ivy
#

I'm going to go drink some juice.

worn ember
#

Solid butter

placid thicket
#

In before pinged_villager

worn ember
#

why is that a thing

#

some nub fashion thing

#

i wanted that domain ;n;

placid thicket
#

Load time is horribe on mobile, wtf is that website

worn ember
#

i bet they didnt scale the images

#

lmao

#

nubs

austere ivy
#

I'm making a PollManager class which is in charge of creating Poll objects and keeping them in a list.

#

With the Poll objects, should I go further down the OO train and make the Option objects their own classes OR just save them as a hashmap with strings and integers with how many votes they have?

#

I'm feeling like Option objects would be nice as it's more explicit what they are, rather than just being strings.

wide chasm
#

What is the Option going to store? If it's just a String, it's not very useful creating another class for that imo.

austere ivy
#

A String, and the amount of votes it has.

#

Let me spit out some code, it's kind of a mess, I'm at a loss of how to do this best.

worn ember
#

i guess you could make a class for that

austere ivy
#

I feel like OO can be taken too far sometimes.

worn ember
#

probably cleaner than a tuple anyway

austere ivy
#

Making a class for eveeerrrything.

#

I don't want to fall into that trap because then it's harder to work with than not BUT I don't want to have a magic "tuple" list

worn ember
#

well it also makes it a lot more modular

wide chasm
#

If you're going to have useful methods in the Option class that you'd otherwise have an ugly Util class for or something, then I'd do it, otherwise I'd just leave the map there.

worn ember
austere ivy
#

Yeah.

#

Instead of having addVote() or setVotes() or getVotes() in the Poll class, I'll have it in the Option class.

woven otter
worn ember
#

wouldnt it be better to call it Vote then?

placid thicket
#

Exploding sheep?

austere ivy
#

So instead of addVote(String) where String is just the name of the option in the hashmap, it'll be

worn ember
#

or VoteOption

austere ivy
#

No because

#

I mean I guess

#

VoteOption sure

#

but I'm not making a new VoteOption class for each vote

pulsar wigeon
#

punching sheep before we could shear them?

woven otter
#

yes

#

no

#

I mean shearing sheep with punching

worn ember
#

wiz big doo doo ๐Ÿ’ฉ

potent halo
#

why are you exploding sheeps coopCry

pulsar wigeon
#

yes .-.

woven otter
#

im punching sheeps

austere ivy
#

ignore PollsManager.newPoll("MyPoll", new Option("ma m"))

pulsar wigeon
#

i mean vs the actual shears tool

placid thicket
#

๐Ÿ‘

austere ivy
#

I was just thinking about syntax.

pulsar wigeon
#

which uh...didn't come til like beta 1.7 or 1.8 or something

woven otter
#

could be

void void
austere ivy
#

That's one issue with having an Option as a class, instead of being able to do newPoll("pollName", "option1", "option2")

#

you have to do

#

newPoll("pollName", new Option("option1"), new Option("option2");

wide chasm
#

You could still have what you have now, but just wrap that to an Option thing internally.

placid thicket
#

When sheep were only good for one set of wool then had to be purged

austere ivy
#

however I suppose I could handle that in the constructor..

worn ember
austere ivy
#

Odd Objects

#

a Java Series

worn ember
#

Optional Development

placid thicket
#

Strange events sounds like a stranger things knock off

worn ember
#

its some horror movie lol

#

didt watch it tho so idk

limber knotBOT
fleet nacelle
austere ivy
#

ah hek I have to deal with players too

#

I can't just let players add votes indefinitely

golden gust
#

See, thefuck is too slow for day to day usage for me

austere ivy
#

so Option will have to store a list of players I guess?

golden gust
#

But, if it wasn't...

austere ivy
#

Okay

#

so I

upper flicker
#

Rewrite the thefuck in rust

austere ivy
#

I am going way too OO for this I think

upper flicker
#

//todo

austere ivy
#

because then I need to store votes COMBINED with player

#

so should I just make HashMap<CommandSender, int> of votes?

#

OR COULD I make a Vote object..

#

hmm

#

PollManager managing Polls which manage Options which manage Votes

#

now this is true OO

#

This is one part I think I'd like more about functional programming, is you don't have to deal with behavioral issues like this.

#

You just do whatever gets the job done.

#

Passing stuff around as raw data instead of objects containing objects containing objects dealing with objects seems nicer.

#

In some ways it ISN'T nicer, but in some ways like this, it makes it almost simpler to deal with.

potent halo
#

ew dont store commandsender

acoustic pilot
#

daaamn lol, after seeing the new information released by swedish prosecutors, gonna say Rocky deserves some prison time.

austere ivy
#

@sturdy inlet I can't have people just adding votes

#

if I don't store commandsender (or player) then I won't be able to track the votes.

#

I mean

#

I guess I can store UUID

#

but I need to somehow track something that can be used to .. track, the players

wide chasm
#

You need a Poll interface with a PollImpl, with a Vote and VoteImpl and an Option and OptionImpl, then factories: PollFactory, VoteFactory and OptionFactory, all with managers, because why not: VoteManager, OptionManager and VoteManager and the factories can't just create the objects on their own, no, no, no, VoteFactoryImpl, PollFactoryImpl and OptionFactoryImpl. Now this. This is art.

austere ivy
#

if I don't then every time they do /vote <poll> <option> they'll add a new vote.

#

oh gosh

#

no no no stef

#

no nO NO NO

acoustic pilot
#

Need a ManagerFactory interface for each manager and a corresponding ManagerFactoryImpl too

austere ivy
#

๐Ÿ‘€

golden gust
#

This is why people fucking hate java dev

#

lol

wide chasm
#

Oh, yes, of course. Can't just make those normal classes, everything needs to extend and implement something.

austere ivy
#

I never really understood plugins that have an interface for EVERY

#

SINGLE

#

OBJECT

acoustic pilot
#

lol

pulsar wigeon
wide chasm
#

Then you can switch the interface if needed, or override it.

austere ivy
#

It's like NOT EVERYTHING needs to have an interface. Unless it's an API or you're passing things around constantly and you need a "contract", UGH more work

acoustic pilot
#

Enterprise Java has an aversion to concrete classes.

#

It's wild.

wide chasm
#

For multi-platform plugins it's definitely useful to have interfaces with an impl per platform.

#

For everything else though... idk?

golden gust
#

Somebody was saying how our moderation is pretty tolerant

#

I just clicked the pins

#

๐Ÿ˜„

austere ivy
#

Paper's moderation?

wide chasm
#

My plugin has a RegionFactory, Region and WorldEditRegion, btw because the class loader loads every class a class uses on load and it messes with the soft dependency ๐Ÿ˜ฆ

austere ivy
#

When's the next pinned message gonna be?

pulsar wigeon
#

stop doing retarded things with classloaders then

#

:<

wide chasm
#

I haven't changed the class loader

#

That's just Bukkit's class loader.

austere ivy
#

I haven't even touched ClassLoaders yet

#

bleeggh

pulsar wigeon
#

??

#

do you have your soft-dependency tightly coupled to the rest of your code?

acoustic pilot
#

Class loading in Java is cool but can be quite a headache

austere ivy
#

then that's a dependency

pulsar wigeon
#

you shouldn't have to do any of that

austere ivy
#

It's a soft dependency that makes the plugin not work if you don't use it.

#

:weSmart:

acoustic pilot
#

Couldn't your soft dependency integrations be automatically enabled when it detects the dependency is enabled? Not sure what the issue is atm

wide chasm
#

I have a method in Region for saving it as a schematic. I use WE for that. but, if I have that method in my normal class and the dependency isn't there, then it fucks up.

pulsar wigeon
#

pull it to another class

wide chasm
#

Saving schematics is a minor part and disabled when WE isn't there.

#

I did, hence WorldEditRegion.

pulsar wigeon
#

why regionfactory and region then

worn ember
#

My plugin has a RegionFactory, Region and WorldEditRegion, btw because the class loader loads every class a class uses on load and it messes with the soft dependency ๐Ÿ˜ฆ

pulsar wigeon
#

you should only need one class to interface with WE

worn ember
#

i legit thought he was meming

#

lol

wide chasm
#

Region is for when WE is absent and RegionFactory because I don't want to check every time which one to pick when creating a Region.

acoustic pilot
#

so it's a stub

worn ember
#

also why dont my quotes work smh

pulsar wigeon
#

oh, so your own region class

wide chasm
#

Yes, not WE's.

pulsar wigeon
#

thought you were wrapping WE's region class

wide chasm
#

Should have specified that

#

If the classes a class uses were only loaded once that code is actually called, I could've just put it in the same class.

#

But apparently that isn't what happens.

wide chasm
#

Due to defineClass in Bukkit's class loader iirc.

#

Or whatever it was called. Was some native method.

pulsar wigeon
#

wat

#

bukkit doesn't have native code

wide chasm
#

No, defineClass is Java.

pulsar wigeon
#

yea

#

oh

#

you mean in the java classloader that bukkit uses

wide chasm
#

Yes

pulsar wigeon
#

thought you mean like, in PluginClassLoader

#

that they were doing something non-standard

wide chasm
#

Nah, nothing non standard, I just didn't know it worked that way.

austere ivy
#

.wa cos(2^128-1)*32)

pulsar wigeon
limber knotBOT
austere ivy
#

huh

pulsar wigeon
#

reminds me i need to write API docs for WE still

austere ivy
#

I think I messed up the parenthesis on that

#

I'll write the API docs :D

pulsar wigeon
#

got pretty burned out after re-writing all the other docs in the space of a few afternoons

#

will do api some other time

#

ยฏ_(ใƒ„)_/ยฏ

wide chasm
#

Docs should be written before the code because the code should reflect the documentation

#

But, yeah docs is annoying.

pulsar wigeon
#

that sounds like a load of bs

worn ember
#

auto generate docs using NN

#

๐Ÿ‘€

austere ivy
#

That's a very useful thing, stef

upper flicker
#

There are some projects where that make sense and I can kind of see it

austere ivy
#

Sometimes I overengineer things or underengineer it but the end result is all that matters and sometimes you lose sight of it

upper flicker
#

APIs certain public facing libraries sure

#

Plenty of other stuff doesn't really make sense

austere ivy
#

Same with Minecraft mapmaking, you can overengineer stuff so much but sometimes people won't even notice it

wide chasm
#

I have written docs once before the impl and it was kinda nice, but that was only like one method. But the entire codebase, ehh.

acoustic pilot
#

Tests instead of docs is probably more applicable

#

To that quote

pulsar wigeon
#

yea you can't really plan ahead for a whole api like this tbh

worn ember
#

imagine writing tests

pulsar wigeon
#

a lot of the problem is also that java doesn't have internal

wide chasm
#

Imagine not having 100% coverage /s

acoustic pilot
#

Ah, the good old 100% coverage trap.

worn ember
#

just let people report bugs so you can release updates and look smart

pulsar wigeon
#

so either you fuck up your organization structure and don't use packages correctly, or everything shared is "public" if it's not supposed to be public facing API

wide chasm
#

"Hey I found a bug"
"Impossible, we have 100% coverage"
closes issue

acoustic pilot
#

You waste SO MUCH time trying to get that meaningless 2% coverage ๐Ÿ˜›

wide chasm
#

An internal keyword would be super useful.

acoustic pilot
#

But at least tests are a more functionally useful tool for designing API than pre-writing docs, IMO

worn ember
#

looks at C#

wide chasm
#

I guess Java 9's modules kinda helped some of that, didn't it?

pulsar wigeon
#

did it?

#

i wouldn't know, MC world still on java 8

worn ember
#

i havent even installed anything other than j8

acoustic pilot
#

Java 8 forever

worn ember
#

+1

wide chasm
#

I think that if you have two modules they can't interact with each other even if public, unless you specify it explicitly.

acoustic pilot
#

Good thing it'll be supported for a while across various vendors ๐Ÿ˜›

austere ivy
wide chasm
#

But, haven't done too much with modules, so I'm not sure on that.

pulsar wigeon
#

i have java11 installed somewhere, but yea i exclusively use java 8 still

worn ember
#

thats italic poop

wide chasm
#

I use Java 11 for non api, Java 8 for api. Java 12 to run.

pulsar wigeon
#

๐Ÿคข

acoustic pilot
#

Using non-LTS as a production runtime

#

lol

worn ember
#

i use J5 in class

pulsar wigeon
#

you clearly aren't working on the same scope as some of us

acoustic pilot
#

I can hope it's not production at least ๐Ÿ˜›

wide chasm
#

Everything on my pc is testing

pulsar wigeon
#

i wouldn't hear the end of it if worldedit couldn't be compiled without j11

slow rain
wide chasm
#

Also I just push Java 11 on everyone. If they then don't want to use the plugin anymore, fine, not my problem.

pulsar wigeon
#

well, idk what your plugin is but clearly ๐Ÿšฎ

wide chasm
#

๐Ÿ˜ฆ

acoustic pilot
#

Paper runs fine on Java 11 so why not

wide chasm
#

Well, yes the code is ๐Ÿ’ฉ

worn ember
#

lol

austere ivy
#

Wiz do you own a server?

worn ember
#

i cant even find an JDK/JRE for j11

pulsar wigeon
acoustic pilot
#

how can you not

austere ivy
#

adoptopenjdk

acoustic pilot
#

there are so many choices

austere ivy
#

AH beat me to it

wide chasm
#

Tbh I'm not gonna wait around until Java 20 to use Java 11 because people can't be bothered to update from Java 8.

worn ember
#

if only they made it easier to update

austere ivy
#

Minecraft still uses Java 8.

#

Tekkit doesn't even run on anything ABOVE Java 8.

worn ember
#

Tekkit is legacy at this point

austere ivy
#

If you only have Java 11 and are wondering how Minecraft can work, it's because they bundle their own version in with it.

pulsar wigeon
#

well, mojang can't be bothered to update either

vestal jasper
#

Isn't tekkit still on 1.6.4?

pulsar wigeon
#

remember that mojang bundles their own runtime with the client

worn ember
#

they rather break stuff

wide chasm
#

Minecraft would probably mostly be fine with Java 11

austere ivy
#

Tekkit Launcher.

worn ember
#

QA? hmm

#

nope

austere ivy
#

Technic Launcher sorry.

pulsar wigeon
#

MC is not fine with J11 lol

austere ivy
#

Would it be hard to migrate a codebase from J8 to J11?

upper flicker
#

Minecraft does work fine with 11

#

Use it all the time

austere ivy
#

What differences are there from J8 to 11?

pulsar wigeon
#

well, the DFU code aikar said he copied from decompiled MC sources wasn't

acoustic pilot
#

Paper had to make some minor changes for it, right?

worn ember
#

read the changelog

wide chasm
#

Migrating a codebase from Java 8 for Java 11 was setting the compile target from 8 to 11 for me @austere ivy

pulsar wigeon
#

possibly they changed it since then

acoustic pilot
#

But yeah otherwise no biggie

upper flicker
#

Paper had to make some changes because timings used an internal method

pulsar wigeon
#

but simple things like LogManager.getLogger() don't work on java 11

worn ember
#

whats the point then

pulsar wigeon
#

you need to specify LogManager.getLogger(Whatever.class)

#

since Reflection#getCallingClass is F

worn ember
#

can we get an F in the chat

austere ivy
#

OK why doesn't Mojang update it to J11?

#

Seems easy.

upper flicker
#

No reason to?

vestal jasper
#

Sys requirements prob

#

And that

worn ember
#

lol wut

acoustic pilot
#

Because 8 works and they've already got years of QA on it?

wide chasm
#

Java 8 to Java 11 didn't change that much, main thing I use is the var keyword.

worn ember
#

QA lol

#

nice joke

vestal jasper
#

QA

acoustic pilot
#

As in it's battle-tested

pulsar wigeon
#

yes, QA

#

as in millions of players using it for years

worn ember
#

did you mean the battle update?

pulsar wigeon
#

not as in internal QA

wide chasm
#

Java 11 to Java 14 would have a nice switch expression thing though.

worn ember
vestal jasper
#

they don't even see if the game runs the fuck you mean QA

acoustic pilot
#

people using your product is a form of QA

worn ember
#

Test 1/1 passed. GameStarts

acoustic pilot
#

not the kind you want

#

but the kind im talking about

slow rain
#

Hey bit off topic but is anybody here any good at diagnosing problems with low server tps and timings reports?

pulsar wigeon
#

lots of game developers use this type of QA these days tbh

#

just look at blizzard

#

:^)

#

small indie companies

worn ember
wide chasm
#

Unit Integration Community tests

worn ember
#

post your timings there

austere ivy
#

or just post your timings here

worn ember
#

and people will help you

austere ivy
#

it's not like a bit more spam would hurt #general

#

silly

worn ember
#

i want to work on my magic wands plugin but i hate doing math with particles lol

#

someone buy it off me ktnx

wide chasm
#

Is it a comission?

worn ember
#

no

#

its OS

austere ivy
#

I'll fork you

worn ember
#

i'll spoon you

wide chasm
#

There's a delete repo button in the settings somewhere

austere ivy
#

Make my own better magic wands plugin >:)

worn ember
#

idk if the code is up to date tho

#

or even usable lol

austere ivy
#

NOT BEFORE I GET MY HANDS ON IT

#

dadadadada

#

race to the fork

#

is your name nathan something

#

nathanwolf

slow rain
#

Thanks for your help guys, apparently I have too many entities. Anybody know of a way to clear all server entities?

worn ember
austere ivy
#

it's joshua

wide chasm
#

Capital in package smh

austere ivy
#

dududududududu

worn ember
#

what?

austere ivy
#

dadaddadadada

#

race race race

#

I'VE FORKED IT

#

Forked it before you deleted it >:)

wide chasm
austere ivy
#

tsk tsk tsk

#

Wait what's

#

Oh yeha, no caps in events.

#

Er..

#

No caps in packages, else it could be confused for a class.

worn ember
#

ยฏ_(ใƒ„)_/ยฏ

#

no?

#

it starts with lower case lol

austere ivy
#

mmmmhm

#
  1. Gradle, ew.
worn ember
#

gadle is bae

austere ivy
#
  1. Gradle,ew, gradleew, gradlew
#

gadle

wide chasm
#

You should probably run now

austere ivy
wide chasm
#

Because people probably will hate you for hating on Gradle.

worn ember
#

stop bullying me for my dissability

austere ivy
#

Why is the version STILL on 0.0.1

worn ember
#

i will report you to the CIA

austere ivy
#

WHY IS YOUR PACKAGE

#

me.darkeyedragon.magicwands.Magicwands

#

CamelCase for class names, ALWAYS

#

:(

#

:(

acoustic pilot
#

You mean the FBI?

austere ivy
#

Wait what.

#

What is this?

worn ember
#

no

acoustic pilot
#

The CIA is in the business of overthrowing governments

worn ember
#

CIA

austere ivy
#

Why can't I do a >:( face

#

:(

vestal jasper
worn ember
#

my naming isnt every consistent

austere ivy
#

Discord has greentext now!? :D

worn ember
#

:))

austere ivy
#

That's very cool.

#

Triple greentext.

#

Or just.. one, that's cool too.

worn ember
#

why is it named greentext?

#

its literally white

vestal jasper
#

.

austere ivy
#

It's just the format.

vestal jasper
#

Please be joking

merry talon
#

brian doesnt even know

#

lul

worn ember
#

sounds like orange book and red book

placid thicket
#

text isn't green tho?

worn ember
#

smh

austere ivy
#

or quotes

#

quote

#

embeds

#

something something

#

I'm code reviewing for Josh now leave me alone for a moment >:(

worn ember
#

Orange-Book-Standard (Az. KZR 39/06) is a decision issued on May 6, 2009 by the Federal Court of Justice of Germany (German: Bundesgerichtshof, BGH) on the interaction between patent law and technical standards, and more generally between intellectual property law and competi...

placid thicket
#

spacing?

vestal jasper
#

Yeah dark is joking. Mfw I almost fell for the bait.

wide chasm
#

I already did the code review 6/10

worn ember
#

๐Ÿ˜ฆ

#

still passed

static badge
#

greentext

merry talon
#

no one here knows

#

LUL

static badge
#

not green

austere ivy
#

Stef want to do code review for me?

worn ember
#

i think ima just trash it

#

and start over

wide chasm
#

Sure, if you share the code

austere ivy
#

Hmm it's closed source.

#

It's the code for my server's plugin.

wide chasm
#

If it's on GitHub as private could add me to it. Or just show it in a DM.

austere ivy
#

Should that even be closed source?

wide chasm
#

I'd always go for open source, but it's your code.

worn ember
#

delete it

#

so no one can see it

austere ivy
#

Even if it's for my server?

worn ember
#

i mean, lets be honest

acoustic pilot
#

"do I care if people take my code and use it on their server?"

worn ember
#

who cares about your server

acoustic pilot
#

I mean you can answer that question yourself.

austere ivy
#

I mean I guess not.

acoustic pilot
#

Don't need us to

austere ivy
#

Some of the commit messages are silly though so just ignore those alright?

#

I started coding this when I didn't have any knowledge OF coding plugins so I never planned on it being bigger.

worn ember
#

then you probably shouldnt ask him to review it lol

wide chasm
#

It's just the commit message, not that big of a deal imo.

#

It's nice if it makes sense, but the code itself is more important imo.

austere ivy
#

Go easy ;c

acoustic pilot
#

omfg worst plugin ever and i havent even seen it yet

worn ember
#

SO BAD OMG

#

KILL IT

austere ivy
#

IT'S GOING BACK TO PRIVATE

worn ember
#

how many players do you have?

austere ivy
#

I've been doing a complete recode of it.

acoustic pilot
#

doesn't look that bad

austere ivy
#

Barely any, just me my friends and some other random people, it's still in development.

#

Not I HAVE been doing a complete recode, but I have been CONSIDERING.

acoustic pilot
#

i've seen garbage that is 100x worse than this (that is to say, this isn't necessarily garbage, it's alright)

#

but something like ASkyBlock is just, infinitely trashier lol

#

this is pretty good for something self-taught early on

worn ember
#

god tier programming coming through

acoustic pilot
#

Seems readable, uses widely accepted code formatting, classes are small

worn ember
#

small classes mean small pp

acoustic pilot
#

Not a big fan of statics out the ass, but it's your preference. You may find that outside of the Bukkit world though, it's very much frowned upon

austere ivy
#

I donโ€™t like it.

#

Thatโ€™s one thing I want to reduce is the amount of static I have going on.

#

Especially with the Util package.

worn ember
#

dependency injection is so annoying though

#

:))

static badge
#

util is generally static

acoustic pilot
#

In order to test statics, you have to do some insane hackery in Java with tools like PowerMock, which can't even fully test some static situations IIRC, but in Bukkit testing is very uncommon

austere ivy
#

I just find it hard to separate something so functional and method based (Bukkit) and turn that into something that works with classes.

#

Like am I supposed to replicate my server (in the form of say, PlayerData, that kinda stuff) in objects and then handle it that way?

acoustic pilot
#

sure, you can do that

austere ivy
#

It just seems hard to create objects of things, since everything you actually do is simply player.doThis(), doThat(); you know?

acoustic pilot
#

If you have data that is specific to a player in your plugin, you can create a PlayerData object or some other object to represent that state.

worn ember
#

you can make a wrapper that takes a player object and add more fields

acoustic pilot
#

It's like having a special type of Player for your plugin

austere ivy
#

Like instead of PianoManager holding a list of players that have Piano enabled, I have PlayerData and then it has fields which say if they have Piano enabeld?

#

enabled?

acoustic pilot
#

yes, exactly

austere ivy
#

I can see that, that might be more OO and easier to work with perhaps.

#

Here's an issue though, how am I supposed to get the PlayerData instance from just an instance of Player?

#

Should I have a static PlayerData.getFromPlayer(Player player) kind of thing.. or..

#

UUID lookup?

acoustic pilot
#

plugin.getPlayer(UUID) or plugin.getPlayer(Player) maybe

#

Or something similar

austere ivy
#

I'm trying to stay away from databases as long as I can, because I tried implementing MongoDB but it was not very fun dealing with async stuff and databases and DatabaseManager and stuff.

acoustic pilot
#

MongoDB is particularly well-suited for most kinds of plugin data, actually.

austere ivy
#

That's why you'll notice I'm using statistics for the (barely implemented) Ontime instead of storing their ontime somewhere else.

worn ember
#

relational db or riot

woven otter
#

wow

#

what a read

acoustic pilot
#

Notice how a lot of plugins store their data in document-fashion on disk, whether it's YAML or JSON?

#

This is such a common theme in plugins

#

And Mongo was designed for exactly that kind of data

worn ember
#

sqlite hyperthink

austere ivy
#

Yeah. Huh okay.

wide chasm
#

Could have added the GameMode as paramatar, I think acf should understand that and work from there (reduces it down to one method for all three)(https://github.com/ItsTehBrian/TFCPlugin/blob/master/src/main/java/com/outlook/tehbrian/tfcplugin/commands/GamemodeCommand.java)

Can extract the millisPlayed here (https://github.com/ItsTehBrian/TFCPlugin/blob/master/src/main/java/com/outlook/tehbrian/tfcplugin/commands/OntimeCommand.java)

You can extract the code in here to one method and call it for each event. (https://github.com/ItsTehBrian/TFCPlugin/blob/master/src/main/java/com/outlook/tehbrian/tfcplugin/events/AntiBuildEvents.java)

Too much nesting here, try to return when a condition is false, instead of nest when it's true. (Can be done for some other stuff as well, but this is the worst one)(https://github.com/ItsTehBrian/TFCPlugin/blob/master/src/main/java/com/outlook/tehbrian/tfcplugin/events/BuildingEvents.java)

I don't really see the use of this, why not just use Bukkit's sound class? (https://github.com/ItsTehBrian/TFCPlugin/blob/master/src/main/java/com/outlook/tehbrian/tfcplugin/piano/PianoSound.java)

I'd avoid the boxed classes here and just set them to the standard by default .(https://github.com/ItsTehBrian/TFCPlugin/blob/master/src/main/java/com/outlook/tehbrian/tfcplugin/util/ItemBuilder.java)

But this is far better than you made it out to be though, so good job.

austere ivy
#

I've been tempted to store data in .yml, but I havne't done that.

wide hazel
austere ivy
#

๐Ÿ˜…

acoustic pilot
#

Damn this man, doing an essay lol

austere ivy
#

Let me read through your messages.

acoustic pilot
#

But yeah criticism is good

wide hazel
#

@cosmic raft will murderfy you

austere ivy
#

Yeah egg is that a bad thing?

#

It (was) a private repo though ._.

woven otter
#

anyone want to do a code review feelsThinkingMan

austere ivy
#

so I didn't have to worry about collaborating

acoustic pilot
#

It's OK to commit .idea folder, btw

#

Don't listen to the haters

#

Not everything in .idea should be committed, though

worn ember
#

commit .certs too btw

#

and .passwords

#

who was it that i installed that random certificate from?

woven otter
#

or discord bot tokens feelsSadMan

worn ember
#

was it you byte?

acoustic pilot
#

Personally I only commit .idea/codeStyles but there are other things you could commit that could be useful

austere ivy
#

Stef, for that first one, how would I do things like @CommandAlias("gms") for each one?

tranquil bone
#

I'm going to quote something our developer has said, I am wondering if this is true and if so has this been fixed in paper? If not I would like to make a report on it to help out

wide chasm
#

I thought acf accepted the ones you specified, Brian, but if not, could maybe write your own thing for it?

acoustic pilot
#

I do not remember giving anyone a random certificate to install lol

austere ivy
#

I want people to do /gms, /gmc, /gma, IN ADDITION to being able to do /gamemode 0, /gamemode s, /gamemode survival.

#

Hm ok.

wide chasm
#

Oh, /gms etc as well

#

What you have would be /gm s, wouldn't it?

austere ivy
#

What do you mean by extract the millisPlayed here? Store it somewhere else?

wide chasm
#

No, just move it before the if/else

austere ivy
#

Ah okay, but then

#

I'm doing a different thing for each

#

How would I do that? It depends on whether it's targetting a different player or not?

wide chasm
#

I'd move the player above as well and just make one target player.

austere ivy
#

But then if you do /ontime for yourself it wouldn't work, right?

worn ember
austere ivy
#

Or how should I do this

wide chasm
#

Player targetPlayer = target == null ? player : target.getPlayer()

austere ivy
#

Ooooh, gotcha, thanks that's a good idea.

pulsar wigeon
#

nice token pigeonboy

austere ivy
#

I can use that in a LOT more places now that I realized that.

wide chasm
#

Not correct what I wrote, but you get the idea.

austere ivy
#

Well, you realized that, sorry ๐Ÿ˜…

#

Yeah.

woven otter
#

yeh wiz that was a sad day

worn ember
#

did anyone abuse it?

woven otter
#

abuse what

worn ember
#

your mom

woven otter
#

ur retarded

austere ivy
#

Stef, for the third thing, should I put that method in a util class or should I keep it in the AntiBuildEvents class?

worn ember
#

the token u duckshit

wide chasm
#

I'd keep it in the same class.

woven otter
#

nah because I instantly generated new one and the old one was invalidated

austere ivy
#

That makes more sense for me since it's closely related, but I'd imagine some people would say that's bad practice since it's not strictly an event.. or is it fine?

worn ember
#

Anyone want nitro?

woven otter
#

yes

worn ember
#

then buy it

woven otter
#

no

#

gift it to me

wide chasm
#

It still handles the event, so I'd say it's fine there.

worn ember
#

i already gave you 3$ for nothing

#

so get of my lawn

wide chasm
#

It just isn't called by Bukkit's event stuff.

austere ivy
#

OK.

#

With nesting, I'd just like to say, I guess I kinda code in the way that I would speak to someone.

woven otter
#

give me 7$ more so I can buy nitro

austere ivy
#

I wouldn't say "If a player isn't sneaking, go away. If a player isn't holding down a button, go away. Then, make the player fly up in the air." I'd say "If a player is sneaking, and the player is holding down a button, make the player fly up in the air."

#

But I guess for readability, you're right, it is kinda bad practice.

worn ember
#

i dont think the server knows what button you're holding down

#

that'd be kinda messed up lol

wide chasm
#

Yes, mainly if you need something after one of the ending braces, it's hard to tell after which if you're actually doing that.

austere ivy
#

That makes sense.

wide chasm
#

"Am I after this if statement or this if statement", you wouldn't have that if you returned early.

austere ivy
#

So instead of..

#
if (player.isSneaking()) {
    if (player.isPlaying()) {
        if (player.isPotato() {
            if (player.isNice() {
                doStuff();
            }
            return "Yay!";
        }
    }
}

I'd just have..

if (!player.isSneaking()) {
    return false;
}
if (!player.isPlaying()) {
    return false;
}
if (player.isPotato() {
    if (player.isNice() {
        doStuff();
    }
    return "Yay!";
}
#

?

wide chasm
#

Yes

austere ivy
#

OK makes sense.

#

Ah, for your fifth one.

#

ACF's tab complete auto registers it if you have an Enum.

#

I don't want players to be able to play any sound (then they'd be able to play music discs and annoying stuff) so I limited to only the BLOCK_NOTE_ sounds.

wide chasm
#

Oh, you're using it for ACF. Then it's fine imo.

austere ivy
#

Is there a better way of doing that..?

#

For your last one, can you explain what you mean?

#

Boxed classes?

wide chasm
#

Boxed classes are Integer, Double, Boolean etc. instead of the normal primitives, int, double, boolean etc.

austere ivy
#

Ah!

#

Okay I'm pretty sure I did that so I can pass in null but should I change it?

worn ember
#

(they like using complicated names for simple stuff)

wide chasm
#

I would change it to the normal primitives and then set them to the default value by default. So you make amount an int and set it to 1, same for the others. That way you don't have to check for null and can directly apply them on the item stack.

austere ivy
#

Hey that makes a lot of sense!!

#

In ConfigUtil I had this bit, and for some reason my plugin is really disagreeing with default config values.

#

so I had to use item.isSet("amount") ? item.getInt("amount") : 1, instead of item.getInt("amount", 1)

tropic flame
#

so apparently discord has this interesting look for greentext

austere ivy
#

If you want I can link to the Discord messages on that whole debacle, but anyway, it's super annoying because I think ItemStacks should have an amount of 1 on default but hey now I realize why.

tropic flame
#

> greentext

#

greentext

austere ivy
#

Thanks a bunch that's so silly why I didn't do that.

tropic flame
#

except it's not green

pulsar wigeon
#

you're late

tropic flame
#

yes I am

pulsar wigeon
#
greentext
austere ivy
#

OK let me change a bunch of stuff thank you so much for those criticisms it helps a lot.

wide chasm
#

I have seen those messages about the default values btw, don't know why it doesn't work correctly.

tropic flame
#

I thought it was an embed and that people were self-botting

austere ivy
#

I don't either, but I did do some experimenting and I think I found out the cause.

pulsar wigeon
#

yes, everyone decided to start self botting today

austere ivy
#
private void setupConfig() {
        getConfig().options().copyDefaults(true);
        getConfig().options().copyHeader(true);
        saveDefaultConfig();
    }
#

I have that in my onEnable() and if I remove copyDefaults, it works just fine.

#

But you see in my ConfigParsers (I think I'll rename it to ConfigUtil) how I have the getPage method?

#

pages.getKeys(false).size() completely messes up if .options().copyDefaults() is set to false.

#

It only shows the size it's loaded almost.

#

So if you do (for example) /rules 1, it shows Rules | Page 1/1, then /rules 2, it shows Rules | Page 1/2, then you do /rules 1 again, it shows Rules | Page 1/2

#

It's really weird stuff.

#

Only loading in the keys when it's specifically asked for or something like that I'm guessing.

static badge
#

you really don't need those first two lines

austere ivy
#

So I just decided on keeping copyDefaults() and having the good pages.getKeys(false).size() functionality rather than having defaults working I suppose..

#

but it seems really hacky and messy and I'd like to get to the bottom of why it's acting so weird.

worn ember
#

you saw it here first folks

#

frick

#

hmmm

pulsar wigeon
#

nice coverup

limber knotBOT
#

IRC never forgets

worn ember
#

i bet IRC doesnt see this though feelsChockingMan

austere ivy
#

Oh yeah, with an open source plugin, how would I do MongoDB and not share the database code?

#

Get it from a yaml config that I keep separately?

wide chasm
#

The database code entirely, or just the password to the database?

worn ember
#

you could pull it from a config or something

#

and not include the config

austere ivy
#

Password to the database.

#

Oh, I'm trying to extract from AntiBuild. I'll have another method and pass through the event from there?

#

PlayerEvent, that is?

wide chasm
#

Yes

austere ivy
#

What about the things like EntityDamageEntity, should I cast to a player event?

#

Or should I, in the method, collect all events and cast to a player event there somehow?

#

ahg, PlayerEvent doesn't have setCancelled, it's specific per event.

wide chasm
#

Oh yeah Bukkit's event system is stupid. Ehm, use the lowest possible. If it doesn't work out, then I guess just keep it there.

austere ivy
#

So I guess I just kinda have to keep it the way it is?

#

I can't put the setCancelled in a more generic method, it's per event only..

acoustic pilot
#

A rare sight for New York, indeed lol

austere ivy
#

Only thing I could put in a method is the player.sendMessage() but that's kinda useless, I don't know.

#

What do you think I should do?

acoustic pilot
#

Helen carried the sandwiches on her lap throughout her flight from San Diego to JFK Airport, but after landing, she ran to catch a bus for home and ended up dropping one Double-Double on the road.

wide chasm
#

Keep it like it is now, I suppose.

acoustic pilot
#

(the confusion is that In-N-Out is almost strictly a California burger chain, you won't find it in New York or on the east coast anywhere)

worn ember
#

@upper flicker if i rewrite paper downloader in C you better use it

tropic flame
wide chasm
#

Actually, you might be able to specify a <T extends PlayerEvent & Cancellable>, set T as parameter and work from there. Would have to try though, can't really tell you from the top of my head if this would work.

austere ivy
#

so..

#

void onAntiBuild<T extends PlayerEvent & Cancellable>(Event T)

#

?

#

Sorry I'm not very used to generics.

wide chasm
#

No, it would be along the lines of:

public <T extends PlayerEvent & Cancellable> void methodName(T event) {

}```
I think.
austere ivy
#

Ah OK.

#

It works!

void void
#

I remember back when I thought that turning off my wifi on my computer would stop a ddos attack

#

and that software ddos protection on windows would work

#

those were the days lol

austere ivy
#

So what we're doing is upcasting, right?

#

Making a more specific class into a less specific one?

#

Or is that downcasting.

#

I think that's upcasting, anyway, it's working!

wide chasm
#

You're downcasting cause the event class is more specific then the T is.

austere ivy
#

Oh okay.

#

Alrighty well what should I do about the ones that don't fit PlayerEvent?

quasi canyon
#

In your opinions, how many blocks big of a map would you have (world border) for a server that averages 50 people on at once and around 100 a day? think

austere ivy
#

Such as BlockBreakEvent..

#

That's kind of silly, if BlockBreakEvent has getPlayer() why doesn't it extend PlayerEvent, hm.

wide chasm
#

Because it extends BlockEvent already.

austere ivy
#

Yeah, what a shame you can't extend two classes. That'd be complicated to work with though.

potent halo
#

you changed name again

wide chasm
#

That's one of the issues with the current event system imo, the PlayerEvent, BlockEvent etc. should've been interfaces.

austere ivy
#

Maybe if PlayerEvent was an interface, but anyway, what should I do with those, any ideas?

wide chasm
#

Could make another method and change it from PlayerEvent to BlockEvent, but it's only two methods that use BlockEvent in this case, so I understand it if you just keep them like they are now.

austere ivy
#

That, and also..

#

HangingBreakByEntityEvent is also kind of complicated.

potent halo
#

if you ever need, you can also make your own classe that extends an existing Event class

wide chasm
#

I'd leave the others like they are now though, iirc there's only one hanging event handler.

potent halo
#

PlayerEvent is abstract, didnt need to be an interface

#

it contains the things that all inheriting events use, like the Player variable

placid thicket
wide chasm
#

Yes, but now you can't make an event both be a BlockEvent and a PlayerEvent.

limber knotBOT
#

(DiscordBot) Windows things : ProgrammerHumor - 0 comments, 1 point - kurdy, 6m ago

potent halo
#

I see what you mean

wide chasm
#

Which is desirable in this case, since there are events that are both block and player related.

worn ember
#

stupid question. i guess its not possible to run an ide through SSH in linux?

#

or well, properly interact with it

potent halo
#

I dont see why you need an event to be both tho

#

I didnt read all the conversation

wide chasm
#

Because there are block events that now just have a getPlayer method without being a PlayerEvent. This complicates stuff, cause I can't downcast the event to a PlayerEvent, and thus can't easily get a player from all types of player related events (because not all player related events extend PlayerEvent).

potent halo
#

do like everyone and listen to all events that you need?

#

I've listened to multiple block and player events for PlotMe back in the day and I understand your problems

wide chasm
#

Yes, but then you need multiple methods that essentially do the same, which leads to code duplication, reduces readability, etc.

potent halo
#

yes

wide chasm
#

It's the best you can though at the moment, but it would have been nice if the event system was done using interfaces, not abstract classes to begin with.

potent halo
#

Changing it now, after what 7 years might be too late :/

#

You could add interfaces wihtout breaking it tho mayhaps?

austere ivy
#

I still think that for 1.14, 1.13, 1.15, the bukkit API should be slightly rewritten.

#

It's been almost 10 years.

#

It's OK if a few breaking changes are made so that it better fits to the current state of Minecraft.

woven otter
#

too bad paper can't diverge from spigot

austere ivy
#

Sponge is a great project, don't get me wrong, but I don't think that we need an entirely new API from Bukkit just to make a better one.

shrewd token
#

Hey did you know server folders are coming to discord

void void
austere ivy
#

A few changes here and there, maybe ChatColor implemented a bit differently, would all be a very big help to plugin developers. Added to this, 1.13 had so many breaking changes already (Material enum for instance) that plugin developers needed to change their plugins anyway.

golden gust
#

Sponge isn't aimed solely at fixing bukkit

#

Part of their goal is supporting mods, which would require a substantial redesign of bukkit if you wanted to pull it off

wide chasm
#

While we're changing ChatColor, please rename it as well, thanks.

austere ivy
#

Yeah, I agree.

wide chasm
#

There are so many changes I'd make to the API, I don't think any plugin would still work if I introduced them tbh. But I think if you slowly start deprecating some stuff, introduce better stuff, the API would become a whole lot better than it is currently.

austere ivy
#

Nossr๐Ÿฆ† can you please put a this reaction to stef's message so I can put one too?

woven otter
#

someone should rename that disgusting translateAlternateColorCodes

austere ivy
#

Thanks.

potent halo
#

I added another this

#

mines animated

woven otter
#

I wonder why aliases to translateAlternateColorCodes haven't been introduced to Paper

golden gust
#

aliases are just pointless fluff

pulsar wigeon
#

yes, fluff should be pointy

#

so you can stab people with it

golden gust
#

Not entirely fond of some of the other dozen helper methods that have been added to the api, but stuff like that just breaks api compat with bukkit for no reason

#
fun String.translateColors(): @NonNull String {
    return ChatColor.translateAlternateColorCodes('&', this)
}
#

Then again :3

fallen oracle
#

Was there any new items intorduced in 1
14?

wide chasm
fallen oracle
#

Ty

woven otter
#

is that kotlin and why did you post that

fallen oracle
#

Yeah that's Kotlin

void void
#

poop

fallen oracle
#

Now just need a "Mark as Read" on fodlers

#

Folders

shell vine
#

is it safe to replace region files live if the area is unloaded

golden gust
#

Basically, "&3Test".translateColors()

austere ivy
#

Electronic how would you do that in regular Java?

woven otter
#

that reminds me of Manifold

austere ivy
#

And does that compile to

golden gust
#

You can't

austere ivy
#

translateColors("&3Test")

golden gust
#

Basically, for the JVM, kotlin turns that into a static helper util type method

austere ivy
#

That's what I thought

#
public static String color(String string) {
        return string == null ? null : ChatColor.translateAlternateColorCodes('&', string);
    }
#

I have this lil thing.

#

I'd imagine it's doing something like that?

fallen oracle
#

Why do you check if the string is null?

austere ivy
#

Because if I don't, it'll throw an exception.

golden gust
#

I hate littering codebases with static, but kinda, no null check because we should never care about null

fallen oracle
#

Why would it be null

austere ivy
#

No idea..

#

hmm

#

Say, I have..

static badge
#

liter ur code with method extensions instead? kappa

austere ivy
#

something.getInteger()

void void
austere ivy
#

wait

#

Hmm see that's a good question.

golden gust
#

extention methods look nicer, imho

fallen oracle
#

Can't liter your code if you aren't the one writing it

static badge
#

idk I really just like knowing if that's a method on the object or some bullshit helper u've used

#

and u can't tell :>

golden gust
#

IDE colors them differently

#

So, 'eh

static badge
#

I program in notepad ok

#

eta yourself

austere ivy
#

.eta

limber knotBOT
#

Anyone requesting an ETA will be fed to goblins.

austere ivy
#

ha got you to it

fallen oracle
#

Notepad number 1

austere ivy
#

no problem

fallen oracle
#

No errors

static badge
#

if chunks doesn't appear to have issues for the next week I'll start nagging people to begin reviewing it

fallen oracle
#

Okay I'll report issues in 6 days

#

.remindme

limber knotBOT
#

[-d] [-w <who>] <when> <message...>

static badge
#

and that's begin reviewing it

#

it's a big patch so don't be surprised if that takes a week or more

#

given people's available time

woven otter
#

.remind

limber knotBOT
#

[-d] [-w <who>] <when> <message...>

acoustic pilot
#

dont do it, havent you heard, his build breaks ur terminal

woven otter
#

-remind -w @fallen oracle 6d Report issues

static badge
#

break ur terminal byte

woven otter
#

did it not work ๐Ÿค”

#

oh i'm retarded

acoustic pilot
#

my terminal been broken since i installed my OS

#

it's windows remember

woven otter
#

.remind -w @Glรคre 6d Report issues

limber knotBOT
#

DiscordBot: Reminder set for 6 days from now.

austere ivy
#

OH I forgot

#

I set a lot of reminders for future me, I wonder if any of them have gone through

woven otter
#

that's actually a good idea

#

.remind 1y Are you still alive?

limber knotBOT
#

DiscordBot: Reminder set for 1 year from now.

austere ivy
#

I'm gonna search "reminder for"

limber knotBOT
#

DiscordBot: [Auto] We're now known as Paper.

#

DiscordBot: Reminder set for 3 years from now.

woven otter
#

hold on

fallen oracle
#

Lol

austere ivy
#

:(

#

Most of those are from Leaf though.

woven otter
#

.remind 1s .remind 1s

#

well

austere ivy
#

Also barty.

woven otter
#

oof

worn ember
#

.remind 2147483648m did i break the matrix?

austere ivy
#

Spotted: 3
Landis: 1
Wiz: 2
Jan: 1
Barty: 2

#

Not that many once you realize some are questions.

woven otter
#

.remind 150y Have we merged into a singularity yet?

limber knotBOT
#

DiscordBot: Reminder set for 2 centuries from now.

austere ivy
#

I'm going to back to being productive and implementing those changes Stef suggested.

wide hazel
#

bot aboos

worn ember
woven otter
#

2 centuries

#

we'll see

acoustic pilot
#

damn that's old, where have I seen that from

worn ember
#

debian? xD

acoustic pilot
#

or something similar >_>

#

maybe

#

is it the installer?

wide hazel
#

standrad Debian installer

worn ember
#

ye lol

acoustic pilot
#

yeah must be

#

last time i installed debian must've been early 2000s

worn ember
#

i wanna make some packages

woven otter
#

don't

worn ember
#

would i be allowed to make a package that downloads paper versions using its api? if thats even possible, should be right?

woven otter
#

wdym

acoustic pilot
#

at the rate paper updates, distro packages are not ideal no

worn ember
#

since ya'll nubs complaining about my installer being windows only

woven otter
#

oh that

worn ember
#

why so? it would just fetch the latest version?

woven otter
#

make a cli

acoustic pilot
#

if it was like a paper version manager, that's more useful

worn ember
#

well its more like a package you install that lets you run commands to update etc

#

im bad with linux terminology

acoustic pilot
#

sounds a bit like a version manager, but not sure

woven otter
#

where's z

golden gust
#

the API is there to be consumed

worn ember
#

basically what paper downloader is, but for CLI

acoustic pilot
#

it's not the actual software, it's the software that manages downloads/updates of the actual software

golden gust
#

Would be kinda pointless if we exposed an API for all this stuff and documented it and told people not to use it

worn ember
#

might just not be its intended use ๐Ÿ˜‰

acoustic pilot
#

a CLI tool that leverages the API to let people download whatever major release and keep it updated would be a packagable tool probably

golden gust
acoustic pilot
#

but realistically is it more than a simple shell script with some getopt arg handling? ๐Ÿ˜›

worn ember
#

i can write that in whatever lang i want right?

#

well assuming its supported

woven otter
#

make cli to allow you to fetch specific version or commit and build it from paper's repo

worn ember
#

isnt that pretty much what the api does?

acoustic pilot
#

the API exposes available downloads

woven otter
#

doesn't api just let you download paperclip?

golden gust
#

Yea

worn ember
#

i mean, that's good enough

acoustic pilot
#

it also lets you know what versions are available

worn ember
#

xD

austere ivy
#

electronic what does the text inside of your head say?

acoustic pilot
#

what downloads are available

golden gust
#

It's 1s and 0s

worn ember
#

i use the api already

austere ivy
#

oh.

worn ember
#

just not sure how the backend of it works

golden gust
#

Some company I was doing stuff for a good few years made it, so I just kinda kept it

worn ember
#

looks like that was decades ago

golden gust
#

probs 2013ish

fallen oracle
#

Give or take 10 years

worn ember
#

its a vm obviously

azure patio
#

loool

worn ember
#

whats so funny

austere ivy
#

electronic is that your face shape but like photoshopped to a shadow?

golden gust
#

Yes

worn ember
#

ur nose is weird

golden gust
worn ember
#

my linux experience in a nutshell

woven otter
#

no that's actually Z's eye photoshopped into a head

void void
#

No U

#

Itโ€™s jahโ€™s eye

woven otter
#

*Z's

void void
#

jah

woven otter
void void
#

Pregen takes so long

#

Ngl

#

Took me 3 days for a world border with r=13000

merry talon
#

server folders finally POGGERS

woven otter
#

still just in canary aren't they?

worn ember
woven otter
#

git gud

worn ember
#

i mean, i'm literally using the password i gave in 10 mins ago

#

ยฏ_(ใƒ„)_/ยฏ

acoustic pilot
#

ur not doing so gud with this whole linux thing are you ๐Ÿ˜„

worn ember
#

you think?

#

i just took every default setting

#

so clearly i cant be blamed ๐Ÿ˜‰

acoustic pilot
#

prob u can

#

ur just bad ^_^

worn ember
#

well wtf do i do though, i cant become super user/root and i cant install sudo if i'm not root ๐Ÿค”

acoustic pilot
#

well, you have to su, and if the password is wrong, that's on you

worn ember
#

i mean, its the same pass for root and my user

#

...

#

i had to confirm it, so its right for sure

fallen oracle
worn ember
#

oh ffs

acoustic pilot
#

inb4 password+confirmation was copy/pasted

worn ember
#

its stupid numlock turning off every time

#

who fucking invented that even

acoustic pilot
#

oh you have a password that requires numlock? lol

fallen oracle
#

Apparently you can see through these if you throw them down

acoustic pilot
#

numpad, even

fallen oracle
#

It allows you to see through trapdoors and stuff

acoustic pilot
#

so i was right, it's ur fault ๐Ÿ˜„

worn ember
#

Can i blame the hardware?

acoustic pilot
#

maybe like 10%

worn ember
#

๐Ÿ˜ฆ

#

cant you change that in your bios? i cant find that setting

acoustic pilot
#

you can probably throw 50% of the blame on spotted tho

#

cuz he dum

worn ember
#

ive been trying to get it fixed in like forever

merry talon
#

no, I just got them on android mainline

worn ember
#

tries to install vmware tools REE U CANT DO THAT CUZ U DONT HAF FIL X KTNXBYE

#

loving the linux experience ๐Ÿ˜ƒ

upper flicker
#

Why can't you install VMware tools?

worn ember
merry talon
#

discord

#

breaking greentext

#

also you're doing linux wrong

shell vine
#

hi

azure patio
#

Opening blender on windows = around 48 seconds? idk maybe more 60 idk, just a lot of time
Opening blender on linux = around 0.8 second, literally, blender opens under second

limber knotBOT
#

Case in point: Linux sucks because you don't have time to go make a drink while waiting for blender to start

azure patio
#

thonk thinking_gun pepega
:DD good point

worn ember
#

say what you want but their default UI sucks, on all distros ๐Ÿ˜ƒ

azure patio
#

huh

#

r u k?

#

don't use debian if you want nice UI from default

golden gust
#

TIL that yaml supports aliases

woven otter
#

aliases? huh?

golden gust
#
creatures:

   # Vanilla mobs, from https://minecraft.gamepedia.com/Data_values/Entity_IDs
  Creeper: &creeper
    aliases:
    - c
    - creep
    - cataclysm
    enable: true
    enableCraftingSpawner: true
    enableSpawnEggOverride: true
    displayName: Creeper
  creeper: *creeper
austere burrow
austere ivy
#

I have this little thing:

#
@Default
    @CommandCompletion("@players")
    public void onOntime(Player player, @Optional OnlinePlayer target) {
        if (target == null) {
            long millisPlayed = (player.getStatistic(Statistic.PLAY_ONE_TICK) / 20) * 1000;
            player.sendMessage(new MsgBuilder().def("msg.ontime").replace(MiscUtils.fancifyTime(millisPlayed)).build());
        } else {
            Player targetPlayer = target.getPlayer();
            long millisPlayed = (targetPlayer.getStatistic(Statistic.PLAY_ONE_TICK) / 20) * 1000;
            player.sendMessage(new MsgBuilder().def("msg.ontime_other").replace(targetPlayer.getDisplayName(), MiscUtils.fancifyTime(millisPlayed)).build());

        }
    }
#

I'm trying to make it a tad less redundant.

#

(extracting it, per Stef's criticisms)

#

Could I perhaps do that along the lines of..

#
Player targetPlayer = target == null ? player : target.getPlayer();
        long millisPlayed = (player.getStatistic(Statistic.PLAY_ONE_TICK) / 20) * 1000;
        
        if (target == null) {
            player.sendMessage(new MsgBuilder().def("msg.ontime").replace(MiscUtils.fancifyTime(millisPlayed)).build());
        } else {
            player.sendMessage(new MsgBuilder().def("msg.ontime_other").replace(targetPlayer.getDisplayName(), MiscUtils.fancifyTime(millisPlayed)).build());

        }
#

Is that still too redundant or is it better?

#

I'm thinking the target == null in two places is a tad redundant, should I put that as a variable?

#

The main issue is that it sends a different message based on if it's selecting another person or not. Even though it's a minor cosmetic change, I still like it better and I prefer to put functionality and looks of the server above the looks of the code. (but I mean still trying to make the code look good wherever possible :P)

#

I guess the second way is better so that way if I change the way of getting statistics it's less error prone for me to forget to change the other? Somehow better I suppose.

woven otter
#

interesting

shy shuttle
#

Whatโ€™s the No Table role?

pulsar wigeon
#

(โ•ฏยฐโ–กยฐ๏ผ‰โ•ฏ๏ธต โ”ปโ”โ”ป

shy shuttle
#

/flip

#

Awkward..

woven otter
#

oh no! who took your table

latent sorrel
#

Barty you shoulda seen this one dude I played mc against (opposite sides of the great war of blasphemy) who was playing on one of those old ass 15 inch (or less?) CRTs where it couldnt display colors right and always had a heavy orange tint.

#

rest of his game room looked great, just the ancient computer and screen

void void
#

.flags

limber knotBOT
proven kiln
#

Where is the FAQ?

void void
proven kiln
#

I meant this discords FAQ, so i don't actually ask questions that were already answered

void void
#

this discord is paper.

#

so therefore.

#

paper's faq is this discord's faq.

#

.ask

limber knotBOT
#

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.

proven kiln
#

Okay, where could someone take a look at my timings report and help me?

upper flicker
quick gust
#

what is the /trigger command and should i be disabling access to it

void void
quick gust
#

im doing someshit with scoreboards so i should disable this right

azure patio
#

Am I the only one who always writes accidently pex instead of lp?

gaunt crane
iron drum
stray nebula
#

this is epic

marsh iron
wraith shadow
fallen oracle
#

Spigot staff

#

Just report it if it's breaking the rules

void void
#

yoo

#

i just cancelled tnt explode event

pulsar wigeon
ancient bolt
#

no who r u

static badge
#

wiz u just make exceptions

ancient bolt
#

toe is acting up again

#

fuck i wish i didn't have toenails

fallen oracle
#

Cut them off

ancient bolt
#

ive tried

fallen oracle
#

I meant your toes

golden gust
#

my toe joy is the fact that my nails "weak point" is behind the end of where the toe should be, so it's pretty easy to end up with the nail too short if I'm not careful

#

used to just use a pair of nail snips to ensure that it wasn't cutting into the skin \o/

ancient bolt
#

ive been to the foot doctor so often

golden gust
#

DIY woo

ancient bolt
#

im hoping soon all my problems will be solved, last time he didn't even fix it

golden gust
#

See, I had the surgery but it didn't work properly, and some level of "fuck that shit again"

unreal quarry
void void
ancient bolt
#

@golden gust my nails grow into the side of my toe where I can't get to it

golden gust
#

Yeaaaa....

ancient bolt
#

so I try as hard as I can to get to it but I literally cant

#

so I just end up hurting myself and getting it infected :\