#help-development

1 messages · Page 571 of 1

tardy delta
#

and no bools, everything different than 0 is considered to be true

flint coyote
#

I would basically want it for conditional stuff in mc.

e.g. every sunday with an odd day (date) between 10 and 11am something should be active

quaint mantle
#

Yes?

wraith bane
#

ProtocolLib has a working version for 1.20?

tardy delta
#

dont think that will work with my parser lol

#

all it does is evaluating mathematical stuff

fluid river
fluid river
quaint mantle
flint coyote
tardy delta
#

ye

fluid river
#

imagine

flint coyote
#

And true and false as values

tardy delta
#

currently in exams for this week

quaint mantle
fluid river
#

calculator which gives you true/false

#

instead of math stuff

tardy delta
#

nothing wrong with 1 and 0 lol

noble lantern
flint coyote
#

Well depending on how the project is structured it can be an additional parser that runs as the last step if configured

wraith bane
tardy delta
#

just let me know

young knoll
#

2 is some kind of quantum state that is both true and false

#

No

flint coyote
# tardy delta just let me know

(DAY=6&8*3333=2&(2<5|7%1123>10|!F|(!T|(!F|!(!F|!F&!T)))))
That was one of the test cases I had mine run through but the code is super messed up so I would have to create it from scratch instead of "workarounding" bugs.

tardy delta
#

what even is 10|!F|(!T|(!F|!(!F|!F&!T)))))

#

or not?

flint coyote
#

T = true F = false | = OR !T = F etc

tardy delta
#

ah lol

flint coyote
#

a lot of things are replaced on the initial parsing already

#

e.g. expression.replace("!T", "F");

remote swallow
#

you added a bracket in the wrong place

young knoll
#

^

remote swallow
#

player.addPotionEffect(new PotionEffect(PotionEffectType.FAST_DIGGING, Integer.MAX_VALUE, 4, false))

flint coyote
#

Variables can also be inserted by a preparser

young knoll
#

b

remote swallow
#

c

#

thats the duration

tardy delta
#

currently my variables are functions that return a constant (like pi()) but im thinking about something like $PI

remote swallow
#

yeah

young knoll
#

Yes

remote swallow
#

correct

flint coyote
tardy delta
#

mye you could but String#replace is slow so ill probably make some kind of dynamic lookup like i did with functions

#

ill look into it

flint coyote
#

Yea that makes sense

#

If you add some kind of api for custom variables that would be cool aswell

#

But step by step I guess. Also focus on your exams, those are more important. Gl!

flint coyote
remote swallow
#

where is that from

#

tell me now

flint coyote
#

The emoji?

remote swallow
flint coyote
#

From some discord of a game I played a while ago. They got loads of pepe emojis

remote swallow
#

invite me

tardy delta
#

ask md5 for pepe emotes

#

shouldve done that instead of uwu

flint coyote
#

This discord has a lot of slots left - should get all pepe emojis

#

pepe_shock
Whenever someone does database queries on the main thread

young knoll
#

We only have 245 slots left

flint coyote
#

PepeSip
We at least need that one for when you just woke up and people already ask questions

subtle folio
#

there

flint coyote
#

But I guess less emojis are more healthy for the help-development channel

young knoll
flint coyote
#

Imagine everyone reacting with crying pepe emojis everytime somebody compares Strings with == or does IO on the main thread or forgets to register their listener etc

young knoll
#

Sounds good to me

paper viper
#

Is there an event to check if a map's pixels have changed?

restive mango
#

Anyone know if there’s a way to directly pass entity IDs to packets like ClientboundAnimatePacket?

#

Instead of passing a net.Minecraft entity?

#

I can use protocol lib for this of course

#

But I prefer using the minecraft packets instead

young knoll
#

If the packet constructor doesn’t take an id then no

flint coyote
restive mango
#

Ah darn

restive mango
#

Oh well, I’ll just use protooclllib then

flint coyote
#

Was about to say "I can invite you to a bunch" I do understand the money part, yes. Nitro is way to expensive. I also only have a 2 week trial

young knoll
#

It’s similar to plib but you can shade it

flint coyote
#

it's fine looking through the values after receiving them if you have to execute something based on it on the main thread. It is not fine to run the query on the main thread.

#

especially not in a plugin you publish on spigotmc since then you don't know how long the connections to the database take (which will be less of an issue if your db runs on localhost)

restive mango
#

And at this point I’m too afraid to ask

remote swallow
#

you include it in your jar

#

lets say i wanted to add my library that has util methods i shade it

tardy delta
#

does anyone know if ij has a dialog window to see the actual merge conflicts rather than just saying they exist?

flint coyote
#

I usually get it to show conflicts and let me resolve them when updating a branch via the git window (right click -> update)

#

that is on ultimate, dunno whether it's the same on community

tardy delta
#

idk im on ultimate too

flint coyote
#

then it should work like that

tardy delta
#

so just "update project"?

#

i resolved it already so it doesnt show it anymore

flint coyote
#

in that case I dunno if you can view them again

tardy delta
flint coyote
#

nah you should have a git button where all the branches are listed aswell as the one you are currently on

#

bottom left corner on new UI if you didn't remove it

tardy delta
#

mye

ashen bolt
#

I'm working on a plugin for a shop, this shop will have a limited amount of each item. whats the best way to store the shop data?

flint coyote
#

that's a pull with merge - if there a are conflicts you will get a popup with the option to resolve them

ashen bolt
tardy delta
#

yap got it, thanks

flint coyote
#

You could use a database if you have a lot of data - you would still have to cache the data and update the database (not from the main thread) every once in a while

ashen bolt
#

updating after every transaction will not be recommended right?

flint coyote
#

You can also do an update after every transaction if you deem it necessary. Usually you would save it every few minutes and in your onDisable

#

Just make sure to not do the IO/database access on the main thread. Then you are fine with updating after every transaction. Also cache the data

ashen bolt
#

thank you

restive mango
#

actually

#

just quickly

#

is there a way to cast a org.bukkit.entity.Entity to net.minecraft.world.entity.Entity?

remote swallow
#

cast to craftentity and getHandle iirc

royal hinge
#

Hey, greetings from Germany, I'm just starting programming Minecraft plugins for the first time, where can you find a list of meanings of the terms?

restive mango
#

ty

royal hinge
#

The basics

remote swallow
#

?basics

undone axleBOT
royal hinge
#

the basics of how and when to do an event and stuff like that

#

thanks a lot

remote swallow
next zinc
#

Anyone know how to remove the type of goat horn from the items lore?

remote swallow
#

probably the hide potion effect flag

next zinc
#

I'll try that

#

Oh nice it worked

#

ty

#

Never would've though of it as a potion effect

royal hinge
remote swallow
#

its just mojank internals lol

remote swallow
#

?services

undone axleBOT
tender shard
#

255? lol that'd be bad. max integer is 2.147.483.647 or sth like that

ivory sleet
#

2^31 - 1 iirc

young knoll
#

Mhm

tender shard
#

i always find it weird that "lowest int" is basically one more than "max int"

remote swallow
#

is that 32 bits

#

or bytes

tender shard
#

ints are 4 bytes = 32 bits

ivory sleet
#

32 bits

tender shard
#

where 1 bit is the +/- sign

ivory sleet
#

^

remote swallow
#

makes sense

tender shard
#

and 0 is positive, so there's one less positive number than negative numbers

ivory sleet
#

well more correctly 0 is non negative

tender shard
#

yeah with "0 is positive", i mean that the "positive/negative" bit is set to 0 which is used for all other non-negative numbers

ivory sleet
#

yea fair

young knoll
#

2s compliment

#

Or whatever

ivory sleet
#

yeah bitwise negative numbers are represented as compliments

humble tulip
#

-2147483648 to 2147483647 is int range in java

#

That means there are 2147483648 negative numbers and 2147483648 non-negative

hazy parrot
#

he said that its weird that 2147483647 + 1 = -2147483648

eternal oxide
#

its just ignoring the carry flag

humble tulip
#

Ohhhh

young knoll
#

Yay overflow

quaint mantle
#

So im little lost here I have this ```java
public boolean inputCode(Scanner scanner, boolean fromFile) {
int newItemCode;

    if (fromFile) {
        newItemCode = scanner.nextInt();
        scanner.nextLine();

        Inventory inventory = new Inventory();
        int existsIndex = inventory.alreadyExists(this);

        if (existsIndex != -1) {
            System.out.println("Item code already exists");
            return false;
        }

        itemCode = newItemCode;
        return true;

    } else {
        System.out.print("Enter the code for the item: ");
        while (true) {
            if (scanner.hasNextInt()) {
                newItemCode = scanner.nextInt();
                scanner.nextLine();
                break;
            } else {
                System.out.println("Invalid code");
                System.out.print("Enter the code for the item: ");
                scanner.nextLine();
            }
        }
    }

    Inventory inventory = new Inventory();
    int existsIndex = inventory.alreadyExists(this);

    if (existsIndex != -1) {
        System.out.println("Item code already exists");
        return false;
    }

    itemCode = newItemCode;
    return true;
}
#

the array is private and I cannot modify the parameter or make any new methods

hazy parrot
#

what

quaint mantle
#

Yes same

#

Im so lost

#

I have to check if the itemCode in the arraylist exists already

hazy parrot
#

you provided 0 info, what is even Inventory class

quaint mantle
#

The inventoryof items

hazy parrot
#

also do you know what this keyword means

quaint mantle
#

It contains the array

#

Yes the instance of the class

hazy parrot
quaint mantle
#

The arraylist of the inventory

eternal oxide
#

you created a new Inventory then check if your current object is already in it??

quaint mantle
#

bc I couldn't figure out how else I could do it

#

But I knew that it wouldn't work

hazy parrot
quaint mantle
#

arraylist

eternal oxide
#

his Inventory object seems to be a Class with an arrayList in it

#

access shoudl be via DI or static

hazy parrot
#

you could also send that inventory class, as we cant know what is in it, but making new instance and checking on new instance seems wrong

quaint mantle
#

It cannot be static

eternal oxide
#

can;t be static?

#

teh class can be a singleton

hazy parrot
#

you have to pass it somehow, using di or static getter if its singleton

eternal oxide
#

it holds an array of data so it has to be a single instance

quaint mantle
#

Inventory class

eternal oxide
#

or you make teh array static so IT is a single instance

quaint mantle
#

I have existsAlready which checks it but i need to access that in the other class

#

But I can't without making a new instance

hazy parrot
hazy parrot
quaint mantle
#

isEquals is a custom method ```java
public boolean isEqual(FoodItem item) {
return itemCode == item.itemCode;
}

hazy parrot
#

why not override equals

#

and then your whole code can be replaced with inventory.contains(item)

quaint mantle
#

Wouldn't change anything really

quaint mantle
hazy parrot
#

why not lol

eternal oxide
#

looks like homework

quaint mantle
#

I don't know man ask my prof

#

It's very stupid

hazy parrot
#

have to be static singleton then ig

#

But seems wrong that prof is not allowing you to make your own solution lol

quaint mantle
#

ALL data members MUST be declared as private (or protected in the Base class when necessary only).

eternal oxide
#

it doesn;t say you can;t make it static

#

private static on the array

#

then every instance of the Inventory you create uses the same array

quaint mantle
#

ah

hazy parrot
#

or make whole class singleton, and call Inventory.getInstance()

eternal oxide
#

yep

quaint mantle
eternal oxide
#

yes

quaint mantle
#

Unfortunately "If you need any other methods, they must be private helper methods."

eternal oxide
#

in that case you have to create a singleton

hazy parrot
#

tbh that approach of prof is stupid

eternal oxide
quaint mantle
#

I can't make it singleton though

#

I cannot make public methods

eternal oxide
#

you are not allowed to create a new Field?

quaint mantle
#

No

#

Not in the methods

#

This is why im super confused on how I could approach it

mossy prairie
#

Is the repo working for you guys?

hazy parrot
#

what repo

mossy prairie
#

It is timing out

chrome ferry
#

ye having problems to

eternal oxide
#

Only private helper methods so singleton is impossible.

#

which means your ONLY choice is DI

mossy prairie
#

Probably a issue on their side than

eternal oxide
#

or there is something you mis read in the task

quaint mantle
#

I can send you the document?

hazy parrot
quaint mantle
#

I don't think I read the tasks wrong

eternal oxide
#

He has to be mis-reading somethign as those two make the task impossible

#

unless he uses reflection to instantiate it 😛

mossy prairie
#

Where can we actually contact SpigotMC to get a fix?

eternal oxide
#

You wait

mossy prairie
#

They check this channel?

#

Ok ig will be waitin than 🙂

quaint mantle
#

Yea see FoodItem:
Updated: public boolean inputCode(Scanner scanner, boolean fromFile)

worldly ingot
#

We're actually missing some raid API

#

RaidId and Wave aren't obtainable via the Raider interface. I'll add that now lol

remote swallow
#

bad choco

young knoll
#

Is there a raid spawn reason

worldly ingot
#

Yes

#

I suppose the CreatureSpawnEvent is an option if you're okay with doing something immediately as it spawns, or for tracking later

young knoll
#

Can always add a pdc tag for later use

worldly ingot
#

Or just hold it in a Set. Depends on how urgently you need it

young knoll
#

We don’t persist the spawn reason do we? That’s a certain fork iirc

worldly ingot
#

We do not

stiff knot
#

Hey does anyone know why my plugin is downloading from the SpigotMC repo every time I compile it? It's causing minute+ build times and it's really slowing down my workflow :/

#

It just started doing this around an hour ago and I never changed anything in my pom.xml

remote swallow
#
@RequiredArgsConstructor
public class PlayerJoinListener implements Listener {
    private final BloodlineManager bloodlineManager;
    private final Map<UUID, CompletableFuture<BiValue<Bloodline, AbstractTrait>>> playerBloodlineCache = new HashMap<>();

    @EventHandler
    public void onPlayerPreJoin(AsyncPlayerPreLoginEvent event) {
        UUID uuid = event.getUniqueId();
        CompletableFuture<BiValue<Bloodline, AbstractTrait>> bloodlineFuture = CompletableFuture.supplyAsync(() -> {
            if (bloodlineManager.hasBloodline(uuid)) {
                System.out.println("has bloodline");
                return new BiValue<>(bloodlineManager.loadBloodline(uuid), null);
            } else {
                System.out.println("doesnt have bloodline");
                return bloodlineManager.createBloodline(uuid);
            }
        });
        playerBloodlineCache.put(uuid, bloodlineFuture);
    }

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event) {
        Player player = event.getPlayer();
        UUID uuid = player.getUniqueId();

        CompletableFuture<BiValue<Bloodline, AbstractTrait>> bloodlineFuture = playerBloodlineCache.remove(uuid);
        System.out.println("being called?");
        System.out.println(bloodlineFuture == null);
        bloodlineFuture.thenAcceptAsync((BiValue<Bloodline, AbstractTrait> bloodlineData) -> {
            System.out.println("is null");
            if (bloodlineData != null) {
                player.sendMessage("Bloodline created with the trait " + bloodlineData.getValue().getName());
                System.out.println("e");
                bloodlineManager.getBloodline(player).handleEvent(event, PlayerJoinEvent.class);
            }
        });
    }
}
``` anyone able to spot why the thenAcceptAsync in the join event is never ran, doesnt work with thenAccept the sysouts happen, future isnt null or anything
echo basalt
#

1 - make sure you use a ConcurrentHashMap

remote swallow
#

i was bored and make chatgpt write it

echo basalt
#

Also given you're already using futures

#

no point in doing the whole prelogin thing

#

Just do your fetches on join

remote swallow
#

true

young knoll
#

Just do them in the async pre login

#

And block

remote swallow
#

i was doing this before

echo basalt
#

yeah but then you gotta wait 2 years to login

young knoll
#

Meh

remote swallow
#

its sqlite so it shouldnt be too slow

echo basalt
#

also

young knoll
#

Neither should MySQL tbh

echo basalt
#

you repeating your getPlayer call

young knoll
#

Unless it’s on the moon

remote swallow
#

im just using futures because i have a slight feeling ill be updating to mysql

young knoll
#

You can still use futures and block

echo basalt
#

mysql has a latency of usually up to 1.5s

#

in case you need to re-do the connection

young knoll
#

If it isn’t local

remote swallow
#

only reason i have the 2 events is to load it before they join and send the messages

echo basalt
#

You can send them once they loaded

remote swallow
#

im gonna take a wild guess and say i can just call Bukkit.getPlayer in the event and then send the message

latent pilot
#

is there a way to completely stop a creeper from exploding when near a player? i still want it to follow the player, just not explode

cedar pine
#

spigot-repo be down?

remote swallow
#

yeah

cedar pine
#

oh just checking ty

remote swallow
#

this works too

young knoll
#

You don’t really need to make the future a variable there

echo basalt
#

You can cancel it

remote swallow
#

im still confused how the thenAccept isnt called

#

the called sout doesnt happen

echo basalt
echo basalt
young knoll
#

And the repo is down atm

#

Which is causing issues

remote swallow
#

spigot repo is down so im guessing its trying to update constantly

stiff knot
#

oh right

young knoll
#

Spigot is a SNAPSHOT dependency so probably

stiff knot
#

that would probably do it lol

remote swallow
#

its returning the right id here so going to load data

young knoll
#

Inb4 forgot to register events

remote swallow
#

josh the sysouts outside of the future were called

#

and that sysout was called

#

that is triggered in the listener

echo basalt
#

what sysouts

remote swallow
#

so the called is sent, the traits sysout isnt

#

adding another prior to it is called

echo basalt
#

I'd add a .exceptionally to your future just for sanity

latent pilot
echo basalt
#

you can run a scheduler to set the "swell" at 0

remote swallow
#

okay so what

#

it has a result, but doesnt return anything

#

that dont add up

young knoll
#

You can also set the fuse to just be really really long

#

So it’ll get fat but never explode

echo basalt
#

nah your setLevel can still throw an error

echo basalt
#

just change your trycatch to accept all exceptions

remote swallow
#

for duck sake

#

im missing a to upper case

echo basalt
#

fool

echo basalt
remote swallow
#

so the trait and stuff is added but the event handle still doesnt get called

#

the bloodlineData is null

#

somehow

echo basalt
#

add souts everywhere

quaint mantle
remote swallow
#

just reloaded and it worked

#

eexcept i got a funny error

echo basalt
#

heheheheaw

remote swallow
echo basalt
#

just make a

public void sync(Runnable task) {
  if(Bukkit.isPrimaryThread()) {
    task.run();
    return;
  }

  Bukkit.getScheduler().runTask(plugin, task);
}
#

so you can do a

#
thenRun(() -> sync(() -> {
  whatever
})});
remote swallow
#

im lazy and just used my scheduler utils with 1 tick delay lol

#

shit works now atleast

echo basalt
#

meanwhile I got an executor that calls runTask

remote swallow
#

its because of this i know it

young knoll
#

Shame it still requires a plugin instance

echo basalt
#

pretty sure that's a paper method

young knoll
#

No

echo basalt
#

unless it's 1.20 stuff

sullen marlin
#

It's at least a decade old

quaint mantle
#

How come Code already exists loop the same amount of times as there are items being added? ```java
String itemType = scanner.next();
scanner.nextLine();
FoodItem item;

        if (itemType.equalsIgnoreCase("f")) {
            item = new Fruit();
        } else if (itemType.equalsIgnoreCase("v")) {
            item = new Vegetable();
        } else if (itemType.equalsIgnoreCase("p")) {
            item = new Preserve();
        } else if (itemType.equalsIgnoreCase("d")) {
            item = new Dairy();
        } else {
            return false;
        }

        boolean codeExists = false;
        if (item.addItem(scanner, true)) {
            int existingIndex = alreadyExists(item);
            codeExists = (existingIndex != -1);
        }

        if (codeExists) {
            System.out.println("Code already exists...");
            return false;
        } else {
            int insertIndex = 0;
            while (insertIndex < numItems && inventory.get(insertIndex).getItemCode() < item.getItemCode()) {
                insertIndex++;
            }
            inventory.add(insertIndex, item);
            numItems++;
            return true;
        }
    }```
#
    public int alreadyExists(FoodItem item) {
        for (int i = 0; i < numItems; i++) {
            if (inventory.get(i) != null && inventory.get(i).isEqual(item)) {
                return i;
            }
        }
        return -1;
    }
#

Does anyone know what this error means in IntelliJ? org.spigotmc:spigot-api:pom:1.12.2-R0.1-SNAPSHOT failed to transfer from https://hub.spigotmc.org/nexus/content/repositories/snapshots/ during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of spigotmc-repo has elapsed or updates are forced. Original error: Could not transfer artifact org.spigotmc:spigot-api:pom:1.12.2-R0.1-SNAPSHOT from/to spigotmc-repo (https://hub.spigotmc.org/nexus/content/repositories/snapshots/): transfer failed for https://hub.spigotmc.org/nexus/content/repositories/snapshots/org/spigotmc/spigot-api/1.12.2-R0.1-SNAPSHOT/spigot-api-1.12.2-R0.1-SNAPSHOT.pom, status: 504 Gateway Timeout

#

It should only print once when the itemcode exists already

quaint mantle
#

If so, where would I check

remote swallow
#

md is looking into it, so shouldnt be too lon

quaint mantle
#

Shouldn't be too long as is a few mins? a few days? what scale of time are we talking?

#

few years

#

Ight

remote swallow
#

max an hour id guess

#

just check if its up in like 30 min/hour

young knoll
#

It should be up now

remote swallow
#

so it is

young knoll
#

Idk how long the maven cache is tho

remote swallow
#

daily iirc

young knoll
#

No way it caches the failure for a day

remote swallow
#

oh yeah

#

idk

#

the download cache is a day

young knoll
#

Actually it’s “update interval”

remote swallow
#

coll you want some chocolate

young knoll
#

And it looks like the repo itself sets it

remote swallow
#

im gonna steal chocos knee caps

#

their the best bit

young knoll
#

Oh geez the default interval is a day

quaint mantle
#

So is it fixed or no

young knoll
#

But you can run maven with -U to force an update

young knoll
remote swallow
#

coll

#

you didnt answer

quaint mantle
#

Working

#

Whenever the item code exists already it spits item code exists already as many times as the item count there ```java
if (item.addItem(scanner, true)) {
if (alreadyExists(item) == -1) {
int insertIndex = 0;
while (insertIndex < numItems && inventory.get(insertIndex).getItemCode() < item.getItemCode()) {
insertIndex++;
}
inventory.add(insertIndex, item);
numItems++;
return true;
} else {
System.out.println("Item Code Exists already");
return false;
}
}

#
    public void readFromFile(Scanner scanner) {
        System.out.print("Enter the filename to read from: ");
        String path = scanner.next();
        Scanner file = null;
        try {
            file = new Scanner(Paths.get(path));
            while (file.hasNext()) {
                addItem(file, true);
            }
        } catch (FileNotFoundException e) {
            System.out.println("File not found.");
        } catch (IOException e) {
            System.out.println("File does not exist.");
        } finally {
            if (file != null) {
                file.close();
            }
        }
    }
#

Its loop everytime an item is being added

young knoll
#

?services

undone axleBOT
river oracle
#

if anyone gets this guy to stop cross posting i'll give you a pat on the back

quaint mantle
#

watchu services

left pine
#

Hi, I have a question why parseComments doesn't save the comments?

eternal oxide
#

depends what parseComments you are using

#

?nocode

undone axleBOT
#

It’s hard to answer a programming question without code
Oh no! You ran into a problem. But no worries, people are willing to help, but first they need to see your code. This is because otherwise, they would be providing help based on guesses instead of concrete knowledge. Whether it be a compile error, runtime error, or an unexpected output, I'm sure that if you were to provide code, you'd receive a quick solution.

eternal oxide
#

default is true so you should never need to use that method

dawn hazel
#

so i have this command, the check to see if the args length is 0 works just fine. but when i go to check if the args are "reload" it throws an error. ik it should throw an error if the args arent "reload" but even when they are "reload" it throws an error

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (args.length == 0){
            sender.sendMessage(ChatColor.RED + "Usage: /chatpolice <arguments>");
            return true;
        }

        if (args[0].equals("reload")) {
            chatPolice.reloadConfig();
            sender.sendMessage(chatPolice.config.getString("messages.reload"));
            return true;
        }
        return false;
    }```
young knoll
#

the error is at sendMessage

#

Which means the config.getString is returning null

dawn hazel
#

strange

#

oh nvm im stupid

young knoll
#

?stacktrace

undone axleBOT
young knoll
#

Nah that’s not what I wanted

dawn hazel
#

its suppost to be messages.reloaded

young knoll
#

We need a thing on how to read stack traces

#

😔

dawn hazel
#

ik how to read stacktraces i was just having a blankmind moment lmfao

#

okay yeah it be fixed now

#

thanks

eternal oxide
#

?stacktrace

undone axleBOT
eternal oxide
#

not that

#

there was a thing for reading stacktraces

next zinc
#

Anyone know how I can make a custom boat? No clue how I would detect that a custom ItemStack was placed in the water and then get that specific boat vehicle and alter its settings.

young knoll
next zinc
#

Would that allow me to customize the setting of the boat for when its used after?

#

As well as if I don't pick it up and hop back in it will that still apply the same settings?

young knoll
#

It’s called when you place the boat

#

You can then do whatever with said boat

next zinc
#

Alright I'll test with it then

noble lantern
#

does this have to be used on the main thread if im using custom events?

#

Or is there a way to mark my custom event as "async safe" according to the doc?

#

If i call it in a bukkit task it fires the event fine, but calling my event just results on nothing (Not even the exception being thrown)

eternal oxide
#

you set in the constructor if its async or not

noble lantern
#

ahh didnt see there was a super ty

echo basalt
#

and do super(!Bukkit.isPrimaryThread()) to always be safe

noble lantern
#

very odd this library runs the callback async tho

#

normally theyre thrown back onto the main thread lmfao

#

so that just tripped me out why i had to do that

#

works so smooth though god dayum

echo basalt
#

can't wait until the dudes at work do their job so I can showcase my exponential meshing setup :)

next zinc
sharp bough
#

what could be causing this much garbage collection?

#

it peaks at a random time

ivory sleet
#

Like jvm flags

#

And a tree of what eats cpu/ram

sharp bough
humble lynx
#

I've been having an issue with my silk spawner plugin, it retains data when the player that places the spawner down is in creative mode, however when the player is in survival, it places an empty spawner. I've attempted looking at similar posts on forums, and have gone down different paths (using PersistentData, checking the block on BlockPlaceEvent), however I'm getting stumped. I have no idea why the spawner appears to be empty due to the game mode the player is in. Has anyone had this issue and know how to resolve it?

eternal oxide
#

delay changing the spawner 1 tick

humble lynx
#

I'll give that a try..

humble lynx
#

Yeah issue still persisting. Still works in creative

eternal oxide
#

show some code

humble lynx
#
    public void onSpawnerPlace(BlockPlaceEvent e) {
        if (e.getBlock().getType().equals(Material.SPAWNER)) {
            CreatureSpawner spawner = (CreatureSpawner) e.getBlock().getState();
            EntityType entity = spawner.getSpawnedType();
            Bukkit.broadcastMessage("Entity " + entity);
            Bukkit.getScheduler().runTaskLater(main.getInstance(), () -> {
                Bukkit.broadcastMessage("test 1");

                Bukkit.broadcastMessage(spawner.getSpawnedType().toString());

                spawner.setSpawnedType(entity);

                e.getBlock().setBlockData(spawner.getBlockData());
            }, 5L);
        }
    }```

When in creative, placing the spawner shows the Bukkit broadcastmessage as the entity that is meant to be placed (cow)
When in survival it gives an error saying entity can't be null
eternal oxide
#

When you place a spawner in survival it's always a pig. Try setting the entity type manually in the runnable

#

as a test

smoky anchor
#

I wonder what the behavior is on vanilla.
If you pick-block the spawner and place it in survival, would it still reset the entity ?
Do you possibly have any other plugins that could break this ?

humble lynx
#

it's all been moved around as a test unfortunately :/

eternal oxide
#

you can also just use runTask instead of runTaskLater

smoky anchor
humble lynx
#

Vanilla it's impossible to get a spawner in your hand of a different type, they're expecting mob spawn eggs to change it when block is placed.

eternal oxide
#

yes for survival

noble lantern
#

Does calling close on this stream also close the other one? Im getting some weird file issues where things like Files.copy and FIles.move hang indefinitely with files created from this stream, and when i open the directory containing all the files the names go down the list one by one and turn white, once they turn white the folder reloads and then the files are useable again

humble lynx
#

Only other plugin I have on is essentials, and using their /give command their spawners work, and placing it shows all my debug information as normal

smoky anchor
humble lynx
#

let me try delete essentials to see if that was the issue lol

eternal oxide
noble lantern
#

ohhh thats what olivo was talking about earlier

#

thought it was only for errors

#

tyty

smoky anchor
humble lynx
#

it wasn't a problem in the past

smoky anchor
#

Unless BlockEntityTag is broken in vanilla (or spigot broke it) it should work

humble lynx
#

I last worked on the plugin in 1.17, went off MC for 2 years and now in 1.20 it's not working lol

noble lantern
humble lynx
#

Might look into NBT tags since that's what single player MC was using

undone axleBOT
noble lantern
#

its a lib but im having issues with files from the output stream itself i think

#

like files created do this

#

and one bye one turn white, then after they all turn white the folder reloads and the files are fine

hybrid spoke
#

i mean it should work if its not delayed, otherwise the stream could be close before the async is done

#

but you could instead make the inner part sync and call the method async

noble lantern
#

well the lib im using is async

#

its downloading videos

#

so yeah, the output stream isnt used until later

noble lantern
hybrid spoke
#

ah btw i just looked it up async in try resources should work

hybrid spoke
noble lantern
#

idk switched my code from the screenshot to try with resources and the my entire thing is just fucked

#

so imma just have ptsd that try with resources doesnt work async now

#

like only changed that and it just broke it entirely lmao, or at least "later"

hybrid spoke
#

i mean what exactly doesnt work with try resources

#

tried to debug?

noble lantern
#

look at the screenshot i sent then the code

noble lantern
#

disreguarding everything else

#

why am i having the issues here

wet breach
#

still need the catch block even with try with resources, however the nice thing with try with resources is you get a third block to use

#

when the resource is closing

#

you can do some cleanup

#

which is called the finally block

#

if I remember correctly

pseudo hazel
#

wont finally always happen?

#

or only if it didnt catch anything

flint coyote
#

always

pseudo hazel
#

from what I remember finally is pointless

crystal palm
#

i want to store a boolean against a player. is using an nbt tag fine in this case?

pseudo hazel
#

version 1.14+?

crystal palm
#

yep

pseudo hazel
#

use pdc

#

?pdc

crystal palm
#

my bad. i meant pdc :P

pseudo hazel
#

then yes

#

thats good

crystal palm
#

ok cool. kinda tired of using silly maps for everything

pseudo hazel
#

assuming with against the player you mean inside

crystal palm
#

yeah. itll stick around after restarts too, correct?

pseudo hazel
#

yes I would hope so

crystal palm
#

thanks!

pseudo hazel
#

easy to test though

crystal palm
#

the wiki seems to suggest that itll stick

hazy parrot
#

persistent data container 😛

pseudo hazel
#

I mean

#

if I put pdc on an item

#

then nuke the item

#

the data will be gone

#

so its persistent till the front door

eternal night
crystal palm
#

hey hold on. does pdc even support boolean

eternal oxide
#

yes

smoky anchor
#

since 1.20 yes

#

but you can use a byte instead on lower versions

eternal oxide
#

you can put whatever you like in it, custom data types

noble lantern
#

Seems using a newly made directory with Files#copy / Files#move for some reason leads to a permission issue

Changed it to File#renameTo and it works fine though, wonder why that is

#

tbh not even sure why this would leads to any permission issues

But if renameTo works i wont complain any further

#

just odd those files do that weird white name thing, maybe its some win11 bug

wet breach
noble lantern
#

i see so it generally better to just rename then? files arent important theyre getting shoved into a zip folder immediantly after

#

i just needed them all sent to a folder for zipping basically

wet breach
#

well, idk what exactly is being moved and from where, but in windows if you move a file that already exists in that directory you will get a permission denied

noble lantern
#

yeah its weird cause the /music is empty, its a fresh directory as its flushed after the zips created

#

prolly some weird windows limitation

#

after all the files im dowloading with this program are acting weird, lemme get a video

#

notice how my server isnt running either, its like how the files are saved windows isnt liking it

no other programs interfering with em at the moment, and there just doing that goofy shiz lol

wet breach
#

that is just the windows indexing/com surrogate program running that is doing that

noble lantern
#

so that wouldnt of been the cause of the permission error and i can just ignore em doing that

#

cause it was rly concerning me for the past few hours lmao

wet breach
#

well if your program isn't running and its doing that, then yeah. If your program is running and its doing this, then it could be because your program touched the file which updates the timestamp for accessing and thus causes the index to run

#

this is generally why I disable indexing on windows lmao

smoky anchor
#

wait where do you disable indexing ?

noble lantern
wet breach
#

there are two places, you can disable indexing on the drive where you just go into the properties for the drive

noble lantern
#

thought i was going insane

wet breach
#

and there is the service

#

I disable the service

noble lantern
#

side note though so glad this is finally working after so long LETSFUCKINGGOOOOOO

wet breach
#

all because of not catching an exception to show you the problem

#

but I am glad you finally got it working though 🙂

noble lantern
#

tbh ive never copied files before in java so i kinda just assumed Files.copy and Files.move would do some magic fuckery lmao

#

guess not

wet breach
#

well the Files API in java for the most part invokes OS api methods

#

so, move and copy are considered different. Moving a file requires it to copy and then delete the old file

#

where as copy doesn't move anything and instead its a new file leaving the old one

#

but both of these invokes the OS api

#

so Java itself isn't doing it

#

but that is why you have to catch the exceptions because if it doesn't work, java can detect this and then has a way to notify your program that something isn't right

noble lantern
#

yeah tbh idk why i was using sneakythrows during dev that was dumb of me

#

top 10 dumbest moments for me right there ngl

wet breach
#

there are ways to not invoke the OS api or do so in a limited fashion

#

but generally you want the OS to handle it

noble lantern
wet breach
#

for example copying. You could just read the bytes yourself, make a new file and that be the only api and then put the data in yourself for the file

wet breach
#

so you could instead implement your own copy, and to the OS it just appears as new files

#

the advantage of this is that its faster and causes less reading when you want more writing 😛

#

the disadvantage of this, is that if something happens there is a higher potential for corrupted files

#

generally OS's have redundancy in regards to moving files or copying that if something happens, technically it hasn't moved yet

#

windows usually has more safeguards then say linux however but linux is becoming better in this area too

rose trail
#

which database to use to save player parties?

wet breach
#

depends on the criterias you have

noble lantern
#

after that i just gotta spin up a javalin server to serve the resource pack and this hellish conversion can be over >.>

wet breach
#

also, in regards to files you might want to look into the async methods of files too

noble lantern
#

oh theres other methods to files?

Current works already on another thread rn, didnt know there was async File methods though

wet breach
#

Java still has old methods that work but are not thread friendly and then it has new methods that are thread friendly

#

so have to be careful which ones you use too

noble lantern
#

AsynchronousFileChannel ?

wet breach
#

that is one of them

#

there is a lot of new api's in regards to files so just have to look through and see.

noble lantern
#

sadly i think im gonna be restricted from using them for this project since this YouTube API im using is really limiting for the file writing aspect

Definitely will look into them though

wet breach
#

this is how browsers handle downloads these days in the event a download is interrupted

#

it can start where it left off

#

since these are audio files, they have a format which helps indicate the start and end of each one therefore making it less of an issue if it all ended up in a single file

#

also, you can pad that file out ahead of time if you have a really good approximate of the overall size

#

and then all you are doing is just changing the bits that were used to pad out, with the actual information

#

which is significantly faster since the size isn't really changing

#

but yeah there is all kinds of things you can do. Just don't forget to catch them exceptions 😛

#

they are useful and you can still do things even though an exception happened, maybe perform alternate method of saving in that case

noble lantern
#

sounds like a lot of work just for a mc plugin though :p

  • my speeds limited by ffmpeg conversion too which is only really the slowest thing rn tbh
#

the youtube downloading of m4a files downloads and saves ~20ish songs in a few seconds

But the ffmpeg conversion just takes like 45+ seconds

wet breach
#

most of the time the conversion is just changing the file format and not the data itself

noble lantern
#

sadly couldnt find many things for mp3 -> ogg or m4a -> ogg

Only way was making a ffmpeg installer for the binaries and then using the java wrapper for it

wet breach
#

so for example, changing an xml to a yml file isn't all that hard and is an example of changing file format and not the data contained

#

mp3 is very well documented

#

and ogg is an open standard

noble lantern
#

its the ogg part mainly

#

i couldnt find any ogg conversion libraries for java specifically

#

just the ffmpeg wrapper

wet breach
#

There is ogg specific libraries for java

#

MC uses one them

noble lantern
#

yee just not the conversion from mp3 -> ogg

#

or m4a *

wet breach
#

I think it does have that ability

#

maybe not for m4a

#

maybe I should create a lib that transcodes mp3 to ogg

#

it really isn't all that hard since both are almost the same in what they do

noble lantern
#

from what i heard online i heard its rather complex for that conversion, though i didnt rly pay attention or look into that part of it much, was just looking through stack overflow hoping to find something on how to convert the two

wet breach
#
MP3

MP3 (formally MPEG-1 Audio Layer III or MPEG-2 Audio Layer III) is a coding format for digital audio developed largely by the Fraunhofer Society in Germany under the lead of Karlheinz Brandenburg, with support from other digital scientists in the United States and elsewhere. Originally defined as the third audio format of the MPEG-1 standard, it...

#
Ogg

Ogg is a free, open container format maintained by the Xiph.Org Foundation. The authors of the Ogg format state that it is unrestricted by software patents and is designed to provide for efficient streaming and manipulation of high-quality digital multimedia. Its name is derived from "ogging", jargon from the computer game Netrek.The Ogg contain...

#

the easiest place to start with either of them, is finding the places where they are relatively the same

#

each have their own file format

#

the only hard part between either of those is the encoding

#

ogg uses Vorbiss for its encoding unless you specify some other encoding as ogg is just a container

#

much like MP4 is a container and not the encoding itself

#

mp3 is both a file format and encoding

#

so good news with the mp3 is that you don't have to implement much to find the data you are looking for

#

but both Mp3 and Vorbiss are losseless compression

#

since Mp3 is already compressed, when encoding with vorbis you generally don't need further compression although you could

#

so in reality it is just turning the mp3 bits, into what vorbiss produces

noble lantern
#

yeah that all sounds waaaay above any type of programming knowledge i have 🤣

wet breach
#

lol

noble lantern
#

i didnt even know the different file extensions had different encoders

wet breach
#

well, to give you an idea of this conversion

noble lantern
#

i kinda just assumed they were theyre own formats & encoders

So it confused me why this isnt just something more universally standard lmao (converting different audio files)

wet breach
#

it would be like you converting an xml file to yml file. The hard part isn't the converting rather where to stick all the necessary info inside the yml file

#

so in your case really the hard part is sticking the relevant info to make it a valid Vorbiss encoding

somber scarab
#

Hello! I am coding a minigame where I need to load just 9 chunks of a random new world so That I do not lag my whole server.

Is there a way to do that?

wet breach
#

mp3 doesn't allow for more then 2 channels, so you are not going to have issues with that. Vorbiss on the other hand allows for 256 channels if I recall

#

so if you were going from Vorbiss to Mp3 it would be more difficult especially if you have an ogg file that has surround sound

#

because now you have 7-16 channels and then going to a format that only allows for 2

#

the Vorbiss encoding and Ogg format is basically the advanced version of Mp3

#

that allows for compressed audio but still allowing for true surround sound channels

#

the containers you would commonly see mp3 in, is mpeg2 and mp4 as the encoding for the audio

wet breach
flint coyote
#

Is there any valid alternative to overriding a static method (which is not possible)?

I wanna design an API that is based on extending a class. The extending class should have a way to get a Map<String, String> or Map<Field, String> that holds the documentation for each field. However at the point where I wanna get that documentation I do not want to create an instance of that extending class since it's an overview in an inventory and creating 40 classes just to get the documentation and throwing them away after is kinda wasted.

I could still use a static method but I can't enforce the implementation of it since those can't be declared abstract to enforce overriding them

#

Therefore if people don't read the documentation they'll forget it :/ Any ideas?

#

Beforehand I decided on using an @Documentation annotation over each field. The problem with that is that there can't be any multi-language / generated documentation

rose trail
#

how is it better to make a table with parties: an array of uuids or use a new column for each uuid?

flint coyote
#

neither. You would have a 1:N

#

unless I understand your question wrong. I suppose you want to possibly add a player to multiple parties

rose trail
#

I will have the leader as the primary key in the table and then the players

flint coyote
#

Then you would have

  • A party table that contains the ID, the Leader (ID?) and other fields like name, generation date etc
  • A member table that contains the party ID and the player (ID?) -> primary key = party+player
rose trail
#

second

flint coyote
#

Actually if the leader is the primary key for your parties you don't need another id. You would however need to make sure that the leader can't be part of another party then since that's probably not what you want

rose trail
#

yes but how to save party members

flint coyote
#

on the second table

rose trail
#

but there may be too many of them

flint coyote
#

| leader id/party id | player id |

wet breach
#

you would probably be better off in making the party itself as the key maybe make a UUID of it. And then have the party members being the values in a list. Which could be its own object and probably the perferred

#

and this allows you to have a hashmap

#

if the parties have their own objects and you made a method of checking of who is part of said object, it is super easy in terms of checking

#

as for saving, it depends where you are saving to really

#

if a yaml file, then its just a simple map in the file with the party id being the section and members below that

rose trail
#

it will be necessary to check whether the player is already joined to the party

wet breach
#

yes as I said, if the party has its own object to identify itself its not that hard really

#

personally if I was implementing a party system, I wouldn't bother saving parties

#

they should only exist for as long as the members of said party are online

#

and it goes away once all members are gone

rose trail
#

player's persistent data container does not move between servers?

wet breach
#

not automatically no

#

PDC is specific to each server

rose trail
wet breach
#

not true

#

you could make use of the bungee server stuff to transfer information to other servers or you can make your own communication method between each server, but you don't have to store it anywhere

rose trail
#

it seems more complicated

flint coyote
#

I don't think having a party table and a partymember table is that bad.
Also enables access from a website or generally other sources

fluid river
#

jree

rose trail
#

there is an idea to simply store somewhere in the main player database the true or false value in the party column

flint coyote
#

You could also add a column in the player table if each player can only be part of one party

#

but not a true false, a party id

rose trail
#

maybe

#

thanks

flint coyote
wet breach
wet breach
#

or even interfaces

flint coyote
#

I have an abstract class to extend - still I can't create a static abstract method to enforce it's implemented

#

And if it ain't static I can't call it without creating the object for nothing

somber scarab
wet breach
#

well generally, your api shouldn't be worried about whoever extends something, just that they adhere to the api

somber scarab
#

This sounds exactly like what I want

flint coyote
#

?paste

undone axleBOT
wet breach
somber scarab
wet breach
#

well there is methods in the API for unloading chunks, but it does depend on server settings too

somber scarab
#

Act like its a skyChunnk instead of sky block, but using a random chunk everytime

wet breach
#

so lets say in server.properties its specified to have 4 chunks, you won't be able to unload those no matter how many api calls you make

#

I think its the spawn protection setting that also causes the chunks to stay loaded

#

don't remember if they made a separate setting or not

silent steeple
#

how to send colors to the console?

flint coyote
# wet breach well generally, your api shouldn't be worried about whoever extends something, j...

Well I have this class that is used to create Events (don't mistake them for Events to listen on) I just couldn't think of a more generic name
https://paste.md-5.net/qobukesuya.java

And an implementation could then look like this: https://paste.md-5.net/ikicovacub.java

As you can see there's that getDocumentation() method that I kinda wanna integrate in the EventDefinition abstract class. However since it's static I can't do so and it doesn't make sense to have it non static

#

So the only way to actually use the API is to extend EventDefinition. It's not a "could happen" it's a "must happen"

somber scarab
#

What I mean is.. is limiting the loaded chunks actually effective in making the world creation go much smoother?

#

myWorldCreator.create() <- this is the point where my server dies.

wet breach
#

probably not, world loading is resource intensive in regards to I/O. So, removing the amount of chunks it needs to load isn't going to necessarily remove the need for it as eventually those chunks will need to load regardless. The most it will do is just get the world loaded in the server faster, but you are still going to at some point need to load those chunks.

silent steeple
#

public void quit(PlayerQuitEvent e) {
e.setCancelled(true);
}

why doesnt it work

wet breach
#

in regards to minigames, you are better off spooling up another server then you are creating another world

#

because at least then your OS can optionally move that server to its own core to run on

flint coyote
wet breach
#

where as worlds don't necessarily have their own cores to run on separate from that of the main application

silent steeple
#

aw

flint coyote
#

You can't prevent someone leaving a server, how would you?

somber scarab
wet breach
silent steeple
#

damn

flint coyote
#

how? They can just disconnect their internet, what you gonna do?

wet breach
#

because you don't have control of their computer or connection lol

wet breach
somber scarab
#

Hm......

wet breach
#

not necessarily

somber scarab
#

?

wet breach
#

bungee server doesn't care if servers are offline or online

#

it only cares about that if someone tries to join a server that is defined and its offline

#

however, the servers defined can be changed via a plugin on the bungee server too

#

so you can dynamically create servers at a whim if you want

#

and still have them connected to the proxy

somber scarab
#

yeah but I dont know if I have the money to host a seperate server just to do that.

wet breach
#

what is your current budget now?

#

I assume you are making use of a host that charges ridiculous amounts for a server

somber scarab
#

well I pay 20 quarterly

flint coyote
#

for which specs?

wet breach
somber scarab
north hornet
#

how would i make it so in the console it removes all the colors from a text but ingame it keeps them? (im using configuration for the messages, so i can't just remove them in the message itself when sending to the console)

wet breach
#

and lets say I want 15 IPV4 addresses and a /32 of IPV6

#

and 8TB of HDD space

somber scarab
#

not sure

wet breach
#

for a VM with that?

wet breach
#

awesome, I can have an entire dedicated box with the amount you specified with those exact specs with a gigabit connection

#

A dedicated box is different then a VM from pebble host

tardy delta
#

i just logged in into the college server, i believe i can install a minecraft server on here 💀

somber scarab
wet breach
#

I typically rent my boxes from OVH

flint coyote
#

dedicated and 750€ one time pay with no additional cost

wet breach
#

well more specifically a subsidiary

flint coyote
#

pay once, keep forever

wet breach
#

soyoustart

north hornet
#

how would i make it so in the console it removes all the colors from a text but ingame it keeps them? (im using configuration for the messages, so i can't just remove them in the message itself when sending to the console)

wet breach
#

soyoustart has entire boxes for like $70-$80/month

tardy delta
#

mc server wont exactly work 💀

somber scarab
#

ANYWAYS, that was not my point!!!

I want my plugin to utilize one server. not two.

#

hm..

#

I have an idea

wet breach
#

however I understand that may not help you right now, but it is worth looking into though considering it isn't all that expensive to rent an entire box for yourself

#

where you can run 10-15 servers whatever

#

and not have to be charged for each one you want to run

somber scarab
wet breach
#

in the interim you could try looking into plugins or making something yourself where not everything loads at once, but all you are doing is extending the load time so as to not interrupt your current server

#

which can work

wet breach
somber scarab
wet breach
#

probably, but with sub par specs there isn't much you can really do

#

even more so if you are not allowed to make another server

#

to take advantage of hardware

somber scarab
#

what if...

somber scarab
#

I have a world that has minimum chunks loaded. and everytime a lobby wants to play, I pick a random chunk coords, load it, play, then reset the chunk to it's original form

wet breach
#

look at this they have a sale

#

$30/month

wet breach
#

4 core, hyperthreaded 32GB of ram and 4x2TB of HDD space

flint coyote
#

wouldn't an SSD be reasonable for MC?

somber scarab
# wet breach $30/month

If I am gonna pay 30 a month for alota services. I can just upgrade my own home server that I have.

#

Thanks alot for telling me about this tho.

wet breach
#

so might as well go with more

#

I have used HDD's for MC the entire time and never really had issues

flint coyote
somber scarab
wet breach
#

you can use it for website stuff and other things

#

also, its 4HDD's all at 2TB

flint coyote
#

ye ofc I just said normally you don't need it

wet breach
#

so you can make use of each of those on their own

#

its handy for MC because you can put your MC on its own HDD

#

OS on a different one

flint coyote
#

I personally wouldn't rent a server anymore. In Germany we have a hoster that sells lifetime servers. Lifetime unless they go bankrupt but so far they are doing fine

wet breach
#

if you ever need to reformat because OS died or you want to change you can do so without losing your MC stuff

wet breach
flint coyote
#

I mean they also host in the US but not for their dedicated servers (yet)

wet breach
north hornet
#

how would i make it so in the console it removes all the colors from a text but ingame it keeps them? (im using configuration for the messages, so i can't just remove them in the message itself when sending to the console)

wet breach
#

if you have a decent MC server with decent plugins you can run an MC server without restarting it for months at a time

#

myself and alex have done this

#

and I am sure some others have to

#

restarting mc routinely is not something that is suppose to be normal

flint coyote
wet breach
#

nice

#

well just let me know when they are in the US and I will check them out

#

I am pretty ruthless in my testing of servers so if they impress me I have no problems tossing their name out there as being decent 🙂

#

so far, other then PhoenixNAP, OVH is actually not all that bad at least not when I have used them several times

#

PhoenixNAP is decent, but in terms of price not so much but they offer more in support though which makes up for price

flint coyote
wet breach
#

that is why you have OVH Main

#

then Soyoustart

#

then Kimsufi

#

OVH main, has the most modern hardware, which gets moved to soyoustart after a few years

#

then after more years from soyoustart it goes to kimsufi

flint coyote
#

oh and they do 10-30% vouchers like all the time. So that servers is probably more like 600€ than 740€

wet breach
#

600 euros is still quite a bit

flint coyote
#

well after 1 or 2 years you don't pay anything anymore

wet breach
#

I would have to see that hardware perform before I invest that much

flint coyote
#

if you divide it by months

wet breach
#

just because its slightly outdated doesn't mean it can't perform lol

#

that is why OVH has those two sub companies

#

because they know that too

#

you don't need modern hardware to run a website

#

or even run MC

#

so as long as the hardware performs, its age doesn't really matter all that much for such things

flint coyote
#

that same server is 62,20€ per month if you don't use a voucher. So basically a year if you compare the prices

#

But I get the point about trying it out - you could rent it for a month before making your decision. For renting they also have the same vouchers. On black friday you might even get a 50% one

wet breach
#

nice

#

well I am primarily focused on US stuff since I don't like all the extra rules for doing international stuff 😛

#

so I will wait for them to come to the US

flint coyote
#

I mean it's a german company. They might offer US Servers but the company will still be german

wet breach
#

where the company is HQ'ed is not relevant, its where the hardware is located that is

flint coyote
#

I see. Guess you'll have to wait for them to offer dedicated hardware in other locations

wet breach
#

if its in the US or even canada, I am not subject to a lot of the international rules. Like following some of the EU stuff for example

tardy delta
#

cmon java why does this even need a default case

wet breach
#

lol

tardy delta
#

ill stick to my habit of throwing assertion errors then

#

btw does the compiler now translate Enum#valueOf, that method isnt present anymore in java.lang.Enum

flint coyote
wet breach
#

I probably would. Unfortunately you can't always force people to comply but as long as you have documentation though it really shouldn't be an issue

flint coyote
#

And just prints an error and makes that event unusable

wet breach
#

yes but people are dumb and they will always find a way

#

😛

flint coyote
#

I'm still the one in control since I'm the one developing the engine that uses all those resources 😛

#

Unless they fork it - in that case that would only affect their server so it isn't a problem either

#

I mean I'll probably use my own API the most for different "Eventpacks" - I just wanna give others a fair chance of doing so aswell 🙂

worldly ingot
#

Because it's added in the enum -> class PR

#

Which wasn't merged yet

wet breach
#

well if its mostly for yourself I probably wouldn't even worry about it all that much

flint coyote
flint coyote
river oracle
#

Hopefully everything is de-enumed by 1.21

worldly ingot
#

We'll get to experimental stuff soon which hopefully devs will be willing to try

tardy delta
#

sometimes im wondering what i even was doing

flint coyote
#

I kinda hope that people will like the engine/api and use it. But you never know :) So for now I just expect myself to use it. Will still provide documentation etc for others

river oracle
#

What kinda engine you making

flint coyote
flint coyote
# river oracle What kinda engine you making

An engine for regional "events". I put quotes because those are not to be mistaked with events that you listen to.

So basically you can define and configure as many events as you want for different regions. The engine got its own regions or you can use WG regions (or both).
It'll be all customizable ingame via book GUIs.

The events are code based, based on this class https://paste.md-5.net/qobukesuya.java

So basically it can go from simple stuff like "Players get potion effect while in region" to complex events like a parcour event that also stores checkpoints and timings etc

river oracle
#

Looks interesting

flint coyote
#

I'll also make a huge test server where all my events will be showcased with some explanation (might also grant access to other devs to showcase theirs if I trust them)

basically like a big house with many rooms, some eastereggs to find etc - so it will kinda be playable for fun but also the get ideas

#

A lot of things are already completed. It's some smaller features and some optimization that still has to be done - aswell as documentation

worldly ingot
#

Oh, experimental stuff is available already 🙂

#

java -jar BuildTools.jar --experimental, 1.20.1-experimental-R0.1-SNAPSHOT

#

I should update my tag PR later today

flint coyote
#

How sure can I be that this experimental Registry will be kept in the original release? I don't wanna change my engine to the experimental change for it to then be left out 😛
Besides that I can already do the swap to check if I find any bugs

worldly ingot
#

I mean it's experimental so the typical API guarantee is out the window

#

But it's meant to be used and tested

flint coyote
#

Well might still swap but not adjust code yet

worldly ingot
#

I wouldn't run the experimental build in prod btw

flint coyote
#

Never used an experimental version though. How common are bugs? Or is it usually just structure changes?

worldly ingot
#

Strong potential for bugs

#

Hence experimental. I'm sure md will make an announcement thread sooner or later explaining it more in detail. He only just did this 2 hours ago

flint coyote
worldly ingot
#

Probably more of the latter. I sincerely doubt current changes would at all corrupt your world

flint coyote
#

in that case np. Will still backup my world :)

worldly ingot
#

But still,

I wouldn't run the experimental build in prod btw

#

Unless it's like a small server between your friends or whatever

flint coyote
#

Currently that's my engine test server only. Would just be a shame if I lost the world

worldly ingot
#

Yeah that's fair. Always good to backup to be certain

flint coyote
flint coyote
#

Well that clashes pretty hard with my current implementation so I might actually be able to do valid tests with it

worldly ingot
#

Yeah, you'll almost certainly have source level incompatibilities

fervent prawn
#

How can I check that the block on which I respawn the player is safe (no lidquid (lava, water) and on the ground)?

worldly ingot
#

Well, you've listed out the conditions you want already

#

!block.isLiquid() and !block.isEmpty()

flint coyote
flint coyote
ancient plank
#

Guh I wanna view the changes but I'm on my phone :(

worldly ingot
#

Ugh. Stupid Stash

#

No idea why that's a permission

fervent prawn
worldly ingot
ancient plank
#

Well it's bc I'm not logged in

worldly ingot
#

stupid

flint coyote
#

I'm not logged in though. Do I have to be?

ancient plank
#

Ye

worldly ingot
#

Yeah if you log in it should let you

#

No clue why you have to be though

flint coyote
#

Which account do I use? I tried my spigot credentials but it did not work

ancient plank
#

It's a pita to log in on my phone so I just dont

worldly ingot
#

Separate account

ancient plank
#

You need a stash account

flint coyote
#

Alright where do I register?

worldly ingot
#

If you have a JIRA account I think they're shared

flint coyote
#

I don't

ancient plank
#

Jira and stash are same ye

worldly ingot
#

Good thing to have an account for. Source and bugs

flint coyote
#

Where is the register button?

worldly ingot
#

Uh, probably top right? 😅 Not sure. I'm always logged in so I don't even remember

flint coyote
#

Use an incognito tab - I only see a login and if I click on that there's a "problems logging in" - no registration 😅

wet breach
#

jira and repo use the same account, but to have repo account active you have to have the CLA

#

otherwise you only get the jira

flint coyote
#

maybe there's a registration on the jira then

#

?jira

undone axleBOT
flint coyote
#

ah yes there is

worldly ingot
#

You can still browse the Stash without CLA access, Frostalf

#

You just can't create or view PRs

#

But you should be able to see the compare tab

noble lantern
flint coyote
#

Well I did register in Jira and now it says "You have no permission to access bitbucket" when logging in on the stash

worldly ingot
#

If you login via the Stash you should be fine

flint coyote
tender shard
#

oh wait you registered on jira but try to use stash? that's two separate accounts

noble lantern
flint coyote
worldly ingot
#

Thought they were the same

noble lantern
tardy delta
#

ah yes

flint coyote
#

So do I have to sign the CLA to gain access?

worldly ingot
#

You shouldn't

#

Bro I hate Atlassian lol

tender shard
#

yeah it's really annoying

flint coyote
#

"No Permission to access Bitbucket"

tender shard
#

huh weird, I am pretty sure I made two accounts. one for jira, and one for stash

flint coyote
#

there isn't even a registration on the stash

tender shard
#

i got 2 different profile pics, so I assume it's also two different accounts for me

flint coyote
#

weird. It definitly recognizes my account though

tender shard
#

hm yeah anyway, I'm pretty sure you can only log in onto stash after signing the CLA

ancient plank
#

I have one sign in for both 🤔

flint coyote
#

where do I sign it?

tender shard
wet breach
#

?cla

tender shard
#

nvm first link I sent was just jira sign up

undone axleBOT
flint coyote
#

oh it's a google form. Well my google account has a different email

tender shard
#

doesn't matter

#

you just enter you JIRA name there

wet breach
#

^

flint coyote
#

Does full legal name include all my first names or only the primary one?

tender shard
#

doesn't matter at all lol

flint coyote
#

I see

wet breach
#

legal name is your name legally, even if you omit some of your first names that is fine as long as it is still legal

#

for example, I can use my middle name in place as my first and that is still legally my name

flint coyote
#

I think I can't omit my primary first name in germany - I am however not a lawyer

tender shard
#

you can use your middle name if you want but you don't need to

atomic brook
#

does spigot have 1.8.9 ?

tender shard
#

I never use mine

wet breach
#

oh does that not work

flint coyote
wet breach
#

!outdated

#

hmmm all well

atomic brook
#

sad

tender shard