#help-development

1 messages · Page 1495 of 1

covert bluff
#

reminds me of yanderedev's code

hybrid spoke
#

lmao

paper viper
#

xD

granite stirrup
#

is there a higher quality pic

#

i wanna ead the code

paper viper
#

nah

granite stirrup
#

:(

paper viper
#

that was just something i searched up

sharp bough
#

quality code

shadow gazelle
#

Is it possible to make custom NBT tags for items?

#

Something like, KeepOnDeath: 1

ivory sleet
#

Yeah

shadow gazelle
#

Oh, nice

#

Also, would it be possible to save an item when the player died?

#

Basically keep inventory, but only that item gets saved?

ivory sleet
#

Yeah sure

#

For the first question, have a look at ItemMeta, ItemStack and PersistentDataContainer. Second one use PlayerDeathEvent.

shadow gazelle
#

Okay, thanks.

#

Time to make off-brand Hypixel Pit

digital plinth
#

is there a way to stop players from being damaged by end crystal explosions

#

this cancels the explosion

#

and cancels the damage to mobs and items too

#

but i only want to cancel for the player

#

entityDmagaeEvent .getCause

#

returns PLAYER

vivid lion
#

have you tried EntityExplodeEvent

sullen dome
#

how can i actually save a custom FileConfiguration by default? like the same as #saveDefaultConfig does, but for custom ones

#

maybe FileConfiguration#save() works? lets try

#

well, then i'll use that. thanks!

#

huh?

#

well, what does saveResource("file", "true");? and how does this measure the path? is that everytime the datafolder?

#

i mean, looks like that would replace the file

#

i love how intellij literally has no docs lmao

#

idk it somehow doesnt work

#

yea

#

i mean, i just use saveResource() tho, because that does what i want

#

ty

vale cradle
sullen dome
#

i have docs

vale cradle
#

Oh, that's decompiled

sullen dome
#

like one sec

vale cradle
#

Download sources too

#

From the maven tab at right

sullen dome
#

sometimes it works, sometimes it doesnt

#

its just weird

vale cradle
#

Download Sources and Documentations option

sullen dome
#

theres no option i guess

vale cradle
#

Probably your project is bad configured

sullen dome
#

tf

vale cradle
#

You have maven?

sullen dome
#

i literally just created it with the MCDev plugin lol

#

yea

vale cradle
#

Download Sources with Documentations and it will get solved

sullen dome
#

how do i do that lol

vale cradle
#

And close the previous tabs

vale cradle
#

At right

#

Then in maven tab:

sullen dome
#

that didnt fixed anything

#

like my problem isn't there are no docs

#

the problem is, they are there for some methods, but not for all

#

or is that because spigot didnt documented all of them?

vale cradle
#

Spigot's decisions, who knows

sullen dome
#

thats the question lol

ivory sleet
#

That may very well be the case

sullen dome
#

well, then i cant do anything about it lol

#

well

#

weird

#

hmm

#

lemme restart ij real quick

#

well nope

vale cradle
#

If they are not documented, they may not appear on the Javadoc

sullen dome
#

idk

#

actually, i am in love already, to write like 5 whole yml language-files

#

well, maybe 2 are enough at first

#

german and engllish. dont think there are more native languages than that

vale cradle
#

Spanish?

#

kek

sullen dome
#

you wanna translate for me? :)

#

because i won't learn spanish for that

vale cradle
#

Now I realize I'm one as well

digital plinth
#

and not cancel the dmg to players

sullen dome
#

you wanna cancel explosion damage?

digital plinth
sullen dome
#

then just cancel the EntityDamageEvent, if the DamageCause equals DamageCause.EXPLOSION

sullen dome
#

because?

digital plinth
#

explosion dmg can also be caused by creepers

#

but i only want to cancel dmg from crystals

#

dmgCause.Entity_explosion

#

the .getEntityType returns PLAYER

#

for some reason

#

bc the crystal is damaged by a player

#

i suppose

sullen dome
#

well

#

yeah, getEntityType returns player because the player is who is damaged

#

i got an idea

#

one sec

#

just an idea, and pretty weird and shitty, but maybe this could work. didnt tested it tho:

private final Map<Entity, Boolean> crystalExploded = new HashMap<>();

    @EventHandler
    public void onEntityExplosion(EntityExplodeEvent event) {
        if (event.getEntity() instanceof EnderCrystal) {
            for (Entity entity : event.getLocation().getWorld().getNearbyEntities(event.getLocation(), event.getYield(), event.getYield(), event.getYield()))
                crystalExploded.put(entity, true);
            Bukkit.getScheduler().runTaskLater(Challenge.getPlugin(), () -> {
                for (Entity entity : event.getLocation().getWorld().getNearbyEntities(event.getLocation(), event.getYield(), event.getYield(), event.getYield()))
                    crystalExploded.put(entity, false);
            }, 10);
        }
    }

    @EventHandler
    public void onDamage(EntityDamageEvent event) {
        if (event.getCause().equals(EntityDamageEvent.DamageCause.ENTITY_EXPLOSION) && event.getEntity() instanceof Player) {
            if ((crystalExploded.get(event.getEntity()) != null) && (crystalExploded.get(event.getEntity()))) {
                //damage is caused by crystal-explosion
            }
        }
    }
#

idk tho if the yield is equal to the damage distance

digital plinth
#

okie thx

worldly ingot
#

It's not. Yield is the % from 0.0 to 1.0 of how many of the items will drop

digital plinth
#

why isn't there a .getDamager method in the EntityDamageEvent

#

:<

worldly ingot
#

EntityDamageByEntityEvent

sullen dome
#

well wait true

#

omg

digital plinth
#

okay i can get the damager there

sullen dome
#

just check in that event, if the damager is the crystal

#

fml

#

yeah that should work xd

digital plinth
#

but i cant specify what entities to cancel the damage

sullen dome
#

why that

#

wait

digital plinth
#

wait what

#

.getEntity

#

might work

sullen dome
#
 @EventHandler
    public void onDamage(EntityDamageByEntityEvent event) {
       if(event.getDamager() instanceof EnderCrystal){
           //damaged by crystal
       }
    }```
digital plinth
#

what do i do after i check if the entity getting damaged by is a player

#

event.setCanceled

#

cancels the explosion

sullen dome
#

yea

#

idk if it cancels the damage tho

#

maybe set the damage to 0.0F as well

digital plinth
sullen dome
#

nvm its a double, not a float

#

so 0.0D

digital plinth
#

uhhh no

#

it sets the damage to 0

#

on all entites in the ender crystal's balst radius

#

how do i set 0 dmg on ONE entity?

#

hmm

sullen dome
#

why would you do that

digital plinth
#

i just want players to be immune to crystal damage

#

like

sullen dome
#

you would set the damage to 0 for all entity, who are damaged by the explosion

#

thats what it does

digital plinth
#

players don't take dmg from crystals in peaceful difficulty

sullen dome
#

yea

digital plinth
sullen dome
#

thats what you can do with what i sent

#

then just check if the entity who is damaged is a player :o

#

and letsgooooooooo

#

choco, you god damn bigbrain

digital plinth
#

well i still cant cancel the damage to only players

sullen dome
#

you can

#

wait

digital plinth
#

how?

#

e.setCanceled is no go

sullen dome
#

    @EventHandler
    public void onDamage(EntityDamageByEntityEvent event) {
       if(event.getDamager() instanceof EnderCrystal){
           if(event.getEntityType().equals(EntityType.PLAYER)){
               event.setCancelled(true); // it damaged a player
           } else {
               //it damaged another entity
           }
       }
    }```
#

obv

digital plinth
#

including mobs

sullen dome
#

no it doesnt

#

why should it

digital plinth
#

whom are NOT players

sullen dome
#

no

#

dud

digital plinth
sullen dome
#

thats not how it works

#

why don't just try it out? lol

#

i mean, it cancels the event only if the damaged entity is a player

digital plinth
#

i am testing

sullen dome
#

and the event obviously gets called for every entity that is damaged by an entity

#

soooo

digital plinth
#

one crystal

#

can dmg MULTIPLE entities

sullen dome
#

yeah it can

digital plinth
#

both entites and ITEMS

#

so e.setCanceled

sullen dome
#

yes

digital plinth
#

cancel the dmg to ALL

sullen dome
#

yes

#

to all who are players

digital plinth
#

really

sullen dome
#

if you do it like i sent

digital plinth
#

hmm lemme test it

sullen dome
sullen dome
#

no

plucky comet
#

How do i send an ERROR to console

sullen dome
#

wait

digital plinth
plucky comet
sullen dome
#

well

#

Bukkit.getLogger().error("error")

digital plinth
#

oh nice

#

it worked thx

#

i forgot to reload

sullen dome
#

ofcourse it does :)

digital plinth
#

XD

sullen dome
#

it does because choco is a cute smol bigbrain

digital plinth
#

XD

sullen dome
#

with chocolate in his hands ofc

digital plinth
#

oh Choco did you approve @simple garden 's premium resource

#

XD

sullen dome
#

dude

#

i literally saw that video

#

Lax is so weird

digital plinth
sullen dome
#

why is lax so weird?

digital plinth
sullen dome
#

why

#

explain that to me

digital plinth
#

hes also pretty funny

sullen dome
#

yea

digital plinth
sullen dome
#

he insulted my german accent in vc

#

funny xd

#

well no that wasnt lax

#

nvm

#

guys. why is working with configurations so painful? ahhhhhh

torn shuttle
#

hm wrong room

sullen dome
#

lo

#

l

digital plinth
#

guys what is the best LOL agent

sullen dome
#

who plays lol lol

digital plinth
#

lol

sullen dome
#

(lol)

digital plinth
#

i figured i'd try it out

#

🤷

#

its lamer minecraft but

#

its a decent game

sullen dome
#

what are good characters for placeholders?

#

like %player% or something.

sacred shoal
#

<>

sullen dome
#

yeah, that looks cool

#

ty

sacred shoal
#

tons of plugins use <> and %%

sullen dome
#
player.sendMessage(Challenge.getPlugin().getLanguageManager().getConfig().getString("command_wrong_syntax").replace("<syntax>", Challenge.getPlugin().getCommand("settings").getUsage()));```
tthat's literally the longest line i've ever seen holy god
#

i hate working with configs

#

can command usages actually have §-colorcodes?

sacred shoal
#

if you sending the help usage to the player in the chat use &colorcode

proud basin
#

I was thinking of using replaceAll to make a placeholder but I feel like there is a better way, any ideas? making a place holder for a click event. Thinking the place holder will be like %command: /<theircommand>%TEXT%/command%

sullen dome
#

well, & isnt working in mc-chat

#

§ are that color codes

proud basin
#

Use chatcolor.translatealternatecolorcodes

sullen dome
#

i meant in the plugin.yml directly. like:

usage: "§c/settings"
proud basin
#

put &c

#

but you still need chatcolor.translatealternatecolorcodes in your code

#

for it to work

young knoll
#

Spigot sends the usage automatically

#

You can’t exactly add code to it

proud basin
#

oh wait

sullen dome
#

^

proud basin
#

that's usage

#

I thought that was in config

sullen dome
#

nah

proud basin
#

my b

sullen dome
#

in config i don't use colorcodes by default, because people likely edit them

#

and that would mostly screw it

proud basin
#

make a custom help command

sullen dome
#

tf

proud basin
#

hm?

sullen dome
#

would be hell much of work, just for displaying default usages from the plugin.yml

#

i dont want a help command tho

proud basin
#

dw

#

sh

sullen dome
#

here's what i do:

//Settings-Command
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (sender instanceof Player) {
            Player player = (Player) sender;
            if (args.length == 0) {
                initSettingsGUI(player);
            } else
                //send syntax
                player.sendMessage(Challenge.getPlugin().getLanguageManager().getConfig().getString("command_wrong_syntax").replace("<syntax>", Challenge.getPlugin().getCommand("settings").getUsage()));
        } else
            sender.sendMessage(Challenge.getPlugin().getLanguageManager().getConfig().getString("command_no_player"));
        return false;
    }
#

i see now, i forgot to return false there lol

#

well, i probably just use custom usages directly from code

shadow gazelle
#

How do I set the color of leather armor?

#

Before a player has it

sullen dome
#
                    ItemStack stack = new ItemStack(Material.LEATHER_CHESTPLATE);
                    LeatherArmorMeta meta = (LeatherArmorMeta) stack.getItemMeta();
                    meta.setColor(Color.GREEN);
young knoll
#

Cast the meta to LeatherArmorMeta

sullen dome
#

why does discord wreck like everything i paste? lmao

#

i didnt spoonfeed. because i dont even know if that works. just feels right lol

sacred shoal
#

ctrl + shift + v 😄

shadow gazelle
pallid ferry
#

Need someones opinion I have a BlockBreakEvent listener that checks if the block the player broke was inside a "claimed area" which in turn would cancel the event if the player is not allowed to build in that claimed area. Right now the code trys to find out if that block is inside a claim by checking each and every claim. Is there a better way to implement this because this can quickly get out of hand with 20+ players constantly breaking blocks with each their own claims possibly more than one.

young knoll
#

You can store what claims are in a specific chunk

#

Then you only have to check those

pallid ferry
#

What if a claim overlaps into several different chunks. Like its on the corners blocks of one and goes into a couple more?

#

Oh wait I think I see. I can check the chunk the player is in and only check that chunk and neighboring chunks for claims anything else is impossible for the player to reach. Didn't know you can get a chunk from Block

young knoll
#

You only really have to check that chunk

#

You may want to use larger regions than a chunk, up to you

pallid ferry
#

but what if the player is breaking a block from a neighboring chunk?

#

nvm im an idiot I can check block position rather than player position

maiden thicket
#

i have no clue if this is the right place but i'm trying to compile buildtools and i'm getting this -

sullen dome
#

interesting

#

tried to delete your buildtools files, and let everything re-create?

maiden thicket
#

yeah it's weird because it's a fresh install

#

xd

sullen dome
#

lol

#

okay thats definitely not normal

maiden thicket
#

yeah

#

:sadpe

#

sad

sullen dome
#

maybe try to delete the correspondign stuff in your m2 dir?

#

idk

maiden thicket
#

i'll try that after

sullen marlin
#

wont be anything to do with m2

#

post the full log please

sullen dome
#

oh md personally :O

sullen marlin
#

no idea

sullen dome
#

if md doesnt know a fix

#

you probably are screwed :/

maiden thicket
shadow gazelle
#

If a plugin is relatively simple and should work across versions, do you need to do anything extra to make it run on newer versions?

young knoll
#

If it’s all API, usually no

sullen dome
#

most plugins work on newer versions

shadow gazelle
#

Okay

sullen dome
#

except theyre using nms, or version-related stuff

shadow gazelle
#

Would it be a good idea to add the API versions it should work on in the plugin yaml?

#

To stop any potential warning of it being outdated

young knoll
#

You can only have 1

shadow gazelle
#

Oh

sullen dome
#

well

#

if you want to support multiple version, you have to probably use extra code for every version

#

if its stuff that depends on a version

#

like 1.12 and 1.13+ compatibility

young knoll
#

You can sometimes get away with reflection

sullen dome
#

if thats a better way... hmmmm

plain ore
#

didn't java16 change the reflection api

sullen dome
#

idk

young knoll
#

Java 11 did

#

But it shouldn’t affect much

plain ore
#

yeah it was one of them I thought so

#

this is how you know I was stuck on java8 along with minecraft for all these years out of habit

#

😂

sacred shoal
#

denizen is somehow able to work with reflection and java 16 on latest dev versions

crude charm
#

Have any new features been announced for the api? For 1.17

young knoll
#

As long as they aren’t doing some cursed reflection into the reflection classes themselves

maiden thicket
#

im missing my /dev/fd folder as well bruh

#

cant compile paper because of that either

#

tf happened to my pc

indigo pulsar
#

i have

public void onThrow (PlayerDropItemEvent e) {

}```
#

void has the error: Syntax error on token "void", record expected.

#

onThrow has the error: void is an invalid type for the variable onThrow

plain ore
#

uhhh

young knoll
#

Looks fine to me

#

Assuming that’s in a class

plain ore
#

you probably have a syntax error somewhere above that

indigo pulsar
#

this is the whole script for reference:


import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.event.player.PlayerEvent;
import org.bukkit.event.Event;

import me.croze.dropsareenchanted.Main;

public class DropCommands implements CommandExecutor{
    private Main plugin;
    
    public DropCommands(Main plugin) {
        this.plugin = plugin;
        plugin.getCommand("dropsareenchanted").setExecutor(this);
    }
    
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        @EventHandler
        public void onThrow (PlayerDropItemEvent e) {
            
        }
        
    
        
        return false;
    }
}```
young knoll
#

You can’t

#

Put an event handler

#

Inside another method

indigo pulsar
#

ohhhhh ok

#

sorry i started using spigot like 2 days ago

young knoll
#

That applies to java in general

crude charm
#

^

young knoll
#

You don’t put a method inside a method

crude charm
#

You should learn basic java before spigot

young knoll
#

?learnjava

undone axleBOT
indigo pulsar
#

thanks

candid galleon
#

native to spigot no

dusty herald
#

you can edit items in InventoryOpenEvent right

#

i forgot

young knoll
dusty herald
#

but i dont wanna coll

young knoll
#

Well then make someone else do it

crude charm
#

What's the cleanest way of having hundreds of custom items. I had two ideas, what one would be cleaner or does anyone else have a better idea. Either making an interface with stuff like the name, lore and item type or having an enum with like 10 different fields in it and using that.

grave rune
eternal night
#

^^

crude charm
#

aight that's what I was gonna do, thanks

vivid lion
covert bluff
#

also did you come from roblox

#

nvm

covert bluff
#

i see them every time in intellij every time i hit alt +ins idea but i never bothered to use them

vivid lion
#

its used for structure

#

and grouping

#

and inheritance

covert bluff
#

hmm

vivid lion
#

for e.g.

#
public interface Behaviour {

  void invokeBehaviour();

}

public abstract class Animal implements Behaviour {

  private String name;
  private int age;

  public Animal(String name,int age) {
    this.name = name;
    this.age = age;
  }

  public String getName() { return this.name;}

  public int getAge() { return this.age;}

}

public class Dog extends Animal {
   
  public Dog(String name,int age) {
    super(name,age);
  }

  @Override
  public void invokeBehaviour() {
    System.out.println("BARK!");
  }
}
#

but then you can also make

#

for examples abstract class Machines implements Behaviour

#

too

#

and they would inherit those methods

#

its like for example saying

#

a Human is an animal

#

but they can have emotions and emotions are the interface in this case while animal is the abstract parent class

opal juniper
#

What’s new in spigot 1.17

lunar schooner
# plain ore didn't java16 change the reflection api

Not much. The only change really is that you cannot access most of the JDKs internals anymore (com.sun.* and jdk.*), Though some exceptions exist like com.sun.Unsafe.

Another change that could affect things, though I don't know if it was promoted to stable yet or if it's still incubating, is sealed classes.

eternal night
#

^^ this change will prevent you from modifying static final variables tho

lunar schooner
#

Does it hm 🤔

#

Didn't read that anywhere in the oracle release changes

eternal night
#

Yea, you used to remove the final attribute from the field itself using reflection to access it

#

which is no longer possible as the Field is hidden inside a module

lunar schooner
#

Which JEP is that change described in?

eternal night
#

it is implied in the same one you referenced earlier ?

lunar schooner
#

Oh I probably missed that

eternal night
#

like if you follow this, you will note that it is reflecting into a jdk internal

#

which is no longer possible

lunar schooner
#

J16 has got plusses too though. I'm super stoked for the record class type, and the foreign memory linker api, though that one still incubating :/

rare rain
vivid lion
#

i mean isnt that something we could already make

#

outside of spigot

rare rain
#

yes but it now gets called for entities too

#

not just players

vivid lion
#

oh i see

#

thats handy

eternal night
#

Yea don't get me wrong java 16 is lit. This reflection issue is rather specific to spigot/minecraft eh xD

lunar schooner
#

Lynx: I'm curious if we're still able to do this using native code?

#

Since traditionally the jdk has been super lax about that, and will allow you to do anything really

eternal night
#

Depends on where the security checks are implemented

#

but would be a fun thing to actually try

#

if that is possible, something like an "advanced reflection" jni would be sick

lunar schooner
#

Especially with the new linker api

#

Since jni is well, a mess 😂

#

Might write a library though if we can't do certain things on the java side anymore, but we can on the native side 🤔

eternal night
#

Yeah, a library to ease reflective access to the server internals might be pretty sweet

#

tho I think the bigger issue with static finals at this point will be the rather aggressive inlining

lunar schooner
#

Oh that is a good point yeah

#

I dont know tbh how java does inlining, I know rust tends to be pretty aggressive

eternal night
#

it is part of the JIT compiler (at least in HotSpot)

lunar schooner
#

Static final is ≈ rust's const, where it is always inlined

eternal night
#

tho I think java mostly inlines things like primitives

lunar schooner
#

We'll have to see I think

#

What i didn't quite understand though, what is the change in the mapping things?

#

Will in 1.17 only the obfuscated names be used or?

eternal night
#

no. Some variable name mappings have changed. I don't know if that is md_5 or mojang

harsh gale
#

how can i send packets in 1.17? xd

eternal night
#

but they are still "deobfuscated "

#

same way you always do ?

harsh gale
#

I tried it..

#

But..

covert bluff
#

what magic do compilers do that de compilers cant do

#

i want to know so that i can minecraft

eternal night
#

there is still EntityPlayer.connection.sendPacket

harsh gale
#

Alright

#

I try it out

sullen marlin
#

the fields are obfuscated

harsh gale
#

is it b?

sullen marlin
#

you need to either use the obfuscated fields or build against a different set of maps

harsh gale
#

Ok, thanks

sullen marlin
#

see the release post for info and how to do this for maven

harsh gale
#

I will do it

#

Thanks

eternal night
#

ma confusion

lunar schooner
#

I saw and read that post yeah, but was unsure if it already affects current builds

eternal night
#

i rebased my local environment onto 1.17

#

and all the fields are still deobfuscated

#

welp

#

time to dig in

sullen marlin
#

you rebased your plugin or spigot?

eternal night
#

spigot itself

sullen marlin
#

theyre deobfuscated on spigot, not the final jar

eternal night
#

oh

#

well that explains it

sullen marlin
#

that's the trade off of the mojang maps --- you can only use them for dev

lunar schooner
#

Things previously left unobfuscated, like sendPacket, are those still unobfuscated in the final jar?

sullen marlin
#

methods havent changed

#

only fields

lunar schooner
#

Ah okay, check

#

Are those changing in the future too, though?

sullen marlin
#

unknown

lunar schooner
#

Check

#

As long as I keep writing the nms code following a decompiled spigot jar I'm good I suppose😄

eternal night
#

So realistically the mojang mappings can be used to develop against tho your plugin will need to be repackaged because mojang mappings may not be distributed. Sweet I guess 😅

lunar schooner
#

Shouldn't affect those not using nms directly though I think

#

Like importing the packages

#

Those using reflection should be good

eternal night
#

huh ? How so

lunar schooner
#

I've got class now, will explains what I mean in an hour or so

eternal night
#

the more important question is, will craftbukkit itself ever switch to mojang mappings 😅

#

and tbh using nms directly should work fine using the remapping example provided in the post

#

reflection might be a bigger issue

elfin rover
#

Hey can I get some help, I'm trying to test out my plugin on 1.17 so I need to make a 1.17 server. Only thing is I can't open the jar file. Im already on Java 16 yet my jarlauncher is on Java 15. Im on my mac. How do I update my jarlauncher to Java 16, does anyone know?

dusty herald
#

i haven't used a mac in 7~ years

worn grail
#

I believe the Azul Zulu packages for macos will update the default java when installed but don't quote me on that

plain ore
#

I mean I just use brew install openjdk then brew link openjdk

sullen dome
#

installing openjdk on windows is such a mess lmao

#

i everytime need to get it from some weird sources, because i'm too dumb to setup path stuff

lunar schooner
# eternal night huh ? How so

So since reflection is evaluated at runtime, you call on the obfuscated field names, not the unobfuscated since they dont exist at runtime.

So, if you only do reflection, you only touch 'runtime stuff' and so don't even really need the mappings, nor do you need to reobf your jar :D

eternal night
#

oh. Yes obviously if you wanna reflect against the obfs stuff then reflection is easier

elfin rover
#

Alright I solved it just by opening the jar manually from terminal

eternal night
#

I thought we were talking about porting 1.16

#

which might somewhat work using the obfuscation maven plugin

#

when directly importing the NMS classes

#

while reflective access is not going to be remapped automatically 😅

lunar schooner
#

I always avoid importing the classes directly due to the versioned shenanigans😅

eternal night
#

I mean makes sense 😂 Quick "legal" question. When the mojang mappings talk about "development only/do not redistribute" wouldn't that put "running my own production server with a mojang mapped spigot" in somewhat of a gray area?

lunar schooner
#

Well I suppose you're not distributing anything

#

But INAL

plain ore
#

my interpretation is technically if you're profitting from your server then you're using mojang mappings for a commercial purpose, but ofc IANAL

eternal night
#

Yeah seems like a rather gray area 😅 because tbh I do agree with the 1.17 post, the introduction of mojang mappings seems like another hurdle for NMS usage.

#

which imo is gonna leave spigot in a bit of a weird spot. If we actually want to properly replace a lot of the "wanky" NMS usage, that is gonna be a pain to represent in the API

quaint mantle
#

how do i make an 1.8.9 project in intellij

lunar schooner
#

dont. We dont support 1.8.9 here anymore 🙂

sullen marlin
#

yet everyone seems to want the mappings

#

so this is effectively a try and see; and doing it partially with just fields helps it just being a try and see

quaint mantle
eternal night
#

I mean, I guess a lot of people believe they can just code against it

#

which they cannot

sullen marlin
lunar schooner
#

I'm not sure about the mappings, honestly I was fine with the spigot mappings, they were fairly complete for what I ran into. Is the pressure from Mojang that big to use the new mappings?

sullen marlin
#

@lunar schooner no the pressure is from everyone else

lunar schooner
#

Ah

sullen marlin
#

its probably the single most requested thing

lunar schooner
#

I'd honestly prefer to use the spigot mappings for existing code, but use the mojang mappings for everything new added, but I doubt that is easily doable

eternal night
#

I mean, the advantage of mojang mappings is obviously that they are complete

lunar schooner
#

Except for function parameter names

#

(At least. for what I noticed)

#

Though I suppose those are missing currently too

eternal night
#

Yea, don't think they are shipped. I guess the maven plugin itself should work somewhat. Tho I guess if people keep pushing for mojang mappings, spigot would need to look into how to provide/enable the more funky NMS things through API. Similar to like sendBlockChange

sullen marlin
#

@eternal night there's no reason most things cant be in the api

eternal night
#

I totally agree xD

sullen marlin
#

the exception is of course generic packet sending

eternal night
#

Just means a lot more contribution is needed

sullen marlin
#

and the other exception is basically custom content that you cant add through vanilla and would traditionally be the domain of a mod

lunar schooner
#

I might start contibuting to bukkit tbh, just havent had the time yet

eternal night
#

still waiting for the NNY ItemStack#equals PR

#

I mean PDC worked out rather well as an API addition that isn't really "vanilla"

sullen marlin
#

PDC worked cause it was isolated

eternal night
#

so I guess the API has some nice space for some fun addons

#

Was more comparing how "vanilla" it feels

vague cloud
#

Is the EntityPlayer class removed at 1.17? If so we need to use Player and NPC instead?

sullen marlin
#

its moved packages

#

Im sure your ide can tell you where

lunar schooner
#

Hm that might have some implications for plugins wanting to be compatible with both versions

#

Though I suppose nothing a little reflection wont solve

vague cloud
sullen marlin
#

import net.minecraft.server.level.EntityPlayer;

vague cloud
#

Thanks!

lunar schooner
#

Oh, I thought you ment the Spigot version of entity player 😄

#

Btw, is there any chart somewhere to go between deobfuscated and obfuscated names?

opal juniper
#

Ummm, maybe minidiggers mapping viewer

#

Idk if it is updated tho

sullen marlin
#

if you check the release post it has the path to the text files in your maven repo

lunar schooner
#

It isnt yet no, unfortunately

radiant stag
viral willow
#

((CraftPlayer) p).getHandle().ping

#

why this is not working with 1.17 spigot api

sullen marlin
#

@radiant stag did you run buildtools

#

p.getPing

#

no NMS needed

#

no you need version and classifier

radiant stag
sullen marlin
#

keep version as usual

#

add new <classifier>remapped-mojang</version>

#
            <groupId>org.spigotmc</groupId>
            <artifactId>spigot-server</artifactId>
            <version>1.17-R0.1-SNAPSHOT</version>
            <classifier>remapped-mojang</classifier>
            <scope>provided</scope>
        </dependency>```
radiant stag
#

Oh, thanks that worked
I usually dont use maven in depth

north osprey
#

i did the same and nothing worked

sullen marlin
#

did you run buildtools --remapped

north osprey
#

yes

quaint mantle
#

Hi, Anyone know how can i remove -1.0 in my project I use maven

north osprey
#

java -jar BuildTools.jar --remapped --rev 1.17
The requested profile "remapped" could not be activated because it does not exist.

fleet wigeon
#

but seems every version has some obfuscated field and method name, and they may be changed when updating. You can import them directly but might calls the wrong method or access the wrong filed when you plugin is disign to be multiversion compatible

#

or am i wrong

fleet wigeon
#

hmmm

#

so that still be a problem

north osprey
quaint mantle
#

What are the advantages of using maven?

keen kelp
#

ok I need a class to super different things depending on a boolean in its constructor, how do I do this

fleet wigeon
#

is there any good sodution for multiversion compatible?

keen kelp
#

have code for multiple versions

fleet wigeon
#

just like before?

keen kelp
#

look into any reputable open source multiversion projects

opal juniper
keen kelp
#

just dont add anything

#

and it will be the latest

opal juniper
#

yeah but iirc latest works

#

i just wondered why everyone is saying to do --rev 1.17

quaint mantle
#

Hi, I have a HashMap<String, Integer>, i want to add the key to an ArrayList<String>
If the Hashmap has Vinit, 9 then it will put vinit 9 times in the ArrayList

#

how do i do so

tulip pike
#

Hey, how do I set spigot to 1.17 in Intellij?

quaint mantle
keen kelp
#

for(int i=0;i<Map.getValue("Blablabla");i++){arrayList.append(Key)

opal juniper
#

okee

quaint mantle
#

hi MD_5

#

big fan of yours

tulip pike
#

Hey, how do I set spigot to 1.17 in Intellij?

keen kelp
#

In maven

tulip pike
keen kelp
#

just use this

#

instead of the original jar

#

simple

quaint mantle
opal juniper
quaint mantle
#

as a dependency

keen kelp
#

the methods come with the jar

#

there's no extra things to do

#

just import and boom

north osprey
#

md_5, how to fix the thing with mappings? I'm having this in my deps

        <dependency>
            <groupId>org.spigotmc</groupId>
            <artifactId>spigot</artifactId>
            <version>1.17-R0.1-SNAPSHOT</version>
            <classifier>remapped-mojang</classifier>
            <scope>provided</scope>
        </dependency>

with this i can't import anything i need
but without classifier it loads without mappings

#

i'm running BuildTools with this java -jar BuildTools.jar --rev 1.17 --remapped

keen kelp
#

ok so if I want a method to take any type/object as an argument, and return that thing back? If that's even possible

sullen marlin
#

you cant import it because all the names are different if you use the mojang mappings

#

@keen kelp look up java generics

keen kelp
#

thanks

north osprey
#

and the same thing with remapped-obf

#

what should i import?

tulip pike
keen kelp
#

public static < E > void printArray( E[] inputArray )
in this example, E stores the type of the generic argument Im guessing?

sullen marlin
#

you need to recode your plugin to use the mojang mappings

#

else just omit the classifier

north osprey
#

ok

opal juniper
# tulip pike no

I would reccomend it - if not you need to download from the link above and add it to project structure

north osprey
#

why did they removed them anyway?

#

It was much easier

halcyon topaz
#

How has creating goalselectors changed?

#

with 1.17

vapid thorn
#

only mention in my plugin is this line

for (Entity ent : e.getPlayer().getNearbyEntities(4.0D, 4.0D, 4.0D)) {

eternal night
#

should be fixed by the latest commit

#

update pls

vapid thorn
#

how long ago was the commit

#

i just got spigot 20 min ago

#

but ill rebuild anyways

vapid thorn
#

ill just rebuild incase

sullen marlin
#

I fixed world.nerby but not entity.nearby

vapid thorn
#

ah

eternal night
#

oh. Well then 😂 I guess it will be fixed by an upcoming commit

keen kelp
#

thanks md_5

vapid thorn
#

my fav was right clicking my shrine and instantly crashing

eternal night
#

its the fun update season 🙂

keen kelp
#

make allowed me to create monster line with no way to shorten it excepet shortening the name

sullen marlin
#

its fixed, give it 5 or use --dev

keen kelp
#

I hate how you can't run anything before super and it just makes your supers so verboooose

vapid thorn
#

this was in the crash btw
Caused by: java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0

#

which wasnt true

keen kelp
#

well the Array has length of 0 (nothing in it)

vapid thorn
#

lengths 3 and

keen kelp
#

and you tried to access it

vapid thorn
#

i was able to confirm that

keen kelp
#

did you log right before that line or

vapid thorn
#

thing is the bounded scroll wil not work if there was no shrines in the list

#

but it did

keen kelp
#

just trying logging man

#

log all the data you might need and you might just find the problem

vapid thorn
#

i have debug logs for this kind of thing so yes i did debug

keen kelp
#

that's why nobody does coding my man

#

and what's the result of that?

vapid thorn
#

says it was in fact registered

#

to that list

#

until i right click the shrine and get that

#

and instantrly crash

keen kelp
#

what about the list's size

urban viper
#

I'm getting an instant server crash with the same error as Fahlur, but its with opening custom inventories

#

worked fine on Spigot 1.16.5. very confused

vapid thorn
#

thats whats being used is a custom inven

#

thats the only time that issue occurs

keen kelp
#

you guys working on 1.17?

vapid thorn
#

sec puylling the crash report it said it made

#

yea moving it to 1.17

urban viper
#

yes

patent quarry
#

Yes custom inv seems have some problems when open it

keen kelp
#

then I have no idea

vapid thorn
#

i made this plug back in 1.13 and updated since

keen kelp
#

might be spigot's fault

iron condor
#

some of the configuration is missing in spigot.yml, do I have to add them myself? (sorry for posting here #help-server is quiet).

keen kelp
#

we devs not admins lol

vapid thorn
#

lol

iron condor
#

just wonder if anybody knows

vapid thorn
#

considering 13 plugins on my server are mine and my coding

#

...

urban viper
#

I've never seen the entire server crash like this before, it's kinda impressive

vapid thorn
#

and there fact ive been updating that particular plugin since 1.12

urban viper
#

Same, just with 1.13

vapid thorn
#

yea i didnt like that transfer

#

1.12->1.13

#

lol

keen kelp
#

try spam pinging md_5 and he might just fix spigot just for you

vapid thorn
#

lol

urban viper
#

I don't wanna bother the poor man lol

#

but like 🙃

vapid thorn
#

the description of the error is ticking entity...

urban viper
#

yes

keen kelp
#

prolly ticking player

#

player entity

urban viper
#

^

vapid thorn
#

sigh then i can stop testing for now. until more patches are made LOL

keen kelp
#

yeeeeeeep

urban viper
#

do we report this somewhere? or assume that he knows?

keen kelp
#

rip

vapid thorn
#

im happy at least my library and a few plugins work fine

keen kelp
#

for now imma just use viaversion to support 1.17 on my server XD

vapid thorn
#

but like 6 of them i cant even test till certain plugins update

#

yea i did that with via version

keen kelp
#

wait is viaversion OpenS?

fleet wigeon
#

so now we need to use a remapped jar for development and remap it to the original spigot compatible one in the build processes?

keen kelp
#

I suggest waiting

fleet wigeon
#

wait for wut

keen kelp
#

until more things so settle down

#

the initial bugs and stuff

vapid thorn
#

yea im waiting. theres an nms class here that things dont make sense even for versioning

keen kelp
#

yep

#

1.17 is a big boi

vapid thorn
#

im glad I was able to even do a rough test tbh

keen kelp
#

requires more refining

#

lucky you

fleet wigeon
#

will the things be changed? hasnt it been released?

keen kelp
#

release doesn't mean good

#

and def not bugless

vapid thorn
#

it has bugs

keen kelp
#

ahem
Cyberpunk 2077
ahem

vapid thorn
#

personally should of known better on initial release

fleet wigeon
#

i also wish this system will be more decent

native hamlet
#

are there anticipated any big changes in newest api? or it's safe to use?

keen kelp
#

apparently custom inventories crash ya

fleet wigeon
#

theres a huge changes on nms

keen kelp
#

let's just wait

native hamlet
#

i don't care about nms right now

#

I care about api because i want to start development on newest version

fleet wigeon
native hamlet
#

as i thought

fleet wigeon
#

some plugin is deeply rely on nms

native hamlet
#

For sure, but im talking about developing

#

\I don't need any public plugins

fleet wigeon
#

and this update may result in some big issue or difficulty on development

urban viper
#

I wouldn't use 1.17 right now. wait for the bugs to be patched

lunar schooner
#

I know Ill have to do a lot of NMS work, but Mini's mappings haven't yet been updated :/

native hamlet
#

¯_(ツ)_/¯

orchid trout
#

hello, the pom.xml

#

what should i put to use 1.17 ?

orchid trout
#

<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.16.5-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>

Is what I have for 1.16.5, but 1.17 nor 1.17.0 dont wokr

crude charm
#

In regards to 1.17 spigot

Is it well better optimized or is it still bad? like 1.8 optimized. Does it finally use multiple cores?
have there been api changes?
Is the maven repo out?

sullen marlin
#

its 1.17 not 1.17.0

orchid trout
#

tank you

wraith rapids
#

1.8 is not optimized

#

it simply does not do as much stuff

crude charm
wraith rapids
#

it is lightweight, yes, but it's not optimized

urban viper
#

To get the inventory fix do I need to run buildtools with --dev or --rev ?

crude charm
#

but it still runs smoother

north osprey
#

What happened to field names? Why are they obfuscated, everything was so nice until now, what happened?

crude charm
#

so I mean is 1.17 smoother

#

as a better word

wraith rapids
#

it probably isn't

crude charm
#

Does it use multiple cores?

wraith rapids
#

it almost certainly runs worse

crude charm
#

is it planned

jovial kiln
#

Probably no newer version than 1.8 will be as smooth given how every newer version will have more and more content

patent quarry
wraith rapids
#

yes, all minecraft server versions since like 1.2 or something use multiple cores

#

and yeah, the jig is that doing stuff takes time

#

a version that does less stuff will use less time

wraith rapids
#

a version that does more stuff will almost without exception use more time, that is, be slower

#

yeah that is false

#

the minecraft server by default has probably like 50 threads

#

of course that doesn't mean that everything happens in parallel or concurrently

orchid trout
#

its complex

fleet wigeon
#

whats the goals of the nms changed this time?

wraith rapids
#

for example on paper, chunk loading and generation is on its own thread

#

light has been on its own thread on vanilla for a few versions

#

chat happens on its own thread, and like that says, networking uses multiple threads

#

if you mean whether the main tick loop uses multiple threads, it does not, and it never will

crude charm
#

That's fine, spreading the load across multiple, but I mean the whole processes across 8 or how many can be used

wraith rapids
#

threading is difficult

crude charm
#

What and stuff is nothing

wraith rapids
#

the server is not built for it

#

the api can not support it

orchid trout
#

its even hard to explain

wraith rapids
#

if the underlying server is parallelized, bukkit needs to be rewritten

crude charm
wraith rapids
#

it wouldn't necessarily

#

threading does not mean performance

orchid trout
#

it would be easier to make a big serever actually multiple servers

wraith rapids
#

some things happen faster single threaded

eternal night
#

tbh the amount of syncing that would need to go into the server to still create a vanilla gameplay might just slow it down

lunar schooner
#

It could even slow down the server, due to spinlocks

orchid trout
#

imagine a 2b2t that what does in the inside is multiple servers with bungee

wraith rapids
#

you look like a typical 1.8 guy who goes blindly after buzzwords like "async" and "multi thread"

wraith rapids
#

without knowing what they do or the difficulty or downsides involved with them

crude charm
#

I just use it because it's what people who pvp like and use + its lightweight and i'm not going to use the new features

eternal night
#

you made the list smh

wraith rapids
#

your denomimation will be "async multithread spigot"

crude charm
#

It will be "better optimized" and stack up in tests

patent quarry
#

When I try to compile the dev version , I have this error

sullen marlin
#

@patent quarry yeah was just fixed

patent quarry
#

Thank you love_heart

crude charm
#

Ok off the optimization thing. What about the other two question I had?

have there been api changes? What has been added / changed?
Is the maven repo out?

eternal night
#

rip the //CraftBukkit private -> public comment 😭

keen kelp
#

If I have a class extend itemstack, I can just take an ItemStack and instanceof to see if it's my custom item right

eternal night
#

no

#

you cannot

keen kelp
#

frick

sullen marlin
#

@eternal night dont need the comment for my own commit since Ive already added the mapping for the next ver

eternal night
#

the md_5 powers every wishes they had 😭

keen kelp
#

is there a way to run stuff before super?

crude charm
wraith rapids
#

there is no way, no

#

in the constructor, anyway

#

the best you can do is a static factory method that does stuff and then calls the constructor

keen kelp
#

I want a class that extends ItemStack to super a different arg depending on its constructor

wraith rapids
#

you probably don't want to extend itemstack

crude charm
#

lmfao

keen kelp
#

oh?

wraith rapids
#

"unless explicitly specified the bukkit api classes shouldn't be extended or implemented" and blah blah

crude charm
#

What is a marker?

keen kelp
#

you can click through it

#

no one can kill it

#

it's a marker

#

it's there

#

but if you make it invisible nobody would know it's there

eternal night
#

basic concept is that, where people prior used things like area potion effects or amor stands

#

these entities perform no logic when ticking

crude charm
#

Like Holigrams?

keen kelp
eternal night
#

I don#t think they are rendered

crude charm
#

Is it something I can get if I launch up 1.17 for the first time rn?

eternal night
#

more like, marking locations etc

keen kelp
#

or to display text

crude charm
#

or is it like a debug / qol / region marking thing / holigram

keen kelp
#

make it display custom name, give it a custom name, make it marker + invisible

#

boom text

crude charm
#

OH

#

yeah I get it

#

so an invisible entity

keen kelp
#

it's not invisible

#

you have to make it

#

invisible

crude charm
#

What does it look like if its not?

eternal night
#

the marker ?

keen kelp
#

an armorstand

crude charm
#

oh

#

ok

eternal night
#

the marker is literally not rendered

keen kelp
eternal night
#

no nbt tags are respected on it (besides data tags)

#

nothing happens with the entity

keen kelp
#

made this with a marker invis armorstand

#

wait you guys talking about the vanilla marker or

crude charm
#

no

#

the one in the spigot enum

keen kelp
#

nvm lmao

eternal night
#

what

#

that is the vanilla marker

#

what are you on about

crude charm
#

idk

keen kelp
#

yeah

eternal night
#

1.17 introduced a new entity type

#

the "marker"

crude charm
#

I've never played 1.17

keen kelp
#

ooo

crude charm
#

nor do I even play minecraft

eternal night
#

it is a non-rendered non-ticking entity

#

why are you here then

keen kelp
#

spicy

#

I thought it was the marker armorstnad

crude charm
#

I just make plugins I never play survival or servers or anything

eternal night
#

yea nah it is it's own entity. As a matter of fact it is not even send to the client

wispy fossil
wraith rapids
#

for marking things

wispy fossil
#

thanks

crude charm
wispy fossil
#

Do Markers emit light???
big move for world gen

eternal night
#

no

#

they do nothing

wispy fossil
#

i skipped half way through the video and saw a java edition player mention light 😭

eternal night
#

there is a new block called light

wispy fossil
#

from bedrock?

eternal night
#

which is invisible and omits a light leve

#

no

#

java

wispy fossil
#

yes i think it is also in bedrock in a simpler form

eternal night
#

I mean, idk if bedrock has it

wispy fossil
#

thats really nice

keen kelp
#

/setblock ~ ~ ~ minecraft:light

wispy fossil
#

is it used in play? or something for fun mojang threw in

keen kelp
#

it was in the snapshot

wispy fossil
#

i havent kept up

eternal night
#

mapmaker tool

keen kelp
#

unobtainable in survival

wispy fossil
#

ahh yep

#

been waiting forever for light to come to java

keen kelp
#

and you can right click it with a light item to change its light level

wispy fossil
#

so markers do nothing, except mark as a position of an entity?

#

do they have entity attributes?

wraith rapids
#

they mark a position

keen kelp
#

pretty sure no

eternal night
#

They can store data

#

that is about it

wraith rapids
#

they're used for commandblock and custom map fucknuggetry

eternal night
#

but none of the things stored in them translate into gameplay effects

wispy fossil
#

what is their purpose if I cant attach a pig to it and give it 100 vertical velocity

wraith rapids
#

basically stuff that you don't need to worry about as a developer

keen kelp
#

just give the pig 100 vertical velo

wraith rapids
#

it's a crutch for the noob map makers who stick to command blocks

keen kelp
#

problem solved

eternal night
#

it is the poor mans version of ```java
final Location location = ...

wispy fossil
#

ahhhh i understand

keen kelp
#

yep

wispy fossil
#

command block map makers

#

light blocks will be instrumental though
glad to hear theyre here

crude charm
#

no use to devs?

wraith rapids
#

yeah, light blocks will be great

eternal night
#

no

wispy fossil
#

world gen

#

illumination

#

withot some silly block

wraith rapids
#

can they have multiple light levels?

wispy fossil
#

yeap

wraith rapids
#

or are they bound to 15

keen kelp
#

yes

#

0-15

wispy fossil
#

video says you choose

wraith rapids
#

hmm

keen kelp
#

unless you can change it server side

#

which I dont think is possible

wispy fossil
#

what percentage of servers do you think, a year from

wraith rapids
#

perhaps my custom raycasting light engine will be possible now

keen kelp
#

since even with commands

wispy fossil
#

now, will use 1.17+

wraith rapids
#

without the use of enermous protocol hacks

keen kelp
#

giving yourself a light level 1000 light is still 15

crude charm
#

Does 1.17 still SUPPORT java 8 or do I NEED 16 and does 11 work?

keen kelp
#

you tryna do server-side ray-tracing?

eternal night
#

you need java 16

sullen geyser
#

to run a server

crude charm
#

ok

sullen geyser
#

The plugins can be compiled against java 8

#

in 98% of cases

quaint mantle
#

So in my Pom

#

Do I need to set the target version to 16?

#

And my project structure needs to be updated to 16?

keen kelp
#

yes

eternal night
#

what structure change o.O

#

your project layout has little to do with the java version

keen kelp
#

I think he meant in intellij?

wispy fossil
#

oh speaking of which
today is the day I finally decide to switch to intellij from eclipse
how bumpy is the ride?

wraith rapids
#

java is very compatible in the backward direction

keen kelp
#

not really

eternal night
#

Well, intellij doesn't really have the concept of a "workspace"

wraith rapids
#

you could compile your shit in java 6 and it'd work fine on 16

keen kelp
#

but you are gonna be a lot happier

eternal night
#

so you only really have one project open in a window at a time

wispy fossil
#

oh no fun

sullen geyser
#

Which you will want to 😏

wispy fossil
#

ill deal with it, I always get distracted by my thirty unfinished projects in the tab anyways

keen kelp
#

gl

wraith rapids
#

little to nothing has been added since java 8 that I feel I need

eternal night
#

record classes are crying

wraith rapids
#

vars, diamond notation for anonymous classes, some matcher/collection utils

#

but thats about it

wispy fossil
#

b-b-but garbage collector making my 4gb memory feel like 5gb

wraith rapids
#

yeeeah but that's a runtime thing

keen kelp
#

it's a 25% improvement

wraith rapids
#

i can compile for 8 and run on 16

wispy fossil
#

35% feels like nothing when youre still poor in the end

sullen geyser
wraith rapids
#

there's tons of shit

#

little to none of which I need

eternal night
#

idk nio Files are pretty sweet

#

so is the new http client library

sullen geyser
#

Well that's up to you, but when you get more advanced you would be glad that you've gotten used to the never features.

wraith rapids
#

real men write their own http client

#

i'm a pretty advanced guy

#

don't doubt my advancement

eternal night
#

real man be living in that mom's basement xD

quaint mantle
#

I use maven and I try to do entitytype.axoloty and it’s not finding it? Do I need to update maven or?

eternal night
#

and take like half a year to recode what already exists before even starting the actual project

#

did you update your API to 1.17

sullen geyser
eternal night
#

the dependency

quaint mantle
#

Not sure where I specify to update

wraith rapids
#

that's also not how that is spelled

#

i'm an old fashioned guy

eternal night
#

in your pom.xml

wraith rapids
#

i use a 10 year old browser

#

i'm going to use a 10 year old version of the language, too

eternal night
#

Masochrists are interesting people

wispy fossil
#

netscape navigator

#

oh no no wait
firefox windows vista

#

those were the days