#help-development
1 messages · Page 562 of 1
alr let's figure it out then
IT IDENTIFIES DIFFERENTLY
NAMING CONVETIONS
it has to be tho
ARE IMPORTANT

PLEASE HELP ME 😭 I HAVE A MAJOR ISSUE WITH MY PROBLEM
Naming convention Popo
👮♂️
can you explain your problem better
I need to find a way of getting all the coordinates of connected blocks of the same type. This is so that I can extrude them whichever way the player is facing. I've already written code to extrude one block, however i need to find a way of finding all connected blocks without a loop/very simple loop. Any ideas (Other than asking me what constructors are)?
1s
use a loop
image or smth
I want to click the face of a block to extend all connected block-faces of the same type
?img
Not verified? Upload screenshots here: https://prnt.sc/
i clicked on dirt
it's highlighted
it would extend dirt one block towards the way i'm facing
yk hypixel skyblock's builder wand. It's basically that
just loop the x and z, and y if you want behind too
do you want to check blocks on player's direction vector?
hi, im currently running a server in aternos and just installed the Simple Voicechat pluggin following the instructions, but when i type in the command a noti pops up saying i need to install it to the client or sum, what can i do now?
Already done that
i mean
I already have the block, the face and player who is clicking it using a function
!verify
!verify
no
so you can send screenshots
i can not see it xD
you want it this way or
what im guessing is, he looks at a type of block, he wants the top of all that type block thats connected
^^^
should do drawing lesson instead of java lesson
this way maybe
uh yeah pretty much, except it won't go deeper than 1 block
no as that's going underground
and one next to it
Have you played hypixel skyblock before
no
😉
there's an item in there called the builder's wand, which just does the exact same i'm tryna make as a stand-alone plugin w/ some few extra stuff
from your screenshot i can see that you just point on glass
and select all of the glasses sideways
it's glass that's supposed to highlight dirt
not goind down or up
but if i clicked on the glass from a face, it would select all the connected glass, going sideways and upways
and then return those coordinates in a list or other, where i can extrude all of them in the opposite direction the one that the player is facing (direction of the clicked face)
that's still kinda sus
wdym
why is your glass highliting dirt 🙂
just check dm's i'll send you two images
- select all glass blocks connected to it(attached/collided)
can i create custom block ?
i mean like Itemstack item = new ItemStack(Material.BLABLA)
and can i set block type for playerinteractevent clicked block
?paste
without mods you cant, you have to use something with blockstates and use pdc or stuff to identify
Not tested but you need to add a range limiterhttps://paste.md-5.net/gumaxusumu.java
but material will be minecraft block
@quaint mantle
https://paste.md-5.net/anapitiquq.cs
Already looked through your code and it helped A LOT
I just feel like there 100% is an easier way of doing this than a loop
this is custom for connected blocks
why dont you want to use a loop
Builderswand
add a range limit or when you click on grass you are going to lag out your server
yeah that's what i'm planning to do lol
how do i prevent this ?
i did applyphyics false
but not worked
if (item.getType() == Material.PAPER &&
block2.getType() == Material.GRASS_BLOCK &&
block.getType() == Material.AIR) {
e.setCancelled(true);
new BukkitRunnable() {
@Override
public void run() {
Tripwire tripwire = (Tripwire) Material.TRIPWIRE.createBlockData();
tripwire.setFace(BlockFace.EAST, true);
block.setBlockData(tripwire, false);
}
}.runTask(plugin);
}```
you might have to listen to BlockPhysicsEvent and cancel that too for these blocks
however:
This event is a high frequency event, it may be called thousands of times per a second on a busy server. Plugins are advised to listen to the event with caution and only perform lightweight checks when using it.
Yeah it’s annoying
how can i control ?
We’ll get real custom blocks one day
^
Caused by: java.lang.NullPointerException: Cannot invoke "toast.pine.overhaulsystems.Overhaul_Systems.getServer()" because "toast.pine.overhaulsystems.Overhaul_Systems.plugin" is null
```
What does this mean?
it tells you
I don't understand it.
go google how to read stacktraces
it means you have a field "plugin" in "Overhaul_Systems" and that field is null
public class Overhaul_Systems {
private Plugin plugin; // You never assign any value to this
}
thank you
for the disable block interact with action.physical i need use get clicked block ?
im gonna doubt its interact event
Quick question. Using a spigot server plugin, can you modify minecrafts terrain generation so that only 1 type of plant will grow in a biome? Like if I wanted a forest biome to randomly select pumpkins or roses, can I make it only generate that type of plant and prevent other plants from generating in that spesific biome?
You can but I don't think it will be easy
Yeah worldgen tends to be very complicated
How difficult u think? I don't use java very much.
says the person that did a worldgen plugin
makes him more credible no? haha
I didn’t make it from scratch :p
nerd
If I have a Maven project on Github that builds a jar and javadoc jar, how can I add the dependency from Jitpack so that it automatically downloads the javadoc along with the jar? Right now, it only downloads the jar, then I have to tell IntelliJ to "Download Documentation."
I got bored and finished it 😉 https://paste.md-5.net/yimasirare.java
IJ settings -> Build, Execution, Deployment -> Build Tools -> Maven -> Importing -> check "Automatically download: Sources & Documentation"
hello there, does anybody knows how can i prevent the server from stopping itself? (watchdog thread), beacuse im doing a sync operation which takes a bit long, im trying to change a lot of player data.
Right, but how do other libraries seem to do this automatically without me having to specify that?
player data shouldn't accessed async, any NMS class is unsafe to do it async, i did and it corrupted the data, resulting in complete reset, so i restored the data to backup.
What are you doing that takes so long?
multipel peoples player data or just 1
you run your update async and feed teh data out in small chunks sync
ok it looks like setting the max-tick-time to -1 solves the issue
thanks for help 🥰
hm idk, probably jitpack doesn't create a maven-metadata.xml, so IntelliJ doesn't know the javadocs exists / they only get created when requested or something. Usually, a PROPER repository (jitpack isn't a proper one) provides a metadata file for each artifact, looking like this:
How can I fix this?
// Add the modifier to the armor's knockback resistance attribute
itemMeta.addAttributeModifier(Attribute.GENERIC_KNOCKBACK_RESISTANCE, knockbackResistanceModifier);```
wdym?!
It’s either the constructor or the add method, don’t remember which one
Constructor
The ya go
what Constructor?!
The only constructor you're using in the snippet you sent
Just pass the appropriate slot that you wear the item in
new AttributeModifier("generic.knockback_resistance", 2, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.CHEST);
tbh you might need more arguments
Yeah you would need to pass a UUID as well
why the hell is english so weird.
both are called chest lmao
Yessir
Wait until you see lead and lead
Or read and read
Actually, there's 3 uses of lead
Lead item in minecraft
are there any bimetals made with lead? I only know that zinc + nickel yield a great bimetal
It does appear that's exactly the case. Do you know if there's a way to get Jitpack to generate it?
why is it sometimes we read read as read but not read as read
Ask why I get this error all the time
Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1 at main.worldwar.commands.MainCommands.onCommand(MainCommands.java:81) ~[?:?] at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[spigot.jar:3284a-Spigot-3892929-0ab8487] ... 19 more
Well, you create a repo on GitHub, do git init and git remote add origin yourRepo
Then just push
Link

Array index starts at 0
in that way

because you do args[1] (accessing the second element) although your array only has one element
ok, thanks although I also found another problem that I already solved at the same time, thanks 😄
You new to java?
hi guys im trying to disable ACACIA_LEAVES distance changes
i tried with blockphysical event
i cancel event and worked but when i do only for ACACIA_LEAVES my event not worked
here is my code
@EventHandler
public void physicsBlock(BlockPhysicsEvent e) {
if (e.getBlock().getType() == Material.ACACIA_LEAVES) {
e.setCancelled(true);
}
}```
i tried getSourceBlock
and getChangedType
but not worked
u guys have any idea ?
what do you mean distance change?
iirc that’s textures
we can control this with spigotapi
Block#setFacing?
oh we got leaves class
then prevent physics on teh leaves
yes its the problem
i tried
can u help me ?
public void physicsBlock(BlockPhysicsEvent e) {
if (e.getBlock().getType() == Material.ACACIA_LEAVES) {
e.setCancelled(true);
}
}```
this is code
i tried e.getsourceblock
and changed type
not worked but
if i cancel the all event
working
i do wrong something
thats because you cancel the physics evenbt on teh wood being broken
prevents propagation to the leaves
you could detect a physics event on teh leaves, then set the persistent flag
if these are leaves you are placing just set teh persistent flag then
more performant than messing with physics
yes i need cancel event when player break blocks or break other leaves
if you set persistent when you place leaves they won;t change
yes
thats going to be very hard
so your problem is?
when i cancel the blockphysics event working but i can't do that only for spruce_leaves
you want to do it for all leaves?
no only for spruce leaves
I'm not understanding your broken English then
😄
if you ONLY do it for spruce leaves does it not work?
i just wanna only cancel event for spruce leaves
yes not working
@EventHandler
public void physicsBlock(BlockPhysicsEvent e) {
if (e.getBlock().getType() == Material.SPRUCE_LEAVES) {
e.setCancelled(true);
}
}```
here is my code
i tried this
@EventHandler
public void physicsBlock(BlockPhysicsEvent e) {
if (e.getSourceBlock().getType() == Material.SPRUCE_LEAVES) {
e.setCancelled(true);
}
}```
you can;t use sourceblock as that could be anything
try (as a test) java if (Tag.LEAVES.isTagged(e.getBlock().getType())) e.setCancelled(true);
oke
I wish Mojang would just add a solid and transparent dummy block with a bunch of states
Just for this purpose
This will be a shot in the dark:
Im setting up a multi module project with maven and it seems to be working fine except for one thing... https://github.com/CloudLiteMC/cloudlite-server-core
Lombok (and other various files) keep getting shaded into my jar is there any way to stop this? It makes my plugin jar like 2mb like mmmbruh
Do you have the scope set to provided for them
lemme try one sec
yeah setting my module imports to provided just break it entirely sadly
.
Rip
odd
multi module projects bring me nightmares
yet you still do it
especially with gradle
putting a settings.gradle on your module breaks it entirely
sooo nice when its setup tho
I mean it is worth it just idk why its shading in other random shit
each module has its own pom, you set its dependencies to provided, if they are
so even for lombok it would get set to provided?
cause import for thats always compile when i go to grab it and its how ive used it on just single pom projects
yes you shoudl not be packaging lombok
but its weird cause my github files get shaded in to
I don;t use lombok but it's a compile time thing so should not be shaded
yeah setting anything to provided like that just breaks the import when used elsewhere
even for my own modules in the project
Are you trying to start a war?!
The person who needs that is working with maven.
🙂 he's using maven
It was a joke…
Time for fisty-cuffs
Oh… didn’t do my readings lmfao
All I saw is Lombok and shading
wayment
maven switched my copy pasted import ive used for years from provided to compile smh
copied it from here and mf changed it to compile smh
ty, this is a lot cleaner 
on a scale of 1 to 10 how hard is AI in Minecraft (Spigot/bukkit)?
I've done a bit of Terraria (tModLoader) AI, but this seems very deep when compared
Depends on what you mean by AI
Also, I saw this (https://www.spigotmc.org/threads/custom-mob-ai.253206/) but.. what is "nms"?
Ugh
I wrote this garbage guide as a challenge to myself
Should cover some basics
I want a size 2 slime to attack a nearby zombie and otherwise stay idle, and when it dies, not divide
oh nms is just net minecraft server. I'll read your guide! thanks
Extend the slime class, set its size and add a goal that attacks zombies
And remove its natural wander goal
You can also just patch a slime by using reflections to access its target selectors
bukkit entity slime?
uhh no, nms
Slimes in NMS have these goals, remove the ones in yellow
SlimeAttack has to do with its random jumping towards a goal
and float is usually just float in water
The KeepOnJumping goal is just the persistent jumping for movement
ooooOOooh I don't have net.minecraft.server! That's why it's different
Yeah you need to import the whole thing
spigot instead of spigot-api
Should come with buildtools
Honestly you can just achieve your stuff by removing all goals, adding SlimeAttackGoal and a NearestAttackableTargetGoal with the target being zombies
I'll do that and grow from there, but first I have to reach that step.
By spigot, you mean the jar I got from using buildtools?
-- and the thing I run the server with?
When you run buildtools it installs that version on your MavenLocal
So you can just java -jar buildtools.jar --rev 1.19.2
for example
and import org.spigotmc:spigot:1.19.2
discord hello?
\
I know but gotta do it on both sides
why did that sticker go through I thought I disabled this setting
anyways
?paste
how I import it?-- what's the right way? I got this on my build.gradle.kts https://paste.md-5.net/rugipiceqo.bash
add the r0.1-snapshot to the spigot import below
or just remove it all together and remove the -api from your spigot api import
spigot includes the api? (spigot vs spigot-api?)
Of course
aight
what's the difference between spigot and spigot-api then? what does spigot have that -api doesn't?
The entirety of NMS
Also, after doing this, it'd seem I don't have org.bukkit.*
Uhm
but you should also be getting the mappings
which takes some extra work
are you using gradle or maven
former
for gradle you either have the option of paperweight or a 3rd party special source plugin
at least for spigot
but anyways the idea is that you develop against the mojang mappings (renaming everything from its obfuscated name to the actual ones mojang uses)
and then you use a plugin called specialsource that will then convert all your code back when you compile it
that's an abstract, somewhat accurate overview
Thanks, that's insightful
Is special sources not open source?
because the spigot server doesn't use mojang mappings and you're not allowed to redistribute them, that's why it needs to be converted back
it is
but specialsource is a maven plugin
and the gradle ones are all 3rd party adaptations
which doesn't mean they don't work
they're just unofficial
I just use paperweight at work and avoid the paper api itself
We purposely use deprecated stuff
compiling with paperweight is fun
That's too much work :L
only takes 16 hours
bc its deprecation warnings everywhere bc of paper
its on mds github
Which one?
Mmmm why not just make that but gradle :}
There is 2 of them
loads exist
just not offical
There is the one linked above and then there is another where i am one of the few other then md that has sources for it
He did make it, but there is i guess another one that i know what you are talking about
we are talking about 3rd party gradle special sources there
There is specialsource and specialsource2
MD made both special source plugins
no official, made by md, special source exists for gradle
Why isn't specialsource2 open?
Have to ask him. Last when i did i think it was just because of being lazy and no one really asking lol
Like it is only used for one thing even though it can do quite a bit lol
Could you run maven plugins w gradle
I barely use nms so I'll see if I ever need
Previously I only used it for InventoryView#setTitle
I'm fairly experienced in nms
As opposed to being unfairly?
let him cook
I get this on my 1.20 plugin & server.
20:46:49 ERROR]: [ModernPluginLoadingStrategy] Could not load plugin 'Core-1.0-SNAPSHOT.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: Unsupported API version [1.2]
plugin.yml:
name: Core
version: '${project.version}'
main: net.hyperiongames.core.Core
api-version: [ 1.20 ] <-- the part that errors
authors: [ herbert__ ]
website: discord.hyperiongames.net
depend: [ LuckPerms ]
softdepend: [ LunarClient-API ]```
and i also tried
```yaml
name: Core
version: '${project.version}'
main: net.hyperiongames.core.Core
api-version: 1.20
authors: [ herbert__ ]
website: discord.hyperiongames.net
depend: [ LuckPerms ]
softdepend: [ LunarClient-API ]```
'1.20'
thanks
+1 to the count of people asking for the float api-version xd
I've followed the mcmmo's xp gain rabbit hole for a while.
I got to the part where xp is added in a player profile, yet after adding the xp I don't see where it checks for level up or anything...
Doc's commit looking hella attractive :P
what?
how would one make a custom smithing table recipe in 1.20
the api only shows 2 RecipeChoices for items
whats your goal for finding the level up code for mcmmo?
Learn how they save and associate data with players, pretty much. It'd seem they handle that through an event though (xp number up not via event, but level up via event after the xp gain)
And player info asociation with player metadata
What do you mean
(keep in mind i have never made custom recipes before)
in 1.20 you need a template, item to upgrade, and a material
this only shows the item to upgrade and the template
no material
i could also be stupid and missing something
Look at the classes that extend Recipe
There's two new ones for the new types of recipes
Do PDC tags added to Players get saved on restart or are they ditched
PersistentDataContainer
^
how could you be so dumb you idiot wtf bro /j
i think i just needa take a break but im close to finishing no point
I'm using protocollib to detect some block updates being sent to the client, but for some reason it keeps saying there's no blocks in the packet (Field index 0 is out of bounds for length 0)
protocolManager.addPacketListener(new PacketAdapter(this, ListenerPriority.NORMAL, PacketType.Play.Server.BLOCK_CHANGE) {
@Override
public void onPacketSending(PacketEvent event) {
PacketContainer packet = event.getPacket();
Material block = packet.getBlocks().read(0);
});
this code fails
oh I'm an idiot it works by using blockdata rather than just block
also consider MULTI BLOCK CHANGE where multiple change at same time
It’s not like the first thing everyone learns
Not to be rube
:|
its also a new feature tbf
(the smithing transform/trim)
Oooo trim
I haven’t looked into it mb
Do u have the doc tho I kinda wanna loook at it
https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/inventory/SmithingTransformRecipe.html
https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/inventory/SmithingTrimRecipe.html
declaration: package: org.bukkit.inventory, class: SmithingTransformRecipe
declaration: package: org.bukkit.inventory, class: SmithingTrimRecipe
~~Hi, I am trying to make my onBlockBreak EventHandler run again after the first block has been broken (java getScheduler().runTaskLater(this, () -> block.breakNaturally(), 10);). Right now I am using
BlockBreakEvent newEvent = new BlockBreakEvent(block, event.getPlayer());
onBlockBreak(newEvent);
to run this again but when doing so, it ignores the delay i've set using getScheduler().runTaskLater()
EventHandler:
@EventHandler
public void onBlockBreak(BlockBreakEvent event) {
// Get block broken
Block blockBroken = event.getBlock();
// Check if the block broken is a log
if (isLogBlock(blockBroken.getType())) {
// Get a list of the blocks around the broken block
List<Block> surroundingLogs = getSurroundingLogs(blockBroken.getLocation());
//
for (Block block : surroundingLogs) {
if (isLogBlock(block.getType())) {
// Break block after 0.5 seconds (in ticks)
getScheduler().runTaskLater(this, () -> block.breakNaturally(), 10);
BlockBreakEvent newEvent = new BlockBreakEvent(block, event.getPlayer());
onBlockBreak(newEvent);
}
}
}
}
How would I go about re running the EventHandler when the first block is broken but still have the delay with getScheduler()~~
solved my problem, ignore this message :)
how would i clone a Player object?
Clone a player object? What are you trying to do? more detail would be helpful
Hello! I have a batch script problem I'd love someone to help me solve.
@echo off
(cd "C:\Users\bella\OneDrive\Documents\GitHub\ELS-Plugin\gradle" && gradle shadowJar)
REM Loop through all arguments
for %%A in (%*) do (
REM Check if the current argument matches the target argument
if "%%A"=="reset-kck" (
REM Delete the specific file
del /Q "plugins\KCKitPvP"
echo KCKitPvP cleaned successfully.
) else if "%%A"=="update-kck" (
REM Copy paste new jar file
for /R "C:\Users\bella\OneDrive\Documents\GitHub\KC-KitPvP\kckitpvp\target" %%F in (kckitpvp-*.jar) do (
copy /Y "%%F" "plugins\KCKitPvP.jar"
echo Copied file: %%~nxF
)
) else if "%%A"=="reset-els" (
REM Delete the specific file
del /Q "plugins\ExpLevelStat"
echo ExpLevelStat cleaned successfully.
) else if "%%A"=="update-els" (
REM Copy paste new jar file
for /R "C:\Users\bella\OneDrive\Documents\GitHub\ELS-Plugin\gradle\app\build\libs" %%F in (ExpLevelStat-*.jar) do (
copy /Y "%%F" "plugins\ExpLevelStat.jar"
echo Copied file: %%~nxF
)
) else (
echo Argument "%%A" not recognized.
)
)
java -jar server.jar nogui
Before I added in the third line (the cd && gradle line), the bash file worked flawlessly and proceeded to start the server. But when I added that in, it does the job and builds the jar file, but then it stops there. Could anyone tell me why this happens?
Player oldPlayer = p; // cloned player who is in survival mode
p.setGameMode(GameMode.SPECTATOR);
GameMode oldGamemode = oldPlayer.getGameMode(); // should return survival```
replace ```bat
(cd "C:\Users\bella\OneDrive\Documents\GitHub\ELS-Plugin\gradle" && gradle shadowJar)
with
```bat
pushd "C:\Users\bella\OneDrive\Documents\GitHub\ELS-Plugin\gradle" && (
gradle shadowJar
popd
)
also i think you meant batch, not bash
Oh, that works! Thanks you! Could you tell me why the second one works and the first one doesn't?
Oh yea, lol. Sorry
Just save the old gamemode into a variable before changing the gamemode.
there's a lot of other player info i need to save like location, potion effects, etc.
because you changed the CD and then it got reverted to the dir where the batch file was executed this made the commands execute in the wrong dir
im not good at explaining sorry
Oh, I see. It's okay, no worries. I thought encapsulating the whole thing with () only temporarily changes the dir as stack overflow stated, but oh well
Player oldPlayer = p;
Player clonedPlayer = oldPlayer;
Gamemode oldGamemode = clonedPlayer.getGameMode();
oldPlayer.setGamemode(GameMode.Spectator);
@lucid gazelle
Thanks for answering 😄
it was basically because of the subshell (the parenthesis)
is it possible to add nbt tags to the result of a smithing transform recipe?
I'll try it in a while
Did you try PrepareSmithingEvent to set result? And use pdc instead of nbt
i did not try PrepareSmithingEvent
seems to be what im looking for though :)
(ill let you know in a bit)
Oh doesn't smithing copy NBT from the input normally
So yeah an event may actually be needed
any clue why this might happen?
no javabean properties found
Had a look already, pretty sure it's because you can't serialize interfaces
Why would you serialize an interface?
If I unload a chunk with Chunk#Unload can it be load automatic?
I mean can it be loaded without players?
Bats are super annoying[03:02:06] [Server thread/INFO]: MrnateGeek issued server command: /minecraft:kill @e[type=bat] [03:02:06] [Server thread/INFO]: [PT] MrnateGeek issued server command: /minecraft:kill @e[type=bat] [03:02:06] [Server thread/INFO]: MrnateGeek issued server command: /minecraft:kill @e[type=bat] [03:02:06] [Server thread/INFO]: [PT] MrnateGeek issued server command: /minecraft:kill @e[type=bat] [03:02:06] [Server thread/INFO]: MrnateGeek issued server command: /minecraft:kill @e[type=bat] [03:02:06] [Server thread/INFO]: [PT] MrnateGeek issued server command: /minecraft:kill @e[type=bat] [03:02:06] [Server thread/INFO]: MrnateGeek issued server command: /minecraft:kill @e[type=bat] [03:02:06] [Server thread/INFO]: [PT] MrnateGeek issued server command: /minecraft:kill @e[type=bat] [03:02:06] [Server thread/INFO]: MrnateGeek issued server command: /minecraft:kill @e[type=bat] [03:02:06] [Server thread/INFO]: [PT] MrnateGeek issued server command: /minecraft:kill @e[type=bat] [03:02:06] [Server thread/INFO]: MrnateGeek issued server command: /minecraft:kill @e[type=bat] [03:02:06] [Server thread/INFO]: [PT] MrnateGeek issued server command: /minecraft:kill @e[type=bat]
Yea
Just have a plugin not have them spawn then
You read my mind, that is on one of my tasks
anyone able to help, i feel a bit lost trying to get my Jar file using Git Bash
?ask
If you have a question, please just ask it. Don't look for staff or topic experts. Don't ask to ask or ask if people are awake or available. Just ask the question to the channel straight out, and wait patiently for a reply. Make sure you use the right channel regarding the topic of your question. Create a thread in case the channel is already in use!
does anyone else have issues with intellij suddenly freezing with 100% cpu usage
seemingly specifically when double clicking stuff
what?
@fresh adder Just ask the question like this bot says
i basically asked when i need to, it is saying "couldnt create a java virtual machine" when i try run it through Git Bash
Do you have java installed?
why are you using git bash
what are you trying to run through git bash?
yes yes and yes
oh that what it says to use for build tools
Use command prompt
not gitbash
Download and install git, then just use command prompt to run buildtools
youy don't need to download anything
Alot to smelt, don't ask how this is done. Hard to tell you but it was a task
Buildtools will download a mobile git
uh hey i just downloaded spigot and i wanna use that to make a plugin for my server, how do i include it in my project?
you want to use the spigot api?
yea
?maven
The home of Spigot a high performance, no lag customized CraftBukkit Minecraft server API, and BungeeCord, the cloud server proxy.
are you using maven or gradle
i intend to use gradle, but would maven be better?
personal preference i guess
im not very used to java so i have no idea
Use whichever.
Spigot is built using Maven and Spigot support is maven based
?learnjava
Here are some links to get you started on learning Java:
- https://www.codecademy.com/learn/learn-java
- https://www.sololearn.com/learning/1068
- https://www.learnjavaonline.org/
- https://programmingbydoing.com/
- https://docs.oracle.com/javase/tutorial/java/index.html
The last one is the only official one, however some of those concepts assume that you already know a bit about programming.
i'd say maven is more simple
Maven is much easier to use imo
ok so i have to make a new project, and select maven in the ide
Both Gradle and Maven have thier pros and cons, it's literally personal preference.
right
Check my blog post above
I was thinking about that, thanks for these words. I only touched Maven so I would not know
https://www.spigotmc.org/wiki/spigot-plugin-development/ This wiki will be good for you as well
The home of Spigot a high performance, no lag customized CraftBukkit Minecraft server API, and BungeeCord, the cloud server proxy.
aight ty
Not quite. If you use gradle you will end up being forced to use forks
Spigot is maven
Not true. I use Gradle with spigot just fine
Impossible if you need anything outside the API itself
I don't know if this is true but I seen gradle, you can use the same setup as maven. Forgot where the thread was on, it was 2 months ago. With my anxiety, its easy to forget
If you use anything outside the API with grade you will be forced to use paperweight.
Use Maven and everything is here, Spigot based.
for api, yeah, but how would you go about remapping NMS stuff?
Well, thanks for telling me maven is easier
Never needed to. So never looked into it.
ohh ty
On testing this, I ran into a issue. 2 different plugins. Well, the plugin for the hammer (Pickaxes). I tried to mine a block when its only minable using pickaxes, I could not mine it because I had a check for only drops. So I need something like this but I don't want to use NMS ( https://www.spigotmc.org/threads/players-tool.373643/ ), any methods or anything I can use?
So you need to check if a block is mineable with a tool ?
I think vanilla added a tag for this in some version
mineable/pickaxe
Yes
then just Tag.MINEABLE_PICKAXE.isTagged(blockMaterial) should be enough
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Tag.html#MINEABLE_PICKAXE
I will need a example but I just seen something in the docs which I will test that first
I might have got it working, let me see
AND HOW LONG HAVE THESE EXISTED?!
few versions at least ?
dafuq
long
How can I show a block being broken? ProtocolLib or NMS?
Or is there a way to do this in Bukkit/Spigot?
Player#sendBlockDamage
Now you get to see how many questions THEY get wrong
ill probably have some mistake but i just wanted to get outta there
I remember my daughter studying for the A+ certification. So much in their manuals was just plain wrong.
ah rip
for A+ you litterally have to give teh wrong answers to some questions to pass.
they call that education nowadays
yep 😦
and it only become worse with those ai tools
i always have to think about the meme about the surgeon that used ai for his education
wtf
that is dumb
very
java teacher told wrong stuff too
i would probably piss of the teacher for correcting them
i hate then things ain't right
idc, im not learning anything in lesson anyways
In my day if you pissed the teacher off you got a book thrown at your head
if next year java is the same basic stuff ill just stay at home
I was about to say what I found failed to operate but I forgot to set my hammer to 3x3 or higher
how many books have hit you
only one. I was a quick learner 🙂
good good
I have a tendency to be perfectionist and odd about my things
i can't accept doing wrong questions on purpose
Changing my plugins that involves block breaking if( Arrays.asList(BlockFace.UP,BlockFace.DOWN).contains(face) ) { for(int x = -size; x <= size; x++){ for(int z = -size; z <= size; z++){ if( !(x != 0 || z != 0) ) { continue; } if( block.getRelative(x, 0, z).isPreferredTool(item) ) { block.getRelative(x, 0, z).breakNaturally(item); } }} }
Yeah it's bad when employers care more about you sticking out the education more than the actualy certificate
most qualifications are worthless now. It's staying in school employers want to see as it shows dedication
damm so faulty
...
here in Italy they take care about your CV and your past experience, your certificates, and so on
Its less about the actual certificates than you stuck through to get them.
Experience counts for way more
a certificate helps you making new experiences, and not all are interested of getting them
they worth more than the education of a person in my opinion
Not to an employer
certificates are for saying you wont fuck up a company, the real learning starts the moment youre in the company
its just a flag to show you stuck teh course
ye
This is not about dev but my brother work at a food store and he showed me how his workers used the same oil for years and everything. I was thinking "What the f***?! Good luck with a court case if it comes"
but it doesn't make sense to give more attention to someone who hasn't tried to learn something from a certificate rather than who cared about it
The older the oil the more flavor ;). Probably not good in a food mart though
If you both got the certificate you both did the same work
how do i check if a player has an open inventory
You can;t reliably
There is no event fired for the player opening their own inventory and getOpenInventory will always return the players Inventory when its closed
Player#getOpenInventory but if has not you get the player inventory
open inventory events only fire for TileState inventories
If (player.getOpenInventory() instanceof PlayerInventory)
Pans were dirty and everything as f***. He told me how he was thinking the freezer had a hole in the rag if I can spell then he noticed it was not, it was because the floor was super dirty
Thank i will try
This will be true even if the player has no inventory open
fuck idk
player inventory open is client sided
what are you trying to make?
Some of the tastiest food I've ever eaten was in a greasy spoon cafe. But I'd probably not eat in a place like that today.
textDisplay.setAlignment(TextDisplay.TextAlignment.LEFT); Why m I getting the ClassNotFoundException ? Spigot API and Server versions are matching
I'm trying to keep open inventories in a list. I can't check every second if the inventory is not open I will delete the inventory from the list
which types of inventories do you need to hold
build a new spigot jar for your server
oh I've got a question, someone does it use Dev Triumph gui?
yes i am using this
ever used in legacy like 1.12.2?
no 1.19.3
File: GuiManager.java @EventHandler public void onClick(InventoryClickEvent event) { AbstractGui gui = activeInvs.get(event.getInventory()); if( gui != null && event.getClickedInventory() != null ) { gui.onClick(event); } }
File: FilterGui.java``` Player player = (Player) event.getWhoClicked(); HashMap<String, MaterialList> lists = chest.loadFilters(chestItem);
if( event.isShiftClick() ) { event.setCancelled(true); return; }
if( event.getClickedInventory().getType().equals(InventoryType.PLAYER) ) {
if( event.getCurrentItem() != null ? event.getCurrentItem().equals(this.chestItem) : false ) { event.setCancelled(true); return; }
} else {
event.setCancelled(true);```This may help you with detecting player inventories
How does it help? I've downloaded spigot-1-19-4.jar from official website
if gui is not null, clicked inv also wont be
? ? ?
From WHERE ?
there is no official download website
lol I thought it belongs to md5
Not Spigot
In some servers I get a class not found exception in some adventure API like text components, but running in localhost gives me no such problems
?bt
You beat me to it :D
build your own, is the only legal and recommended way
right
that only works on Event trigger
Where can i get the Spigot 1.20 libraries for plugin development?
?bt
While its not a official website but I hope you know spigot is from bukkit. Just use it
Yes, that is what I mean. I was about to open the server jar and show proof of bukkit. Thanks
Its illegal to distribute a compiled jar, which is why we have buildtools.
I don't know, I just told you what I seen. I even have that on my SSD but I use the server jar from that url. If they doing this illegal, maybe I should report it to Spigot?
distribute jars could get you in trouble
So, i built the spigot 1.20.1 version but i can't access the Libary in mit Editor
who wants to get a jar from me
send me a jar jar bing
Thats not a valid import
Use maven project
i do
oh it is sorry, add a ;
importing the wrong jar?
How do I import it the right way?
add a ;
um you did
I'm slow today
hahaha all good
?paste your pom
lets say its because of the heat
Bootstrap Jar
The main spigot-1.18.jar is now a bootstrap jar which contains all libraries. You cannot directly depend on this jar. You should depend on Spigot/Spigot-API/target/spigot-api-1.18-R0.1-SNAPSHOT-shaded.jar, or the entire contents of the bundler directory from your server, or use a dependency manager such as Maven or Gradle to handle this automatically.
Please read the release notes for further information: https://www.spigotmc.org/threads/9-years-of-spigotmc-spigot-bungeecord-1-18-1-18-1-release.534760/#post-4305163
applies to 1.20.1 too
ahhhh
yeah I have my AC on full
so the one I imported is only for server?
when did they change it i forgor
only to run the server
at 1.18?
Its much easier to use Maven than manual import
It worked!
Maven is a powerful and quick tool
It works, thx
Bukkit has a contact form but it has this following messageWarning! Tickets are not for Minecraft-related support! If you need help with your Minecraft server, please join our Discord. Using this form for server support is a bannable offense. Lets just end this talk about illegal jars and stuff please
Everythign we have told you is fact. No arguments.
That is why we need to end it. It will end up with my high bpm and ban gets placed. So just to not give anyone the same anxiety, it must end
FarmerGui.getViewers().entrySet().removeIf(entry -> (entry.getKey().getOpenInventory() instanceof PlayerInventory));
farmer trying to delete from map if gui is not open
What is the map for?
Do I miss something in this pom.xml file?
https://paste.md-5.net/ajitorovuz.xml
probably the spigot dependency ?
I'm reinserting the invnetory every second
Yes, that is missing
Like this?
https://paste.md-5.net/lagodawoxo.xml
Probably also the repo
<repositories>
<!-- This adds the Spigot Maven repository to the build -->
<repository>
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
</repositories>
Or you could use PDC to tag the creeper and then check for the tag in the death event
can just use the entity’s id
PDC is supported since 1.14 (I think)
It is supported on all entities, not only custom ones
Using Ids
those all sound like things you can easily check
You can if you make your own check?
I would assume you'd just add list.remove(creeper) to the method when the creeper is being put down
or something more elegant
make a Creeper Wrapper is my suggestion
check when Y velocity goes from negative to zero
Never use the bukkit object for storing.
check if any creeper you launched is touching the ground
If it’s been launched + took damage from fall
kill the creeper and summon an explosion
then dont check for fall damage
then you can check if it is on the ground after it’s been launched aswell
use a bit of your brain xD
just add it to some list as soon as you launch the creeper
I'd assume every tick then if no event exists for that
specifically the events category
what event where you thinking about
Whats the way to handle skins on heads in 2023 (i have a uuid of the skull owner)
Yes, i’m just giving examples
if it’s a creeper?
creepers can’t send fake packets !

oh I can finally use my emotes!
pog
use a timer
i think it’s ing
lol no
no?
you check all creepers in a single timer?
it's checking a fricking boolean
how is that expensive
don’t start a loop
have a continuous one already going
then add a creeper to the list
that gets checked in the existing loop
i don’t mean list list, just general english term 😅
sounds like you need a wrapper
either that or a map
Wrap the creeper object, with time, been launched, all the stuff he needs to check.
dont wrap it, just take its id along with other stuff you want
wait why do you need a time of the launch ?
creeper.isDead() exists no ?
Seems unnecessary
isDead() is part of LivingEntity
should be, check the docs
check if Entity#getVehicle() is null or not https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/Entity.html#getVehicle()
declaration: package: org.bukkit.entity, interface: Entity
Place half without physics updates, place other half
Need to ensure however that the door can actually attach
Otherwise it will just pop as an item lol
I already did it, and it placed the door correctly but the oak door isn't placing
All the other doors work
maybe try to show us some code ?
Maybe it is an issue of orientation? As the above might help if you showed some code
?paste
can you not use state instead of magical data value ?
If i do that the upper part will be the same as the bottom
I am saying to use this https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/block/data/type/Door.html
Instead of some magical value 0x9 | 0x8 or whatever
declaration: package: org.bukkit.block.data.type, interface: Door
he's on 1.12
are block states not supported on 1.12 ?
pretty sure it still uses data values, like wool using damage values
oh ok nvm then
So what is the right way to skinheads in 1.19? I see all the commands don't use UUIDs anymore (example: https://minecraft-heads.com/custom-heads/alphabet/44018-sculk-sensor-arrow-right), can I still use the Server#createProfile(uuid) and apply it to the skull with the uuid from the 1.15 version here? (Im wanting to eliminate using HeadsDatabaseapi to get heads :c + not god for public plugins)
use PlayerProfile
Sounds good
Does using PlayerProfile send requests to mojang? Should i cache heads ItemStacks i make or nah?
no need to use reflection anymore
all skins are queried from Mojang, by the client
oh
The client caches them
so it wont really matter then
I just remember there was a skull method that send requests to mojang, shit made the server DIE
for some reason i feel lik that looks super complex compared to maybe ?
thought dont know if this works i just spun it up rq
theres so many different methods online lmao
shits a mess
??
yeah itll be from uhmmm
1.15 commands from this
pretty sure those uuids are valid players
or does it not work like that lmao
most of those heads are just registered with mojang, not actual players
so its likely better to just outright use the base64 then
yeah
private static final String TEXTURE_URL = "http://textures.minecraft.net/texture/";
@Override
public void setTexture(SkullMeta meta, String texture) {
PlayerProfile profile = Bukkit.createProfile(UUID.nameUUIDFromBytes(texture.getBytes()));
PlayerTextures textures = profile.getTextures();
try {
textures.setSkin(new URL(TEXTURE_URL + texture));
} catch (MalformedURLException e) {
e.printStackTrace();
}
profile.setTextures(textures);
meta.setOwnerProfile(profile);
}
interesting, ill give that whirl ty
use mojang authlib, the heads must be base64, i can show you an example
yeah but legacy
They said 1.19
@silent steeple Textures must come from minecraft's servers, you can't use Base64 anymore
the client doesn't accept it
didnt see
I mean it does, but it needs to be a b64 version of the json that links to mojang's servers
also, we have the same name :P
nice lol
also, can I cast a PlayerInteractEvent to a PlayerInteractAtEntityEvent if I am sure the player clicked an entity?
this is my method
instead of making two listeners
public ItemStack getCustomTextureHead(String value) {
ItemStack head = new ItemStack(Material.PLAYER_HEAD, 1, (short)3);
SkullMeta meta = (SkullMeta) head.getItemMeta();
GameProfile profile = new GameProfile(UUID.randomUUID(), "");
profile.getProperties().put("textures", new Property("textures", value));
Field profileField = null;
try {
profileField = meta.getClass().getDeclaredField("profile");
profileField.setAccessible(true);
profileField.set(meta, profile);
} catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException e) {
e.printStackTrace();
}
head.setItemMeta(meta);
return head;
}
String value is the base64 for the head
You can't use an arbitrary texture btw
in the InteractEvent just check instanceof
Wait shit that actually works?
check class hierarchy :p
Don’t think it does
yes it works
Of course it works
Yeah I know, didn't know it also works like parent event gets called from child event
this gives me 1.8 vibes
Figured it'd be exact
ong
I mean that's what I used it for
ohno
PlayerInteractAtEntity is not a child class of PlayerInteract
?jd-s
yep you are correct
I was going on the damage event
I think that was what I used before
yeah this was my confusion https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/entity/EntityDamageEvent.html
so if I use playerinteractatentityevent I can be sure the normal interact event isn't called, or what?
The normal one is called
Ah wait the normal interact event not the normal interact entity event
Yes it shouldn’t be called
so
PlayerInteractEvent doesn't get called if PlayerInteractAtEntityEvent is called from what I understand?
Shouldn’t
Note that the client may sometimes spuriously send this packet in addition to PlayerInteractEntityEvent. Users are advised to listen to this (parent) class unless specifically required.```
Yes you should use the PlayerInteractEntity event unless you specifically need the interact location
Idk why it wasn’t just added to the interact entity event
It's for my item lib, I guess I can make the location nullable?
AtEntity is for armorstands iirc
for all actually
itemMeta.setCustomModelData(50000);
bone.json
{
"parent": "item/generated",
"textures": {
"layer0": "item/bone"
},
"overrides": [
{"predicate": {"custom_model_data":50000}, "model": "custom-items/item_one"}
]
}
I use this method to change the model of a bone. item_one.png is in the directory assets/minecraft/textures/custom-items. What is wrong? Nothing changes? Not even the not found texture?
How can i turn the png to a model?
Can i use _
is there anyway i can give a tag to a block, for example i create a custom block with like a custom name and lore or whatever and then when placed i want to keep track of wether its a normal block of that type or the custom one
the same way normal pngs are turned model lol
{
"parent": "item/generated",
"textures": {
"layer0": "item/item_one"
}
}```
chunk pdc
?pdc
yes
ight
can i do it with overrides?
want to use one item for all custom items
you need to create a separate model file for the new model you want to replace the bone with
https://www.planetminecraft.com/forums/communities/texturing/new-1-14-custom-item-models-tuto-578834/
Might be good tutorial idk
Hello, I'm Geegaz ! As you may know, the first snapshots of the 1.14 introduced a new format for the JSON item models custom model data ....
you mean for every custom item a bone.json? And how do i add a custom model data
no, you reference the multiple custom models in bone.json
you create funny_pickaxe.json, funny_axe.json, emerald_helmet.json
And then you reference those in the bone.json
are there any reuploads of the official spigot 1.7 from when it existed
seems kinda illegal?
Not legal ones
damn alright
bone.json
{
"parent": "item/generated",
"textures": {
"layer0": "item/bone"
},
"overrides": [
{"predicate": {"custom_model_data":50000}, "model": "one.json"}
]
}
one.json
{
"parent": "item/generated",
"textures": {
"layer0": "item/diamond"
}
}
like this?
without the .json in the model path but yeah, seems good
Thank you very very much
keep the client logs open in case there are any other errors, you will see them there
thanks
how do i reference the root directory of the project in pom.xml
why do you want the root?
so if someone made a 1.7 plugin using spigot 1.7 they could get arrested?
no
so whats so illegal about it
they should, for trying to support over 8 years, 11 months, and 18 days old version
huh
🙂
it contains minecraft server code, that is illegal to redistribute
or something like that
[15:00:10] [Worker-Main-5/ERROR]: Failed to load model minecraft:models/item/bone.json
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated array at line 9 column 18 path $.overrides[1]
at com.google.gson.internal.Streams.parse(Streams.java:61) ~[Streams.class:?]
at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:72) ~[TreeTypeAdapter.class:?]
at apa.a(SourceFile:516) ~[apa.class:?]
at apa.b(SourceFile:523) ~[apa.class:?]
at apa.a(SourceFile:573) ~[apa.class:?]
at fjf.a(SourceFile:86) ~[fjf.class:?]
at fve.b(SourceFile:105) ~[fve.class:?]
at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) ~[?:?]
at java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1760) ~[?:?]
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) ~[?:?]
at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) ~[?:?]
at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) ~[?:?]
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) ~[?:?]
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) ~[?:?]
Caused by: com.google.gson.stream.MalformedJsonException: Unterminated array at line 9 column 18 path $.overrides[1]
at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1657) ~[JsonReader.class:?]
at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:485) ~[JsonReader.class:?]
at com.google.gson.stream.JsonReader.hasNext(JsonReader.java:422) ~[JsonReader.class:?]
at com.google.gson.internal.bind.TypeAdapters$28.read(TypeAdapters.java:779) ~[TypeAdapters$28.class:?]
at com.google.gson.internal.bind.TypeAdapters$28.read(TypeAdapters.java:725) ~[TypeAdapters$28.class:?]
at com.google.gson.internal.Streams.parse(Streams.java:49) ~[Streams.class:?]
... 13 more
{
"parent": "item/generated",
"textures": {
"layer0": "item/bone"
},
"overrides": [
{"predicate": {"custom_model_data":50000}, "model": "fire_ring"}
{"predicate": {"custom_model_data":50001}, "model": "water_ring"}
{"predicate": {"custom_model_data":50002}, "model": "air_ring"}
{"predicate": {"custom_model_data":50003}, "model": "earth_ring"}
]
}
```
do you know why it looks like this
https://imgur.com/a/wANHMvY (model structure)
you need a comma for the list lol
"overrides": [
{"predicate": {"custom_model_data":50000}, "model": "fire_ring"},
{"predicate": {"custom_model_data":50001}, "model": "water_ring"},
{"predicate": {"custom_model_data":50002}, "model": "air_ring"},
{"predicate": {"custom_model_data":50003}, "model": "earth_ring"}
]
note the end of each line
also, pretty sure you need a path like item/fire_ring
im srsly starting to hate intellij day by day
accidentally force closed my ide because i was typing my ass off and fat fingered some fucktarded dumbass keybind and now my project wont work ever after invalidating caches smh
amazing software 👌
sounds like a skill issue ngl
it is and im tired of fat fingering these keybind
eclipse is always an option

use netbeans
notepad++ is always an option
Hype for Eclipse!!!!
md uses it, so guess it works
Hhahaa
its intellij not me
fyi you don't need <Material, AEgs> anymore, you can just use <> in the constructor
i pressed tab and it did that ugly ass shit
yes ik hence why i sent it here lmao
private final Map<Material, AutoComprressorMaterial> stuff = new HashMap<>()
oh
its intellij's tab completion it changed on my
everytime it wasnt to use non empty constructors now...
What did you dooo :D
how tf does fat fingering a key bind do all this??
What's your sdk version configured for your project?
Looks like java 1.2
17
pretty sure it invalidated your maven config
you just gotta refresh the maven project and it'll all work
why in the fuck would that be in a keybind tf
sec
fuckin idk
nerd
Good, now you can continue using this great and powerful IDE :)
you know im gonna say im gonna use netbeans rn
But ik damn well im not going through that effort rn, so bad to this :((
ive had nothing but issues fat fingering keybinds lately and idek what im hitting
Just disable every keybind except the ones you actually use
yeah i might do that
bet there's a keybind for that
FUCK i hate insert sometimes lmao
you know i wouldnt doubt it
if theres a keybind that breaks my project theres gonna be one that breaks the keybinds themself
i used to get so confused when i would hit insert and not realise
whats funny too is it only did it on that one module
imagine the dude thinking his keyboards broke rn cause of it
"dumbass shit dont work im getting a refund"
[15:19:28] [Worker-Main-16/WARN]: Missing textures in model minecraft:bone#inventory:
minecraft:textures/atlas/blocks.png:minecraft:custom_item/item
"layer0": "custom_item/item"
Path: assets/minecraft/textures/custom_item/item.png
what is wrong
uuuhh atlas problem possibly ?
oh ye atlas wait a sec
I'm lazy to search something in text
This video should describe your problem
https://www.youtube.com/watch?v=MHWX_GaK2g0
We cover the big change that happened for resource packs in 1.19.3!
Script for updating automatically:
https://github.com/Dominexis/Atlas-Logger
🔵 Discord & Other Links: https://linktr.ee/CloudWolfMC
💻 Website: https://cloudwolfyt.github.io
in short: if you want your own folder "custom_item" you need to add it to block atlas
Whomst dared to summon me
I shall crush the heathens
and without
I don't understand the question
where to add the textures when i don't want my own foldeer
where they are normally in vanilla
keep that same energy but photo shop the eclipse logo on a knight and put it as your pfp
Added everything. atlases directory in assets with a block.json. Still same error
can you send the resourcepack ?
you need the commas!
If you edit the json files in IDEA or something not as dumb as notepad, it will tell you the errors.
Or you could run the JSON files thru online validator
thank you very very much
Does it all work now ?
yes. Love you


