Esdeath.xyz
Megapat
Daha fazla
- Cinsiyet
- Erkek
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.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. Bir anda belli bir konuya odaklanırsanız anlamanız daha zor olur.
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.
Yazılım okuyan çocuk java bilmiyorsa gerçekten garip, C# falan öğretmişlerdir belki. Neyse.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.
Teşekkür ederim tavsiyenizi dinleyeceğim.Ö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.
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.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?
<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>tastybento@bentobox.world</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:git@github.com: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>