Java Minecraft plugin mantığını anlamak

Katılım
20 Mayıs 2018
Mesajlar
8.561
Çözümler
35
Yer
BURSA-BANDIRMA
Daha fazla  
Cinsiyet
Erkek
Plugini intelij idea ile açıyorum bakıyorum. Bu pluginin çalışmasını sağlayan kütüphaneleri ve bu kütüphaneleri kullanarak GUI'li veya oyun içi eklentilerin nasıl çalıştığını anlamak kavramak istiyorum. Bunu nasıl anlayabilirim? Üniversite 1. sınıfta sadece Python gösterdiler sadece o yüzden Java mantığını bilmiyorum. Ki Python bile düzgün göstermediler.

Kütüphanelerin mantığını biliyorum kodların çalışmasını sağlayan yer. Fakat class ne. Bu düzenlenecek kısımlar nasıl klasör olarak dışarıya çıkıyor.

Kısaca ben bu işin nasıl öğrenilebileceğini öğrenmek istiyorum. Başlangıç olarak ne önerirsiniz nasıl geliştiririm kendimi?
 
Önce yazılımın temellerini, mantığını öğrenmeniz daha doğru olur. Bi anda belli bir konuya odaklanırsanız anlamanız daha zor olur.
 
Plugini intelij idea ile açıyorum bakıyorum. Bu pluginin çalışmasını sağlayan kütüphaneleri ve bu kütüphaneleri kullanarak GUI'li veya oyun içi eklentilerin nasıl çalıştığını anlamak kavramak istiyorum. Bunu nasıl anlayabilirim? Üniversite 1. sınıfta sadece Python gösterdiler sadece o yüzden Java mantığını bilmiyorum. Ki Python bile düzgün göstermediler.

Kütüphanelerin mantığını biliyorum kodların çalışmasını sağlayan yer. Fakat class ne. Bu düzenlenecek kısımlar nasıl klasör olarak dışarıya çıkıyor.

Kısaca ben bu işin nasıl öğrenilebileceğini öğrenmek istiyorum. Başlangıç olarak ne önerirsiniz nasıl geliştiririm kendimi?
NEsneye yönelik progtamlamanın konuları onlar. ONları da 2de göreceksiniz yüksek ihtimal fakat bence siz okulu takip etmeyip başlayın. Java zor fakat kullanımı bol bir dildir, eskisi kadar revaçta olmasa da hala bol bol kullanılır backend taraflarında.
 
Önce yazılımın temellerini, mantığını öğrenmeniz daha doğru olur. Bir anda belli bir konuya odaklanırsanız anlamanız daha zor olur.

Algoritma gibi kavramları Python öğretirken hoca öğretmişti. Ben Java'da daha çok şunu öğrenmek istiyorum. Java kütüphanesini plugin için oluşturmuş (ya da hazır kullanmış)
Bu kütüphanenin komutlarını kodlarını nasıl öğrenebilirim?

Nesneye yönelik progtamlamanın konuları onlar. Onları da 2'de göreceksiniz yüksek ihtimal fakat bence siz okulu takip etmeyip başlayın. Java zor fakat kullanımı bol bir dildir, eskisi kadar revaçta olmasa da hala bol bol kullanılır backend taraflarında.

Zaten bölümüm dolayısıyla öğretmezler Java'yı. (elektrik elektronik mühendisliği) ki yazılım okuyan 3. sınıf arkadaşıma bile öğretmemişler.

Bu kütüphane kodlarını oluşturma mantığı ne. Bayağı öğrenmek istediğim şey var ama nasıl ve nereden başlayacağımı bilmiyorum.
 
Class'ı bir kek fabrikası o classtan türettiğin nesneleride kekler olarak düşün. Kek'in her zaman bir tür'ü, boyutu, fiyatı olur. Class'a bu ortak özellikleri tanımlarsın ve her kek için ayrı ayrı degişkenler oluşturmamış olursun. Basitçe bu şekilde açıklanabilir. Kütüphanelerde temelinde aslında class'tır. Sen o Class'tan bir nesne üretirsin ve o nesne üzerinden classtaki metodları/özellikleri kullanırsın. Kodlamaya başlamak istiyorsanız bence Java tarafından önce C#'tan temelleri ögrenin derim.
 
Önce şu ana kadar öğrendiğiniz yazılımın daha ilerisini öğrenmeniz lazım (programlamaya giriş dersinde gösterilenler ile bunu anlayamazsınız şu anda).
Class nedir diye sorduğunuza göre OOP nedir onu öğrenmeniz lazım, mesela Java gibi OOP bir dilde gelişmeniz lazım, yani internette araştırırken class nedir, @override nedir, implements nedir vb. her bir şeyi güzelce öğrenmeniz lazım.
Minecraft gibi bir uygulama nasıl çalışıyor onun hakkında bilgi sahibi olmanız lazım, neticede a ile byi toplayıp cevabı yazdırıp biten bir program değil bu, yazılım mimarisi var, runnable classlar var, threadler, eventler var, grafik kütüphaneleri var vs. Minecraft kodunu açıp kitap okur gibi okuyun demiyorum, böyle bir program nasıl yazılmış, nasıl çalışıyor, gözünüzde canlandırabilmelisiniz.
Grafiksel bir pluginin çalışma mantığını anlamak için de biraz grafik bilmek gerekiyor, nesne nasıl oluşturulur, koordinat, yer değiştirme, etki etme vb. 3 boyutlu olarak kafada canlandırabilmek gerekiyor. EE değil de Bilgisayar okusaydınız bilgisayar grafikleri diye seçmeli ders olur onu tavsiye ederdim kültür olması açısından, yoksa internette opengl tutorial vb. aratıp inceleyebilirsiniz.

Ondan sonra internette "how to Build a Minecraft plugin" diye aratıp gördüklerinizi denemeye başlayabilirsiniz.

Plugin üretebilmek için de kullanılacak api hakkında bilgi sahibi olmanız gerekiyor, bukkit server için Bukkit 1.7.10-R0.1-SNAPSHOT API gibi api doclar mevcut imiş.
Mesela Animals (Spigot-API 1.20.2-R0.1-SNAPSHOT API) dokümantasyon ile neyi nasıl yapacağınızı inceleyebilirsiniz.
 
Son düzenleme:
Algoritma gibi kavramları Python öğretirken hoca öğretmişti. Ben Java'da daha çok şunu öğrenmek istiyorum. Java kütüphanesini plugin için oluşturmuş (ya da hazır kullanmış)
Bu kütüphanenin komutlarını kodlarını nasıl öğrenebilirim?



Zaten bölümüm dolayısıyla öğretmezler Java'yı. (elektrik elektronik mühendisliği) ki yazılım okuyan 3. sınıf arkadaşıma bile öğretmemişler.

Bu kütüphane kodlarını oluşturma mantığı ne. Bayağı öğrenmek istediğim şey var ama nasıl ve nereden başlayacağımı bilmiyorum.
Yazılım okuyan çocuk java bilmiyorsa gerçekten garip, C# falan öğretmişlerdir belki. Neyse.

Temel javayı buradan bakabilirsiniz. Kaliteli bir sitedir.

Kütüphane dediğimiz şey oluşturulmuş kodlar topluluğudur, resmi dokümantasyon ya da google kullanarak ne ne değildir öğrenebilirsin.

Örneğin java'nın swing kütüphanesinin açıklamaları burada.
 
Önce şu ana kadar öğrendiğiniz yazılımın daha ilerisini öğrenmeniz lazım (programlamaya giriş dersinde gösterilenler ile bunu anlayamazsınız şu anda).
Class nedir diye sorduğunuza göre OOP nedir onu öğrenmeniz lazım, mesela Java gibi OOP bir dilde gelişmeniz lazım, yani internette araştırırken class nedir, @override nedir, implements nedir vb. her bir şeyi güzelce öğrenmeniz lazım.
Minecraft gibi bir uygulama nasıl çalışıyor onun hakkında bilgi sahibi olmanız lazım, neticede a ile byi toplayıp cevabı yazdırıp biten bir program değil bu, yazılım mimarisi var, runnable classlar var, threadler, eventler var, grafik kütüphaneleri var vs. Minecraft kodunu açıp kitap okur gibi okuyun demiyorum, böyle bir program nasıl yazılmış, nasıl çalışıyor, gözünüzde canlandırabilmelisiniz.
Grafiksel bir pluginin çalışma mantığını anlamak için de biraz grafik bilmek gerekiyor, nesne nasıl oluşturulur, koordinat, yer değiştirme, etki etme vb. 3 boyutlu olarak kafada canlandırabilmek gerekiyor. EE değil de Bilgisayar okusaydınız bilgisayar grafikleri diye seçmeli ders olur onu tavsiye ederdim kültür olması açısından, yoksa internette opengl tutorial vb. aratıp inceleyebilirsiniz.

Ondan sonra internette "how to Build'a Minecraft plugin" diye aratıp gördüklerinizi denemeye başlayabilirsiniz.

Plugin üretebilmek için de kullanılacak api hakkında bilgi sahibi olmanız gerekiyor, bukkit server için Bukkit 1.7.10-R0.1-SNAPSHOT API gibi api doclar mevcut imiş.
Mesela Animals (Spigot-API 1.20.2-R0.1-SNAPSHOT API) dokümantasyon ile neyi nasıl yapacağınızı inceleyebilirsiniz.
Teşekkür ederim tavsiyenizi dinleyeceğim.

@count hocam peki önceden hazırlanmış pluginlerin mantığını kavramam içinde yine her şeye baştan mı başlamam gerekiyor yoksa kütüphaneye göre çıkarımlarda bulunma ihtimalim var mı?

Misal bir plugin var o plugin içeriğine göre düzenlemek için her şeyi öğrenmem çok zor bir şey olur mu? Yani açıkçası başlayıp korkup bırakmaktan korkuyorum. Yani bu dil 1 2 ay içerisinde öğrenilebilecek bir şeyler mi? Yoksa çok kompleks şeyler içeriyor mu?
 
Son düzenleme:
Teşekkür ederim tavsiyenizi dinleyeceğim.

@count hocam peki önceden hazırlanmış pluginlerin mantığını kavramam içinde yine her şeye baştan mı başlamam gerekiyor yoksa kütüphaneye göre çıkarımlarda bulunma ihtimalim var mı?

Misal bir plugin var o plugin içeriğine göre düzenlemek için her şeyi öğrenmem çok zor bir şey olur mu? Yani açıkçası başlayıp korkup bırakmaktan korkuyorum. Yani bu dil 1 2 ay içerisinde öğrenilebilecek bir şeyler mi? Yoksa çok kompleks şeyler içeriyor mu?
Bilmem, minecraft pluginlerle hiç uğraşmadım, bildiğim kadarıyla çok basit pluginler olduğu gibi baya kapsamlı/ağır pluginler de mevcut.

Benim yazdığım şunu şunu bilmen gerek vs. listesindekileri; neyi nasıl yaptığını bilmek için bilmek gerekiyor tabi ama bu 2 ayda öğrenilecek/ustalaşılabilecek bir şey değil, yoksa milletçe oturmuş java kodluyor olurduk.

Bir plugin nasıl yapılır videosu buldum,
Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.
adam Entity (Spigot-API 1.20.2-R0.1-SNAPSHOT API) setVelocity komutu ile yerçekiminde değişiklik yapıyor. Eğer bu videodaki gibi basit bir şeyler peşindeysen, videonun başından itibaren aç izle, neyi nasıl yaptığını anlıyorsan, hangi toolları kullandığını anlıyorsan, adamın yazdığı java kodunun nasıl yazıldığını anlayabiliyorsan ve debug edebileceksen, gerisi komutlarla bir şeyleri değiştirmeye kalıyor diye anlıyorum. Anlamadığın yerleri de araştıra araştıra öğrenmeye çalışırsın.
 
@count
Java:
<project xmlns="http://maven.apache.org/POM/4.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>world.bentobox</groupId>
 <artifactId>limits</artifactId>
 <name>Limits</name>
 <version>${revision}</version>

 <description>An add-on for BentoBox that limits blocks and entities on islands.</description>
 <url>https://github.com/BentoBoxWorld/Limits</url>
 <inceptionYear>2018</inceptionYear>

 <developers>
 <developer>
 <id>tastybento</id>
 <email>[email protected]</email>
 <timezone>-8</timezone>
 <roles>
 <role>Lead Developer</role>
 </roles>
 </developer>
 </developers>

 <scm>
 <connection>scm:git:https://github.com/BentoBoxWorld/Limits.git</connection>
 <developerConnection>scm:git:[email protected]:BentoBoxWorld/Limits.git</developerConnection>
 <url>https://github.com/BentoBoxWorld/Limits</url>
 </scm>

 <ciManagement>
 <system>jenkins</system>
 <url>http://ci.codemc.org/job/BentoBoxWorld/job/Limits</url>
 </ciManagement>

 <issueManagement>
 <system>GitHub</system>
 <url>https://github.com/BentoBoxWorld/Limits/issues</url>
 </issueManagement>

 <distributionManagement>
 <snapshotRepository>
 <id>codemc-snapshots</id>
 <url>https://repo.codemc.org/repository/maven-snapshots</url>
 </snapshotRepository>
 <repository>
 <id>codemc-releases</id>
 <url>https://repo.codemc.org/repository/maven-releases</url>
 </repository>
 </distributionManagement>

 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>17</java.version>
 <!-- Non-minecraft related dependencies -->
 <powermock.version>2.0.9</powermock.version>
 <!-- More visible way how to change dependency versions -->
 <spigot.version>1.19.4-R0.1-SNAPSHOT</spigot.version>
 <bentobox.version>1.23.0</bentobox.version>
 <!-- Revision variable removes warning about dynamic version -->
 <revision>${build.version}-SNAPSHOT</revision>
 <!-- Do not change unless you want different name for local builds. -->
 <build.number>-LOCAL</build.number>
 <!-- This allows to change between versions. -->
 <build.version>1.19.1</build.version>
 <sonar.projectKey>BentoBoxWorld_Limits</sonar.projectKey>
 <sonar.organization>bentobox-world</sonar.organization>
 <sonar.host.url>https://sonarcloud.io</sonar.host.url>
 </properties>

 <!-- Profiles will allow to automatically change build version. -->
 <profiles>
 <profile>
 <!-- ci profile is activated if exist environment variable BUILD_NUMBER. -->
 <!-- It replaces ${build.number} that is currently '-LOCAL' with.
 correct build number from JENKINS machine. -->
 <id>ci</id>
 <activation>
 <property>
 <name>env.BUILD_NUMBER</name>
 </property>
 </activation>
 <properties>
 <!-- Override only if necessary -->
 <build.number>-b${env.BUILD_NUMBER}</build.number>
 </properties>
 </profile>
 <profile>
 <!-- Master profile is activated if exist environment variable.
 GIT_BRANCH and its value is origin/master. -->
 <!-- It will replace 'revision' with '${build.version}' so it.
 removes '-SNAPSHOT' string at the end. -->
 <!-- Also, as this is release build, build number can be set.
 to empty string. -->
 <!-- This profile will be used only if exist environment variable.
 GIT_BRANCH with value origin/master. -->
 <id>master</id>
 <activation>
 <property>
 <name>env.GIT_BRANCH</name>
 <value>origin/master</value>
 </property>
 </activation>
 <properties>
 <!-- Override only if necessary -->
 <revision>${build.version}</revision>
 <!-- Empties build number variable. -->
 <build.number></build.number>
 </properties>
 </profile>
 </profiles>

 <repositories>
 <repository>
 <id>spigot-repo</id>
 <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots</url>
 </repository>
 <repository>
 <id>codemc</id>
 <url>https://repo.codemc.org/repository/maven-snapshots/</url>
 </repository>
 <repository>
 <id>codemc-repo</id>
 <url>https://repo.codemc.org/repository/maven-public/</url>
 </repository>
 </repositories>

 <dependencies>
 <!-- Spigot API -->
 <dependency>
 <groupId>org.spigotmc</groupId>
 <artifactId>spigot-api</artifactId>
 <version>${spigot.version}</version>
 <scope>provided</scope>
 </dependency>
 <!-- Mockito (Unit testing) -->
 <dependency>
 <groupId>org.mockito</groupId>
 <artifactId>mockito-core</artifactId>
 <version>3.11.1</version>
 <scope>test</scope>
 </dependency>
 <dependency>
 <groupId>org.powermock</groupId>
 <artifactId>powermock-module-junit4</artifactId>
 <version>${powermock.version}</version>
 <scope>test</scope>
 </dependency>
 <dependency>
 <groupId>org.powermock</groupId>
 <artifactId>powermock-api-mockito2</artifactId>
 <version>${powermock.version}</version>
 <scope>test</scope>
 </dependency>
 <dependency>
 <groupId>world.bentobox</groupId>
 <artifactId>bentobox</artifactId>
 <version>${bentobox.version}</version>
 <scope>provided</scope>
 </dependency>
 </dependencies>

 <build>
 <!-- By default ${revision} is ${build.version}-SNAPSHOT -->
 <!-- If GIT_BRANCH variable is set to origin/master, then it will.
 be only ${build.version}. -->

 <!-- By default ${build.number} is -LOCAL. -->
 <!-- If the BUILD_NUMBER variable is set, then it will be -b[number]. -->
 <!-- If GIT_BRANCH variable is set to origin/master, then it will.
 be the empty string. -->
 <finalName>${project.name}-${revision}${build.number}</finalName>

 <defaultGoal>clean package</defaultGoal>
 <resources>
 <resource>
 <directory>src/main/resources</directory>
 <filtering>true</filtering>
 </resource>
 <resource>
 <directory>src/main/resources/locales</directory>
 <targetPath>./locales</targetPath>
 <filtering>false</filtering>
 </resource>
 </resources>
 <plugins>
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-clean-plugin</artifactId>
 <version>3.1.0</version>
 </plugin>
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-resources-plugin</artifactId>
 <version>3.1.0</version>
 </plugin>
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-surefire-plugin</artifactId>
 <version>3.0.0-M5</version>
 <configuration>
 <argLine>
 ${argLine}
 --add-opens java.base/java.lang=ALL-UNNAMED
 --add-opens java.base/java.math=ALL-UNNAMED
 --add-opens java.base/java.io=ALL-UNNAMED
 --add-opens java.base/java.util=ALL-UNNAMED
 --add-opens
 java.base/java.util.stream=ALL-UNNAMED
 --add-opens java.base/java.text=ALL-UNNAMED
 --add-opens
 java.base/java.util.regex=ALL-UNNAMED
 --add-opens
 java.base/java.nio.channels.spi=ALL-UNNAMED
 --add-opens java.base/sun.nio.ch=ALL-UNNAMED
 --add-opens java.base/java.net=ALL-UNNAMED
 --add-opens
 java.base/java.util.concurrent=ALL-UNNAMED
 --add-opens java.base/sun.nio.fs=ALL-UNNAMED
 --add-opens java.base/sun.nio.cs=ALL-UNNAMED
 --add-opens java.base/java.nio.file=ALL-UNNAMED
 --add-opens
 java.base/java.nio.charset=ALL-UNNAMED
 --add-opens
 java.base/java.lang.reflect=ALL-UNNAMED
 --add-opens
 java.logging/java.util.logging=ALL-UNNAMED
 --add-opens java.base/java.lang.ref=ALL-UNNAMED
 --add-opens java.base/java.util.jar=ALL-UNNAMED
 --add-opens java.base/java.util.zip=ALL-UNNAMED
 </argLine>
 </configuration>
 </plugin>
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-jar-plugin</artifactId>
 <version>3.1.0</version>
 </plugin>
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-install-plugin</artifactId>
 <version>2.5.2</version>
 </plugin>
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-deploy-plugin</artifactId>
 <version>2.8.2</version>
 </plugin>
 <plugin>
 <groupId>org.jacoco</groupId>
 <artifactId>jacoco-maven-plugin</artifactId>
 <version>0.8.7</version>
 <configuration>
 <append>true</append>
 <excludes>
 <!-- This is required to prevent Jacoco from adding.
 synthetic fields to a JavaBean class (causes errors in testing) -->
 <exclude>**/*Names*</exclude>
 </excludes>
 </configuration>
 <executions>
 <execution>
 <id>prepare-agent</id>
 <goals>
 <goal>prepare-agent</goal>
 </goals>
 </execution>
 <execution>
 <id>report</id>
 <goals>
 <goal>report</goal>
 </goals>
 <configuration>
 <formats>
 <format>XML</format>
 </formats>
 </configuration>
 </execution>
 </executions>
 </plugin>
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-compiler-plugin</artifactId>
 <version>3.7.0</version>
 <configuration>
 <release>${java.version}</release>
 </configuration>
 </plugin>
 </plugins>
 </build>

</project>

Hocam bu kodlar bir plugin içersinden ve bir plugine bağlantılı. Bentobox adlı plugine bağlı ve ne yolla bağlanış bilmiyorum. Bunu başka plugine bağlamak mümkün müdür acaba?

İstediğiniz kod jar dosyası olursa paylaşabilirim.
 

Technopat Haberler

Geri
Yukarı