#help-development

1 messages · Page 326 of 1

remote swallow
sterile token
#

main: dev.alex.net.command
core: dev.alex.net.command.core
bla bla

remote swallow
#

technically you should only use dev.alex if you own alex.dev

civic prairie
sterile token
#

Just let go up to find the problem because everything looks fine

remote swallow
twin venture
#

...?

remote swallow
#

using the scheduler is the entire point to replace that

civic prairie
remote swallow
#

use a scheduler

#

runTaskLater

civic prairie
#

ah ok

#

thanks

sterile token
civic prairie
#

ahhh ok

sterile token
civic prairie
#

yea, true

#

manny thnaks

sterile token
#

na no problem, that why spigot implemented an schedule system to do that type of things

civic prairie
#

yea

sterile token
tardy delta
#

?scheduling

sterile token
#

Do you know what can cause issues? Because i just realized that i cannot even access to core classes, when adding as dependency spigot module (but its implement core module), so i must be able to view all classes (spigot and core module classes)

#

Maven weird bugs momment

#

@quiet ice what do you think tho? I already find what you asked me

quiet ice
#

the mvn dependency:tree of your command-example module

remote swallow
sterile token
#

Could not resolve dependencies for project dev.alex.net.command.core:command-core🫙1.0.0: Could not find artifact dev.alex.net.command.api:command-api🫙1.0.0 in central
(https://repo.maven.apache.org/maven2) -> [Help 1]

tender shard
#

what does core depend on?

sterile token
#

Really shity maven, trying to download the api from remote repo 🤡

quiet ice
#

Yeah, what is interesting me more is the tree that it should've printed

tender shard
#

it's not maven what's shitty, but your project setup

sterile token
quiet ice
#

Eh fuck it, just fork me over your project in a zip

tender shard
#

your modules probably depend on each other, right?

sterile token
tender shard
#

if that's indeed all, then it should work

#

mvn clean install -X on the parent pom and send the full log

sterile token
#

yes that why im really mad becaue it must be working

tender shard
#

or just upload it to github

sterile token
#

yeah

#

Will upload it to github

civic prairie
#

Cannot resolve method 'scheduleSyncRepeatingTask(Main, Runnable, long)'

quiet ice
#

?jd-s

undone axleBOT
remote swallow
#

?paste code

undone axleBOT
civic prairie
#

thanks

#

i have it. 100L

civic prairie
#

ahh, no, but i only want to run it once

tender shard
#

then why are you using a REPEATING task?

#

use runTaskLater

remote swallow
#

runTaskLater(Plugin, runnable, long)

quiet ice
#

yeah noticed lol

civic prairie
#

line 63

quiet ice
#

Use hte method I linked

civic prairie
#

ok

#

same

tender shard
#

repeating task is for repeating tasks

remote swallow
#

use scheduler.runTaskLater(this, new Runable(), longDelay

tender shard
#

use runTaskLater

fervent gale
#

I got a question, I have a physical economy and want to be able to deposit specific items in a players inventory so I need to remove 6 specific items, they are same material same lore but have almost same name so I need a way to remove all of the specific items in the players inventory

quiet ice
#

Or scheduleSyncDelayedTask

civic prairie
#

but i have a problem

tender shard
remote swallow
#

you are not

civic prairie
#

Cannot resolve method 'scheduleSyncRepeatingTask(Main, Runnable, long)'

remote swallow
#

you are still using repeating task

tender shard
quiet ice
remote swallow
#

not runTaskLater or scheduleSyncDelayedTask

tender shard
#

do you actually read what people write?

civic prairie
remote swallow
#

you just said you want to delay it

tender shard
#

earlier you said you don't want to repeat but only wanna run it once

quiet ice
#

Then have two longs

civic prairie
tender shard
#

no

fervent gale
#

@tender shard

ItemBuilder(Material.IRON_NUGGET).amount(amount).name("&f$int &cFlash Coin(s)")
            .lore("Universal Currency, Visit Spawn To Visit the Universal Trader!").build()``` 

$int is the number i switch between its `1, 5, 10, 20, 60, 100`
civic prairie
tender shard
#

give your currency a custom pdc tag, e.g. "myplugin:worth" -> PersistentDataType.INTEGER with values 1, 5, 10, etc

sterile token
fervent gale
#

It doesn't have a PDC

#

😦

tender shard
#

every itemmeta has PDC

fervent gale
#

i didn't set it

remote swallow
#

you can add pdc quite easily

tender shard
sterile token
#

mfalex i sent the repo, i will be seing my self too whats happening

fervent gale
#

@tender shard ill look into adding it

tender shard
#

match 1 group 1 will be the amount

ocean hollow
#

hi guys again. How can I write permissions? I wrote this, and I don't need to register anywhere else? further to give it rights through luckyperms?

livid dove
#

doing debugging now

sterile token
livid dove
tender shard
sterile token
quiet ice
#

@sterile token build using mvn install instead

livid dove
quiet ice
#

mvn package is bricked

livid dove
sterile token
tender shard
#

you fucked it up using the relocations

#

do not shade the core into your api, then relocate the core

#

remove all your <relocations> and it compiles just fine

#

it seems a bit weird that you shade core into API anyway

sterile token
#

🤔

compact haven
#

typically speaking, API is just a bunch of interfaces

#

and so core shades API, not the other way around

tender shard
#

oh sorry, other way around

#

you are shading api into core

#

and then you even relocate it

#

that makes no sense

compact haven
#

yeah idk about that relocation, but the shading is correct depending on how your setting up the API

tender shard
#

I'd set it to scope provided

compact haven
#

if your API is just a bunch of interfaces and DOES NOT rely on methods from core, then that's fine

#

if for whatever reason your API actually uses shit from core, then needs to be swapped

sterile token
#

That the whole issue

#

I just understand

#

💀

tender shard
#

as said, without the relocations it compiles just fine

sterile token
fervent gale
#

whats best way to retrieve DataContainers on an item

pseudo hazel
#

stack.getMeta().getPersistentDataContainer()

#

or some such

pulsar parcel
#

Hello,does anybody know how can I set type of block on stone and after few seconds set it back?

tardy delta
#

?scheduling

undone axleBOT
fervent gale
#
    public PersistentDataContainer getPDC() {
        if(!stack.hasItemMeta() || stack.getItemMeta().getPersistentDataContainer().isEmpty()) return null;
        return stack.getItemMeta().getPersistentDataContainer();
    }
#

maybe?

compact haven
#

tf type of logic is that

#

to return null if the data container is empty

vivid cave
#

what is the slot and raw slot nb for offhand?

#

and are these magic numbers?

compact haven
#

raw slot is dependent on whatever inventory they have open

vivid cave
#

i wanna check if offhand slot is involved e.g

tardy delta
#

check google for an image

compact haven
#

try 45

remote swallow
vivid cave
#

(not raw)

remote swallow
#

ive got no idea lol

vivid cave
#

so i don't have to add a check the type of inventory

remote swallow
#

this is normal i think

tender shard
#

crafting is 41-45

tender shard
remote swallow
#

ah

fervent gale
#

@tender shard from what I gathered is this correct

#
    public ItemBuilder pdc(String name, JavaPlugin plugin) {
        ItemMeta stackMeta = stack.getItemMeta();
        PersistentDataContainer pdc = stackMeta.getPersistentDataContainer();
        NamespacedKey surnameKey = new NamespacedKey(plugin, name);
        pdc.set(surnameKey, PersistentDataType.STRING, plugin.getName().toLowerCase());
        stack.setItemMeta(stackMeta);
        return this;
    }
    public PersistentDataContainer getPDC() {
        if(!stack.hasItemMeta() || stack.getItemMeta().getPersistentDataContainer().isEmpty()) return null;
        return stack.getItemMeta().getPersistentDataContainer();
    }
vivid cave
#

i just need the non raw slot id for offhand

remote swallow
#

oh wait

#

it will

#

im blind

#

i thought that was 1 method not 2

fervent gale
#

its 2 lol

vivid cave
#

(so like the unique identifier of offhand, globally, not dependent to the inventory)

fervent gale
#

i'm updating my ItemBuilder

remote swallow
#

that gives a rough idea

#

create a new instance of itembuilder, do stuff to it then set the itemMeta

#

so you arent needing to call getItemMeta afor each method

fervent gale
#

@remote swallow can I use this?

remote swallow
#

yeah

fervent gale
#

It's so much nicer than mine

remote swallow
#

ive been meaning to update it

fervent gale
#

lol Java isn't my strong suit Kotlin is

remote swallow
#

a few things i need to add

remote swallow
fervent gale
#

I'll star it and follow updates

#

i got some java in my project

compact haven
remote swallow
#

no kotlin

compact haven
#

kotlin > you

#

so sorrys

remote swallow
#

fair

fervent gale
#

@tender shard so whats the best way to go about getting the items based off PDC and removing all of it

rotund ravine
#

Kotlin is cool, don’t hate on it without reason.

#

You are saving items in the pdc?

remote swallow
#

to remove all pdc on an item loop over the keys and call pdc.remove(key)

tender shard
fervent gale
#

How to remove the entire thing not just one?

compact haven
#

3 different people have 3 different ideas on what he meant

fervent gale
#

I'm very confused on how that works

compact haven
#

that's quite funny

remote swallow
#

yeah

#

why wouldnt we

#

if we all have different ideas help quicker

compact haven
#

a call to Inventory#remove(ItemStack) will remove the exact number present in the ItemStack

remote swallow
#

errrrr

compact haven
#

so if the slot has an ItemStack with amount 38, 38 will be removed

#

afaik

remote swallow
#

i totally havent just realised a totally not breaking bug with better item config

compact haven
#

what

remote swallow
#

can you tell whats missing

compact haven
#

the other handlers

remote swallow
#

the name

compact haven
#

and enchants, if u did that

#

but thats alright, u can just deploy again

remote swallow
#

i just got name, lore, effect one done last night

remote swallow
compact haven
#

it wasn't ever the end of the world because, remember that the current system is incredibly expansible

#

all I'd need to do would be to define my own ItemFactory instance

#
public static final ItemFactory ITEM_FACTORY = new ItemFactory.Builder()
  .register(new NameHandler())
  .register(new LoreHandler())
  .register(new CustomEffectHandler())
  .build();
remote swallow
#

this is most definately gonna be painful to wikify

compact haven
#

btw epic

civic prairie
#

Is drop a item of item editor?

compact haven
#
        if (section.isSet("amount")) {
            builder.amount(section.getInt("amount"));
        } else {
            builder.amount(1);
        }

can just be

builder.amount(section.getInt("amount", 1));

fervent gale
#

So much i really don't understand about spigot

compact haven
fervent gale
#

like I don't understand tab complete

remote swallow
#

i forgot i can def that

compact haven
#

dont worry I forgot about that abt a few days ago

#

alex reminded me

fervent gale
#

How does one tab complete

remote swallow
#

one moment

#

same way for executor but make the class extend TabExecutor and ij should give you the method to add

#

then just return a list of tab complete options

#

or return StringUtil.copyPartialMatches(args[num], list, new ArrayList<>())

fervent gale
#

all i want to add to tab complete is player names

remote swallow
#

one moment

#

ill write something up for it

fervent gale
#

thx thx

#

im still learning spigot api

#

it's huge

tardy delta
remote swallow
#

just online players or all players

fervent gale
#

Onnline

compact haven
#

it'd be 1

tardy delta
#

config.getInt("something-missing")

#

without default

compact haven
#

yeah it should be 0

fervent gale
#

@remote swallow wait u can also do all?

compact haven
#

or it'll throw

#

but should be zero

remote swallow
#

Bukkit.getOfflinePlayers

tardy delta
#

wondering why they arent using optionals

fervent gale
#

My lookup cmd is useless i don't remember offline names lol

compact haven
#

because md5 doesnt like Optional

meager wharf
#

setVelocity trouble

compact haven
#

and when this code was written, Optionals might not've even existed

worldly ingot
remote swallow
#
@Override
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { 
    switch (args.length) {
        case 1 -> {
            List<String> players = new ArrayList<>();
                Arrays.stream(Bukkit.getOfflinePlayers()).forEach(offlinePlayer -> players.add(offlinePlayer.getName()));
                Bukkit.getOnlinePlayers().forEach(player -> players.add(player.getName()));
                return StringUtil.copyPartialMatches(args[0], players, new ArrayList<>());
        }
    }
}
``` most definately a better way but it explains the concept
distant ridge
#

anyone have a good purchase verification bot?

fervent gale
#

interesting

#

@remote swallow whats stringutil

remote swallow
#

Bukkit one

#

org.bukkit.util.StringUtil;

fervent gale
#

ah

#

interesting

tender shard
distant ridge
#

what is it?

tender shard
#

well my own one

remote swallow
#

your moms so ugly

distant ridge
tender shard
remote swallow
#

acf > bukkit > brigader

#

at somepoint ill manage to make my own framework

#

that only uses bukkit command system internally

#

yea

#

because i dont have a framework

mental frigate
#

yo guys, does anyone know how to send title in 1.19.2? On 1.16.5 it's PacketPlayOutTitle, but I didn't find it on 1.19.2.

remote swallow
#

player.sendTitle

tender shard
undone axleBOT
tender shard
#

yeah maybe in 1.8

mental frigate
meager wharf
#

(pls check threads if you havent already)

tender shard
#

even in 1.9 there was Player#sendTitle(...)

#

so no idea why ANYONE would use packets in 1.16 for this

worldly ingot
#

I believe 1.8 still had #sendTitle() but there was no overload for #sendTitle() with timings

mental frigate
worldly ingot
#

That was introduced in 1.9 last I recall

mental frigate
#

thanks guys

quaint mantle
#

how do I prompt input from console?

#

im trying to create an interactive command that works with both players and the console

#

but I just realized there isnt really an event for console input

tender shard
quaint mantle
#

unless you listen to ServerCommandEvent which is sort of janky as it can mess up other commands

tender shard
#

https://docs.google.com/document/d/1ofTMA6dv7Vk3v4kKhLTC1sUooHgTq71ti44AI09OsNM/edit there's this a good explanation about the Conversation API here, don't ask me why it's a google docs file lol

civic prairie
#

Hello. Is posible to use the dropItem with a object of items editor?

tender shard
civic prairie
#

And how can I do It?

#

How can I get the Code of the item?

mental frigate
tender shard
#

what even is items editor?

remote swallow
#

player.spigot.sendMessage(actionbarthing i dont remember)

tender shard
mental frigate
#

okay thank you so much

quaint mantle
#

also does bukkit have a built in tool to view other plugin's plugin yml files?

civic prairie
quaint mantle
#

im just manually using a zip libary to do that rn

chrome beacon
#

What are you reading from the plugin.yml?

quaint mantle
quaint mantle
quaint mantle
#

Im tryna replicate what plugman does but a bit differently

chrome beacon
#

Then you will need to use that zip lib

quaint mantle
civic prairie
#

Ok, thanks

quaint mantle
tender shard
quaint mantle
#

all it does is change displayname

#

and lore

tender shard
#

oh well then just create those items yourself

#

create an itemstack, get the itemmeta, change th ename and lore, then set back the itemmeta to the itemstack

fathom cobalt
#

Anything I should be aware of before jamming in a web server (like Ktor for example) in a Spigot plugin? Aside from making sure to run it on its own thread

tender shard
fathom cobalt
#

potentially public

civic prairie
hazy parrot
fathom cobalt
#

yeah, suspected as much

tender shard
#

well for a private plugin, you are way better off running an actual webserver. and for a public plugin - I guess most MC hosters don't allow you to use any ports besides the one they assigned you

fathom cobalt
#

so kinda useless 🤔

#

unless I somehow accept HTTP traffic on the same port I run the MC server on

tender shard
fathom cobalt
#

yeah, some proxy solution was what I was thinking

hazy parrot
#

I mean, there are quite popular plugins that use integrated webserver, for example dynmap

fathom cobalt
#

but sounds like I'm better off just not doing it, and have a separate web server instance

hazy parrot
#

And people use it ig

fathom cobalt
#

so if people can't get that working, it's not my problem 😛

#

because getting around only one port issue is annoying as it is anyway

hazy parrot
#

If that was your first argument

tender shard
#

yeah sure, just wanted to say it is possible in theory

#

on a shared hoster, ofc not

fathom cobalt
#

perhaps I just make it, and people can use it if they are able to 😛 can always just make a plugin that can also run standalone for those who wish to do that

#

anyone happen to know any forks of Bukkript/KotlinBukkitAPI that are up to date btw?

civic prairie
wet breach
#

so you could try hosting an embedded webserver and hope its open/unblocked 😛

fathom cobalt
#

but not 443? guess I can always just run https off of 80 😛

wet breach
#

also keep in mind you can absolutely have 2 services using the same port as long as they are making use of two different protocols

#

http is a different transport protocol then just pure TCP

wet breach
#

since many don't know you can run multiple services from the same port 😛

fathom cobalt
#

TCP happen on layer 4 or something, then HTTP on layer 7 iirc

wet breach
#

HTTP is a transport protocol

#

MC doesn't use HTTP

#

therefore no clashing

fathom cobalt
#

yeah, that part I know ^^

#

either way, I will just make these things configurable, so whoever installs this plugin (if it ever makes it out), can decide what's more suitable to them

wet breach
#

its not about whether they use TCP or not, rather if they make use of different transport protocols or not. Because you can have multiple connections on the same TCP port, so it only makes sense it works the same way the other way around

fathom cobalt
#

ah right, makes sense, I think!

#

Minecraft has its own protocol, just like HTTP does

wet breach
#

yes

#

But as long as they are not making use of the same ones. IE if mc was uing HTTP

#

it would interfere with the webserver and only because the nic and OS wouldn't know which service needs it

#

since the packets would be identical

#

for either one

#

anyways, usually easier to just use a better hoster though

#

instead of having come up with some odd setup/solution to what should be not really much of a problem 😛

tender shard
#

which one looks better? slider below/top, or slider on the side?

#

i guess side

wet breach
#

that slider on the side is really small

twin venture
#

quick questions , what can do this?

#

idk why , but armorstands , entitys

#

everything is upside down

fathom cobalt
wet breach
tender shard
#

hmmm ok thx I'll think about it

tender shard
#

hm actually the slider seems big enough, it's quite easy to select an accurate value, and even if not, there's still the jspinner with the arrow keys

wet breach
#

yeah it looks good

frank kettle
#

is there a way to know if a chunk has been "created"? I assume loaded is different than created

spring pike
#

I would like item drops to be directly added to the inventory of the player, but it doesn't work when my inv is full and I already have the block, it still drops it to the ground

remote swallow
#

you would need to listen to blockdropitemevent

spring pike
#

oh that exists?

remote swallow
#

yeah

spring pike
#

lets see if it works then

livid dove
#

So the pwnplantgrowth plugon I am guessing is causing lag issues due to its nature but the logs are poop for seeing.

If any of my dev inclined friends here could have a gander I would appreciate ^_^

#

I have a feeling its the issue of a lot of extra math being done on the main thread which tbh, doesn't need to be

wet breach
frank kettle
#

if I try to get a Chunk, does it load automatically or can it return null if doesnt exist?

#

im doing a code where it checks 100x100 around me chunks. will it return null if a chunk hasn't been "created"? or some way to check this?

#

or will the chunk be created if i call for it?

#

🤔

wet breach
#

depends what methods you are using

#

the chunks won't be null unless for some reason it failed to load. But the objects you use to access the world object for the chunks could be null

#

if the chunk doesn't exist, some methods if not all of them will cause the chunk to load/generate

spring pike
sterile token
spring pike
#

so the item doesn't drop from the block too

#

should i do drops.clear();?

sterile token
#

No no

#

Yo should cancel at the end, because if you cancelling the event and then dropping block agains. They wont get dropped

spring pike
#

didn't change anything

#

my problem is that my inventory is full, but I already got one dirt block. When I break another dirt block, instead of it getting added to my inventory, it drops to the ground

spring pike
#

the block is supposed to go to my inventory upon breaking, unless there's no space for it

#

then it's supposed to drop to the ground like vanilla

remote swallow
#

oh wait

#

i have code for that

tardy delta
#

no need to check if remaining is empty

spring pike
#

removed

remote swallow
#
private void giveOrDropItem(Player player, Block block ,ItemStack... items) {
        Map<Integer, ItemStack> map = player.getInventory().addItem(items);

        for (ItemStack item : map.values()) {
            player.getWorld().dropItem(block.getLocation(), item);
        }
    }
tardy delta
#

literally same thing lol

spring pike
#

still giving it a shot

remote swallow
#

im guessing it wont work because you create the map of items that arent being added during the for loo

spring pike
#

thanks, your code worked

remote swallow
spring pike
#

🖕

#

jk

remote swallow
#

fourteen when he says its the same thing but then has a different outcome

echo basalt
#

I finally decided to write code after a long time

#

turns out that like

#

shit likes to work in a very funky way

remote swallow
#

you forgot how to code

echo basalt
spring pike
#

pc 01010101 numbers

remote swallow
#

angle of attack

echo basalt
#

I get that it's angle based

remote swallow
#

and hippity hoppity your ip is now my property

echo basalt
#

ah sure

#

127.0.0.1

spring pike
#

delete delete delete delete

echo basalt
#

here I'll make it spam particles at me

remote swallow
#

are you like getting the block they are looking it with no max range

#

because thats the only way you would get like y20

#

from y36

#

or somethin

echo basalt
#

range is 5

remote swallow
echo basalt
remote swallow
#

how could you

#

paper api

#

really

echo basalt
#

paperweight

#

🤷‍♂️

remote swallow
#

also who is minecollar

echo basalt
#

dont ask

remote swallow
#

are you under nda to not say

echo basalt
#

maybe I own the technical division :)

#

and don't want attention

remote swallow
#

damn

#

you own a staff group

#

but havent touched ur pc in like a week

echo basalt
#

It's more like a small team

#

It's me and a friend of mine doing the coding

#

then guy that sponsors it all

regal scaffold
#

How can I get the amount of items that drop when a block is mined including enchantments

remote swallow
#

block drop item event

tender shard
#

do you people reuse existing GridBackConstraints or create a new one everytime?

#

are constraints are sooo annoying

regal scaffold
#

I looked on google and all I could find was nms, reflection and a bunch of no

#

Prob for older versions

willow moss
#

Is there a specific way in saving data that I want to be deleted when the server shuts down? I am not sure what the best way to do this is using Minecraft plugins but I am here looking for suggestions.

#

For example: If I were to want to save the players killstreak.

tender shard
#

Metadatable

river oracle
tender shard
#

same

#

I usually wrap it inside some other object

river oracle
#

I stay far away from java swing and java awt

#

honestly I think if I ever do UI with java I'ma just use JavaFX

echo basalt
#

I honestly don't understand where tf I'm going wrong with this code

remote swallow
#

are you putting the maps or the particle stuff on the wrong block

echo basalt
#

the particle stuff should match the maps

#

because I use the same location in both cases

#

but depending on the orientation it's completely off

remote swallow
#

did you manage to fuck the math up or something

echo basalt
remote swallow
#

or are you somewhere taking the players ange into the math

echo basalt
#

I'm not

#

in this case I'm not

#

hmm actually I see where I might have fucked up

remote swallow
#

rubber duck debugging

echo basalt
#

I mean

#

it shouldn't matter

#

I'm just rounding up a location to the nearest block

#

but still

wet breach
#

that matters depending which way you are facing

#

or in this case orientation

echo basalt
#

and I might've made the thickness so small

#

that this doesn't actually detect my clicks

#

I might actually need to detect the actual exact corner depending on the rotation

#

this might be a bigger pain in the ass

wet breach
#

or just make sure your rounding is consistent even when comparing with other locations

#

if you round down all the time for example even if its .9 it should work

#

or if you round up

#

but you would have to do it for all the fractionals and not just some

#

that is round in a consistent direction

echo basalt
#

I already have a version of this working but it's really bad

#

my problem now is that the thickness algorithm is a bit clonky and I need to figure out a way to use negative thickness for negative axis

#

this should work

#

wait I can run the debugger on a runServer thing?

#

woot

civic prairie
#
```why can't i create a object like this?
wet breach
#

well you don't necessarily need negatives for opposite axis

echo basalt
#

I mean

tender shard
civic prairie
#

yea, i know

#

but i cant use " because there are " in the middle

wet breach
#

?learnjava

undone axleBOT
echo basalt
#

x=0.999,y=85.12149592250223,z=2.695547134350819

minX=0.9836707073975663,
minY=83.9022688857353,
minZ=1.3203729714867958,

maxX=0.9936707073975664,
maxY=85.9022688857353,
maxZ=2.3203729714867958

#

hm

civic prairie
#

mabye \" works

#

like in js

#

i don't know java, but js yes

echo basalt
#

yeah that's the problem

tender shard
#

if you really need to create items from this json-like string, you can do it like this

        ItemStack item = new ItemStack(Material.WATER_BUCKET);
        item = Bukkit.getUnsafe().modifyItemStack(item, "{CustomModelData:1, Damage:0}");
echo basalt
#

the x=0.999 is fine

#

as that's my border estimation part

#

which helps with performance

tender shard
#

however you shouldnt do that and there's literally NEVER a reason why you would need to create items from this json-like stuff

echo basalt
#

but the hitbox should be between 0.999 and like 0.899

tender shard
#

creating the item manually

civic prairie
#

ah, no. I need this way

#

thanks

tender shard
#

the proper way is using ItemMeta

        ItemMeta meta = item.getItemMeta();
        meta.setDisplayName("my item");
        meta.setLore(Arrays.asList("my","lore"));
        meta.addEnchant(Enchantment.CHANNELING, 1, true);
        item.setItemMeta(meta);
echo basalt
#

now, I need to offset the initial location by the corner

#

as it's just like a decimal thing atm

#

I'm thinking maybe location.toBlockLocation and then snap it to the corner based on the direction

civic prairie
echo basalt
#

like if it's north, it's ceil(y) + floor(x) etc

#

hm

wet breach
echo basalt
#

It's a bit specific

#

I'll use trapdoors because they're easier to demo with

wet breach
#

or show the relevant math?

#

not sure why I need a trapdoor

echo basalt
#

to understand the problem first

#

and so the math makes sense

wet breach
#

hopefully

#

until it turns out your math is wrong 😛

echo basalt
#

assuming I only have the block location and the direction of the board, I first assume where the frame is

#

So that if I'm looking ahead, I know that the frame is basically attached to the block behind it

#

and facing me (the opposite direction I'm facing)

#

This helps with accuracy

#

So let's say I'm looking at this frame

#

I first obtain its hitbox (where I'm failing now)

#

which is where the trapdoor is

#

Then I do 1 cast per block, until I hit a block that has a hitbox under it

#

So basically the block where the trapdoor is

#

Then, based on the current position and the position of the trapdoor's thinnest side, I can make a very small but accurate raycast

coarse grotto
#

Hey! I am confused why I went onto spigot and noticed my plugin was removed or maybe marked as private? I didn't receive an email or anything?

echo basalt
#

And end up with the perfect pixel coordinate, in distance(player, frame) + 1 iterations

#

The problem right now is that the hitboxes don't match

#

I know why one of the positions is a bit off

#

And I'm struggling to think of a solution

#

Basically, when I spawn a frame at a location, I just pass the playerlocation + whatever offset

#

And minecraft automatically snaps it to the block (that's how itemframes work)

#

But for accurate positioning I need to know the actual corners of my image instead of just wherever the top-left point is

#

Easier said than done, given I have 6 axis to work with

wet breach
#

why can't you just get the trapdoor?

#

its location and then gets its corner

echo basalt
#

I have some point in the middle of the trapdoor

#

How would I get its most top left corner, regardless of rotation

wet breach
#

ok, but that doesn't seem to matter when it snaps to the block

#

so get the middle point afterwards?

echo basalt
#

I start with the middle point

#

When I spawn the board, I just use the player's location + the direction offset

wet breach
#

its not needed if you know the size of a trap door

echo basalt
#

It's needed if I want to know exactly where in the trapdoor I'm looking at

wet breach
#

sure, but if you know the size of the trap door, get its location and facing after its snapped to a block

#

then you should know where exactly mid point is

echo basalt
#

I know a location that's like... the middle of the trapdoor

#

That's the problem

wet breach
#

I think it is just your order in doing things that is screwing it up

echo basalt
#

To know what pixel I'm looking at, I need to know where x0y0 is at

#

What if I don't know where x0y0 is at

#

I'd need to calculate it

wet breach
#

that would be impossible unless you didn't know the size of a trapdoor

echo basalt
#

The size doesn't matter, I just need to know what block corner the top left corner of the trapdoor belongs to

humble tulip
#

???

#

When did this convo start

wet breach
#

but it does matter because your 0,0 on the trapdoor is arbitrary according to everything else so to make sure it is center you need to know the size of the trap door to have your offsets from the block face location

#

and then you just use the size from there

echo basalt
#

if I use North,South,West,East I know it's always at a top corner

#

I can then estimate the edge it's at

#

🤔

humble tulip
#

Can u give a tldr?

wet breach
#

you don't even need to estimate here

#

but if you want to do it the hard way go for it I guess

#

but the order in how you do some of these things is also a factor too

#

can't just be applying the size of an object to another if it suddenly moves and you didn't account for it for example

echo basalt
#

Here's how it starts

#

notice how the 2nd param is not an integer location

#

Now, that second param is meant to be the corner location

#

Where the top-left 128x128 frame is at

wet breach
#

which param?

#

can't see the top of the method

echo basalt
#

playerLoc.add

#

on the imageboard constructor

#

Any following frames are calculated here

#

the reason for the trapdoor thing is that they're basically itemframes with maps, but actually have a thickness, yet hang onto the block the same way

wet breach
#

ok not sure how this is relevant to what I said

#

in how to get the exact locations

echo basalt
#

Yeah so basically the corner location is skewed

#

and I want to fix it with code

#

Now, how would you go about fixing it?

#

Just toBlockLocation from the start?

wet breach
#

get the location of the trap door, and since it doesn't sit perfectly even with the block minus its size with the size of a block. Gives you the offset all around. From there its not hard to get a mid point of the trap door

#

this would be harder if you couldn't look up the size of a trap door

#

or it couldn't be known

#

as for your grid of 0,0 you would just map the point you found as being the center to being now 0,0

echo basalt
#

as in?

#

I think you're thinking about snapping it to the lowest corner of a block

#

where everything has no decimals

wet breach
#

no

#

trapdoors don't sit perfectly alingned with a block face

echo basalt
#

well itemframes and maps do

wet breach
#

what I meant is they don't take up the entire block face which you have to account for

civic prairie
#
com.mojang.brigadier.exceptions.CommandSyntaxException: Expected '}' at position 45: ...{Name: '{'<--[HERE]
#

How can i solve this?

wet breach
#

otherwise you are not going to find mid point

civic prairie
#
ItemStack item = new ItemStack(Material.DIAMOND_SWORD);
                                        item = Bukkit.getUnsafe().modifyItemStack(item, "{HideFlags: 4, Damage: 0, display: {Name: '{'extra':[{'text':'hola'}],'text':''}'}, AttributeModifiers: [{Name: 'generic.movementSpeed', Operation: 0, UUID: [I; 1461744232, -864534134, -1964839385, 1725294635], Amount: 2.0d, AttributeName: 'minecraft:generic.movement_speed'}]}");
echo basalt
#

they are incredibly thin

wet breach
#

ok, we were talking about trapdoors

echo basalt
#

trapdoors are basically these but with a thickness

#

which is important for raycasting

wet breach
#

but thickness isn't even a factor in regards to finding mid point

echo basalt
#

The current issue I have is that the corner location is not perfectly aligned with the location of the actual frame's corner

#

so if I spawn it while I'm standing in the middle of a block, the whole cuboid is shifted by that middle thing

#

and I can't just round it down because well... if I have something downwards-facing it would be offset by a whole block

wet breach
#

you don't need to round

#

how wouldn't you know the size of the pic?

echo basalt
#

I could know the size of the pic

#

and I do actually

#

But that doesn't help much, does it?

wet breach
#

then it isn't hard to get the corner

#

or know how much it is offset by

echo basalt
#

Well I'd need to start from a known anchor

wet breach
#

which is the trapdoor and the block

echo basalt
#

not really because the trapdoor's top left corner can actually be in different "block corners" based on its rotation

wet breach
#

those are already known sizes, all you are doing is overlaying a pic, which is calculatable to know its offset

echo basalt
#

not really

#

Not sure what size has to do with this

#

it can be 1x1 or 100x100 the top left corner is still the top left

#

the position of the pixel at x0y0

wet breach
#

because its static, the only difference is where the bottom of the trap door is at, but its size is always the same

#

once you know where the bottom of the trap doors is at

#

that is the direction of your offset

echo basalt
#

isn't the bottom just top + size?

wet breach
#

don't remember off top my head, but once you have that, when you put the pic over it you can figure out where its corner is at, using the offset you obtained from the trapdoor combined with the known size of the pic

echo basalt
#

I don't think you get the idea that all the known positions are skewed by the same offset to each other

wet breach
#

that should make it easier then

echo basalt
#

I don't know that offset

#

and I'm trying to figure out where they should really go so I can calculate that offset and fix it all

#

anyways I'll just commit, go to bed and try again tomorrow

wet breach
#

why not measure it in game

#

not like these offsets are going to change

echo basalt
#

they change every time I spawn them

#

because the offset derives from the player's location

wet breach
#

well you derive the offset from the players location

#

these items are not changing sizes

echo basalt
#

I still need to calculate stuff because if I just subtract stuff I'll end up with wrong results

wet breach
#

therefore the offsets which there should be 4, can be pre-calculated

#

as for the player perspectice that is a different calculation but you need to know the location of your corners or at least the mid point at minimum

#

so you need to know all the various offsets that the pic/trapdoors can have. They are not going to magically change unless mojang decides to update the sizes one day XD

regal scaffold
#

hey

#

How can I prevent a player from being able to fly in a specific world

#

Is it bad performance wise to loop through every player and check location?

#

Not sure how much it would affect
I wanna make them stop flying and not allow them to do it again while they are in the world. Ideas?

tender shard
#

github copilot knows their shit. everything below 12% is barely a proper wine

regal scaffold
#

Alex help a brotha out

tender shard
#

can'T you just set setALlowFlight to false in PlayerChangeWorldEvent ?

regal scaffold
#

That's the idea I needed

#

Thanks ❤️

tender shard
#

np

rotund ravine
#

inb4 you have /fly

regal scaffold
#

Does /fly bypass setAllowFly?

rotund ravine
#

all it does is set it to true

regal scaffold
#

Please say no

#

...

#

So how can I do this then

#

Disable /fly and make my own?

rotund ravine
#

sure

#

or just disable that command in that world

#

PlayerPreprocessCommandEvent or smth

regal scaffold
#

Does that work for other plugins commands?

rotund ravine
#

well for most.

regal scaffold
#

Wait so you're saying usepreprocess to check world and disable that?

#

Unless I add delay that wouldn't work

rotund ravine
#

yeah cancel the event should they use that command in the other world.

regal scaffold
#

I think best aproach is custom /fly

rotund ravine
#

sure

regal scaffold
#

Cause if they switch worlds and they're flying

rotund ravine
#

you will listen to both events obv.

regal scaffold
#

Gotta wait for them to do a command in the world or delay

#

Well yeah true

#

Alright thanks, got an idea

#

Just finished adding autocollect supporting all enchantments

#

With infinite storage

wet breach
#

bukkit.commands.fly

rotund ravine
#

Oh yeah

regal scaffold
#

Also an option but on worldchange

rotund ravine
#

Luckperms have contextual permissions

regal scaffold
#

But doesn't disable flying if they already are

rotund ravine
#

no

#

obv you still need to

regal scaffold
#

I guess worldchangeevent

#

Little question

rotund ravine
#

This and the other suggestions in tandem.

regal scaffold
#

What would event.getplayer.getworld return when PlayerChangedWorldEvent

wet breach
#

but what it would do is stop them from using the command without you having to implement checks for command usage

rotund ravine
#

We are not suggesting you to do only one thing.

regal scaffold
#

Is it the new world at the time of the event

rotund ravine
#

?jd-s

undone axleBOT
regal scaffold
#

Got it

wet breach
regal scaffold
#

Not according to docs

#

Is that in practice?

rotund ravine
regal scaffold
#

Priority = low

wet breach
#

so it depends which method 😛

humble tulip
#

?tryandsee

undone axleBOT
wet breach
#

if you do player.getWorld() from the event method

#

you would get the previous world if done too soon

rotund ravine
#

Nah

#

It runs after they've teleported.

wet breach
#

if you do event.getPlayer().getWorld() it should return the world they changed to

rotund ravine
#

Hence the event.getFrom

regal scaffold
#

Yes, that's what the doc say

rotund ravine
#

Oh where are yo ugetting this player from?

wet breach
rotund ravine
#

Well he shouldn't have a player object

regal scaffold
#

Indeed I don't

wet breach
#

alright well I am pointing out the caveat in how you can get the previous world lol

regal scaffold
#

How may I include a annotation for intelliJ to show when I start wring a method

#

Like I want to remind myself that this 1 method doesn't need X

rotund ravine
#

hm?

#

?xy

undone axleBOT
remote swallow
regal scaffold
#

Actually don't know how it could display

#

hmmm

#

nvm don't think it's possible

#

Just gotta remember

remote swallow
#
// this is my totall very cool method
public void shut() {
    System.exit();
}
rotund ravine
#

Atleast use javadocs comment

regal scaffold
#

lol I forgot the name of the argument shows in the autocomplete

#

That was simple

rotund ravine
#

remember lowercamelcase

regal scaffold
#

Indeed

#

Even intellij don't like

remote swallow
#

you didnt use lowercasecamel

#

use it

#

or no minecraft

regal scaffold
#

I just did

remote swallow
#

good

frank kettle
#

why is runTaskAsynchronously way slower than if i use a server scheduler(which can bring lag to server)

#

or should i be using a different way for running Asynchronously?

rotund ravine
#

It is not.

frank kettle
#

well, using "normal code", in 3 seconds this checked all the blocks in like 25x25 chunks

#

now it's taking like 2-3seconds per chunk

rotund ravine
#

what are you running async???

frank kettle
#

im testing this async to see how it works

#

so im checking the average of blocks per chunk, loading all the blocks in a chunk and counting them

#

and without using any runtask, it was like 3 seconds of a full server lag to do 25x25 chunks data

#

now it's that time but per chunk(but server doesnt lag)

rotund ravine
#

you getting the chunks async?

#

They have lower priority than getting them sync.

frank kettle
#

is that perhaps why its way slower?

rotund ravine
#

Also ask on paper.

frank kettle
#

oh

#

im using spigot api 🤔 does it change if server is in paper?

rotund ravine
#

You sure?

frank kettle
#

i only code in spigot

rotund ravine
#

send me the function you are getting the chunks async

frank kettle
#
Bukkit.getScheduler().runTaskAsynchronously(Main.getInstance(), new Runnable() {
                    @Override
                    public void run() {
                        long timestamp = System.currentTimeMillis();
                        HashMap<Material, Integer> blocks = new HashMap<>();
                        Chunk originalChunk = player.getLocation().getChunk();
                        for (int chunkx = -44; chunkx<44; chunkx++) {
                            for (int chunkz = -44; chunkz<44; chunkz++) {
                                Chunk chunk = originalChunk.getWorld().getChunkAt(originalChunk.getX() + chunkx, originalChunk.getZ() + chunkz);
                                checkChunk(chunk, blocks);
                            }
                        }
                        Main.getInstance().getLogger().info("-----");
                        for (Map.Entry<Material, Integer> each : blocks.entrySet()) {
                            Main.getInstance().getLogger().info(each.getKey().toString() + ":" + each.getValue());
                        }
                        long timestamp2 = System.currentTimeMillis();
                        player.sendMessage("§7§oThis took " + (timestamp2 - timestamp) + "ms.");
                        Main.getInstance().getLogger().info("§7§oThis took " + (timestamp2 - timestamp) + "ms.");
                    }
                });```
#

this?

rotund ravine
#

Why are you calling getChunk and getChunkAt async. They're not threadsafe

frank kettle
#

so should i get a list of chunks before using async and then run through that list in async?

frank kettle
wet breach
frank kettle
#

just testing thigns out and trying to figure it out

wet breach
#

all good, but the reason it is slower or just as slow is because even though your code is async doesn't mean the methods you are attempting to use are made for async or also run in async as well

#

you can go async then back to sync because the method you used is sync

frank kettle
#

but wouldn't that be as fast as sync?

wet breach
#

sometimes

frank kettle
#

or does it take some time to switch between sync and async?

wet breach
#

it takes time to switch

#

also called context switching

frank kettle
#

cause it was like 20ms to get a full chunk in sync, now 3 seconds if i do it inside async

meager wharf
#

does anyone know how to fix this error when trying to use structureblocklib?

[15:36:42 ERROR]: Could not pass event ProjectileHitEvent to Plugin v1.0.0
java.lang.NoClassDefFoundError: com/github/shynixn/structureblocklib/api/bukkit/StructureBlockLibApi
remote swallow
#

are you shading it

frank kettle
#

so i can get a list of this chunks in sync and then go through them in async? 🤔

wet breach
#

sure

wet breach
#

yeah you can get chunksnapshots

frank kettle
#

what's that?

wet breach
#

its a snapshot of the chunk so you can use it async

rotund ravine
#

ChunkSnapshots are kinda intensive as well.

#

They're not cheapæ

fervent aspen
#

how many mgb is a players inventory?

#

like the max amount it can have

meager wharf
humble tulip
frank kettle
# humble tulip What are you doing tho?

Well, I wanted to know the rarity of certain blocks so im calculating all the blocks count in the the chunks around me. but it breaks the server in sync so I started to play around with async

rotund ravine
#

If you use Paper, they have a way to get chunks async safely.

rotund ravine
frank kettle
remote swallow
frank kettle
#

🗿 🍷

remote swallow
#

maven or gradle?

rotund ravine
#

depending on the server sion obviously @fervent aspen

meager wharf
fervent aspen
#

cause a chunks storage is 2kb

meager wharf
#

i have it in my pom.xml as a dependency

humble tulip
rotund ravine
#

version* @fervent aspen

frank kettle
remote swallow
meager wharf
#

alright thanks

wet breach
frank kettle
#

exactly like chunks but used for different threads

fervent aspen
frank kettle
#

makes sense then

#

so i assume ChunkSnapshot only allows to read blocks and not edit them?

humble tulip
#

Yes

frank kettle
#

that's exactly what i wanted, ty

humble tulip
#

You may be able to edit and then apply sync

#

Not sure

frank kettle
humble tulip
#

Ig

frank kettle
#

i wanted just to know +- how rare are diamonds and other ores compared to normal stone

#

to create a shop with "fair prices"

#

thats all

humble tulip
#

You could just look at wjat tje generator does tho

frank kettle
humble tulip
#

Also it's seed dependent

humble tulip
frank kettle
#

🗿 I just want something simple

humble tulip
#

Remember villager trades are a thing

frank kettle
#

in 5 minutes i discovered it, that option u talking about sounds like a lot of hassle for not something i need

humble tulip
#

Tha can mess up ur economy if not taken into account

frank kettle
#

also this is for a "community storage" which has a limit per item, so its not like they can "abuse" it too much

#

if an item gets sold too much, then nobody else can sell it.

#

so im not too worried with that

#

--

#

alright aside from that

#

ChunkSnapshot does not have isLoaded

#

do i need to check this as a chunk beforehand? 🤔

wet breach
frank kettle
#

ah ok, just checking

wet breach
frank kettle
#

yeah im using that

#

but i need to also check if the chunk has been "created"/loaded

wet breach
#
if(chunk.isLoaded){
ChunkSnapShot snapshot = Chunk.getChunkSnapShot();
}
#

or something to that affect

frank kettle
#

right now i have soemthing that checks if its loaded and if not loads and asks again after a tick

#

i will change it around and come back if find more sussy stuff

#

thanks for the input guys

regal scaffold
#

What would be a smart way to prevent someone from running a command if they have been hit recently

remote swallow
#

add their uuid to a map with the unix time they got hit, if they ran a command with X seconds of that unix time dont run

regal scaffold
#

but but

#

If I make a hashmap how can I access it from a command file

#

Like my structure has commands separated from events

remote swallow
#

make the hashmap in main class then, you can easily get it from anywhere then

regal scaffold
#

Could make it static in a third file but is that good?

#

Is that good practice?

#

What you just said

frank kettle
#

statics are bad

#

🗿🍷

regal scaffold
#

What else

wet breach
frank kettle
wet breach
#

just invoke the load method

#

if its loaded it does nothing

#

if its not loaded it loads it

#

no need to check if you need it loaded anyways

regal scaffold
#

What other alternative besides a static hashmap on main class

frank kettle
regal scaffold
#

Is passing the same instance of main to both files better efficient wise?

frank kettle
#

i suppose this is +- what u are saying to do

wet breach
#

replace that if with just a load method and then start your for loop

frank kettle
#

ah

#

the load will return a boolean if its loaded?

wet breach
#

so you could do if (chunk.load())

frank kettle
#

got it got it

wet breach
#

yes it returns a boolean

frank kettle
#

i see now

#

ty

wet breach
#

now you got your boolean and loading in one go

#

🙂

frank kettle
#

yeah but now i have to fix this code

#

since it is async then sync then async then sync again per chunk

#

😂

wet breach
#

well that is just part of development you know

frank kettle
#

back to it

#

🍷

atomic spoke
#

Does the spigot.yml file have a mob cap when spawning mobs

kind hatch
#

@compact haven
I read back over the convo we had yesterday and I think I found where the disconnects were. The first one being the names you used for the columns. I have since changed them for my sake. Doing so helped give me a better understanding of the table as a whole. For the second one, I wasn't realizing that since defaults were being defined that I wouldn't have to supply those parts of the query. 😅 The dots were not connecting there. My bad. lol

Which yea, when looking at what I would need to write, is much simpler and pretty cool that it can be that short.

The other thing I wasn't understanding, and kinda still don't understand fully, was the the sudden switch on how the timestamp were being stored. Was it because there wasn't a good default for BIGINT? Or was it something else? I understand that I might not need millisecond accuracy. I'm definitely not displaying milliseconds anywhere. However, I'm concerned that it might effect statistics that I might want to pull. If players have entries with the same timestamp, which is more than possible, how would it affect statistical data, if at all? Or am I'm just overthinking it and it's actually a non issue?

atomic spoke
#

Let me explain better. I have spawners for a mineshaft that players move through. Once i went past 64, The newer mobs spawn then immediately despawn. Could this be spigot limiting mob spawns? Sorry if this is in the wrong channel. If it is redirect me. Thank you.

humble tulip
#

@atomic spoke once what goes past 64?

atomic spoke
#

Once i go past 64 mobs spawned

#

Bukkit is set to a 5k limit

#

which ill readjust after the fact but that didnt correct my issue

compact haven
# kind hatch <@141339894155837440> I read back over the convo we had yesterday and I think I...

You world be sorting by interaction_id, not timestamp, so no problem there. Even if you had two interactions with only differing milliseconds, I don't see much of a problem. As for why we are storing INT instead of BIGINT, the reason is simple- MySQL only can provide the seconds since unix epoch, and so upcasting it to milliseconds is just a larger number for no reason. In that case, we just allow MySQL to provide us seconds, as an INT, and store it as such, The other alternative is to * 1000 and store it as a BIGINT, but that's 4 extra bytes per timestamp for no reason, because the precision is still merely seconds.

frank kettle
wet breach
#

perhaps

frank kettle
#

it only did 7.7k chunks when they were supposed to 9801

#

code:

Bukkit.getScheduler().runTaskAsynchronously(Main.getInstance(), new Runnable() {
                    @Override
                    public void run() {
                        long timestamp = System.currentTimeMillis();
                        Chunk originalChunk = player.getLocation().getChunk();
                        World world = originalChunk.getWorld();

                        ArrayList<Chunk> chunks = new ArrayList<>();

                        for (int chunkx = -44; chunkx<44; chunkx++) {
                            for (int chunkz = -44; chunkz<44; chunkz++) {
                                Chunk chunk = world.getChunkAt(originalChunk.getX() + chunkx, originalChunk.getZ() + chunkz);
                                chunks.add(chunk);
                                Main.getInstance().getLogger().info("Chunk done. (" + chunks.size() + ")");
                            }
                        }
                        player.sendMessage("Total chunks:" + chunks.size());
                        long timestamp2 = System.currentTimeMillis();
                        player.sendMessage("§7§oThis took " + (timestamp2 - timestamp) + "ms.");
                    }
                });```
#

any reason for 2000 chunks to not be listed? 🤔

#

or is 7744 the max amount of a arraylist?

regal scaffold
#

Folder:

-> Main:
-> Commands instance of cooldownmanager
-> Events how to share same instance to initiate a cooldown on event
-> CooldownManager

hazy parrot
#

is this a question or what

regal scaffold
#

The question is in the explanation yes

frank kettle
hazy parrot
#

Assuming its manager, you probably want your CooldownManager to be singleton

#

don't know your usecase, but yeah

kind hatch
regal scaffold
#

I thought about static

#

No other good ways?

#

People say no tos tatics

meager wharf
willow moss
#

I am trying to register the listener in the class added using the add method. It keep saying that it requires a listener however whenever I try to put in the class it just says cannot resolve symbol getClass().

public static void add(Check check) {
        // Register Events
        Probability.getInstance().getServer().getPluginManager().registerEvents(new check.getClass(), Probability.getInstance());
    }
#

Any suggestions?

gleaming grove
regal scaffold
#

What?

wet breach
regal scaffold
compact haven
#

the database doesnt convert anything. unix seconds and unix milliseconds is independent of timezone, it's from Jan 1970 UTC (no offset)

#

it's still storing just a number, it's just an int not a long

remote swallow
gleaming grove
#

You create this manager in main class and put it to constructor of classes that depend on it

kind hatch
frank kettle
regal scaffold
#

Hmmm

wet breach
frank kettle
#

i noticed now i wrote 44 instead of 49

#

💀

regal scaffold
#

Thanks

compact haven
frank kettle
#

its supposed to be 49

meager wharf
#

wait yeah

compact haven
#

you yourself said you didnt want to "redo your entire system"

#

so I told you how to get it as a long

#

that's all

meager wharf
#

oh change that to compile

frank kettle
#

ty again mr frost

balmy valve
#

anyone know if an/what event is called when you use a hoe on rooted dirt and convert it to dirt

wet breach
regal scaffold
#

wait no

gleaming grove
#

Why?

regal scaffold
#

Because the commandfile never gets called from main

#

I mean it does eventually I guess?

#

goes to a cmdImplement then register

#

Do I just drag it down the path lol

gleaming grove
#

But command class is created in main as well