#general
3141 messages ยท Page 24 of 4
hahahaha
first of all
lol
uppercase package names
Ye i know
i had like v1 of the thing and that seperated it form the old one while i was working on it
never got around to changing it back
make sure you have the entire plugin in one class
the code I'm working on atm doesn't compile
yes
thats a lot of purple
Anyways i added you
private static volatile ProcessManager singleton = null;
public static ProcessManager getInstance() throws Exception {
if (singleton == null) {
synchronized (MyClass.class) {
if (singleton == null) {
singleton = new ProcessManager();
}
}
}
return singleton;
}
}```
y
hooray double-checked locking
it's intentional
not using an intermediate local variable means it's not completely safe
In software engineering, double-checked locking (also known as "double-checked locking optimization") is a software design pattern used to reduce the overhead of acquiring a lock by testing the locking criterion (the "lock hint") before acquiring the lock. Locking occurs onl...
scratches back of head and laughs
I know it's somewhat intentional, but just screams bad design
catch(Throwable th) { logger.log("something went wrong"); }
well the bad part of the design is the format of the code (should be inverted checks) and the lock on .class
shoudl be locked on a private static final Object lock = new Object();
that way someone else locking on MyClass.class doesn't fuck you over
@orchid pelican you can use maven properties to allow deploying to a server directory without modifying the pom
shouldn't be committing the .idea directory either
ok ill look into that
ye i dont know how that got in there
ill remove eventualy lol
probs cause my git ignore is broken from a merge i think
ok
just in general
finals get auto assighned if necessary by the compiler though
wat
look at all those finals https://github.com/PaperMC/Paperclip/blob/master/java8/src/main/java/com/destroystokyo/paperclip/Paperclip.java
read that somewhere
oh I see a missing final ๐ฎ
you will see a lot of them
no i mean in my code
it's just good practice to not have your code be mutable when it doesn't need to be
ye
you typically don't want repeating tasks to start in a constructor... https://github.com/Chasewhip8/CrashCore/blob/master/src/main/java/net/crashcraft/api/BuyCraftFastFix.java
Also weird name for a class
what was the class name
overall seems decent at first glance, the difference between "decent" and "great" takes time working with the code which I won't be doing, but I don't see huge glaring issues so I'd say you're fine
Also I only looked at it for like 5 minutes so /shrug
yeah that would be better as a static method, not really any point in creating a class for that
but in general it should be in a method with a name that makes it clear what it's doing
ok will do
that logic is essentially being hidden behind object istantiation
I feel like this code could be better formatted https://github.com/Chasewhip8/CrashCore/blob/master/src/main/java/net/crashcraft/Effects/ArrowParticleEffectMenu.java#L26-L51
thats a gui
Also I believe guava is available, so ImmutableList.of would be better than new ArrayList<String>(Arrays.asList()) unless you absolutely need mutability
there is no built-in method for that in the JDK until java 11
or maybe they added that in 10
the JDK only has Arrays.aslist, and singleton and empty list methods
ye intelij warns and want to use singleton
code seems pretty inoffensive...could definitely do for a lot of cleanup and refactoring
but I don't see why you couldn't put it up under your portfolio
This is like the only project i have done
but its basiclyt lots of medium one sinside
OH GOD
I havnt been doing Java for that long lol
its a fix for entities getting ignited even after the event is cancled
lol
its not that bad lol
how do you end up with that
invert your conditionals, fail fast instead
to bring your code closer to the left margin
you wrap your whole method in if (e.getEntity() instanceof Player) {
return if not
instead you could just do if (!(e.getEntity() instanceof Player)) { and return
If you need more than 3 levels of indentation, you're screwed anyway, and should fix your program. -Linus Torvalds
ok
some languages encourage higher nesting than C though lol
look at java where you can't just have functions at top level ๐ฆ
Yeah, I mean take with a grain of salt, but general principle still applies, it shouldn't get too deep.
definitely
its only like 6 deep lol
what about html
^^^^
HTML/XML aren't programming languages.
Kotlin
is that Kotlin
creating an anonymous class of BaseInspectionVisitor as the super type
leaves chat
does that mean shell scripting is also not programming?
kotlin is just annoying to read
...okay
are mobs entities?
yes
yes
no
maybe
lemon
is a firework a mob?
yes
at least 3
as many until it crashes
over 9000
hmm
idk what part of this you think is hard to read https://github.com/minecraft-dev/MinecraftDev/blob/dev/src/main/kotlin/com/demonwav/mcdev/util/patterns.kt#L26-L32
how many entities until no more entities will spawn?
Thanks for looking at it @ancient bolt
np i needed the practice being nice
I swear every time I update my server jar Citizens finds some mapping broken / changed
what does MinecraftDev acutally do?
wiat i didnt see the website at first
I just wish there was one for PAPI expansions
don't go to the features page
things
more for forge?
completely depends on where it is used
But which looks nicer in your opinion?
completely depends on where it is used
With the white background, just like this.
completely depends on where it is used
completely depends on where it is used
completely depends on where it is used
fucking installing ms fonts from the AUR is way harder than it used to be
how so?
Unless I'm imagining things, you didn't used to have to copy the fonts from your windows install
the PKGBUILD would just download them for you
huh
my msgothic.ttc is failing the validity check or something...
yay copyright
@ancient bolt got it?
got what?
msgothic working
yeah i modified the PKGBUILD with the sha256sum output lol
ah okay
i guess my version of the font from my install didn't match theirs..
getServer().getWorlds().get(0) return null to me ? Why ? I use spigot-api
Helo please some PROJECT DEV
its because the first element in the worlds list is null
There should never be a null world in there?
Yes
Why null LOL
spigot work paper not work with the same code and same world name
We'd need to see your code and plugin.yml
private World MAIN_WORLD = getServer().getWorld("world");
MAIN_WORLD.spawnParticle(....);
MAIN_WORLD == null on paper but not null in spigot
That really doesn't give us any picture of what is going on
?
We don't even know where that field is initialized, if that's in the main class, the worlds aren't even loaded up at the point that your main class is constructed
I have no idea how that would work in spigot
The worlds are not loaded at the point that your server is started up
lol
If you /reloaded, that would work, as the worlds are going to be there then
Ok I will initialize a world in onEnable method
Thanks
Now it's work
Should I use paper-api instead of spigot-api ?
yes
Why should I do?

What features that paper have more thant spigot ? (Sorry for my bad English)
Find out for yourself: https://papermc.io/javadocs/1.13/overview-summary.html
or even the forums https://papermc.io/forums/t/big-list-o-paper-features-developer-edition/144
Wish someone would do that for mcdev ๐ฆ
Thank you very much
Mcdev is one of those things I always reccomend to people but when I try to explain the features I get stumped
But it has a bunch of little things that are nice
i dont use mcdev because i thought it was just a gui for starting a new plugin project
is there more to it? ๐ฎ
Is that the IntelliJ plugin?
I don't use it because it complains when I use Maven placeholders in the plugin.yml
It's more useful on the forge side since bukkit dev is more straight forward
But it has inspections for stuff
to be honest, can't I just disable that specific inspection for all future projects? I'm sure I can
Yes
@unreal quarry it does
a lot
not very useful for bukkit though
I feel like I've told you this before lol
i've used mcdev mainly for dealing with mixins
This won't really tell you what it does, but this is the plugin definition file which is how intellij plugins hook into intellij and implement their features, and you can see it's a rather large file https://github.com/minecraft-dev/MinecraftDev/blob/dev/src/main/resources/META-INF/plugin.xml
it helps a lot with them
@void void stalker...
lots of bugs...but I can get to those later
Oof
using papers api?
it sents a text message to him, then he personally sends them the file via messenger
it's really quite efficient
oh, sorry then ๐ฆ
stay up to date m8
// Force WorldEdit to load
try {
System.out.println("[P2] Force loading WorldEdit");
if (!manager.isPluginEnabled("WorldEdit")) {
manager.enablePlugin(WorldEditPlugin.getPlugin(WorldEditPlugin.class));
}
System.out.println("[P2] Testing platform capabilities");
WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.GAME_HOOKS);
} catch (final Throwable throwable) {
throw new IllegalStateException(
"Failed to force load WorldEdit. Road schematics will fail to generate",
throwable);
}
this snippet has caused a lot of problems, I want to frame it and put it on my wall
it's been called retarded by multiple people, and it has ruined many a plugin
I really quite like it
It's broken and uncessary in worldedit dev builds, but it shall never be forgotten
gradle or maven ?
That's absolutely retarded and I lvoe it
That's awesome
@heady spear why are you printing force loading when its already loaded. that log line should be in the if
but P2 should use loadafter: WorldEdit and itll already be handled
it's because WE didn't load at startup, only postworld
ah
tho tbf i'm not sure why they need WE to be enabled
oh right
bukkit impl adapter
yea they do worldgen stuff so they need to load schematics at startup
but worldedit wasn't enabling til postworld
@void void lol i already kinda have such a project set up :p
now i'm just moving the downloader to a stand alone for the heck of it
its quite a pain
especially hooking into the server process and such
help
private final List<String> completions = new ArrayList<>();
/**
* @param value The string that it is trying to complete.
* @param arguments String values which it will try to complete auto the value with
*/
private void setCompletions(String value, String... arguments) {
completions.clear();
completions.addAll(Arrays.asList(arguments));
if (!value.equals("")) {
for (String arg : arguments) {
for (int i = 0; i < value.length(); i++) {
if (value.length() <= arg.length()) {
if (arg.charAt(i) != value.charAt(i)) {
completions.remove(arg);
}
} else {
completions.remove(arg);
}
}
}
}
}
I wish paper's tab completer would understand this much when using the ```java
@Override
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
You could use ACF ๐
_> how are you unaware of ACF lol,
https://acf.emc.gs ๐
lmao
we only talk about it in here everytime someone brings up other command systems
Aikar how do you feel about this one? It's as good as done, just need an icon now
but i think bukkit already does the filtering for completion startsWith args
use the Paper Icon I guess?
is that a paper only thing?
no dylan
i can make my own, i'm just curious if you think it looks good
Well, for bukkit, spigot, sponge, bungee and JDA ๐
acf can be tied into any platform that takes commands
JLine for example
one day could provide a simple jline binding
acf can do everything except switches :P
SOON
lol
one person PR'd an attempt but wasnt really happy with it
i heard
I gotta move context resolution to store in the current operation context so we can avoid ever reparsing contexts for multiple times
first pass resolve all switches, then resolve in input order
can do switches/issuerOnly mixed
ideally, parse switches, if a switch requests an issuer only context (one context can access another parameters value), go ahead and pre compute that one too, then go resolve any remaining issuer only contexts, then resolve input based
another longer term goal is parsers to give better control over 1 context consuming multiple args
command frameworks is some damn complex shit ._.
this is why I don't label ACF 1.0 yet, we may end up needing major rearchtecture changes to solve goals to get this perfect for 1.0
Iknow i can ,just competes for time with paper and my server ๐
:P
I just have to give slices here and there to each project
but least each project still all has value to my server ๐
ACF must use some nifty reflections to get this to work
@slim nymph that's a very cool project
@dapper nacelle yeah, but it is properly done so there's nothing to worry about
I've even considered moving Skript's command system to ACF myself
I told you to share the design before going to the implementation lol
yeah...
private Iterable<String> getScripts() {
File file = new File("plugins/Skript/scripts/");
File[] files = file.listFiles();
List<String> names = new ArrayList<>();
if (files != null) {
for (File f : files) {
names.add(f.getName());
}
}
return names;
}
I was making a small helper for this
I was about to convert it to streams
> Using File in 2019
Doesn't mean you should use it over the new system
I guess it's fine in this case, anyways
Does stuff actually get deprecated in Java? I feel like they just add new stuff and leave all the old stuff in.
private Iterable<String> getScripts() {
return Files.walk(Paths.get("plugins/Skript/scripts"))
.map(path -> path.getFileName().toString());
}
It's not any slower or worse than Path, really
@wraith oracle
Calendar isn't deprecated either
what I sent doesn't work...
private List<String> getScripts() throws IOException {
return Files.walk(Paths.get("plugins/Skript/scripts"), 1)
.filter(Files::isRegularFile)
.filter(Files::isReadable)
.map(path -> path.getFileName().toString())
.collect(Collectors.toList());
}
@wraith oracle wait it does...
I'll leave the mapping up to you then...
I'm finished
lol
ACF just uses simple Method lookup and invoke, which the JVM will auto optimize for you. But regardless, doesn't matter as commands are not ran hot enough to ever worry about the cost of reflection
nearly all annotation lookup and processing is done at registration and computes results so very little is done other than method.invoke(scope, params); at execution
i make a big push for annotation configuration to be determined at registration time and not runtime execution
If most of it is handled at registration time than I have not really any reason not to use it
there has been no performance issues with it and its years old ๐
it was built internally for my server, then extracted out
same thing for TaskChain and IDB lol
i cant open hastebin links
๐
huh...
lol
pastebin?
fuck
pastebin uses hastebin
public final class ConstructTabCompleter implements TabCompleter {
@Override
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
Completions comp = new Completions();
if (args.length == 1) {
comp.addCompletions(args[0], "reload", "enable", "disable", "update", "help");
}
if (args.length == 2) {
if (args[0].equalsIgnoreCase("reload")) {
comp.addCompletions(args[1], "all", "config", "aliases", "scripts");
// this.addCompletions(args[1], insert scripts mapped to string);
} else if (args[0].equalsIgnoreCase("enable") || args[0].equalsIgnoreCase("disable")) {
comp.addCompletions(args[1], "all");
} else if (args[0].equalsIgnoreCase("update")) {
comp.addCompletions(args[1], "check", "changes", "download");
}
}
return comp.completions;
}
private static class Completions {
private final List<String> completions = new LinkedList<>();
/**
* @param value The string that it is trying to complete.
* @param arguments String values which it will try to complete auto the value with
*/
private void addCompletions(String value, String... arguments) {
if (!value.equals("")) {
for (String arg : arguments) {
if (arg.startsWith(value)) {
completions.add(arg);
}
}
} else this.completions.addAll(Arrays.asList(arguments));
}
}
}
@slim nymph there we go
yuck
i feel like bukkit does that filtering already though
i cant find it in ACF lol
but yes you really should use ACF ๐
@Subcommand("reload|r")
public void onReloadDefault() { onReloadAll(); }
@Subcommand("reload|r all")
public void onReloadAll() {
onReloadConfig();
onReloadAliases();
onReloadSripts();
}
@Subcommand("reload|r config|c")
public void onReloadConfig() {}
@Subcommand("reload|r aliases|a")
public void onReloadAliases() {}
@Subcommand("reload|r scripts|s")
public void onReloadScripts() {}
then reload, r, r all, r c, reload s, r scripts, all them work
It looked scary tbh
there is a learning curve, but once you get the hang of it, your commands get cleaned up so much
and power is unleashed with so little effort
code reuse across the board
that above syntax is all core stuff
you register custom behaviors
like how to provide your own custom completion values (subcommands are auto handled)
dont gotta handle completion for subcommands
https://github.com/aikar/commands/blob/master/example/src/main/java/co/aikar/acfexample/ACFExample.java this is the example plugin
command replacements is basically variables in strings
lets you do configurable annotation values
ie if you wanted to let the end user control WHAT command your command is registered as
doesnt have to be static
they can make your command /tacos
@CommandAlias("%command.name")
commandManager.getCommandReplacements().addReplacement("command.name", config.getString("command-name"));
nope, see all supported platforms ๐
but use paper manager itll still work on spigot/bukkit
I personally think commands are silly, and have instead opted to listen for specific block placement sequences
just enables a MAJOR perk of ACF/Paper - Async Completions
dirt-grass-dirt open the help menu
you can provide command completions async with paper and acf
ie doing database queries
You can do database queries synchronously as well ๐
yeah with a nice tps hit
I try to make my TPS produce a sine curve
but for example I have a command that lets me complete offline players who's played in last X Days
I'll watch a youtube tutorial
i never understood youtube and coding
how is a video of someone typing easier than looking at code examples
maybe i do need to break the example file into different sections, separate simple/basic stuff out from optional more advanced stuff
but take https://github.com/aikar/commands/blob/master/example/src/main/java/co/aikar/acfexample/ACFExample.java#L62 for example
say SomeObject is some basic object that is special to your system
if a command wants to obtain a SomeObject, it can just put it in the method parameters
the .getContextResolver() defines HOW to obtain it
some people just learn better from hearing someone explain it, as opposed to just reading it
so if you pass /command 1, it provides you a copy of Test1(), 2 => Test2(), anything else gives you TestOther()
and if you pass /command foo, itll say must be a number
ACF is pretty neat. I'll try to use it the next time I do something Minecraft related :p
i cant ever fathom doing commands the old fashioned way anymore
i did for my dupe testing plugin and it was painful
i could of setup ACF faster...
the only time i think youll save time over setting up ACF is if you have a SINGLE simple Command with no special input processing
once you go into more than 1 command, or validations, completions, etc, acf saves you time
When did you start working on it? I wish we would have used something like that in PlotSquared
because our command system is hell to work with
It sarted way back in like 2013-2014, but i didnt get it ready for open source use until 2 years or so ago
Add CHANGELOG, update readme for 0.5.0 release
@slim nymph
aikar committed on Jun 17, 2017
lol
we've been on 0.5.0 since jun17th
https://acfspigot.emc.gs will be when it was first 'launched'
april 2017, so 2 years yeah
Makes sense then :p then I have an excuse
I guess i should clarify, I redeploy over same version
only intend to bump versions on API breaks
well, API breaks that are likely to impact people
if something got 'accidently' leaked to public but noone really should of been touching it, i might change that
i try to keep visibility of methods restricted that i dont want public API
I love ACF
that's fair
I think I have 58 commands in my plugin now.
we know how resistant people can be to updating shit, so im really trying to avoid changing version until I have A LOT of breaking changes to go out at once
It has made making them very easy.
we have 70 commands, not using ACF :p
I used to have 1 command per class
that doesn't include subcommands etc :p
I split it among 7 classes
Each class has it's base sub command and it includes its sub sub comma nd
So for example I implemented a feature called codes. I have /guild code list, create, info, delete, redeem
All of the /guild code commands are in it's own class
It took me about 3 weeks to move all my commands over, it really is a life saver.
I'm not gonna bother migrating :p not planning on adding more commands, and people would get upset if I were to break the API again
Ahh I constantly add new commands so that's why
It would be nice though
I have a plan I am going to implement soon which till take it up to about 63 commands
The biggest thing I have to weait on is a friend finishing a mirgration data service. Since I constantly change the json data to add in new stuff ,it needs to support bringing in old data and moving it to the new one
it must be fun having a new project to work on :p I've gotten tired of this after 5 years
I mean I've had mine for about 2 years now I think
I've tried to encourage people to target WE for some shit. If I was in charge I'd keep FAWE as close to WE as possible ๐
it's no fun working with
i thought you was the lead of IS
doesn't mean I control everything we do ๐
gson automatically will add in new keys to existing data if you have it in the object, right?
enact dictator mode
I scream at people from time to time, but Iron is in charge of most things fawe
I should, shouldn't I?
where is WE7 FAWE
It's bascially done, it has been for a while
there are some issues with chunk corruption that need to be sorted out ๐
but yes FAWE really should of kept close to WE, this whole 'now a total fork' that uses WE6 as a basis for 1.13.2 scares me
.........
you know, ive always feared FAWE would corrupt my world, you arent helping
The WE7 API is almost entirely merged now and it's compatible with plugins using the WE7 API
that's why we're not even publishing dev builds atm lol
yeah i dont know that many plugins that are targetting fawe instead of we though
so the published version uses WE7 api?
well thats where i got bit, i targetted WE API, I dont reference FAWE jar, so i when i bumped ref to WE7 API, i started updating my code
they shouldn't either ๐คท
only to find out FAWE is still on WE6 API
yeah bad idea lol
so im stuck waiting for FAWE To finish
but yeah, it's not that far away, I guess we didn't want to release broken code this time around
if they both use different APIs thats basically forcing people to choose one or the other
if you try to paste containers over other containers the chunk just dies, which is sad
but with the whole data conversion issue im still busy ._.
but there are people who will adamantly use one or the other for speed or security
also, it doesn't know what circles are anymore
apparently everything is a square, I think that's my influence :))
did FAWE change to a custom schematic format or is it still on MCEdit
i thought i saw something about that
i gotta figure out my schematics too
it's compatible with whatever WE uses ๐
WE uses Sponge format for 1.13
we mainly gotta make sure DataVersion is included in things
https://github.com/IntellectualSites/FastAsyncWorldEdit-1.13/issues/70
this one is funny.
I might need to generate awastelands in 1.13.2 then let mc update world them save it with 1.13.2
what is that 'some imgur link'
how does imgur links get used
https://github.com/IntellectualSites/FastAsyncWorldEdit-1.13/tree/new-vector-system
This is the working branch for WE 7. A lot more people have started contributing to the plugin the last couple of days
It uses links for the height maps
imgur links specifically, for some reason ๐
i dont understand
ok so they are trying to make it compatible with WE7?
because they also did new vector
https://www.youtube.com/watch?v=5WYWKN-IYL0
I guess this is related
(DiscordBot) FAWE CFI testing a 1000 radius brush and //undo (15,625 chunks modified each use) - length 48s - 10 likes, 0 dislikes (100.0%) - 4,273 views - Jesse Boyd on 2017.12.26
dunno if there are better videos ๐
- imports can break a build
just add like 5 0's to the minimum imports config value in IDEA
i just set my import requirement in intellij to like 99
but yeah it seems like a good idea, but adding a new file to a package shouldnt contain the risk of breaking a build, which can happen with * imports sadly lol
if you use same name as in another package thats both been * imported
why would that happen though btw i forget
My professor got mad when I didn't do that for swing imports
make a.b.c.Foo; a.b.d.Foo;
apparently I was stupid for not using '*' :<
oh right gotcha
import a.b.c.Foo; import a.b.d.*;
๐ฆ
if the d.Foo didnt exists before, all was fine
soon as you add d.Foo; that file breaks
hey city, fortunately they can't mark you down for it since it's correct still ๐
unless they're dumb or it was in the directions
My professor marks people down for using javadoc
you have to use their arbitrary comment style
ok so they're just dumb
// pre: true
// post: not null
// gets username
etc
The more time I spend on these guilds, the more I'm doubting to actually do computer science in uni next year.
no im pretty sure he was just trashing on it
I saw ya'll talking about using a patch system similar to spigot or paper
and I like him, so I'd rather not
Seems like a bunch of work
yes, I don't want that
For like 0 benefit
Like spigot uses git diffs because of their legal grey area right?
I'm excited that there' more people contributing now
I'd pitch in but I'm knee deep in my own tech debt lol
I wish I could spend more time working on it, but I really don't have enough time to dedicate to it :<
so I just tell everyone else what to do
You spend more time abusing me than you do contributing to projects
I love you too bro โค
is jesse retired
Retired? Uhm. Gone? Yes.
Jesse is Mia
If I put my onCommand in my main class and setExecutor to this, will I have to label check?
You don't have to set the executor to the main class
This:
He vanished without a word and randomly logs on without saying anything
getCommand("reloadnbe").setExecutor(new ReloadCommand(this));
who best understands the FAWE internals now then
Iron
jw
Also, don't label check.
If I set it to setExecutor(this) would it catch all commands?
IronApollo, 100%.
I wouldn't think so.
k
so can I just slap:
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (main.getConfig().get("reload_msg") == null) {
return true;
} else {
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', main.getConfig().getString("reload_msg")));
return true;
}
}
in my main class?
The main class catches all commands by default.
grrr.
just create a separate class? :p
...
What happened ACF?
fine >:(
Why would you specifically want a one class plugin?
stop doing stupid shit
Can somebody help i'm getting this error Unable to access jarfile /custom.jar
Because then I don't have to dependency inject for one command.
...
:(
stop. doing. stupid. shit.
You could treat your main class as a singleton if you wanted.
Imagine plot squared being in a single class
You can always access the plugin main class using those ugly getters ๐
Imagine PlotSquared being discontinued ๐
Actually I kinda got to release this update then I can have the option to be done
imagine minecraft being discontinued
microsoft just announced no more java minecraft, everyone has to use bedrock
Yeah I've put in more time and not enough profit
hello hytale
Actually, yes. Please? No more updates = no more stupid breakage.
I used to do it for fun but now I realize time is money
"has to use bedrock" - the community will fix that
honestly, i kinda do wish theyd stop
Yeah, if I were to work instead I could probably pay rent lol
updates are doing me more harm than good
we have at least 1.14 through 1.16 to go
noooooooo
the next major version update is about to release before im anywhere near finishing 1.13.2
lol I just wanted to get PlotSquared for 1.13 pushed before 1.14 was released
In player selectors, let us USE RELATIVE COORDINATES.
at least we managed to get that done
Like in a commandblock:
Ya. Our server was kind of concerned they were gonna release 1.14 before we even updated lmfao
hes always drunk
execute as @p[x=~,y=~1,z=~,distance=0..0.5] at @s run tp @s ~1 ~ ~
But it looks like they pushed back 1.14?
rather than
execute as @p[x=513,y=52,z=5532,distance=0..0.5] at @s run tp @s ~1 ~ ~
It's infuriating for me as a map maker to have to do the coordinates each time.
~ is already a thing? o.o
Didn't they add that in 1.13?
i hate the new 1.13 distance selector
imho they need to start pushing updates every few months instead of every few years
That is not a new thing City.
and more incremental as well
er, it's not a thing
no, it's been a thing for ages
,_,
not huge breaking updates
Just put an armorstand on the place you want and execute as that armorstand.
They pulled on more devs so maybe updates will come faster
It's useful for seamless teleporting.
But it looks like they're just getting larger
seamless teleportation isn't a thing
(DiscordBot) Did I hear someone say seamless teleportation!? Here's something I've... : Minecraft - 139 comments, 3,986 points - TehBrian, 4mo ago
I made that.
teleportation always looks like shit :<
Do you know how infuriating it was to have to put in the coordinates for every commandblock?
Really infuriating.
Also that's pretty seamless to me :D
They're seamless in singleplayer
^
1.8 feature iirc?
Yeah, then it broke again in 1.9
Could've just used structure blocks and replaced parts of the environment
So then it was broken for a while till new snapshots.
Maps
clap clap yes
what for
what is a map server
unfortunately there are some people who use functions (basically commandblocks) as plugins on their server.
bad bad bad idea.
command blocks have been boring as hell for years now
I mean, that's what Hypixel started out as ya?
they made them too overpowered
Functions > command blocks though
@wide chasm agreed XD
It used to be fun. Now it just... not? lol
Stef, functions are commandblocks.
Functions are command blocks, without the hassle of command blocks.
Functions are just long lists of commandblock commands.
im almost entirely certain that plugins can do absolutely anything a command block can do, but better
In fact it's more infuriating.
If I wanted to do something complex using command blocks I'd just make a plugin instead
Because you don't get chain commandblocks.
City commandblocks are the same as always, they run commands.
Before they used to be interesting, and people would do interesting shit.
only big thing that has changed was the /execute command.
No, the commands are too overpowered now.
.... it's not even good. It's just not interesting anymore lol
would you prefer that they were hard to use commands?
observer blocks ruined redstone as well
and infuriating to make stuff with?
All your emoting is triggering me lol
they should never have been added.
making command block commands confuses me way way more than writing a plugin
We made observers ayway.
anyway*
Two pistons.
That's all it takes to make an observer.
It's just slightly larger.
buds have been a thing for ages lol
Actually one piston and a redstone torch and you can have buds.
They have, they just made them smaller which makes them more useful.
you can make block update detectors using a single piston
So you're saying you don't like things when there's no challenge?
Well, they sort of ruined redstone altogether.
Are you even a programmer?
Have you seen esolangs?
lmao
I write functions to make my functions because I think that's the essence of programming xD
I was really into redstone in 2014
Yeah I mean esolangs are cool.
now it's just... too easy ๐คท
So city's a M
But I understand where you're coming from. Limitations breed creativity
That's super silly, kind of understandable logic lol.
Well, they removed the entire challenge by adding observer blocks.
I mean people challenge themselves to make songs using only G R O S S B E A T
People were upset when they added redstone blocks as well
I think challenges are fun for people.
which I 100% understand.
redstone doors were all the rage, now they're not challenging at all
anyone can make a fucking 4x4 by slapping some observer blocks together
make them tiny as well
the only reason I got into creative mode was because of redstone doors lol, that's also how I discovered how much I disliked PlotMe
City, here's a challenge then. Make a complex plugin that each command is written out on a sign, then processed, then that sign is replaced with the output. Then, do something with every single event handler in Bukkit/Paper. Something cool with it.
There's your challenge.
and then I created PlotSquared for this stupid server, that later on ended up banning me for showing them PlotMe bugs
And you have to do that all without any if else statements. Only if.
and then I said "fuck it" and released it to the world ๐
why the fuck would I do that?
Because it's a challenge
Why am I even talking to you
and you said you like those
Why the if/else limitation? Just use else and then put an if in there.
not sure
why haven't I blocked you yet
vic say something stupid
I need to forget about Brian, so it'd be neat to rage at you instead
@austere ivy About your post you made with seamless teleporting, wouldn't it be easier to use an armorstand, teleport that to the right position and then execute your stuff from the armorstand?
Absolutely not, when you're working with like 15 different teleportation spots it would be easiest to place a commandblock, then in it set where to tp you, for example ~ ~ ~15 would send you 15 blocks in the z direction.
Unfortunately it's a tad bit harder since we don't have relative player selectors, which means you have to get the coordinates and enter them individually for each command block.
So instead of this:
@heady spear I still love you, does that count?
execute as @p[x=~,y=~1,z=~,distance=0..0.5] at @s run tp @s ~ ~ ~13
yes ๐
You have to do this, for each command block:
Yay :D
execute as @p[x=149,y=193,z=544,distance=0..0.5] at @s run tp @s ~1 ~ ~
Which is super annoying to do.
That's why I suggested the armor stands, since then you use the armorstand as your position and you don't have to specify the exact position in there.
Even harder, you would have to individually specify and name each armorstand.
Like so:
I suppose you could select each armorstand within a 2 block radius, but that has a lot of overlap.
Depends, you could just target the one armorstand in range, assuming there are no other ones in range.
Yes.
How many armorstands are you gonna place in the same area?
hello
Well you were suggesting one for each teleport.
So around 15, just for that one gif.
execute as @e[type=armorstand,distance=0..2] at @s run tp @p[distance=0..0.5] ~1 ~ ~
Depends on how you need to teleport; if the relative distance to the new spot is the same, you could just move the armorstand along with the player.
I suppose that could potentially work, but then you have to go through the hassle of individually making each armorstand invisible and in the correct spot.
It's not.
I could send you the world if you would like to see!
Well, the advantage of the armorstands would be that once you have set it up, you only have to change the teleportation spots by teleporting the armorstands instead of changing the commands.
I suppose, but again it comes with it's own individual hassles.
It would just be 100% easier if we could just execute as @p[x=~,y=~1,z=~,distance=0..0.5] at @s run tp @s ~ ~ ~13
And plus it would allow other cool things.
gradle or maven
Like having origin points for dx, dy, and dz, other than just the spot the command block is in.
Maven.
@austere ivy Does /execute positioned not allow for relative coordinates either?
Hmm, I'll take a look into that, perhaps we could..
Nope.
We still need to select the player.
@worldly condor small project, maven. Large project or complex task, gradle
That's the player selectors.
Positioned just changes the "at"
Ooh, does it change the execute beforehand?
execute positioned ~ ~1 ~ as @p[distance=0..0.5] at @s run tp @s ~ ~ ~13
That's interesting I need to look into that.
@wide hazel if i do spigot and bungeecord in one jar? what do you suggest
I need to go do some chores I'll be back!
See above
Moment, are plugin developers interested in commands. Can't believe it, and all arguments (position, entity, rotation) can be usd trough function calls
how do i create one ?
Parent ties submodules together
In IDEA, right-click the project menu and create a module
^
Lol
@austere ivy I think it does what you want. I entered the following:
execute positioned ~ ~1 ~ as @p[distance=0..5] at @s run say Hi```
while standing directly next to the command block and it executed for me.
Then I did:
execute positioned ~ ~10 ~ as @p[distance=0..5] at @s run say Hi```
(Moving it up to 10 relative) and it didn't execute for me, still standing next to the command block.
And moving up by ~6 blocks (and shooting the wooden button on the command block with an arrow) it does run again.
aand with that multi module shit, how do i get one jar ?
You don't, really
If you want one universal jar for Bukkit and Bungee you can use bungee.yml
since when does bungeecord work?
@heady spear i mean how bungeecord is build https://github.com/SpigotMC/BungeeCord
why ?
who is Teo and why are we uploading his jars?
Do you want a combined jar for Bukkit and Bungee versions of a plugin, or what?
If so, don't want that. Want something else instead
Why it's bad practise ?
And only works by breaking good practices
Why it's bad practise ?
Because it's more difficult to maintain, mostly
There's some black magic fuckery on the back end to make it work
But generally if it's hard to maintain it's likely not following good coding standards
so i am a magician then? https://www.spigotmc.org/resources/announcementseverywhere-1-9-1-13-2.59510/
bugfree
dont wanna advertise myself
** THIS IS NOT AN AD **
why ?
https://github.com/DarkEyeDragon/PaperDownload if anyones interested. the first release is out
Well yeah, thats the idea xD
mhm
whats wtf in it?
how do i download this
first time seeing C#?
no
how do i download this https://github.com/DarkEyeDragon/ServerLauncher
Github has a handy download zip button
@wide hazel what's bad practise? putting both bungee and bukkit plugin code into single jar?
O_o
hm ?
They already answered that question twice
dafuq
just compile it smh
lol what
why isn't it showing my release xD
Smh my head
its there for me
oh
that one doesnt have an executable
:p
i kinda ditched the program before i finished it
having both bukkit and bungee code in a same jar is not a bad practise wtf, you can separate your project into submodules and merge compiled output back together
@void void yes, making one uber-jar for Bukkit and Bungee is generally not good or fun
most of the people probably can't do it and end up doing weird shit which is inconvenient to use
more like unneeded filesize
file size doesnt mean anything
^
you dont mean anything
stop spreading fud
about what
i have a plugin of 20 kb for example
hey mc server is already uhh
and i wanna do a database management
~40mb-ish
20kb says nothing
for example
you know, mongo java driver for example, is 1 MB+, and i compile it
thats 1000% increase of the size of the plugin
So?
and it doent matter
Wait, size matters?
you still think that size doesnt matter ?
Jar-relocator is nice
file size means nothing
brb, going to shade in fast-util
The only time file size matters is when your jar is 4+ MB and can't upload it to Spigot, cause then you have to trim it down
spigot won't take +4mb? :D
then you just zip it stef ๐
It can matter, in certain circumstances. Spigot file upload limits suck
I mean, there is always github releases
File size mostly doesn't matter though
You can zip it, but if it's still over 4 MB you gotta shrink it down somehow, or provide an alternative host.
jar format doesnt compress well on a global scheme, you can save a lot more re-zipping a jar
@wide hazel if they don't limit it spigot now won't have any memory and they stop all new plugin posts and shit
because the zip file format compresses per class file
no no no no not memory * fuck me
Storage space?
spigot can afford the FS space, space is cheap
Fuck Apple's marketing campaign on memory
if the 4mb file limit was the only reason they have space left on the disks, we're doomed
spigot can buy 10TB of storage easily with how much he makes
plus he keeps all old revisions, he could mandate policiy only last X revisions
they have large amount of forums, which also need some space in there, put in the mess some wiki, put 65k resources and then you have about 2-3 tb
Business class is $20/mo and that bumps the limit to a gig or something
2-3tb is nothing
^
ivan you realize i've been in the web industry for 16 years right
??? :D
I've been doing this life thing for 18 years, 16 years is nothing /s
Im a late bloomer for programming, I only started at 16-17~ lol
Longer than me
i've been doing this life thing for 13 years
that explains so much
lol
WTF DUDE WHY SO YOUNG
I'm 33 ๐
I've been doing web/server stuff for 13-ish years and security for about 7 or 8