#help-development

1 messages · Page 966 of 1

smoky anchor
#

each armor can have only one trim
and idk what you mean by layer2

torn shuttle
#

so in theory I would just make custom trims and apply it to normal armor here?

#

what identifier would I use for that?

smoky anchor
#

so long as you're fine with original armor showing under it

smoky anchor
torn shuttle
#

I mean how do I go from my png to having it show in-game

smoky anchor
#

You google
But you can either use a datapack definition, or some weird in-line (in the itemstack) definition.
Second one needs only RP iirrc.

torn shuttle
#

so I can just define a brand new trim in the resource pack?

smoky anchor
#

no, the definition of trim is in datapack, but through some weird nbt shenanigans you can just.. not do that
I would however recommend the datapack definition, probably easier to maintain.

torn shuttle
#

yeah I'm reading that page right now

#

I've never seen a better argument for a game adding a chainmail bikini armor set

#

it would be the easiest armor you could ever cover up with custom armor

smoky anchor
#

lmao

torn shuttle
#

I think I can live with the data pack thing

#

I probably shouldn't start reading this 14h into my work day though

#

it's getting to the point where it's hard to keep my eyes open for a whole sentence

stiff sonnet
#

any idea how I could convert a ConfigurationSection to a YamlConfiguration?

eternal oxide
#

what?

stiff sonnet
# eternal oxide what?

if you getConfigurationSection you just get a configuration section. It should still be yaml since that's the config format I'm using, but I need a yamlConfiguration to be able to .saveToString

remote swallow
#

what does save to string return

stiff sonnet
#

a string

remote swallow
#

no shit, what does it look like

stiff sonnet
#

the yaml config

eternal oxide
#

so many questions

stiff sonnet
#

haha sorry my response was a bit arse there

eternal oxide
#

why do you want a section as a string?

stiff sonnet
#

... to save it to a file as I said

#

to write a yaml config back to disk

eternal oxide
#

its already a file, in teh config

remote swallow
#

use get values

#

it returns a map string object

stiff sonnet
#

I need a configurationsection in some cases

eternal oxide
#

I think you are just getting confused

#

configurationSection already came from a file. Why would you need to put it in another file?

stiff sonnet
#

config handling is so annoying

eternal oxide
#

no

stiff sonnet
#

yes exactly that

eternal oxide
#

just use set to update teh section in the existing config

stiff sonnet
#

do that how without writing it back to disk?

#

I don't want them to be changed temporarily

#

I want them in the file

eternal oxide
#

config.set"(path", updatedSection)

#

config.save()

stiff sonnet
eternal oxide
#

you can on config

remote swallow
#

this seems to be an

#

?xy

undone axleBOT
stiff sonnet
eternal oxide
#

you don;t

stiff sonnet
sand spire
eternal oxide
#

you get teh ConfigurationSection FROM a YamlConfiguration

#

change it, put it back and save

stiff sonnet
remote swallow
#

explain what you want to do and what the project even is

stiff sonnet
#

I'm using annotations to get variables from a config file. Since I have to specify all the getters manually I save all the more complex types just as the config section:

case "String": {
                                field.set(instance, config.getString(value.path()));
                                break;
                            }
                            case "boolean": {
                                field.set(instance, config.getBoolean(value.path()));
                                break;
                            }
                            case "org.bukkit.configuration.ConfigurationSection": {
                                field.set(instance, config.getConfigurationSection(value.path()));
                                break;
                            }
remote swallow
#

that is very easy to do

stiff sonnet
#

there I get the configurationSection. After altering the values there I want to put them back into the config file

remote swallow
stiff sonnet
#

the same function also handles the conversion back to the config format and thus only returns a configurationSection

remote swallow
stiff sonnet
#

I wonder if config.set(".", confsec) could work

#

just set the root

remote swallow
#

you should be able to serialize and deserialize everything in the config

#

you shouldnt have to work with direct sections

stiff sonnet
#

I tried java's own thing once and all I got was unreadable weird bytecode shit

remote swallow
#

everything that you want to save has a type adapter with basic ones shipped as default

stiff sonnet
#

my deepest respect to the people putting up with reading other people's code

#

decrypting whatever was written there, even if it's very nicely written is always so annoying

remote swallow
#

it checks if the file exists, loads the config into a YamlConfiguration, loops all the values in my code config, then figures out the type adapter handles maps only, gets the value runs it through its type adapter then sets the field with reflection

torn shuttle
remote swallow
#

it has to do some jank stuff with config types because of type erasure

young knoll
#

Oh hey you’ve actually modified the code

smoky anchor
remote swallow
#

i made that months ago

torn shuttle
#

it says that the textures reference should be grayscale

slender elbow
torn shuttle
#

should is an interesting word

#

what if I just.. don't?

smoky anchor
#

?tryandsee

undone axleBOT
torn shuttle
#

because if it has to be grayscale this is dead

young knoll
#

Kek

torn shuttle
remote swallow
young knoll
#

Yeah well I don’t look at it

remote swallow
#

i literally told you after i did it

smoky anchor
torn shuttle
#

you know what they say about assuming

young knoll
#

What’s the maponly stuff about

torn shuttle
#

I wonder what would happen if I gave it a #ffffff pixel and a colored baseline

umbral ridge
#

?tryandsee

undone axleBOT
sand spire
#

I wonder what would happen if I went blind

worldly ingot
#

You probably wouldn't see much of a difference

young knoll
#

Is that your husky

torn shuttle
#

I don't see the point of it anyway

lost matrix
young knoll
#

I figured he might have turned one of his into a meme

torn shuttle
#

I don't think the trims trick will work

#

mojang why is this not an easy thing to do

worldly ingot
#

It's the "pun husky" meme

#

I think it's a klee-kai but that's getting specific KEKW

torn shuttle
#

I think the only way I could get this to work is if I create a grayscale converter and map custom values automatically to work backwards from the texture I want to use

#

wait no

#

it's hardcoded to only use 8 pixels worth of color

#

damn it minecraft

smoky anchor
#

oh bruh, didn't know about that
Sorry for wasting your time with this ;-;

torn shuttle
#

yeah ok so I went with lessfancypants and it just works immediately and it also works with optifine seemingly

#

I think fancypants might be broken for optifine but not lessfancypants

smoky anchor
#

hm
It will most def. break if you use modded shaders tho
But I would not care about that much

torn shuttle
#

yeah it does

#

I don't really have many other options here

#

either it will work with anything but shaders or it will work only with optifine

young knoll
#

Mods love to break vanilla shaders

chrome beacon
#

^^

torn shuttle
#

I'd do the same thing in their place, the vanilla shaders suck

#

does this thing not do boots

civic tangle
#

Hello everyone, could you help me completely ban the use of a trident with the riptide enchantment? I'm not interested in banning the trident itself, but in banning flights with it. I tried to do this with events, but this is not a solution, it either turns out very poorly (not the way I need) or does not work at all. I tried using protocollib and I think I found something that might work, the S2C ENTITY_METADATA package, but I haven't fully figured it out with DataWatcher. I'm sure this can be canceled, the event is somehow transmitted from the server to the client and vice versa. I will be glad to any tips

torn shuttle
#

this thing does, in fact, not do boots

valid burrow
civic tangle
torn shuttle
#

I take that back, this is much weirder than it not using boots

echo basalt
#

You can use it to detect flights

#

But that probably achieves the same as the event itself

torn shuttle
#

oh

#

damn it

#

I think this can't do boots

#

there's only two possible layers

echo basalt
#

It calls the player riptide event before applying the vector

#

For some quirky ahh reason the riptide event isn't cancellable, at least on the version I'm at

civic tangle
worldly ingot
#

I mean yeah, there's a reason PlayerRiptideEvent isn't cancellable :p

torn shuttle
#

trims can only do grayscale, shaders can only work with two layers, this thing just doesn't want to play along

worldly ingot
#

Because it does nothing

#

Trust me. I worked on it recently

#

I tried making it cancellable but it just did nothing

echo basalt
#

omw to make my first PR

#

jk I'm not signing the CLA

worldly ingot
#

I mean you can try and make it cancellable, but I think the client just applies its own velocity separately

#

but I already tried, it did nothing :p

echo basalt
#

You might need to send a velocity packet to resync

#

There's a really easy test for this client-sided behavior

#

just Thread.sleep on the event

#

And if you still fly then it's whatever

blazing ocean
tacit drift
#

if you teleport the player, doesn't it stop them from the riptide thing?

blazing ocean
#

nope

#

only way is to not use riptide and just apply velocity

tacit drift
#

get their velocity and try applying the velocity in the reverse direction

blazing ocean
#

and play the animation (if that was a thing)

dawn flower
#

this might sound silly but is there an event for item lore change

blazing ocean
#
    @EventHandler 
     fun onTridentThrow(event: ProjectileLaunchEvent) { 
         if (event.entity !is Trident) return 
         event.isCancelled = true 
         val player = event.entity.shooter as Player 
         if (!player.isInWaterOrBubbleColumn) return 
         player.playSound(player.location, Sound.ITEM_TRIDENT_RIPTIDE_1, 1.0f1.0f) 
         val direction = player.location.direction.multiply(2.2) 
         player.velocity = direction.add(player.velocity) 
     }
tacit drift
#

oh yeah

blazing ocean
#

that's what i do

tacit drift
#

kotlin looks so much like js 💀

blazing ocean
#

no

#

fuck you

tacit drift
#

or more like TS

blazing ocean
#

no

#

property access syntax my beloved

dawn flower
blazing ocean
#

?jd-s

undone axleBOT
dawn flower
#

there isnt

#

but what if there is with packets, this is why jd isnt the solution to everything

blazing ocean
#

then there's none 🤷‍♂️

tacit drift
blazing ocean
tacit drift
#

well what you do isn't it the same thing you would do with that?

blazing ocean
blazing ocean
#

because the actual riptide is special

#

velocity doesn't collide with players

tacit drift
#

or cancel throwing the trident at all?

blazing ocean
#

yeah

#

and just not use riptide enchant

tacit drift
#

delete it mid air and add the item to the player inventory

#

:))))

blazing ocean
#

💀

dawn flower
#
public void onInteract(PlayerInteractEvent e) {
  if (player.isInWaterOrBubbleColumn) {
    ItemStack item = player.getInventory().getItemInMainHand()
    if (item.getType() == Material.TRIDENT) {
      int level = item.getItemMeta().getEnchantmentLevel(Enchantment.RIPTIDE);
      if (1 > level) return;
      e.getPlayer().sendMessage("nuh uh");
      e.setCancelled(true);
    }
  }
}```
blazing ocean
#

that's what I do too

#

just haven't sent that snippet

#

that still creates like the animation for a bit

dawn flower
blazing ocean
#

something similar at leasr

blazing ocean
dawn flower
#

just make it so u cant hold them

blazing ocean
#

noxesium is currently the best solution ig

blazing ocean
#

that's so silly

dawn flower
#

arent you trying to disable riptide

blazing ocean
#

no

#

collisions

dawn flower
#

ah

blazing ocean
#

silly goose

dawn flower
#

:-:

blazing ocean
#

:)

civic tangle
torn shuttle
#

wtf

#

@smoky anchor the math for lessfancypants is wrong

#

for the texture size

smoky anchor
#

hm?
Make an issue on github then or PR it :D

#

try to make the RP yourself, the .zip is probably not updated

torn shuttle
#

I wasn't going from the rp, I did notice that had gone too long without getting updated

#

the texture size seems to be programmed such that the only file size that will work is the default one

#

2*size.y/size.x doesn't make sense

smoky anchor
#

oh, well then I guess you'd have to edit it to suit your needs

torn shuttle
#

that doesn't describe the amount of textures in the file

smoky anchor
#

Look, I don't understand what the shader does
I just know it exists
If you have problem with it, join Minecraft Commands server and tag Godlander

polar forge
#

Can anyone pls help me code a plugin?

smoky anchor
#

?ask

undone axleBOT
#

If you have a question, please just ask it. Don't look for staff or topic experts. Don't ask to ask or ask if people are awake or available. Just ask the question to the channel straight out, and wait patiently for a reply. Make sure you use the right channel regarding the topic of your question. Create a thread in case the channel is already in use!

polar forge
#

Ok, I would love to create a grief alert plugin, it alerts the players who have a specific permission node

#

For some breakage of some blocks

smoky anchor
#

do you mean like block type or blocks in an area ?

valid burrow
#

dont do grouping using permissions

#

many beginners make this mistake

#

dont do it

polar forge
polar forge
valid burrow
#

wait

polar forge
#

I made a code actually, but it doesn’t work somehow

valid burrow
#

is there like regions

#

and players can claim these regions?

#

or do you just want to alert 1 region to a admins or what ever

polar forge
#

No, regions don’t exist

valid burrow
#

so just the entire world and you want to alert admins when a block is brocken?

polar forge
#

It would be nicer if it only alerts for “crafted blocks”, or for a list I decide

#

Yea*

valid burrow
#

alr then permissions is fine actually

#

very simple

#

onBlockBreakEvent

#

you first check what block it is

#

using .getBlock .getMaterial

#

and then

#

if you have made sure that its a block that should be alerted

#

you can loop through all online players with that permission

polar forge
#

Should I send here the code I wrote so that u can check where the problem is? Bc it doesn’t work somehow

valid burrow
#

sure

#

use ?paste

#

?paste

undone axleBOT
polar forge
valid burrow
#

there doesnt seem to be anything wrong there

#

are you sure its registered

polar forge
#

How

valid burrow
#

wait

#

is that your entire main class?

polar forge
#

Yea GA

valid burrow
#

then its missing alot

polar forge
#

What’s missing?

#

Wait should we continue in DMs? So that we can have contact?

valid burrow
#

i dont provide help in dms but i can invite u to my server if u want

polar forge
#

Sure

lost matrix
icy beacon
#

Smile can you tell me what time it is?

lost matrix
#

16:05

icy beacon
#

And with that you should be at 50k messages

#

GG

#

As soon as it updates

lost matrix
#

noice

#

You are almost at 15k
Wait are you japanese?

#

Or why do you have katakana characters in youd discord

trail coral
#

yo im wondering what dictates the level of code? for example really big projects have this unique way of formatting to their code and its just different from what i write, almost like a completely new language. Im wondering why that is and how I can improve my code to also meet "professional standards"

lost matrix
# trail coral yo im wondering what dictates the level of code? for example really big projects...

This mainly comes down to developing a design philosophy.
You should try to understand and apply a few design principles, as well as clean code ones.
I would start with:

  • DRY -> Dont Repeat Yourself (Make your code reusable)
  • Watch some videos about clean code. (Dont take them at face value)
  • Understand a bit about the SOLID principles

And it is very important to understand the strengths of the language you are using.
General object oriented principles like inheritance are imperative to understand for Java.

If you send a repo in #1100941063058894868
Then we can review it and give you a few tips to improve your code.

valid burrow
#

in an ideal world this shouldnt happen

#

but it does

#

so just because something looks different then what you are used to doesn’t necessarily mean its better

trail coral
#

Im guessing my code will also improve as time goes on based on experience right?

valid burrow
#

yes

#

of course

trail coral
#

also another issue i have is with understanding NMS

#

even tho i know what it is etc

valid burrow
#

what part of it do you struggle with

trail coral
#

using it i guess

valid burrow
#

well yh

#

it’s complicated to start

#

well

#

to fully understand nms you need to understand how inheritance works, what interfaces are and and and

trail coral
#

i havent dealt with it for a while because it was complicated at the start and i just lost motivation to learn it

valid burrow
#

i recommend you try to only use nms when you have to

#

until you are able to fully understand stuff like that

trail coral
#

have you made minigames in spigot?

valid burrow
#

yeah

#

ive made about anything you can imagine at this point

trail coral
#

im having trouble understanding how a minigame would work, but i have never made a game in java so its probably that

valid burrow
#

oop

#

is probably the problem

trail coral
#

?

valid burrow
#

OOP - Object oriented programming

#

it plays a crucial part it games

trail coral
#

yeah for sure

#

alr thanks for the help

valid burrow
#

well if u need anything feel free to ping me

remote swallow
#

@valid burrow i need something

valid burrow
#

your social security number

#

your birthday

#

your location

remote swallow
#

i dont have a ssn

valid burrow
#

and your moms maiden name

tall dragon
valid burrow
tall dragon
#

no thanks. that'll be it

remote swallow
valid burrow
#

We have a great menu with cheeseburgers today!

tall dragon
remote swallow
tall dragon
#

laughed a bit too hard at that one

torn shuttle
#

fuck me this was not trivial to set up

#

one shader, one iron horse armor, one weapon that is actually using resource pack mechanics as intended and one illusion because those boots are a lie

echo basalt
#

don't bring my name into this

young knoll
#
private long packValues() {
    return ((long) this.major << 42) | ((long) this.minor << 21) | (this.patch);
}

Is my brain braining correctly? This should pack the major version into the upper 22 bits, the minor into the middle 21, and the patch into the lower 21.

remote swallow
#

are you making a new simple sem version class

#

if you are, checkout pineapples

#

it has support for classifiers

young knoll
#

Yes but idc about those

remote swallow
#

you should

#

what if you release a snapshot

young knoll
#

Plus finding anything in pineapple is impossible I swear

young knoll
#
 this.comparator = Integer.parseInt(modifier + Integer.toString(major) + minor + patch);
#

kek

remote swallow
#

integer to string is faster than normal

young knoll
#

I'm just keking at the parsing the entire thing to an int

#

Like yes it works but ehh

remote swallow
#

you do better

#

ur old one was jank as shit

#

@river oracle come diss coll

young knoll
#

Hence the bit shifting

river oracle
#

its a few hundred nanos for the Integer#toString and parseInt in total

young knoll
#

Unacceptable!

river oracle
#

while yes bit shifting is faster its so minute the change isn't worth it

#

in this case using bit shifting isn't worth it unless you can fit everything into 1 byte

#

in which case you can save your 24 bits and call it a day

young knoll
#

I'm just doing it for the sake of making the code look nicer

#

idc about the extra 64 bits from the long

#

tbf an int is probably enough

#

Idk who is on version 1025.0.0

remote swallow
#

guess what we just got

#

pre 2 just dropped

#

the mojang wiki doesnt even exist yet

agile hollow
#

how can i get the display name / inventory name of a shulker / chest on an getClickedBlock of a PlayerInteractEvent

remote swallow
young knoll
#

Scary

stiff sonnet
# remote swallow

is anything even happening over on the quilt discord? They still haven't come up with a better mixin alternative as of my knowledge

agile hollow
remote swallow
#

i dont really keep track of quilt

#

i only joined it to get the patch note embed

river oracle
#

its great already

#

plus Mixin Extras

stiff sonnet
#

because mixins are annoying any difficult to understand

young knoll
#

Get the state of the block -> cast to container -> getCustomName

river oracle
#

its a learning curve because mixing into things isn't easy already

stiff sonnet
#

shouldn't it be intuitive to anyone using it?

#

why gatekeep a modding platform

river oracle
#

Mixins are much easier than ASM

young knoll
#

Well it's probably more intuitive than raw ASM

river oracle
#

that's the alternative

#

Mixins are super well designed and make the process much more intuitive

stiff sonnet
#

well quilt pretty much promised an easier alternative

young knoll
#

Let me know when it's ready

river oracle
#

yeah who would have guessed simplifying ASM would be hard _

#

trying to simplify a concept most developers don't understand into something people can understand very difficult thing to do tbf

young knoll
#

Mixins are pretty similar to the C# system

stiff sonnet
#

C# is almost a 1:1 copy of Java with a few different names

#

say less

young knoll
#

Granted you can do the C# version with pure code

shut field
river oracle
#

they lied and said college wifi was good

young knoll
#

These ArmorStands have an item as a head that looks like a block because of its custom model. This model is slightly larger than the real block to avoid z-fighting. However, the break animation is still played on top of the fake block, which makes the block look pretty real.

#

Apparently it just works

#

(You have a real block underneath)

stiff sonnet
#

oh I guess that works too

shut field
#

wait so a block is there and then the head is made just slightly larger but then when they try to mine it they mine the real block?

young knoll
#

yes

shut field
#

wait so why wouldn't it just hit the armor stand

#

when they left click to mine it

young knoll
#

what

stiff sonnet
young knoll
#

^ marker armor stands have no hitbox

#

Granted that tutorial do be old

#

We have display entities now

shut field
#

is that with setMarker?

stiff sonnet
#

I wonder if it's possible to create a marker entity with just the block breaking animation textures

young knoll
#

Sure why not

fleet kraken
#

Would it be a problem to use Scheduler instead of BukkitScheduler? As long as I don't want to sync anything with the game 🤔

young knoll
#

I mean the bukkit one does come with other benefits

#

Like cleanup when your plugin is disabled

fleet kraken
#

I understand, but wouldn't it be bad for things that don't have to sync with the game? Because if the server has lag, wouldn't BukkitScheduler "follow the lag"?

river oracle
#

that's kinda a good thing for most things

#

you want things to sync even with the lag so you don't have some random things running faster especially gameplay related data and elements

fleet kraken
#

But would it be recommended to use the default if I want it to occur or if it should be executed even with the server lagging?

river oracle
#

is their some reason that just doesn't work?

fleet kraken
river oracle
#

but yeah I would if you're so worried about lag

fleet kraken
#

hmm, i will try it, thanks!

frank pelican
#

does anyone know what causes this error?

hybrid quartz
#

How can I disable villager movement? I have disabled villager AI, but when I click on him, he starts moving his head like, 'I don't have any menu, what do you want from me?'

river oracle
frank pelican
river oracle
#

don't use Unsafe

#

EZ fix

frank pelican
#

👀

#

How do I fix this

river oracle
#

stop using unsafe or and provide an actual stacktrace

#

I can only help if you actually give me an error you gave me the byte code signature of a method within Unsafe

frank pelican
#

Thats the only error

river oracle
#

no its not

frank pelican
#

I'll send a screenshot

river oracle
#

you've provided 0 context to this "error" than provided me a bytecode signature

#

I don't accept dms use imagur

#

?img

undone axleBOT
#

Can't send images? That's because you're not verified! Use !verify to complete verification.
Alternatively, you can upload screenshots to any image hosting site and share the link.

Here's some screenshot utilities that you can use to upload images.
Lightshot: https://prnt.sc
Imgur: https://imgur.com/upload
Flameshot: https://flameshot.org

frank pelican
#

only

#

oops

#

there

remote swallow
#

click on the top x and then send the error

#

?paste

undone axleBOT
river oracle
#

I already likely know the error likely a Method not found exception its possible sun.misc.Unsafe isn't in his JDK

#

wasn't Unsafe removed in Java 21

frank pelican
#

I'm using 8

river oracle
#

outdated software and compiling software completely unrelated to spigot

#

ask the author

frank pelican
#

Its my own

river oracle
#

_ I can't read

river oracle
#

click the tope red x and copy and paste into a paste bin

opal star
#

hi i need a lil help here

#

or maybe i dont hold up

hardy minnow
#

Hey fellas, just wondering if there are any effective methods for serializing entity data out there at the moment. Especially living entities. Just curious whats out there

river oracle
frank pelican
river oracle
#

you'd have to make something

shadow night
#

Can't you serialize to a byte array with nbt?

river oracle
river oracle
# frank pelican https://pastebin.com/tkyKFmd4

something wrong with your maven configuration. What I'm not 100% sure rerun with -X
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:compile
If you don't think you can understand the stacktrace you'll need to report a bug or search for a solution. Something is wrong with either your plugin or the configuration up to you to figure out which unfortunately.

Update yeah your maven configuration is off
https://stackoverflow.com/questions/42525139/maven-build-compilation-error-failed-to-execute-goal-org-apache-maven-plugins

hardy minnow
#

Cool cool, yeah I started diving into making an entity serialization library cuz I couldn't find any. Just wanted to make sure before I went too deep

#

I'll be sure to post the utility here for comment once its done. Should be pretty flexible between updates hopefully.

quiet ice
#

The SO Question suggested by @river oracle is completely unrelated

#

The JDK used for compilation is dictated by the JAVA_HOME environment flag (or your IDE if it overwrites that)

sullen canyon
#

criticize me, it would be great if someone could give me any good libs for bukkit commands

opal star
#

alright now i need some serious help

#

ive been developing plugins for 1.8.8 and now im moving onto 1.20

#

and heres my error can anyone help?

#

give me a second

river oracle
opal star
#

nvm im dumb asf and a little drunk didnt look at the full error

lilac dagger
#

let's say we have Class cl = Foo[][].class
does cl.getComponentType return Foo[].class or Foo.class?

trail coral
#

whats unoptimized about minecraft?

echo basalt
#

Mostly just how monolithic it is

lost matrix
#

Microservice minecraft incoming...

echo basalt
#

I'm not saying that

lost matrix
#

I think you are looking for another word?

echo basalt
#

single-threaded?

#

Basically the whole game's designed to run off a "main thread"

#

Which makes sense when developing from the ground up

#

If all you care about is delivering content

#

But it reaches a point where it harms you because everything's so tied together and you can't, for example, make a separate tick loop to process chunks

#

The only time things are done async is when doing IO

lost matrix
#

*sometimes

echo basalt
#

Yeah

polar forge
#

?paste

undone axleBOT
echo basalt
#

What if minecraft had "microservices" but they were all embedded

#

Or it just used thread pools to batch process everything

hybrid quartz
#

Why config doesn't restart?

        if (args[0].equalsIgnoreCase("reload")) {
            Plugin.getInstance().reloadConfig();
            commandSender.sendMessage(prefix + Utils.color("&aКонфиг был перезагружен"));
            return true;
        }
tardy delta
#

Plugin.getInstance() oh god

#

?di

undone axleBOT
slender elbow
#

ticking is pretty much the only thing that happens single threaded

#

networking is done in parallel

#

the chunk system and generation works in parallel

#

the lighting engine works in parallel

#

it just so happens that the few things fall under the ticking mechanism you have a million instances of

hybrid quartz
tardy delta
#

что

echo basalt
slender elbow
#

yes

#

I didn't deny that?

echo basalt
#

yeah

slender elbow
#

that's what I said?

echo basalt
#

We're ending up at the same conclusion that ticking takes forever and that's why minecraft's slow

tardy delta
slender elbow
#

the problem is that there are a million things to tick and they all depend on the order so parallelizing that is not exactly easy without extra synchronization

#

but the claim that Minecraft is single threaded is just not true lol

tardy delta
#

insert ecs here?

#

well its hopeless in java as there are no structs

echo basalt
#

Which is why I refer to it as monolithic

worthy yarrow
#

#HytaleWhen?

echo basalt
#

Chunk loading and generation is tied to IO

#

Networking is also IO

trail coral
worthy yarrow
#

probably true 😦

slender elbow
#

chunk gen is not tied to io, what

echo basalt
#

It results in IO to save the generated chunk

#

Whatever

slender elbow
#

?? but that's a separate process done by a separate system

echo basalt
#

Main argument isn't that EVERYTHING is running off the main thread

#

It's more that the only things done async are side processes that are often done once in a while, or just IO

slender elbow
#

chunk generation could be sync but the io async

#

it's entirely decoupled

echo basalt
#

Once the chunks are generated and loaded everything's just piled onto the main thread anyways

#

omw to pitch folia

twin venture
#

dumb question how i can shade this ?
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.12.7</version>
<scope>compile</scope>
</dependency>

#

my plugin size is like 3mb

#

iam doing this , but iam not sure if its even change anything .. :L

lilac dagger
#

use the maven shade plugin

#

and scope compile at each dependency you want to compile and scope provided on those you don't want

proud badge
#

is there something like inventory.addItem() but like the /give command, where if the item doesnt fit it gets dropped on the ground?

#

(ik I can just drop the item on the ground if the inv is full but I want to know if theres a built in feature)

tardy delta
proud badge
#

wym by "index of parameter" though

tardy delta
#

index of varargs array ig

young knoll
#

correct

tardy delta
#

sounds like they shouldve used a linked hashset, probably overkill

glad prawn
#

huh

tardy delta
#

what huh

twin venture
#

com.zaxxer can i compile this?
com.zaxxer

clear elm
#

how can i an 2nd config

#

i have the config.yml and want other configs

rough ibex
#

Load the other config files

#

how you implement this is up to you

tardy delta
#
BukkitWiki

The Configuration API is a set of tools to help developers quickly parse and emit configuration files that are human readable and editable. Despite the name, the API can easily be used to store plugin data in addition to plugin configuration. Presently only YAML configurations can be used. The API however was designed to be extensible and allow ...

#

search for YamlConfiguration

clear elm
rough ibex
#

You should not use static for this

#

?di

undone axleBOT
clear elm
rough ibex
#

I didn't say that it didn't

#

I said that you shouldn't

#

not that you mustn't

clear elm
#

but can you help me with the 2nd config

rough ibex
#

You will use the config API

#

to load and parse a file

#

and then store it with your plugin instance

#

and then pass that around

clear elm
#

if yes can you send the dependency thing to import it

rough ibex
#

what other way are you searching for

#

personally I use a class that is like the config API but for JSON

clear elm
#

an way without an extra api

rough ibex
#

the API is built in.

clear elm
#

oh

rough ibex
#

you do not need to add any more dependencies

clear elm
#

mb im dumb

rough ibex
#

the wiki page shows this

clear elm
#

can you send again

rough ibex
#

Yes...

clear elm
#

ik usaly this dc isnt for code writing but could you send the code how to do the 2nd config im to lazy to read the doc 😅

rough ibex
#

No

#

If you are too lazy to read, you are too lazy to read my code

#

It would be useless then.

clear elm
#

i think your code isnt as long as the doc

rough ibex
#

Oh, you can see into a crystal ball?

#

Read the docs and learn it

clear elm
#

but its ok ty anyways 👍

rough ibex
#

We can help you understand it, but we won't do your work for you.

#

that is why it is your work to be done by you 👍

clear elm
#

its okay ty for the help you gave :))

warm mica
cedar current
#

what is still water's block state? i use 80, but i can fall through the water as if it was air
or do i need to send any packet other than chunk data?

orchid iron
#

Hey, can anyone help me with a problem: i want to update a blocks type to any coral but it spawns water on the block as well... how can i avoid the water from being spawned? (for example: block.setType(Material.BUBBLE_CORAL) will set the type to the coral but spawn water as well)

young knoll
#

Create a block data for it using Material.BUBBLE_CORAL.createBlockData()
Cast that to Waterlogged
Waterlogged#setWaterlogged(false)
Block#setBlockData

tender shard
cedar current
#

here's the relevant part:

"minecraft:water": {
  "properties": {
    "level": [
      "0",
      "1",
      "2",
      "3",
      "4",
      "5",
      "6",
      "7",
      "8",
      "9",
      "10",
      "11",
      "12",
      "13",
      "14",
      "15"
    ]
  },
  "states": [
    {
      "default": true,
      "id": 80,
      "properties": {
        "level": "0"
      }
    },
    {
      "id": 81,
      "properties": {
        "level": "1"
      }
    },
...
tender shard
#

apparently 80 is the ID for an "empty" water block - IIRC max level is 7 right? so try 87

young knoll
#

It’s inverted

#

Because idk Mojang

rough ibex
#

empty water, interesting

cedar current
#

i don't have image perms

young knoll
#

?img

undone axleBOT
#

Can't send images? That's because you're not verified! Use !verify to complete verification.
Alternatively, you can upload screenshots to any image hosting site and share the link.

Here's some screenshot utilities that you can use to upload images.
Lightshot: https://prnt.sc
Imgur: https://imgur.com/upload
Flameshot: https://flameshot.org

cedar current
#

but at level 7 it's basically its lowest

tender shard
#

hm on the other hand, isn't it normal that you fall through it if you only make it be water client-sided?

cedar current
#

yeah that's possible, but i didn't find any other packet that would inform the client that the player is now in water

#

also, if you lose your connection you don't suddenly fall through water (before timing out)

young knoll
#

The client should still interact with it as if it was water

#

And then the server would freak out and teleport them

cedar current
#

I'm doing my own implementation from scratch right now

young knoll
#

Implementation of what

cedar current
#

The minecraft server

blazing ocean
cedar current
#

yeah i read this lmao

#

mine is in go though

young knoll
#

I feel like that’s also a thing

blazing ocean
#

not a fun one tho

young knoll
#

I swear people have remade the server in every language imaginable

blazing ocean
#

pickel or whatever it's called when

dawn flower
#

how do i set the player's name? first i looked into player class to find the name then craftplayer cuz thats the only class that implements player that ik of, apparently getName isnt implemented there but craftplayer extends CraftHumanEntity or whatever which implements getName which returns getHandle().name, getHandle returns an entityhuman WHICH DOESNT EVEN HAVE A name FIELD but i kept looking and found that entityhuman implements getName which does this.i.name

#

im so lost now

cedar current
#

so nobody has an idea why water is acting strange?

young knoll
#

¯_(ツ)_/¯

stiff sonnet
#

any idea how I'd check if a material can be placed down (I don't wanna run into the redstone != redstone_wire problem again, taht's why I'm a bit specific

young knoll
#

isBlock

stiff sonnet
# young knoll isBlock
  1. It's neither on material nor on ItemStack
  2. I think that would run into the redstone != redstone_wire prboem
#

redstone_wire is the block, redstone is the item that you can actually hold

young knoll
#

I assure you it is on material

stiff sonnet
#

oh I'm bad at coding that's why, I guess I'll give it a try

young knoll
#

But yeah that’ll only be true for stuff that’s the same material as an item and a block

stiff sonnet
#

agh this redstone edge case is the most annoying thing on the planet

young knoll
#

You could make a collection of materials that can be placed fairly easily

stiff sonnet
#

I will have to make a collection of all the items that are stupid

#

and then map them to the good shit

young knoll
#

Loop over material -> create block data -> get placement material -> check if item

stiff sonnet
#

well thanks for your help I'll see what I can do

trim lake
#

Can I change inventory title without sending Open Screen packet? I need to do that NMS way bcs using api version without method for it.

lost matrix
# trim lake Can I change inventory title without sending Open Screen packet? I need to do th...

This is the actual implementation of spigot:

    public static void sendInventoryTitleChange(InventoryView view, String title) {
        Preconditions.checkArgument(view != null, "InventoryView cannot be null");
        Preconditions.checkArgument(title != null, "Title cannot be null");
        Preconditions.checkArgument(view.getPlayer() instanceof Player, "NPCs are not currently supported for this function");
        Preconditions.checkArgument(view.getTopInventory().getType().isCreatable(), "Only creatable inventories can have their title changed");

        final ServerPlayer entityPlayer = (ServerPlayer) ((CraftHumanEntity) view.getPlayer()).getHandle();
        final int containerId = entityPlayer.containerMenu.containerId;
        final MenuType<?> windowType = CraftContainer.getNotchInventoryType(view.getTopInventory());
        entityPlayer.connection.send(new ClientboundOpenScreenPacket(containerId, windowType, CraftChatMessage.fromString(title)[0]));
        ((Player) view.getPlayer()).updateInventory();
    }

Do with that what you want.

young knoll
#

Short answer: no

#

Long answer: noooooo

lost matrix
#

Int answer: nooo

young knoll
#

Dangit he out joked my joke

trim lake
#

Im probably using to old version. 1.19.2, right?

lost matrix
#

What does getHandle return?

trim lake
#

EntityPlayer

lost matrix
#

You are not using mojang mappings then...

#

?nms

trim lake
#

wierd, I guees I runned remaped build tols, well build tolls time. This is my first NMS project, so sorry for my questions.

remote swallow
#

make sure to modify your pom

twin venture
#

Hello so long story short i got everything works with my lootbox system , the only thing left is the rotation using nms / packets :

#

what packet i need to rotate it for 1.8 , and other versions?

trim lake
twin venture
#

PacketPlayOutEntityRelMoveLook is the name of packet correct?

young knoll
#

Probably

twin venture
#

how i can get the names?

young knoll
#

Idk you have old spigot names so good luck :p

#

?mappings

undone axleBOT
twin venture
#

PacketPlayOutRelEntityMoveLook

#

thank you so much!!

#

what does it require?

#

i have 1.20.4 , support but i want to add 1.8 , and latest

#

yeah its hard but its for my server , also this is how i have it for spawning , and it works just fine , i need to do it for LOOK packet and
PacketPlayOutEntityHeadRotation
PacketPlayOutRelEntityMoveLook

river oracle
#

PacketPlayOutTroll

hollow reef
#

whats the most effective way to generate an bigger amount of chunks?

young knoll
#

Oh boy dat reflection

#

This is why we like modules

lost matrix
twin venture
#

but ehhhhh i don't have time xd

hollow reef
cinder abyss
#

How can I check if the server is lagging?

slender elbow
#

you don't

young knoll
#

Well

#

You could manually math it with a runnable

cinder abyss
lost matrix
# hollow reef wdym?

There is a possibility of generating raw chunk data on a GPU. You just have to rewrite the entire generation algorithm in CUDA.
This theoretically will enable you to generate a ton of chunks in parallel.

young knoll
#

lol

hollow reef
#

bruh

slender elbow
#

love edited messages

#

tps is not really a good measure anyway

#

but mspt

lilac dagger
#

it's gonna be as good as it gets

young knoll
#

That’s basically what the game does

#

Plus some other maths

cinder abyss
#

humm

cinder abyss
hollow reef
young knoll
#

No

cinder abyss
#

should I use nms then? LUL

lost matrix
#

downstream has a ServerTickStartEvent which is a bit more precise that a runnable.
Otherwise a runnable is fine.

lilac dagger
remote swallow
young knoll
#

Doing a bit of math every tick isn’t going to make a difference

lilac dagger
slender elbow
young knoll
#

D:

remote swallow
#

@ md fire

slender elbow
#

the game does far more expensive things hundreds if not thousands of times a tick, a plugin task is not gonna take your server down

cinder abyss
lost matrix
lilac dagger
cinder abyss
#

humm okay

#

and what mspt like Coll mentionned?

young knoll
#

milliseconds per tick

twin venture
#

Hi is this correct?

cinder abyss
young knoll
#

Sure

#

Probably easier to calculate

slender elbow
#

it's gonna be more useful than tps

trim lake
#

btw its possible to change this text as well? I guess not

remote swallow
#

thats an image

young knoll
#

You can change that text via lang file

cinder abyss
twin venture
#

or via resourcepacks :p

cinder abyss
#

(I think it's client side)

young knoll
#

But otherwise no

trim lake
cinder abyss
#

so resource packs

young knoll
#

Yes

cinder abyss
#

for lang

twin venture
lilac dagger
trim lake
young knoll
#

You are carrying too much to be able to run

#

Sorry Steve you can’t carry 50,000 metric tons of gold anymore

lost matrix
# twin venture ideas?

That is 1.8 nms. Pretty much nobody here can help you with that from the top of their head.
Go on the protocol wiki and check the 1.8 protocol version. But from a first glance this looks good.

trim lake
cinder abyss
dawn flower
#

can i make the player think it's in a team with custom flags? i want to hide the name of every player to replace it with a custom name system

cinder abyss
#

I try to understand how can I calculate that, let my 2 brains for math try...

lilac dagger
#

yeah, it should be close to 50, if it takes more then it means that tick has slowed you down

trim lake
#

crafting invedntory (player opened inventory) would be image as well... so I cant rly display weight here oh. Why I want something that hard lol

lilac dagger
#

every 20 ticks draw the line and see how many ticks you had every 1000ms

twin venture
lilac dagger
#

as in do the math

cinder abyss
#

oh okay

#

System current time milis + a runnable that runs every tick
?

lilac dagger
#

yeah

young knoll
#

Could probably just keep track of the last X ticks and then average them

cinder abyss
#

ohhhh

#

what should I do 😭

slender elbow
#

i mean that'd just be avg tps

cinder abyss
#

I want a simple way to check if the server is lagging (below x TPS)

slender elbow
#

but mspt is not 1k/tps

young knoll
#

What do you consider lagging tho

#

Is a single tick taking 100ms lag? Even if the rest are fine

cinder abyss
lilac dagger
#

long time = System.currentTimeMilis();

run() {
double ticks = (1 - 1000 / (double)(System.currentTimeMilis() - time) * 20;
} run every 0, 20L

#

try this first

cinder abyss
#

okay

lilac dagger
#

i don't think you need to do it every tick

cinder abyss
#

yeah

lost matrix
#

PS: this highly correlates to how long the runnables before yours took. And runnables are not guaranteed to run in the same order either.

cinder abyss
#

it's for my Falling Leaves

slender elbow
#

just use nms

cinder abyss
#

💀

#

so

lilac dagger
#

average it and over time it'll be correct

cinder abyss
#

discuss side walls

young knoll
#

Just use reflection to override the craft scheduler so you can get notified of the main threat heartbeat

#

Kek

lilac dagger
#

keep 100 values in somewhere

cinder abyss
#

(idk if I can say like that)

cinder abyss
#

how...?

#

😭

#

idk how to make that

slender elbow
#

he's joking

lost matrix
#

Runnable is fine

cinder abyss
lilac dagger
cinder abyss
#

I found something like that

#

that's perfect

#

even better, It'll be perfect

#

thanks

trim lake
#

This can be changed only with resourcpeack right? but need that dynamic, can I make that with resourcepack? thinking about some solution do display weight... Looks like I will need to learn reourcpacks as well

young knoll
#

I don’t think you can do dynamic translations, no

trim lake
#

hmm, so its basicly in possible lol, so action bar would must be enought looks like

young knoll
#

Mhm

#

Or scoreboard or boss bar

dawn flower
#

how do i add below name to the player using armorstands with no delay

lost matrix
#

Use the second line added by scoreboards or mount a display entity on the player

young knoll
#

I remember how people used to do it before test displays

#

Negative size slime jank

dawn flower
trim lake
#

I kinda want it to display that near inventory. like this but next to inventory, how is this done? all of it is action bar?

lost matrix
young knoll
lost matrix
dawn flower
#

alr

young knoll
#

They also allow multiple lines

#

Mojang should just make the player name tag a TextDisplay fr

trim lake
dawn flower
#

mojang should stop adding useless stuff like the score for scoreboard objectives or add a way to remove them 😭

young knoll
#

What

dawn flower
#

they force sidebars and below name scoreboard objectives to have a zero or whatever score u have

slender elbow
#

what

#

you can literally hide the number? lol

dawn flower
#

u can for 1.20.3 or higher

young knoll
#

Exactly

dawn flower
#

do u know how long scoreboards have been here for

slender elbow
#

yeah i mean they aren't gonna go around backporting stuff

#

they added the thing you're asking for

#

idk what your point is

young knoll
#

Why not!

#

I want the warden in 1.8

dawn flower
#

the amount of 1.20.3 or higher in my server will prob be 1 or 3 max

#

i personally didnt even update yet cuz the mod devs dont want to update their mod

young knoll
#

Wait let me get the image

slender elbow
#

asks for feature
gets feature
complains feature doesn't exist in older versions

#

peepostare

sand spire
#

I want youtube on my telegraph

young knoll
slender elbow
#

peepostare

twin venture
dawn flower
#

that's like 30% 1.20.1

young knoll
#

Okay

#

It’s also nearly 50% 1.20.4

#

Which is more than 1 or 3

slender elbow
sand spire
#

you realize most new players will just join the newest version which means old versions will die in the end

slender elbow
#

"most"?

#

do you know how percentages work

dawn flower
#

smh

#

well its gonna break for 2nd most people

#

which isnt just like 5 players that i can ignore

young knoll
#

Well, you can

#

Step 1: remove viabackwards

#

Step 2 profit

dawn flower
#

even hypixel has something similar to viabackwards :-:

twin venture
dawn flower
#

and they def profit more than most servers do

slender elbow
#

sure but hypixel is not your average server

dawn flower
#

whats different in hypixel

slender elbow
#

and you don't have to be like them either

young knoll
#

It’s hypixel

dawn flower
#

money only

slender elbow
#

they are in their own realm

young knoll
#

In statistics it’s called an outlier

dawn flower
#

im just gonna do the text displays method

young knoll
#

Maybe we should embrace bedrock edition more, it doesn’t have a version selector

#

Jk I still don’t really like bedrock

shut field
#

if you have FireworkMeta how do you set it explosive?

young knoll
#

?

#

Like make it produce a particle effect when boom?

shut field
#

Like if you add a firework star to a firework

#

just enough to make it do damage when launched at a player

young knoll
#

addEffect(s)

dawn flower
#

how do i get the verified role, i verified

young knoll
#

Leave and rejoin

#

Otherwise

#

?support

undone axleBOT
young knoll
#

The bots been slacking lately and !verify doesn’t seem to like working

dawn flower
#

t

#

sick

sullen marlin
#

!verify

undone axleBOT
#

Usage: !verify <forums username>

dawn flower
#

i did that but it didnt give me the role before

young knoll
#

Yeah idk why so many people seem to not be getting the role

#

I blame choco

sullen marlin
#

Blame discord

shut field
twin venture
#

i got rotation working with nms / packets :p

#

finally

#

and its soooooooooo smooth :p

inner mulch
#

how do i set a parrot on a players shoulder?

#

is it .addpassenger?

twin venture
#

not sure but i think Parrot have its own method no? to set it to shoulder?

slender elbow
#

setShoulder....

#

on HumanEntity

young knoll
#

Huh that’s deprecated

#

Wacky

inner mulch
#

yes

#

where is the real one :/

slender elbow
#

"real one"?

inner mulch
#

the setshoulder one is deprecated

slender elbow
#

yes

#

the deprecation message tells you why it's deprecated

dawn flower
#

how do i make passenger's yaw the same as the player when you move around

slender elbow
#

it's deprecated more as a warning, "use with care", but in general, deprecation doesn't necessarily mean for removal

inner mulch
#

ok

tranquil glen
#

Hey guys, is there any way to access entities that aren't loaded?

young knoll
#

No

tranquil glen
#

I recently stumbled upon an old world save I had, and I'm looking for a couple mobs since they'll show me where my old bases are

young knoll
#

How old

tranquil glen
#

like 2016

#

I tried NBT explorer

#

didn't work

young knoll
#

Can probably open it in mcedit and do something from there

tranquil glen
#

Ohhh good idea

young knoll
#

Either that or you need to parse the NBT for all the regions and then sort through it

tranquil glen
#
for(Entity en : p.getWorld().getEntities()){

            Location loc = en.getLocation();
            String locationStr = loc.getX() + " " + loc.getY() + " " + loc.getZ();
            String returnedName = en.getCustomName();

            if (returnedName == null) {
                continue;
            }

            if(returnedName.equalsIgnoreCase(nameArg)){
                p.sendMessage(ChatColor.AQUA + returnedName + ":");
                sendClickableCommand(p, ChatColor.AQUA + locationStr + "\n", "/tp " + locationStr);
            }
        }
#

made this before I realized I couldn't target unloaded entities

#

Works for loaded ones tho

#

pretty well

#

Makes sense that you wouldnt be able to access unloaded ones tho

#

since they arent in memory

#

only on disk

hardy minnow
#

One option if you rly want to use spigot for it is to combine it with a world loader plugin and then your own custom search plugin to search for "on chunk load" or similar event if your entity is there

tranquil glen
#

I was thinking of doing that

#

But the world file is really big

#

It used to be a server map

#

It was a vanilla server that ran off of commandblocks

#

We had a custom land protection system where players could place a custom named shulker entity

#

It just used the player's name

#

So my thinking is that if I can search for a specific name, I can find that player's base and bring back some old memories

#

It won't even load in MCEdit, unfortunately

wicked sinew
tranquil glen
#

Possibly

#

I think the world has been migrated to a more recent version

wicked sinew
tranquil glen
#

That's a good idea

#

I'll try that

#

I wish there was an easier method to do this

#

I give up

wicked sinew
tranquil glen
wicked sinew
#

that's nothing

tranquil glen
#

13gb to be exact actually

wicked sinew
tranquil glen
#

no

#

I just

#

don't rly know where to start

#

and i'm getting lazy

wicked sinew
#

send me a few chunks to mess with

tranquil glen
#

i've been working at this all day

#

okay

wicked sinew
#

Oh also IIRC MCEdit is dead

#

There's a new one... Amethyst?

#

Amulet

tranquil glen
#

ill check

lament tree
#

any advice on level system mathematics regarding exponential growth?

river oracle
#

I'd do logarithmic growth though

#

is their any way I could make a mob not agro on a specific player?

#

I'm fine with any NMS and such just need pointers

tranquil glen
#

You could probably use an EntityTargetEvent

#

and check what it's targeting

nova notch
tranquil glen
#

Try something like that

river oracle
#

coulda swarn that was a paper event

#

guess not

#

sweet

rough ibex
#

swarn?

#

you mean sworn

#

dont fucking nerd react me

river oracle
#

sorry I typed it how I pronounce it 💀

rough ibex
#

sohree eye tieped it how eye pronounse it

river oracle
tender shard
wicked sinew
#

~types in irish

smoky anchor
rough drift
#

Quick question, if I do

container.set(key, PersistentDataType.TAG_CONTAINER, child);

if I then update the child container, is the parent container updated with the new values of the child container too?

chrome beacon
#

try it and see

#

ig

brittle geyser
lilac dagger
#

i feel like i want to use PlayerChatEvent instead of this, is there a reason that should stop me?

tepid turret
#

Hey how would I save an entity / entity snapshot (either works) as a string? then make a new entity from that string?

charred blaze
#

}, 0L, 20L * plugin.getConfig().getInt("koth-timer"));

#

why is this tasktimer spamming ?

tepid turret
#

We'd need more details than that 💀

charred blaze
#

like?

valid burrow
valid burrow
#

print it out

charred blaze
#

nvm fixed

valid burrow
#

perchance its 0

#

alr

tepid turret