#help-development
1 messages · Page 571 of 1
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
Yes?
ProtocolLib has a working version for 1.20?
dont think that will work with my parser lol
all it does is evaluating mathematical stuff
weren't you NazarXeXe or smth
idk
Its forum name. But in discord is nazarxexe
sad :( Could add >= <= == != operators though
ye
imagine
And true and false as values
currently in exams for this week
Google exist 
nothing wrong with 1 and 0 lol
1+ 1
true
Yes
Well depending on how the project is structured it can be an additional parser that runs as the last step if configured
Wow really? I already googled it, and it wasn't out from what I have seen, which is why I specified in my message that the plugin is 1.20
just let me know
But 2 isn’t true
2 is some kind of quantum state that is both true and false
No
(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.
T = true F = false | = OR !T = F etc
ah lol
a lot of things are replaced on the initial parsing already
e.g. expression.replace("!T", "F");
you added a bracket in the wrong place
^
player.addPotionEffect(new PotionEffect(PotionEffectType.FAST_DIGGING, Integer.MAX_VALUE, 4, false))
Variables can also be inserted by a preparser
b
currently my variables are functions that return a constant (like pi()) but im thinking about something like $PI
yeah
Yes
correct
Well you can insert variables by a simple string replace
For Pi it would be expression.replace("$PI", String.valueOf(Math.PI));
You would run something like that in a loop for all possible variables - maybe even optimize it by actually preparsing and storing which variables are in that expression instead of looping the full set every time
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
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!

The emoji?
yes
From some discord of a game I played a while ago. They got loads of pepe emojis
invite me

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

Whenever someone does database queries on the main thread
We only have 245 slots left

We at least need that one for when you just woke up and people already ask questions
But I guess less emojis are more healthy for the help-development channel

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
Sounds good to me
Is there an event to check if a map's pixels have changed?
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
If the packet constructor doesn’t take an id then no
time to get nitro and join some server with cool emojis I guess
Ah darn
Effort
And money
Oh well, I’ll just use protooclllib then
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
You could try PacketEvents
It’s similar to plib but you can shade it
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)
I honestly don’t really know what shading is
And at this point I’m too afraid to ask
you include it in your jar
lets say i wanted to add my library that has util methods i shade it
does anyone know if ij has a dialog window to see the actual merge conflicts rather than just saying they exist?
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
idk im on ultimate too
then it should work like that
Oh
in that case I dunno if you can view them again
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
mye
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?
and there you right click on your branch and say update
that's a pull with merge - if there a are conflicts you will get a popup with the option to resolve them
I was thinking about just using json but I'm worried that constantly updating the stock will be inefficient
yap got it, thanks
YamlConfigurations are already cashed after loading them so you have that data in memory. It only updates the file when calling save. Besides making a designated map with some optimized data structure there's not a lot more you can do
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
updating after every transaction will not be recommended right?
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
thank you
actually
just quickly
is there a way to cast a org.bukkit.entity.Entity to net.minecraft.world.entity.Entity?
cast to craftentity and getHandle iirc
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?
ty
which terms
The basics
?basics
Here are some links to get you started on learning Java:
- https://www.codecademy.com/learn/learn-java
- https://www.sololearn.com/learning/1068
- https://www.learnjavaonline.org/
- https://programmingbydoing.com/
- https://docs.oracle.com/javase/tutorial/java/index.html
The last one is the only official one, however some of those concepts assume that you already know a bit about programming.
this is stuff for learning java, spigot stuff is on the wiki
Anyone know how to remove the type of goat horn from the items lore?
probably the hide potion effect flag
can you look for people here who program for a fee or is that forbidden here?
its just mojank internals lol
that would be on the forums
?services
If you wish to request or offer development/art/building/administration services, please do so at https://www.spigotmc.org/forums/services-recruitment-v2.54/
255? lol that'd be bad. max integer is 2.147.483.647 or sth like that
2^31 - 1 iirc
Mhm
yep
i always find it weird that "lowest int" is basically one more than "max int"
ints are 4 bytes = 32 bits
32 bits
where 1 bit is the +/- sign
^
makes sense
and 0 is positive, so there's one less positive number than negative numbers
well more correctly 0 is non negative
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
yea fair
yeah bitwise negative numbers are represented as compliments
It makes sense tho
-2147483648 to 2147483647 is int range in java
That means there are 2147483648 negative numbers and 2147483648 non-negative
he said that its weird that 2147483647 + 1 = -2147483648
its just ignoring the carry flag
Ohhhh
Yay overflow
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
what
Yes same
Im so lost
I have to check if the itemCode in the arraylist exists already
you provided 0 info, what is even Inventory class
The inventoryof items
also do you know what this keyword means
array of what
The arraylist of the inventory
you created a new Inventory then check if your current object is already in it??
is it arraylist or array
arraylist
his Inventory object seems to be a Class with an arrayList in it
access shoudl be via DI or static
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
It cannot be static
you have to pass it somehow, using di or static getter if its singleton
it holds an array of data so it has to be a single instance
or you make teh array static so IT is a single instance
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
arraylist have #contains method, you can override equals and hashcode of your FoodItem class
you can, by passing already existing instance
isEquals is a custom method ```java
public boolean isEqual(FoodItem item) {
return itemCode == item.itemCode;
}
why not override equals
and then your whole code can be replaced with inventory.contains(item)
Wouldn't change anything really
Can't change the parameters
why not lol
looks like homework
have to be static singleton then ig
But seems wrong that prof is not allowing you to make your own solution lol
ALL data members MUST be declared as private (or protected in the Base class when necessary only).
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
ah
or make whole class singleton, and call Inventory.getInstance()
yep
do you not then need a public method to access the array so it can be accessed in another class?
yes
Unfortunately "If you need any other methods, they must be private helper methods."
in that case you have to create a singleton
tbh that approach of prof is stupid
you are not allowed to create a new Field?
Is the repo working for you guys?
what repo
ye having problems to
Only private helper methods so singleton is impossible.
which means your ONLY choice is DI
Glad I'm not the only one
Probably a issue on their side than
or there is something you mis read in the task
I can send you the document?
but he can't change constructor parameters lol
I don't think I read the tasks wrong
He has to be mis-reading somethign as those two make the task impossible
unless he uses reflection to instantiate it 😛
You wait
Don't think I did
Yea see FoodItem:
Updated: public boolean inputCode(Scanner scanner, boolean fromFile)
We're actually missing some raid API
RaidId and Wave aren't obtainable via the Raider interface. I'll add that now lol
bad choco
Is there a raid spawn reason
Yes
I suppose the CreatureSpawnEvent is an option if you're okay with doing something immediately as it spawns, or for tracking later
Can always add a pdc tag for later use
Or just hold it in a Set. Depends on how urgently you need it
We don’t persist the spawn reason do we? That’s a certain fork iirc
We do not
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
@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
what the fuck
1 - make sure you use a ConcurrentHashMap
i was bored and make chatgpt write it
Also given you're already using futures
no point in doing the whole prelogin thing
Just do your fetches on join
true
i was doing this before
yeah but then you gotta wait 2 years to login
Meh
its sqlite so it shouldnt be too slow
also
Neither should MySQL tbh
you repeating your getPlayer call
Unless it’s on the moon
im just using futures because i have a slight feeling ill be updating to mysql
You can still use futures and block
If it isn’t local
only reason i have the 2 events is to load it before they join and send the messages
You can send them once they loaded
im gonna take a wild guess and say i can just call Bukkit.getPlayer in the event and then send the message
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
spigot-repo be down?
yeah
oh just checking ty
p much
this works too
You don’t really need to make the future a variable there
ExplosionPrimeEvent fires when the creeper explodes
You can cancel it
something tells me it aint firin
.
probably some hash checking process
spigot repo is down so im guessing its trying to update constantly
oh right
Spigot is a SNAPSHOT dependency so probably
that would probably do it lol
its returning the right id here so going to load data
Inb4 forgot to register events
josh the sysouts outside of the future were called
and that sysout was called
that is triggered in the listener
what sysouts
the hasBloodline, being called? and null check on this, but the is null was never sent
so the called is sent, the traits sysout isnt
adding another prior to it is called
I'd add a .exceptionally to your future just for sanity
now the creeper will continually try to explode and its very annoying
you can run a scheduler to set the "swell" at 0
You can also set the fuse to just be really really long
So it’ll get fat but never explode
nah your setLevel can still throw an error
wat
just change your trycatch to accept all exceptions
fool
so the trait and stuff is added but the event handle still doesnt get called
the bloodlineData is null
somehow
add souts everywhere
Futures can fail
heheheheaw
nice
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
})});
im lazy and just used my scheduler utils with 1 tick delay lol
shit works now atleast
meanwhile I got an executor that calls runTask
spoke too soon
its because of this i know it
callSyncMethod also exists
Shame it still requires a plugin instance
pretty sure that's a paper method
No
unless it's 1.20 stuff
It's at least a decade old
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
the repo is down
Any eta on it anywhere?
If so, where would I check
md is looking into it, so shouldnt be too lon
Shouldn't be too long as is a few mins? a few days? what scale of time are we talking?
few years
Ight
It should be up now
so it is
Idk how long the maven cache is tho
daily iirc
No way it caches the failure for a day
Actually it’s “update interval”
coll you want some chocolate
And it looks like the repo itself sets it
Oh geez the default interval is a day
So is it fixed or no
bump
But you can run maven with -U to force an update
Yes
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
?services
If you wish to request or offer development/art/building/administration services, please do so at https://www.spigotmc.org/forums/services-recruitment-v2.54/
if anyone gets this guy to stop cross posting i'll give you a pat on the back
watchu services
Hi, I have a question why parseComments doesn't save the comments?
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.
default is true so you should never need to use that method
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;
}```
?stacktrace
We cannot help without the full stacktrace; Please paste it here: https://paste.md-5.net
Nah that’s not what I wanted
its suppost to be messages.reloaded
ik how to read stacktraces i was just having a blankmind moment lmfao
okay yeah it be fixed now
thanks
?stacktrace
We cannot help without the full stacktrace; Please paste it here: https://paste.md-5.net
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.
declaration: package: org.bukkit.event.entity, class: EntityPlaceEvent
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?
Alright I'll test with it then
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)
you set in the constructor if its async or not
ahh didnt see there was a super ty
or be a clown like me
and do super(!Bukkit.isPrimaryThread()) to always be safe
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
can't wait until the dudes at work do their job so I can showcase my exponential meshing setup :)
So regarding the event. What you suggested works, but it appears that everything boat related is deprecated and the type of deprecated that doesn't work anymore. Do you know of any way around this or am I going to have to do NMS or something
Do u have more stuff to show us
Like jvm flags
And a tree of what eats cpu/ram
yeah will do tomorrow in going to bed now
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?
delay changing the spawner 1 tick
I'll give that a try..
Yeah issue still persisting. Still works in creative
show some code
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
When you place a spawner in survival it's always a pig. Try setting the entity type manually in the runnable
as a test
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 ?
it's all been moved around as a test unfortunately :/
you can also just use runTask instead of runTaskLater
as of 1.19 the spawners are empty iirc
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.
yes for survival
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
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
try middle clicking while holding control on the spawner and then place it in survival
let me try delete essentials to see if that was the issue lol
just use a try with resources so you don;t have to bother closing
ohhh thats what olivo was talking about earlier
thought it was only for errors
tyty
In any case, if you have access to the item the block is being placed with you can get the spawn type from there.. somehow... probably
But seeing you try PDC, you already did that.
Like.. I don't even see a reason to have the event, you can just store the entity in the item itself with BlockEntityTag
it wasn't a problem in the past
Unless BlockEntityTag is broken in vanilla (or spigot broke it) it should work
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
is there a way to use try with resources while the methods inside async? switched it over and now everything inside try doesn't fire hmm
Might look into NBT tags since that's what single player MC was using
tf are you doing
?paste
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
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
well the lib im using is async
its downloading videos
so yeah, the output stream isnt used until later
so i guess it loops back to this question then since it seem try-with resources is off the table
Are both streams handled seperatly in this context or do both have to be closed?
ah btw i just looked it up async in try resources should work
both are getting closed by the call
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"
look at the screenshot i sent then the code
from here
and even then
disreguarding everything else
why am i having the issues here
why aren't you catching ioexception?
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
always
from what I remember finally is pointless
i want to store a boolean against a player. is using an nbt tag fine in this case?
version 1.14+?
yep
my bad. i meant pdc :P
ok cool. kinda tired of using silly maps for everything
assuming with against the player you mean inside
yeah. itll stick around after restarts too, correct?
yes I would hope so
thanks!
easy to test though
the wiki seems to suggest that itll stick
persistent data container 😛
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

so true
hey hold on. does pdc even support boolean
yes
you can put whatever you like in it, custom data types
TBH that one i want to ignore but you did remind me that i did this on my Files.move call and uhh that seemed to be my issue
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
the permissions to move something is different then to rename something
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
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
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
that is just the windows indexing/com surrogate program running that is doing that
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
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
wait where do you disable indexing ?
so thats why when i delete something everything in the directory flickers
there are two places, you can disable indexing on the drive where you just go into the properties for the drive
thought i was going insane
side note though so glad this is finally working after so long 
all because of not catching an exception to show you the problem
but I am glad you finally got it working though 🙂
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
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
yeah tbh idk why i was using sneakythrows during dev that was dumb of me
top 10 dumbest moments for me right there ngl
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
is that why renameTo works compared to the others then i assume
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
probably, but its generally best though that you use the OS to manipulate files unless you have some specific reason to avoid it. Like maybe you are making so many changes you don't want the OS to handle all of that right away, just at the end
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
which database to use to save player parties?
depends on the criterias you have
thankfully the files its throwing together for this can easily be redownloaded from youtube again so if something does ever happen its not gonna be un-recoverable
Will definatly look into other ways of making copies though :))
Ty for all the info!
after that i just gotta spin up a javalin server to serve the resource pack and this hellish conversion can be over >.>
also, in regards to files you might want to look into the async methods of files too
oh theres other methods to files?
Current works already on another thread rn, didnt know there was async File methods though
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
AsynchronousFileChannel ?
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.
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
for the writing aspect I would probably use memory mapping, and toss them all into a single file until all of them are done downloading, and then after download then split that large file into its own separate files
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
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
well, I don't know what you are coverting from and to, but if it turns out its not all that difficult, you could instead implement the conversion directly into your program instead of relying on an outside program
most of the time the conversion is just changing the file format and not the data itself
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
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
its the ogg part mainly
i couldnt find any ogg conversion libraries for java specifically
just the ffmpeg wrapper
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
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
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 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
yeah that all sounds waaaay above any type of programming knowledge i have 🤣
lol
i didnt even know the different file extensions had different encoders
well, to give you an idea of this conversion
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)
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
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?
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
first it depends on the server.properties settings in how many chunks load initially. But there is api methods for loading and unloading chunks. So yes it is possible and doable however might want to ensure your players don't go outside of the chunks that are not loaded otherwise they fall to their deaths
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
how is it better to make a table with parties: an array of uuids or use a new column for each uuid?
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
I will have the leader as the primary key in the table and then the players
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
second
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
yes but how to save party members
on the second table
but there may be too many of them
| leader id/party id | player id |
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
it will be necessary to check whether the player is already joined to the party
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
player's persistent data container does not move between servers?
yes, but so that all servers know that the party exists, you need to store them somewhere
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
it seems more complicated
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
jree
there is an idea to simply store somewhere in the main player database the true or false value in the party column
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
anyone got any idea for this one? Or just stick with static and scream at the devs when they forget to provide the method?
never said it was a bad idea, just in terms of easness if its not something that really does need to percist I would opt to just not use anything to store it.
this is where abstract classes come in
or even interfaces
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
Is there a link or somewhere you can point to help me look further in this?
well generally, your api shouldn't be worried about whoever extends something, just that they adhere to the api
This sounds exactly like what I want
?paste
well server.properties contains settings in regards to the spawn, such as spawn protection and I think loaded chunks too for the spawn. The minimum is 1 chunk must be loaded for every world
But you also mentioned I can say in the API that I do not want any chunks to load further than my initial
declaration: package: org.bukkit, interface: Chunk
well there is methods in the API for unloading chunks, but it does depend on server settings too
Act like its a skyChunnk instead of sky block, but using a random chunk everytime
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
how to send colors to the console?
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"
I see, would you say that would actually fix the problem of my server lagging for 1 minute every time someone wants to create a world to play my minigame?
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.
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.
public void quit(PlayerQuitEvent e) {
e.setCancelled(true);
}
why doesnt it work
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
That event does not implement cancellable
where as worlds don't necessarily have their own cores to run on separate from that of the main application
aw
You can't prevent someone leaving a server, how would you?
Okay.. how would you recommend I go by this issue then? I just need a random set of chunks to be loaded in an abbys where ppl can play for a few minutes, then it deletes
because you can't stop a player from quitting your server
spooling?
why not
damn
how? They can just disconnect their internet, what you gonna do?
because you don't have control of their computer or connection lol
another way of saying starting
oh man. So I either have to make a Schematic or have another mega server..
Hm......
not necessarily
?
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
yeah but I dont know if I have the money to host a seperate server just to do that.
what is your current budget now?
I assume you are making use of a host that charges ridiculous amounts for a server
well I pay 20 quarterly
for which specs?
its most likely an overloaded box and they just have a VM
not really. I use pebble host works very good so far and all
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)
yeah they charge ridiculous amounts. I will give an example. If you want a server with 64GB of ram how much would they charge for that?
and lets say I want 15 IPV4 addresses and a /32 of IPV6
and 8TB of HDD space
possibley 64 ~ 80 a month?
not sure
for a VM with that?
64 gigs
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
i just logged in into the college server, i believe i can install a minecraft server on here 💀
an ARM computer?
I typically rent my boxes from OVH
dedicated and 750€ one time pay with no additional cost
well more specifically a subsidiary
pay once, keep forever
soyoustart
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)
soyoustart has entire boxes for like $70-$80/month
mc server wont exactly work 💀
ANYWAYS, that was not my point!!!
I want my plugin to utilize one server. not two.
hm..
I have an idea
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
I could look into it..
can you link me a decent provider of your choice that i can look into?
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
as I said above I use OVH, soyoustart is a sub company of OVH
wouldnt that cause the game to take like multiple minutes to start?
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
all good. I have another idea..
what if...
Dedicated Server
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
how does that sound?
4 core, hyperthreaded 32GB of ram and 4x2TB of HDD space
wouldn't an SSD be reasonable for MC?
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.
I am not a fan of using SSD for something like MC, but they definitely can go with it. However you end up with less harddrive space for the same price
so might as well go with more
I have used HDD's for MC the entire time and never really had issues
then again you don't need 8TB for MC. Actually for most servers <1 TB is perfectly fine
is there a considerable change in start time of the server with SSDs? Its a major "selling point" on many hosting services
true, but the dedicated box can be used for other stuff. like DB's. I had a plugin that was better then core protect and it used up 500GB in just DB alone XD
you can use it for website stuff and other things
also, its 4HDD's all at 2TB
ye ofc I just said normally you don't need it
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
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
if you ever need to reformat because OS died or you want to change you can do so without losing your MC stuff
unfortunately I am not on that side of the globe
I mean they also host in the US but not for their dedicated servers (yet)
SSD's are faster however servers performance like MC or whatever are not measured based on start up times
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)
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
Guess at some point they'll offer dedicated servers at all those regions aswell - this is their offer for rootservers
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
Well sadly they use pretty old cpus for their dedicated servers. Therefore it's cheap as you can see here. That's a lifetime price
OVH uses old hardware too
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
oh and they do 10-30% vouchers like all the time. So that servers is probably more like 600€ than 740€
sounds reasonable
600 euros is still quite a bit
well after 1 or 2 years you don't pay anything anymore
I would have to see that hardware perform before I invest that much
if you divide it by months
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
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
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
I mean it's a german company. They might offer US Servers but the company will still be german
where the company is HQ'ed is not relevant, its where the hardware is located that is
I see. Guess you'll have to wait for them to offer dedicated hardware in other locations
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
cmon java why does this even need a default case
lol
yeah I get that
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
To get back to my original problem
@wet breach did I get it right that you would just stick to the static version and expect people to comply with the documentation?
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
Well I can force them when the engine does not allow that method to not exist
And just prints an error and makes that event unusable
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 🙂
Why is it still missing? :(
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Registry.html
declaration: package: org.bukkit, interface: Registry
well if its mostly for yourself I probably wouldn't even worry about it all that much
It isn't I just don't know how many will be willing to use it :)
Unfortunate
Hopefully everything is de-enumed by 1.21
We'll get to experimental stuff soon which hopefully devs will be willing to try
sometimes im wondering what i even was doing
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
What kinda engine you making
If that includes that Registry I'll be willing to try
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
Looks interesting
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
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
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
I mean it's experimental so the typical API guarantee is out the window
But it's meant to be used and tested
Well might still swap but not adjust code yet
I wouldn't run the experimental build in prod btw
Never used an experimental version though. How common are bugs? Or is it usually just structure changes?
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
as in "can destroy your worlds and all server files" or as in "might have bugs that annoy players"?
Probably more of the latter. I sincerely doubt current changes would at all corrupt your world
in that case np. Will still backup my world :)
But still,
I wouldn't run the experimental build in prod btw
Unless it's like a small server between your friends or whatever
Currently that's my engine test server only. Would just be a shame if I lost the world
Yeah that's fair. Always good to backup to be certain
will there be a short changelist? So I know what I might have to stumble upon?
Well that clashes pretty hard with my current implementation so I might actually be able to do valid tests with it
Yeah, you'll almost certainly have source level incompatibilities
How can I check that the block on which I respawn the player is safe (no lidquid (lava, water) and on the ground)?
Well, you've listed out the conditions you want already
!block.isLiquid() and !block.isEmpty()
Well, no since I interacted with all the Enums via Reflection since it's pretty dynamic.
But if there are no more enums it will automatically fall back to the "Keyed" case which will then either work or die
what login do I use here? I just get a 500 and my spigotmc account is not working
Guh I wanna view the changes but I'm on my phone :(
Thanks. I try this condition before, but it seemed to don't work every other time. Apparently the error is in another
Are you able to access this page, Fabsi? https://hub.spigotmc.org/stash/projects/SPIGOT/repos/bukkit/compare
Well it's bc I'm not logged in
no, 500
stupid
I'm not logged in though. Do I have to be?
Ye
Which account do I use? I tried my spigot credentials but it did not work
It's a pita to log in on my phone so I just dont
Separate account
You need a stash account
Alright where do I register?
If you have a JIRA account I think they're shared
I don't
Jira and stash are same ye
Where is the register button?
Uh, probably top right? 😅 Not sure. I'm always logged in so I don't even remember
Use an incognito tab - I only see a login and if I click on that there's a "problems logging in" - no registration 😅
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
ah yes there is
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
This says the sha1 has to be 20 bytes long - but they're normally 40 (At least mine is)
Do I just use the first half of the sha1 string then?
Well I did register in Jira and now it says "You have no permission to access bitbucket" when logging in on the stash
sha1 is always 20 bytes
If you login via the Stash you should be fine
sign the CLA
https://hub.spigotmc.org/stash/login?next=%2Fprojects%2FSPIGOT
i tried logging in here
oh wait you registered on jira but try to use stash? that's two separate accounts
mines 40 hexa dec but using getbytes returns 40 wtf....
no it's not. I'm not getting an invalid credentials
Thought they were the same
ah yes
So do I have to sign the CLA to gain access?
yeah it's really annoying
"No Permission to access Bitbucket"
huh weird, I am pretty sure I made two accounts. one for jira, and one for stash
there isn't even a registration on the stash
i got 2 different profile pics, so I assume it's also two different accounts for me
weird. It definitly recognizes my account though
hm yeah anyway, I'm pretty sure you can only log in onto stash after signing the CLA
I have one sign in for both 🤔
where do I sign it?
?cla
nvm first link I sent was just jira sign up
The home of Spigot a high performance, no lag customized CraftBukkit Minecraft server API, and BungeeCord, the cloud server proxy.
oh it's a google form. Well my google account has a different email
^
Does full legal name include all my first names or only the primary one?
doesn't matter at all lol
I see
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
I think I can't omit my primary first name in germany - I am however not a lawyer
you can use your middle name if you want but you don't need to
does spigot have 1.8.9 ?
I never use mine
Well some banks require it
sad
no
