Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Základy Javy

Tato část obsahuje základy programovacího jazyka Java, jejichž znalost může v určitých situacích (jako například čtení chyb v logu) pomoci při správě Minecraft serveru.

important

Některé části jsou opravdu zjednodušené a slouží k pochopení naprostých základů i pro začátečníky, kteří se o programování nezajímají. Proto mohou být některé části či rozdělení zavádějící, nebo dokonce fakticky špatně. Proto tuto skutečnost berte na vědomí, a v případě, kdy Vás toto téma zajímá více do hloubky, případně z jiného pohledu než samotné správy Minecraft serveru, berte tuto část s velkou rezervou.

Typy

Základní datové typy

  • String

Datový typ String je textový řetězec, zjednodušeně se da říci text, tedy například: Toto je String, nebo A

  • Boolean

Může mít 2 hodnoty, a to true, nebo false, což se dá v závislosti na kontextu interpretovat jako “zapnuto/vypnuto”, “ano/ne”, případně “pravda/lež”

  • Integer

Integer je zjednodušeně řečeno celé číslo, tedy například 56.

  • Float
  • Double

Float i Double označují desetinné číslo, tedy například 3.6343642 (rozdíl mezi nimi není podstatný, ale zjednodušeně řečeno má Double více desetinných míst).

Ostatní datové typy

Class (třída)

Ve velmi zjednodušeném (a fakticky špatném) podání si class můžete představit jako soubor odpovědný za vykonávání určité části kódu s určitým účelem. Tato class se nachází v package, což si můžete představit jako složku, ve kterém se soubor nachází.

Object (objekt)

Objekt je v Javě vše krom primitivních datových typů (int, char, byte, short, long, float, double, boolean).

Stacktrace

Jak vysvětluje tento skvělý příspěvek na StackOverflow (který stacktrace rozebírá, takže jej rozhodně doporučuji přečíst), zjednodušeně řečeno je stacktrace seznam volání metod, které aplikace vykonávala při tom, kdy nastal Exception (chyba). Ze stacktrace se dá vyčíst kde, kdy a proč Exception nastal.

Taková stacktrace může vypadat například následovně:

[19:37:03] [Server thread/ERROR]: Could not load 'plugins/UltraStaffChat-5.2.2.jar' in folder 'plugins'
org.bukkit.plugin.InvalidDescriptionException: Invalid plugin.yml
	at org.bukkit.plugin.java.JavaPluginLoader.getPluginDescription(JavaPluginLoader.java:178) ~[paper-api-1.18.2-R0.1-SNAPSHOT.jar:?]
	at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:159) ~[paper-api-1.18.2-R0.1-SNAPSHOT.jar:?]
	at org.bukkit.craftbukkit.v1_18_R2.CraftServer.loadPlugins(CraftServer.java:418) ~[paper-1.18.2.jar:git-Paper-388]
	at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:288) ~[paper-1.18.2.jar:git-Paper-388]
	at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1164) ~[paper-1.18.2.jar:git-Paper-388]
	at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:316) ~[paper-1.18.2.jar:git-Paper-388]
	at java.lang.Thread.run(Unknown Source) ~[?:?]
Caused by: java.io.FileNotFoundException: Jar does not contain plugin.yml
	... 7 more

Jak stacktrace číst se dočtete na tomto odkaze: https://docs.papermc.io/paper/dev/reading-stacktraces

To, že se ve stacktrace objevuje ’java“ tedy neznamená problém s Javou, jak si někteří myslí, pouze jsou zde uvedeny volané metody z Java knihovny.

Několik příkladů čtení stacktrace naleznete zde.

Exception

Dle oficiální Java dokumentace je definice Exceptionu následující: “Exception (výjimka) je událost, která nastane při vykonávání programu, když je narušen normální (očekávaný) průběh vykonávání instrukcí programu” (upraveno).

To může znít složitě, ale zjednodušeně se dá říci, že Exception znamená, že nastala nějaká chyba.

S exceptiony se můžete setkat ve stacktraces, jako například v tomto:

[00:00:00] [Server thread/ERROR]: Encountered an unexpected exception
org.spongepowered.configurate.serialize.SerializationException: [entities, spawning, monster-spawn-max-light-level] of type java.lang.Integer: java.lang.NumberFormatException: For input string: "default"
	at org.spongepowered.configurate.serialize.NumericSerializers.parseNumber(NumericSerializers.java:346) ~[configurate-core-4.1.2.jar:?]
	at org.spongepowered.configurate.serialize.NumericSerializers.lambda$static$9(NumericSerializers.java:254) ~[configurate-core-4.1.2.jar:?]
	at org.spongepowered.configurate.serialize.FunctionScalarSerializer.deserialize(FunctionScalarSerializer.java:40) ~[configurate-core-4.1.2.jar:?]
	...

Zde se jedná konkrétně o SerializationException a NumberFormatException, z čehož vyplývá, že při serializaci (configu) nastala chyba způsobená neschopností převést hodnotu default (klíče entities.spawning.monster-spawn-max-light-level) na číslo (hodnota default nemůže být převedena na číslo). Více do hloubky je tato chyba rozebrána zde.

Package

Packages v Javě slouží k organizaci kódu. Package se zjednodušeném podání dá představit jako složky, ve které se nachází zdrojové soubory (classy).

Packages se objevují ve stacktraces, a lze podle nich identifikovat, kde přesně chyba nastala. Například v následující stacktrace se objevují packages com.comphenix.protocol, xyz.kyngs.librelogin.paper a org.bukkit.plugin.java

[16:35:48 ERROR]: Error occurred while enabling LibreLogin v0.18.1 (Is it up to date?)
java.lang.NoClassDefFoundError: com/comphenix/protocol/ProtocolLibrary
        at xyz.kyngs.librelogin.paper.PaperLibreLogin.disable(PaperLibreLogin.java:109) ~[LibreLogin.jar:?]
        at xyz.kyngs.librelogin.paper.PaperBootstrap.onDisable(PaperBootstrap.java:87) ~[LibreLogin.jar:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:283) ~[paper-api-1.20.2-R0.1-SNAPSHOT.jar:?]
        at xyz.kyngs.librelogin.paper.PaperBootstrap.disable(PaperBootstrap.java:96) ~[LibreLogin.jar:?]

Podle začátku názvu package se dá identifikovat, o jaký konkrétní program (plugin/mód/server/knihovna) se jedná. Jméno package totiž obsahuje jméno autora (comphenix), nebo samotného programu (librelogin), případně obojí (kyngs.librelogin).

Začátek package je obvykle stránka, kde vývojáře najdete, od konce, tedy například stránku autora používající package com.comphenix najdete na adrese https://comphenix.com, nebo vývojář s package začínající com.github.hakan-krgn bude na GitHub mít uživatelské jméno hakan-krgn (https://github.com/hakan-krgn).

Pokud však jméno package nesměřuje na konkrétní/funkční stránku, nebo neobsahuje konkrétní jméno pluginu, nebo dokonce i autora, i tak je tato informace velice užitečná, protože téměř vždy je jméno package vše, co je potřeba k dohledání programu pomocí Google potřeba.

Metoda

Metoda v Javě je zjednodušeně řečeno nějaká funkce, která provádí konkrétní “úkol” za určitým účelem.