Jump to content

Beginners Guide To Separating Classes!


NotoriousPP

Recommended Posts

Using Multiple Classes

Complete Guide!

Tutorial Written By: @NotoriousPP

 

Introduction:
It has been brought to my attention that some script writers do not know how to use multiple class files inside of their project, and in this tutorial I will try to cover everything I can, to help you have a better understanding how this is done correctly.
I will be working on an example project for this tutorial, just follow along using your own project, doesn’t matter which type of project, as long as you understand what’s going on. This project will be modeled in a State based framework, as I see this most often used throughout the forum.
Another question you may have, why should you use multiple classes, what are the benefits, is there an upside? Speaking from an Organizational aspect, yes! Splitting up classes makes it easier for the writer and to whoever is working on the script, instead of having to search through a wall of text; you can simply find the class in your Project Folder.


Things you’ll need:

  • A Computer or Laptop.
  • A IDE (For this tutorial I will be using Itellij)
  • Latest Version of OSBot.
  • A Brain (Might help)

Getting your project setup:

  • Create new project, and add OSBot as a library.
    Your project should now look something like this:

    7oEi0.png
     
  • Create packages inside of your src folder, this well help better organize your script!
    After doing this it should look similar to this:
    7oEk3.png

     

The Real Work Begins (Kinda):

  • So now that we have packages in our src, we need to fill them up! So first lets create a Script class inside of our Core package.
    7oEeC.jpg
    (Notice the Class name “ExampleScript”, this is following correct Conventions. An incorrect way of naming classes would be “examplescript”, “exampleScript”, “EXAMPLE_SCRIPT”, etc. If you would like to learn more about Conventions, you can go here: Code Conventions for the Java Programming Language)


     
  • Alright so now we have a basic Skeleton setup, though it does nothing just yet. Well, lets change that! Since for this tutorial we are writing a State based script, first we need to create State Objects! To do this we need to create an Enum, which basically is “a special data type that enables for a variable to be a set of predefined constants.” (docs.oracle.com).
    I personally like to have a package that stores all my data needed for a script, so I’m going to create a new package “data”. After we have created the package, create a new Enum inside of the “data” package. (If you don’t know how to create an Enum right away, just create a new class file for right now, and I’ll show you what to do next!)
    7oDZB.png
    (If you were one of the people who did not know how to create an Enum, simply create a new Class, and then replace “class” with “enum”, and your set!)

     
  • For this Enum were are only really using the name, and not storing any real data here, so all we need to do is add the different States we want in our script! For this example, I will be using Attack, Eat, Loot, Drop, and Bank. REMEMBER! To follow correct Conventions we are going to name the states using all CAPITAL letters.
    7oAan.png
    Optional: Adding a toString() method can be used to make your “state” or “status” more presentable, and not YELLING AT YOU when displaying. The method essentially grabs whatever “state” being used, and modifies it to your liking. In the example below, it creates a final String “s”, then replaces all underscores (Not used in example) with a space; the next like I return the String “s”, though I grab the first Char of the string and add it to a substring for the rest of the string and add a toLowercase(), making ATTACK, to Attack. This is especially helpful when using States as a status; this method can be applied to all types of Enums!

    (Cool trick if you’re a Windows Intellij user! You can type all your states without having to type with caps lock, or holding shift; just type your states, select them, and press “ctrl + shift + u”, and it will capitalize all selected, or turn it to lowercase if already capital)
  • So we have our States, now what do I do? Well we need to get a getState() method ready our Script class. If you don’t already know, this is the method we use to determine which action or “state” should be executed. Then in the onLoop we have a Switch statement that determines which action should be executed. So what do we do now? The some people here make the mistake of continuing using this class for their tasks, actions, and data; just everything really. This is exactly what this tutorials main focus is on; how we can use multiple classes to help organize our project. You Script class should now look something similar to this.
    7oB75.png
  • So now we get to create our first separate class! You may ask, well how will I be able to use myPlayer(), client.getInventory(), if I’m not inside of the Script class. Well one word really “Constructors”. We are going to need to create a constructor that takes a Script variable which we can use throughout the script, in this case “sI” (Swizzbeat are you happy now? I didn’t use sA this time tongue.png) which refers to Script Instance; but first we need to create a new class inside of our “tasks” package (folder), and in the example I will be creating an Attack() class. In this class we create a public Constructor that accepts a Script variables “sI” as discussed before! So now you should have a class that looks like this.
    7oBVc.png
     
  • Well you’re almost done implementing your first separate class (If this is your first time that is)! In the Attack() class we can now use “sI” for all of the calls we need, so instead of typing myPlayer() like in the Script class, it would be sI.myPlayer() in your extended class. So for example you can do something along the line of this:
    (Please don’t use this snippit below for real, it’s just a funny example, I don’t want a PM saying this didn’t work…)
  • 7oCez.png

    Alright so I got a separate class, but how the hell do I use this shit? You might be asking. Well in your Script class, since you extended Script, by using “this” is other words a Script variable, so that’s what we will be using to call our class! So in the onLoop, we can now add the new separated class, simply by adding “new Attack(this);”. Yup it was that easy! smile.png So it should look similar to what I have below. Just import the class (Most IDEs do it automatically), and call the class using “new Class(this)”:
    7oCus.png

     
  • Well if you don’t understand how this all works by now, read through it once more, it will make sense eventually! To add more classes to our project, just use the same logic we used in creating our Attack() class(Or hell you can just copy/paste, and edit a little). The other packages in our “src”, can be used for numerous of different classes, just it’s up to you to fill them, just use them to keep organized!

Conculsion:
Well if you followed along, and got it working correctly! Congratulations! Separating classes help you so much down the road when working with large project, teammates, and or co-workers! No one wants to read a wall of text, it’s much easier to navigate through folders and get the file you need (Like how an office files paper work, Duh…).
I really hope you guys all enjoy reading this, and it helps a few people out with their scripts! If you have any suggestions, and or comments, please leave them below, and I’m more than gladly answer them!

Also let me know about any errors that you find! I'm not a expert, just trying to help!


Sources used:
http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html
http://www.oracle.com/technetwork/java/codeconv-138413.html

Edited by NotoriousPP
  • Like 12
Link to comment
Share on other sites

You might want to go beyond Enum cases and explain other frameworks as well. Nodes are good for beginners too.

 

Actually I was going to start writing a Node tutorial and try cover everything I possibly can, seeing as most people I try to explain Nodes to seem to get stuck at abstract classes, why  use super(), and overriding methods!

 

So expect a Node Tutorial coming very soon! :)

 

  • Like 4
Link to comment
Share on other sites

  • 2 weeks later...

Doing anything besides initializing variables in a constructor is bad.

 

Just do

switch(getState()) { }

 

You create a new instance of a class every time the loop runs, that is an incredible waste of resources and memory.

 

Why do you call the method onStart from the parent class inside the overridden method onStart from the parent class? That makes no sense.

 

Why is this thread pinned?

Link to comment
Share on other sites

Doing anything besides initializing variables in a constructor is bad.

 

Just do

switch(getState()) { }

You create a new instance of a class every time the loop runs, that is an incredible waste of resources and memory.

 

Why do you call the method onStart from the parent class inside the overridden method onStart from the parent class? That makes no sense.

 

Why is this thread pinned?

 

One, you missed the entire point of the thread, this isn't how to setup your frame work, or how you should write your script, it is purely showing scriptwriters who do not know how to use more than one class file, some insight how someone might go about doing it; because quite frankly, quite a few don't/didn't know how.

 

Two, the super.onStart() was automatically added, and since this IS NOT A REAL SCRIPT, I left it, because once again, this is not showing you how to write a script, just how to use more than one class.

 

Three, once again quite a few script writers do not know how to use more than a single class in thief script, so one of the Mods thought it would be a useful resource to those looking to learn.

 

My personal opinion, get off your high fucking horse, and learn to communicate like a adult, and not a preteen ass 14 year old, who uses his moms credit card for everything. It would be a lot easier to get your point across.

Edited by NotoriousPP
  • Like 2
Link to comment
Share on other sites

One, you missed the entire point of the thread, this isn't how to setup your frame work, or how you should write your script, it is purely showing scriptwriters who do not know how to use more than one class file, some insight how someone might go about doing it; because quite frankly, quite a few don't/didn't know how.

 

Two, the super.onStart() was automatically added, and since this IS NOT A REAL SCRIPT, I left it, because once again, this is not showing you how to write a script, just how to use more than one class.

 

Three, once again quite a few script writers do not know how to use more than a single class in thief script, so one of the Mods thought it would be a useful resource to those looking to learn.

 

My personal opinion, get off your high fucking horse, and learn to communicate like a adult, and not a preteen ass 14 year old, who uses his moms credit card for everything. It would be a lot easier to get your point across.

First of all, multiple class files might be created from one java file.

 

If your IDE automatically added it and someone who doesn't know anything puts that in, it will confuse them.

 

Your third point makes no sense as it's not an argument, it's just a statement; a statement I most certainly agree with, however it was provided in a mediocre manner.

 

I am communicating like an adult. I simply pointed out things that are wrong with your tutorial, and you should fix them. You are the only one who looks like a dumb teen swearing at me because you found out someone disagrees and knows more than you.

  • Like 1
Link to comment
Share on other sites

First of all, multiple class files might be created from one java file.

 

If your IDE automatically added it and someone who doesn't know anything puts that in, it will confuse them.

 

Your third point makes no sense as it's not an argument, it's just a statement; a statement I most certainly agree with, however it was provided in a mediocre manner.

 

I am communicating like an adult. I simply pointed out things that are wrong with your tutorial, and you should fix them. You are the only one who looks like a dumb teen swearing at me because you found out someone disagrees and knows more than you.

I fully aware that there are many other people who are much better than me, because someone who read the tutorial, would also have read this placed at the end of the guide:

Also let me know about any errors that you find! I'm not a expert, just trying to help!

 

Also your first post came off like dick, I know you think your high and mighty, but still doesn't mean you can't communicate like a civilized, non-conceded, human being.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...