Converted to maven project

This commit is contained in:
Andreas Greiner 2024-02-02 17:33:39 +01:00
commit 22463f6547
27 changed files with 3258 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
target/

27
pom.xml Normal file
View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<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>com.greinet</groupId>
<artifactId>XCraftBots</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.6.3</version>
</dependency>
</dependencies>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<exec.mainClass>com.greinet.xcraftequipbot.XCraftEquipBot</exec.mainClass>
</properties>
<name>XCraftBots</name>
</project>

View File

@ -0,0 +1,71 @@
package xcastbot.ui;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import xcraftbot.xcraftobjects.PlantType;
public class MainFrame extends JFrame{
private String name;
private String password;
private JTabbedPane tabbedPane;
private PlantPanel panelOkari;
private PlantPanel panelNoa;
private ZuchtPanel panelZucht;
public MainFrame(String title, String name, String password){
setTitle(title);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.name=name;
this.password=password;
this.tabbedPane = new JTabbedPane();
getContentPane().add(tabbedPane);
panelOkari = new PlantPanel(PlantType.OKARI_NUSS, name, password);
panelNoa = new PlantPanel(PlantType.NOA_BLATT, name, password);
panelZucht = new ZuchtPanel(name, password,this);
tabbedPane.add("Okari-Nuesse", panelOkari);
tabbedPane.add("Noa-Blaetter", panelNoa);
tabbedPane.add("Zucht", panelZucht);
setSize(800, 600);
setVisible(true);
}
// <editor-fold defaultstate="collapsed" desc=" Region: Getter und Setter ">
public PlantPanel getPanelOkari() {
return panelOkari;
}
public PlantPanel getPanelNoa() {
return panelNoa;
}
public ZuchtPanel getPanelZucht() {
return panelZucht;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
// </editor-fold>
}

View File

@ -0,0 +1,199 @@
package xcastbot.ui;
import io.github.bonigarcia.wdm.WebDriverManager;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.function.Predicate;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import xcraftbot.logic.ButtonNavigate;
import xcraftbot.logic.Textbox;
import xcraftbot.xcraftobjects.Plant;
import xcraftbot.xcraftobjects.PlantType;
public class PlantPanel extends JPanel{
private PlantType plantType;
private List<Plant> plants;
private WebDriver driverPlant;
private JLabel lblCount;
private JLabel lblMaxCount;
private JLabel lblLastRefreshed;
private JTable table;
private JScrollPane scrollPane;
private Date lastRefreshed;
public PlantPanel(PlantType plantType, String name, String passwort){
super();
WebDriverManager.chromedriver().setup();
driverPlant = new ChromeDriver();
loginToXCraftCrafting(driverPlant, name, passwort);
clickButtonByValue(driverPlant, "XCast");
this.plantType = plantType;
setLayout(new GridBagLayout());
JButton btnRefresh = new JButton("Refresh");
btnRefresh.addActionListener(((e) -> {
refreshPlants();
}));
add(btnRefresh, makeGridBagConstraint(1, 0, 0));
loadPlants(driverPlant);
Predicate<Plant> isMax = (p) -> {return p.isMax();};
Predicate<Plant> isPlantType = p-> p.getType()==plantType;
lblCount = new JLabel("Count: "+plants.size());
lblMaxCount = new JLabel("Max-Count: "+plants.stream().filter(isMax).count());
lblLastRefreshed = new JLabel("Last refreshed: "+lastRefreshed.toLocaleString());
add(lblCount, makeGridBagConstraint(1, 0, 1));
add(lblMaxCount, makeGridBagConstraint(1, 0, 2));
add(lblLastRefreshed, makeGridBagConstraint(1, 0, 3));
Object[] plantz = plants.stream().filter(isPlantType)
.sorted((p1, p2) -> p2.compareTo(p1))
.toArray();
Object[][] data = new Object[plantz.length][1];
for(int i=0;i<plantz.length;i++){
data[i][0] = plantz[i];
}
String[] colNames = {"Pflanze"};
table = new JTable(data, colNames);
table.getColumnModel().getColumn(0).setWidth(20);
scrollPane = new JScrollPane();
scrollPane.getViewport().add(table);
add(scrollPane, makeGridBagConstraint(1, 1, 0,1,5));
}
private void refreshPlants(){
clickButtonByValue(driverPlant, "warten/aktualisieren");
loadPlants(driverPlant);
Predicate<Plant> isMax = (p) -> {return p.isMax();};
Predicate<Plant> isPlantType = p-> p.getType()==plantType;
lblCount.setText("Count: "+plants.size());
lblMaxCount.setText("Max-Count: "+plants.stream().filter(isMax).count());
lblLastRefreshed.setText("Last refreshed: "+lastRefreshed.toLocaleString());
Object[] plantz = plants.stream().filter(isPlantType).sorted((p1, p2) -> p2.compareTo(p1)).toArray();
Object[][] data = new Object[plantz.length][1];
for(int i=0;i<plantz.length;i++){
data[i][0] = plantz[i];
}
String[] colNames = {"Pflanze"};
scrollPane.remove(table);
table = new JTable(data, colNames);
table.getColumnModel().getColumn(0).setWidth(20);
scrollPane.getViewport().add(table);
scrollPane.revalidate();
scrollPane.repaint();
revalidate();
repaint();
}
public void loadPlants(WebDriver driver){
plants = new ArrayList<>();
List<WebElement> webElements = driver.findElements(By.
xpath("//form[@id=\"j_idt117\"]//*[contains(text(), '"+plantType.getBezeichnung()+"')]"));
//List<WebElement> webElements = driver.findElements(By.xpath("//*[contains(text(), '"+plantType.getBezeichnung()+"')]"));
for(WebElement elem: webElements){
String text = elem.getText();
String klammern = elem.getText().substring(text.indexOf("(")+1, text.indexOf(")"));
String[] parts = klammern.split("/");
plants.add(new Plant(plantType, Integer.parseInt(parts[0]), Integer.parseInt(parts[1]), Integer.parseInt(parts[2])));
}
lastRefreshed = new Date();
}
//<editor-fold defaultstate="collapsed" desc="Utils">
private GridBagConstraints makeGridBagConstraint(int fill, int x, int y) {
GridBagConstraints c = new GridBagConstraints();
c.fill = fill;
c.gridx = x;
c.gridy = y;
c.insets = new Insets(3, 3, 3, 3);
return c;
}
private GridBagConstraints makeGridBagConstraint(int fill, int x, int y, int gridwidth, int gridheigt) {
GridBagConstraints c = makeGridBagConstraint(fill, x, y);
c.gridwidth = gridwidth;
c.gridheight = gridheigt;
return c;
}
public boolean loginToXCraftCrafting(WebDriver driver, String username, String password){
System.out.println("Logging in");
try{
driver.get("https://xcraftkkrieger.cx.edvschule-plattling.de/XCraft/");
WebElement boxName = driver.findElement(By.name(Textbox.USERNAME.getNameString()));
boxName.sendKeys(username);
WebElement boxPassword = driver.findElement(By.name(Textbox.PASSWORD.getNameString()));
boxPassword.sendKeys(password);
WebElement btnLogin = driver.findElement(By.name(ButtonNavigate.LOGIN.getNameString()));
btnLogin.click();
WebElement elem = findWebElementByText(driver,"Rohstoffe");
return elem!=null;
}catch(Exception e){
e.printStackTrace();
return false;
}
}
public WebElement findWebElementByText(WebDriver driver, String text){
WebElement elem = driver.findElement(By.xpath("//*[contains(text(), '"+text+"')]"));
return elem;
}
public void clickButtonByValue(WebDriver driver,String value){
driver.findElement(By.xpath("//input[@value='"+value+"']")).click();
}
//</editor-fold>
public void removePlant(Plant toRemove){
for (Plant plant : plants) {
if(plant.toRealString().equals(toRemove.toRealString())){
plants.remove(plant);
remove(scrollPane);
Predicate<Plant> isPlantType = p-> p.getType()==plantType;
Object[] plantz = plants.stream().filter(isPlantType).sorted((p1, p2) -> p2.compareTo(p1)).toArray();
Object[][] data = new Object[plantz.length][1];
for(int i=0;i<plantz.length;i++){
data[i][0] = plantz[i];
}
String[] colNames = {"Pflanze"};
scrollPane.remove(table);
table = new JTable(data, colNames);
table.getColumnModel().getColumn(0).setWidth(20);
scrollPane.getViewport().add(table);
scrollPane.revalidate();
scrollPane.repaint();
add(scrollPane, makeGridBagConstraint(1, 1, 0,1,5));
revalidate();
repaint();
System.out.println("re-done jtable");
break;
}
}
}
public List<Plant> getPlants() {
return plants;
}
}

View File

@ -0,0 +1,35 @@
package xcastbot.ui;
import java.util.Date;
import javax.swing.JLabel;
public class PlantProcess extends Thread{
private JLabel lbl;
private ZuchtPanel zuchtPanel;
public PlantProcess(JLabel label, ZuchtPanel zuchtPanel){
super();
this.lbl=label;
this.zuchtPanel=zuchtPanel;
}
@Override
public void run() {
System.out.println("Started pp");
super.run(); //To change body of generated methods, choose Tools | Templates.
while(true){
try {
this.sleep(1000);
} catch (InterruptedException ex) {
}
lbl.setText(new Date().toLocaleString());
zuchtPanel.repaintPublic();
}
}
}

View File

@ -0,0 +1,255 @@
package xcastbot.ui;
import io.github.bonigarcia.wdm.WebDriverManager;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.sql.Time;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import xcraftbot.logic.ButtonNavigate;
import xcraftbot.logic.Textbox;
import xcraftbot.xcraftobjects.Plant;
import xcraftbot.xcraftobjects.PlantType;
import xcraftbot.xcraftobjects.Recipe;
public class TopfPanel extends JPanel{
private JLabel lblName;
private JLabel lblPflanze;
private JLabel lblZeit;
private JCheckBox chkAutoNoa;
private JCheckBox chkAutoOkari;
private int slot;
private boolean running;
private ZuchtPanel zuchtPanel;
private WebDriver driverTopf;
private JComboBox comboboxOkari;
private JComboBox comboboxNoa;
public TopfPanel(int slot, ZuchtPanel zuchtPanel){
super();
WebDriverManager.chromedriver().setup();
driverTopf = new ChromeDriver();
loginToXCraftCrafting(driverTopf, zuchtPanel.getMainFrame().getName(), zuchtPanel.getMainFrame().getPassword());
clickButtonByValue(driverTopf, "XCast");
setBackground(Color.LIGHT_GRAY);
this.setLayout(new GridBagLayout());
this.slot=slot;
this.zuchtPanel=zuchtPanel;
setPreferredSize(new Dimension(500, 120));
if(checkRunning()){
initRunningPanel();
}else{
initNotRunningPanel();
}
}
private boolean checkRunning(){
System.out.println("XPath: \"//*[@id=\\\"j_idt106\\\"]/table/tbody/tr["+slot+"]/td[1]\"");
WebElement elem = driverTopf.findElement(By.xpath("//*[@id=\"j_idt106\"]/table/tbody/tr["+slot+"]/td[1]"));
return !elem.getText().equals("leerer Pflanzentopf");
}
public void initRunningPanel(){
clickButtonByValue(driverTopf, "warten/aktualisieren");
removeAll();
revalidate();
repaint();
lblName = new JLabel("Topf "+slot);
WebElement elemPlant = driverTopf.findElement(By.xpath("//*[@id=\"j_idt106\"]/table/tbody/tr["+slot+"]/td[1]/span"));
Plant p = Plant.parsePlant(elemPlant.getText());
lblPflanze = new JLabel("Pflanze: "+p);
WebElement elemZeit = driverTopf.findElement(By.xpath("//*[@id=\"j_idt106\"]/table/tbody/tr["+slot+"]/td[2]"));
String timeString = elemZeit.getText().substring(elemZeit.getText().indexOf(":")+2, elemZeit.getText().length()-1);
System.out.println("Zeit: "+timeString);
String[] werte = timeString.split(":");
Date zeit = new Date(0, 0, 0, Integer.parseInt(werte[0]), Integer.parseInt(werte[1]), Integer.parseInt(werte[2]));
lblZeit = new JLabel("Zeit: "+zeit.toLocaleString());
Thread t = new Thread(){
@Override
public void run() {
super.run(); //To change body of generated methods, choose Tools | Templates.
while(zeit.getSeconds()>0){
lblZeit.setText("Zeit: "+zeit.toLocaleString());
long zeitLong = zeit.getTime();
zeit.setTime(zeitLong-1000);
try {
sleep(1000);
} catch (InterruptedException ex) {
}
}
}
};
t.start();
chkAutoNoa = new JCheckBox("Checkbox AutoNoa");
chkAutoOkari = new JCheckBox("Checkbox AutoOkari");
setLayout(new GridBagLayout());
add(lblName,makeGridBagConstraint(1, 0, 0));
add(lblPflanze,makeGridBagConstraint(1, 1, 1));
add(lblZeit,makeGridBagConstraint(1, 1, 2));
add(chkAutoNoa,makeGridBagConstraint(1, 2, 1));
add(chkAutoOkari,makeGridBagConstraint(1, 2, 2));
}
public void initNotRunningPanel(){
clickButtonByValue(driverTopf, "warten/aktualisieren");
removeAll();
revalidate();
repaint();
if(zuchtPanel.getMainFrame().getPanelOkari().getPlants().toArray().length>0){
Plant[] plantzOkari = zuchtPanel.getMainFrame().getPanelOkari().getPlants()
.stream()
.filter(obj -> obj instanceof Plant)
.map(obj -> (Plant) obj)
.sorted((p1, p2) -> p2.compareTo(p1)).toArray(Plant[]::new);
comboboxOkari = new JComboBox(plantzOkari);
comboboxOkari.setPreferredSize(new Dimension(180, 30));
comboboxOkari.setRenderer(new ListCellRenderer() {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Plant p = (Plant) value;
JLabel renderer = (JLabel) new DefaultListCellRenderer().getListCellRendererComponent(list, p.toString(), index, isSelected, cellHasFocus);
return renderer;
}
});
add(comboboxOkari,makeGridBagConstraint(1, 0, 0));
JButton btnStartOkari = new JButton("Start Okari");
add(btnStartOkari,makeGridBagConstraint(1, 1, 0));
btnStartOkari.addActionListener(((e) -> {
Plant selectedItem = (Plant) comboboxOkari.getSelectedItem();
WebElement elem = driverTopf.findElement(By.xpath("//*[contains(text(), '"+selectedItem.toRealString()+"')]/following-sibling::input[1]"));
System.out.println(elem.getAttribute("value"));
elem.click();
initRunningPanel();
zuchtPanel.getMainFrame().getPanelOkari().removePlant(selectedItem);
zuchtPanel.removeAtPanels(comboboxOkari.getSelectedIndex(), PlantType.OKARI_NUSS);
}));
}else{
JLabel lblNoNoa = new JLabel("0 Okari Plant");
add(lblNoNoa,makeGridBagConstraint(1, 0, 0));
}
if(zuchtPanel.getMainFrame().getPanelNoa().getPlants().toArray().length>0){
Plant[] plantzNoa = zuchtPanel.getMainFrame().getPanelNoa().getPlants()
.stream()
.filter(obj -> obj instanceof Plant)
.map(obj -> (Plant) obj)
.sorted((p1, p2) -> p2.compareTo(p1)).toArray(Plant[]::new);
comboboxNoa = new JComboBox(plantzNoa);
comboboxNoa.setPreferredSize(new Dimension(180, 30));
comboboxNoa.setRenderer(new ListCellRenderer() {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Plant p = (Plant) value;
JLabel renderer = (JLabel) new DefaultListCellRenderer().getListCellRendererComponent(list, p.toString(), index, isSelected, cellHasFocus);
return renderer;
}
});
add(comboboxNoa,makeGridBagConstraint(1, 0, 2));
JButton btnStartNoa = new JButton("Start Noa");
add(btnStartNoa,makeGridBagConstraint(1, 1, 2));
btnStartNoa.addActionListener(((e) -> {
Plant selectedItem = (Plant) comboboxNoa.getSelectedItem();
WebElement elem = driverTopf.findElement(By.xpath("//*[contains(text(), '"+selectedItem.toRealString()+"')]/following-sibling::input[1]"));
System.out.println(elem.getAttribute("value"));
elem.click();
initRunningPanel();
zuchtPanel.getMainFrame().getPanelNoa().removePlant(selectedItem);
zuchtPanel.removeAtPanels(comboboxNoa.getSelectedIndex(), PlantType.NOA_BLATT);
}));
}else{
JLabel lblNoNoa = new JLabel("0 Noa Plant");
add(lblNoNoa,makeGridBagConstraint(1, 0, 2));
}
}
public void removeAtIndex(int index, PlantType type){
if(!checkRunning()){
if(type.equals(PlantType.OKARI_NUSS)){
comboboxOkari.removeItemAt(index);
}else if(type.equals(PlantType.NOA_BLATT)){
comboboxNoa.removeItemAt(index-1);
}
}
}
//<editor-fold defaultstate="collapsed" desc="Utils">
private GridBagConstraints makeGridBagConstraint(int fill, int x, int y) {
GridBagConstraints c = new GridBagConstraints();
c.fill = fill;
c.gridx = x;
c.gridy = y;
c.insets = new Insets(3, 3, 3, 3);
return c;
}
private GridBagConstraints makeGridBagConstraint(int fill, int x, int y, int gridwidth, int gridheigt) {
GridBagConstraints c = makeGridBagConstraint(fill, x, y);
c.gridwidth = gridwidth;
c.gridheight = gridheigt;
return c;
}
public boolean loginToXCraftCrafting(WebDriver driver, String username, String password){
System.out.println("Logging in");
try{
driver.get("https://xcraftkkrieger.cx.edvschule-plattling.de/XCraft/");
WebElement boxName = driver.findElement(By.name(Textbox.USERNAME.getNameString()));
boxName.sendKeys(username);
WebElement boxPassword = driver.findElement(By.name(Textbox.PASSWORD.getNameString()));
boxPassword.sendKeys(password);
WebElement btnLogin = driver.findElement(By.name(ButtonNavigate.LOGIN.getNameString()));
btnLogin.click();
WebElement elem = findWebElementByText(driver,"Rohstoffe");
return elem!=null;
}catch(Exception e){
e.printStackTrace();
return false;
}
}
public WebElement findWebElementByText(WebDriver driver, String text){
WebElement elem = driver.findElement(By.xpath("//*[contains(text(), '"+text+"')]"));
return elem;
}
public void clickButtonByValue(WebDriver driver,String value){
driver.findElement(By.xpath("//input[@value='"+value+"']")).click();
}
//</editor-fold>
}

View File

@ -0,0 +1,161 @@
package xcastbot.ui;
import io.github.bonigarcia.wdm.WebDriverManager;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import xcraftbot.logic.ButtonNavigate;
import xcraftbot.logic.Textbox;
import xcraftbot.xcraftobjects.Plant;
import xcraftbot.xcraftobjects.PlantType;
public class XCastPlantFarm {
private WebDriver driverLogin;
private JFrame frame;
private PlantPanel panelOkari;
private PlantPanel panelNoa;
private ZuchtPanel panelZucht;
private String name;
private String password;
public XCastPlantFarm(){
WebDriverManager.chromedriver().setup();
driverLogin = new ChromeDriver();
JFrame frameLogin = new JFrame("Login");
frameLogin.setSize(300, 300);
frameLogin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panelLogin = new JPanel();
panelLogin.setLayout(null);
JLabel lblName = new JLabel("Name:");
JTextField txtName = new JTextField();
JLabel lblPassword = new JLabel("Password:");
JPasswordField txtPassword = new JPasswordField();
JButton btnBotLogin = new JButton("Login");
JLabel lblMessage = new JLabel("");
lblName.setBounds(10, 10, 100, 30);
txtName.setBounds(120, 10, 100, 30);
lblPassword.setBounds(10, 50, 100, 30);
txtPassword.setBounds(120,50,100,30);
btnBotLogin.setBounds(10, 90, 210, 30);
lblMessage.setBounds(10,130,210,30);
lblMessage.setForeground(Color.RED);
panelLogin.add(lblName);
panelLogin.add(txtName);
panelLogin.add(lblPassword);
panelLogin.add(txtPassword);
panelLogin.add(btnBotLogin);
panelLogin.add(lblMessage);
btnBotLogin.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
boolean successfull = loginToXCraftCrafting(driverLogin, txtName.getText(), txtPassword.getText());
if(successfull){
name = txtName.getText();
password = txtPassword.getText();
frameLogin.dispose();
driverLogin.quit();
MainFrame mainFrame = new MainFrame("Zucht Manager",name, password);
}else{
lblMessage.setText("Login failed");
}
}
});
txtPassword.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
boolean successfull = loginToXCraftCrafting(driverLogin, txtName.getText(), txtPassword.getText());
if(successfull){
name = txtName.getText();
password = txtPassword.getText();
frameLogin.dispose();
driverLogin.quit();
MainFrame mainFrame = new MainFrame("Zucht Manager",name, password);
}else{
lblMessage.setText("Login failed");
}
}
});
frameLogin.add(panelLogin);
frameLogin.setVisible(true);
}
public static void main(String[] args) {
XCastPlantFarm ui = new XCastPlantFarm();
}
public boolean loginToXCraftCrafting(WebDriver driver, String username, String password){
try{
driver.get("https://xcraftkkrieger.cx.edvschule-plattling.de/XCraft/");
WebElement boxName = driver.findElement(By.name(Textbox.USERNAME.getNameString()));
boxName.sendKeys(username);
WebElement boxPassword = driver.findElement(By.name(Textbox.PASSWORD.getNameString()));
boxPassword.sendKeys(password);
WebElement btnLogin = driver.findElement(By.name(ButtonNavigate.LOGIN.getNameString()));
btnLogin.click();
WebElement elem = findWebElementByText(driverLogin,"Rohstoffe");
return elem!=null;
}catch(Exception e){
return false;
}
}
public void clickButtonByValue(WebDriver driver,String value){
driver.findElement(By.xpath("//input[@value='"+value+"']")).click();
}
public int countByText(WebDriver driver, String text){
List<WebElement> webElements = driver.findElements(By.xpath("//*[contains(text(), '"+text+"')]"));
return webElements.size();
}
public WebElement findWebElementByText(WebDriver driver, String text){
WebElement elem = driver.findElement(By.xpath("//*[contains(text(), '"+text+"')]"));
return elem;
}
public List<Plant> loadPlants(WebDriver driver){
JFrame frame = new JFrame("Loading Plants!");
frame.setSize(200, 100);
frame.setLocation(500, 500);
JLabel lblStatus = new JLabel("Loaded: 0");
frame.getContentPane().add(lblStatus);
frame.setVisible(true);
List<Plant> plants = new ArrayList<>();
int count = 0;
for(PlantType planttype:PlantType.values()){
System.out.println("Start findElements");
List<WebElement> webElements = driver.findElements(By.xpath("//*[contains(text(), '"+planttype.getBezeichnung()+"')]"));
System.out.println("End findElements");
for(WebElement elem: webElements){
String text = elem.getText();
String klammern = elem.getText().substring(text.indexOf("(")+1, text.indexOf(")"));
String[] parts = klammern.split("/");
plants.add(new Plant(planttype, Integer.parseInt(parts[0]), Integer.parseInt(parts[1]), Integer.parseInt(parts[2])));
count++;
lblStatus.setText("Loaded: "+count);
System.out.print("adding");
}
System.out.println("");
}
System.out.println("Done loading");
return plants;
}
}

View File

@ -0,0 +1,98 @@
package xcastbot.ui;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JPanel;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import xcraftbot.logic.ButtonNavigate;
import xcraftbot.logic.Textbox;
import xcraftbot.xcraftobjects.PlantType;
public class ZuchtPanel extends JPanel{
private WebDriver driverZucht;
private TopfPanel panelTopf_1;
private TopfPanel panelTopf_2;
private TopfPanel panelTopf_3;
private TopfPanel panelTopf_4;
private MainFrame mainFrame;
public ZuchtPanel(String name, String passwort, MainFrame mainFrame){
super();
setLayout(new GridBagLayout());
this.mainFrame = mainFrame;
panelTopf_1 = new TopfPanel(1,this);
panelTopf_2 = new TopfPanel(2,this);
panelTopf_3 = new TopfPanel(3,this);
panelTopf_4 = new TopfPanel(4,this);
add(panelTopf_1,makeGridBagConstraint(1, 0, 0));
add(panelTopf_2,makeGridBagConstraint(1, 0, 1));
add(panelTopf_3,makeGridBagConstraint(1, 0, 2));
add(panelTopf_4,makeGridBagConstraint(1, 0, 3));
}
public void repaintPublic(){
revalidate();
repaint();
}
//<editor-fold defaultstate="collapsed" desc="Utils">
private GridBagConstraints makeGridBagConstraint(int fill, int x, int y) {
GridBagConstraints c = new GridBagConstraints();
c.fill = fill;
c.gridx = x;
c.gridy = y;
c.insets = new Insets(3, 3, 3, 3);
return c;
}
private GridBagConstraints makeGridBagConstraint(int fill, int x, int y, int gridwidth, int gridheigt) {
GridBagConstraints c = makeGridBagConstraint(fill, x, y);
c.gridwidth = gridwidth;
c.gridheight = gridheigt;
return c;
}
public boolean loginToXCraftCrafting(WebDriver driver, String username, String password){
System.out.println("Logging in");
try{
driver.get("https://xcraftkkrieger.cx.edvschule-plattling.de/XCraft/");
WebElement boxName = driver.findElement(By.name(Textbox.USERNAME.getNameString()));
boxName.sendKeys(username);
WebElement boxPassword = driver.findElement(By.name(Textbox.PASSWORD.getNameString()));
boxPassword.sendKeys(password);
WebElement btnLogin = driver.findElement(By.name(ButtonNavigate.LOGIN.getNameString()));
btnLogin.click();
WebElement elem = findWebElementByText(driver,"Rohstoffe");
return elem!=null;
}catch(Exception e){
e.printStackTrace();
return false;
}
}
public WebElement findWebElementByText(WebDriver driver, String text){
WebElement elem = driver.findElement(By.xpath("//*[contains(text(), '"+text+"')]"));
return elem;
}
public void clickButtonByValue(WebDriver driver,String value){
driver.findElement(By.xpath("//input[@value='"+value+"']")).click();
}
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Getter und Setter">
public MainFrame getMainFrame() {
return mainFrame;
}
//</editor-fold>
public void removeAtPanels(int index, PlantType type){
panelTopf_1.removeAtIndex(index, type);
panelTopf_2.removeAtIndex(index, type);
panelTopf_3.removeAtIndex(index, type);
panelTopf_4.removeAtIndex(index, type);
System.out.println("re-done comboboxes");
}
}

View File

@ -0,0 +1,21 @@
package xcraftbot.logic;
public enum ButtonNavigate {
LOGIN("j_idt11:login"), REGISTER("j_idt11:register"), AKTUALISIEREN("j_idt39:j_idt41"), LOGOUT("j_idt92:j_idt98"),
ZURUEBERSICHT("j_idt109:j_idt110"),ABBRECHEN("j_idt15:j_idt23"),
DONEZUMGEFOLGSMANN("j_idt15:j_idt16"),DONEZURUEBERSICHT("j_idt15:j_idt18"),
AYRONDONE("j_idt39:j_idt42:0:j_idt47"),SANOSDONE("j_idt39:j_idt42:1:j_idt47"),ISHDADONE("j_idt39:j_idt42:2:j_idt47");
private final String nameString;
ButtonNavigate(String nameString){
this.nameString = nameString;
}
public String getNameString() {
return nameString;
}
}

View File

@ -0,0 +1,19 @@
package xcraftbot.logic;
public enum Textbox {
USERNAME("j_idt11:account"), PASSWORD("j_idt11:password");
private final String nameString;
private Textbox(String nameString) {
this.nameString = nameString;
}
public String getNameString() {
return nameString;
}
}

View File

@ -0,0 +1,264 @@
package xcraftbot.logic;
import io.github.bonigarcia.wdm.WebDriverManager;
import static java.lang.Thread.sleep;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.ArrayList;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import xcraftbot.xcraftobjects.Account;
import xcraftbot.xcraftobjects.Geldmenge;
import xcraftbot.xcraftobjects.Item;
import xcraftbot.xcraftobjects.Material;
import xcraftbot.xcraftobjects.Recipe;
import xcraftbot.xcraftobjects.XCharacter;
public class XCraftBot {
//Attribute
public final WebDriver driver;
private final WebDriverWait wait;
private WebDriver materialDriver;
private Account account;
//Konstruktor
public XCraftBot(){
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
materialDriver = new ChromeDriver();
wait = new WebDriverWait(driver, 100);
}
//Login/Logout
public boolean loginToXCraft(WebDriver driver, String username, String password){
driver.get("https://xcraftkkrieger.cx.edvschule-plattling.de/XCraft/");
WebElement boxName = driver.findElement(By.name(Textbox.USERNAME.getNameString()));
boxName.sendKeys(username);
WebElement boxPassword = driver.findElement(By.name(Textbox.PASSWORD.getNameString()));
boxPassword.sendKeys(password);
WebElement btnLogin = driver.findElement(By.name(ButtonNavigate.LOGIN.getNameString()));
btnLogin.click();
account=new Account();
account.setName(username);
account.setPassword(password);
account.setLoggedIn(true);
aktualisieren(driver);
return true;
}
public boolean loginToXCraftCrafting(WebDriver driver, String username, String password){
driver.get("https://xcraftkkrieger.cx.edvschule-plattling.de/XCraft/");
WebElement boxName = driver.findElement(By.name(Textbox.USERNAME.getNameString()));
boxName.sendKeys(username);
WebElement boxPassword = driver.findElement(By.name(Textbox.PASSWORD.getNameString()));
boxPassword.sendKeys(password);
WebElement btnLogin = driver.findElement(By.name(ButtonNavigate.LOGIN.getNameString()));
btnLogin.click();
aktualisieren(driver);
return true;
}
public void logoutOfXCraft(){
WebElement btnLogin = driver.findElement(By.name(ButtonNavigate.LOGOUT.getNameString()));
btnLogin.click();
account.setLoggedIn(false);
}
//Load
public void aktualisieren(WebDriver driver){
driver.findElement(By.xpath("//input[@value='aktualisieren']")).click();
}
public void loadCharacters(){
aktualisieren(driver);
WebElement buttonAyron = driver.findElement(By.xpath("//input[@value='Ayron Teor']"));
String buttonName = buttonAyron.getAttribute("name");
List<XCharacter> chars = new ArrayList<>();
int index = 0;
while(true){
String newButtonName = buttonName.substring(0, 16)+index+buttonName.substring(17);
try{
WebElement button = driver.findElement(By.name(newButtonName));
XCharacter xc = loadCharacter(button.getAttribute("name"));
xc.setXpathName("//input[@value='"+xc.getName()+"']");
System.out.println(xc.getXpathName());
xc.setXpathBericht("//input[@value='"+xc.getName()+"']/following-sibling::input[@value='Bericht']");
chars.add(xc);
index++;
}catch(Exception e){
break;
}
}
account.setXcharacters(chars);
}
private XCharacter loadCharacter(String buttonName){
XCharacter xc = new XCharacter();
WebElement element = driver.findElement(By.name(buttonName));
String cName = element.getAttribute("value");
xc.setName(cName);
element.click();
//Equipment einlesen
WebElement form = driver.findElement(By.xpath("/html/body/table[2]/tbody/tr[2]/td[2]/form"));
String formname = form.getAttribute("name");
int itemSlots = 10;
int tablelength = 7;
for(int tr=1;tr<=10;tr++){
String name = driver.findElement(By.xpath("//*[@id=\""+formname+"\"]/table/tbody/tr["+tr+"]/td["+2+"]")).getText();
if(name.length()>0){
String position = driver.findElement(By.xpath("//*[@id=\""+formname+"\"]/table/tbody/tr["+tr+"]/td["+1+"]")).getText();
String qualitaet = driver.findElement(By.xpath("//*[@id=\""+formname+"\"]/table/tbody/tr["+tr+"]/td["+3+"]")).getText();
int quali = Integer.parseInt(qualitaet.substring(0, qualitaet.length()-1));
int angriff = Integer.parseInt(driver.findElement(By.xpath("//*[@id=\""+formname+"\"]/table/tbody/tr["+tr+"]/td["+4+"]")).getText());
int verteidigung = Integer.parseInt(driver.findElement(By.xpath("//*[@id=\""+formname+"\"]/table/tbody/tr["+tr+"]/td["+5+"]")).getText());
int schaden = Integer.parseInt(driver.findElement(By.xpath("//*[@id=\""+formname+"\"]/table/tbody/tr["+tr+"]/td["+6+"]")).getText());
int ruestung = Integer.parseInt(driver.findElement(By.xpath("//*[@id=\""+formname+"\"]/table/tbody/tr["+tr+"]/td["+7+"]")).getText());
Item x = new Item(position,name, quali, angriff, verteidigung, schaden, ruestung, new Geldmenge(-1));
xc.getEquipment().getItems().add(x);
}
}
//Rezepte einlesen
WebElement tr1td1 = driver.findElement(By.xpath("/html/body/table[2]/tbody/tr[2]/td[1]/table/tbody/tr[1]/td[1]"));
int trIndex = 1;
while(true){
try{
Recipe rezept = new Recipe();
String xpathName = "/html/body/table[2]/tbody/tr[2]/td[1]/table/tbody/tr["+trIndex+"]/td[1]";
rezept.setName(driver.findElement(By.xpath(xpathName)).getText());
rezept.setXpath("/html/body/table[2]/tbody/tr[2]/td[1]/table/tbody/tr["+trIndex+"]/td[3]");
String time = driver.findElement(By.xpath("/html/body/table[2]/tbody/tr[2]/td[1]/table/tbody/tr["+trIndex+"]/td[3]/form/input[2]")).getAttribute("value");
int mins = Integer.parseInt(time.substring(3,5));
int hours = Integer.parseInt(time.substring(0, 2));
rezept.setTimeInMin(mins + (hours*60));
xc.getRecipes().add(rezept);
trIndex++;
}catch(Exception e){
break;
}
}
WebElement buttonBack = driver.findElement(By.name("j_idt109:j_idt110"));
buttonBack.click();
return xc;
}
public void loadMaterials(){
aktualisieren(driver);
account.getMaterialInventory().getHolz().clear();
account.getMaterialInventory().getMetall().clear();
account.getMaterialInventory().getPelz().clear();
account.getMaterialInventory().getLeder().clear();
String formid = driver.findElement(By.xpath("/html/body/span[1]/form")).getAttribute("name");
for(int a=1;a<=4;a++){
System.out.println("Materialtype: "+a);
for(int b=1;b<=4;b++){
String text = driver.findElement(By.xpath("//*[@id=\""+formid+"\"]/table/tbody/tr["+a+"]/td/table/tbody/tr["+b+"]/td")).getText();
int count = 0;
if(text.length()>=1){
String digits = text.replaceAll("[^0-9.]", "");
count = digits.length()<1?0:Integer.parseInt(digits);
}
switch(a){
case 1:account.getMaterialInventory().getLeder().add(new Material(count, Material.LEDER[b-1], b));break;
case 2:account.getMaterialInventory().getHolz().add(new Material(count, Material.HOLZ[b-1], b));break;
case 3:account.getMaterialInventory().getMetall().add(new Material(count, Material.METALL[b-1], b));break;
case 4:account.getMaterialInventory().getPelz().add(new Material(count, Material.PELZ[b-1], b));break;
}
}
}
}
//Buttons
public void btn1Click(String xpathc, String xpathi, int count, int time){
Thread t = new Thread() {
public void run() {
int i=0;
while(i<count){
try {
//wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"j_idt39\"]/table/tbody/tr[1]/td/div/input")));
driver.findElement(By.xpath(xpathc)).click();
//wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"j_idt61:0:craftTemplate:craftButton\"]")));
driver.findElement(By.xpath(xpathi)).click();
sleep((time*60*1000)+500);
aktualisieren(driver);
//wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"j_idt39\"]/table/tbody/tr[1]/td/div/input[2]")));
driver.findElement(By.xpath("//*[@id=\"j_idt39\"]/table/tbody/tr[1]/td/div/input[2]")).click();
//wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"j_idt15\"]/input[3]")));
driver.findElement(By.xpath("//*[@id=\"j_idt15\"]/input[3]")).click();
i++;
} catch (InterruptedException ex) {
}
}
this.stop();
}
};
t.start();
}
public void btn2Click(XCharacter xc, Recipe r, int anzahl){
System.out.println("Starting process");
Thread t = new Thread() {
public void run() {
WebDriver driverNew = new ChromeDriver();
loginToXCraftCrafting(driverNew, account.getName(), account.getPassword());
int i=0;
while(i<anzahl){
try {
//click on Character
driverNew.findElement(By.xpath(xc.getXpathName())).click();
//click on CraftingItem
driverNew.findElement(By.xpath(r.getXpath())).click();
sleep(1000*60*r.getTimeInMin()+500);
aktualisieren(driverNew);
//click on Bericht
driverNew.findElement(By.xpath(xc.getXpathBericht())).click();
//click on backZurUebersicht
driverNew.findElement(By.xpath("//input[@value='zur Übersicht']")).click();
i++;
System.out.println("One cycle done");
} catch (InterruptedException ex) {
}
}
System.out.println("process done");
driverNew.quit();
this.stop();
}
};
t.start();
}
//Getter und Setter
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
}

View File

@ -0,0 +1,321 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package xcraftbot.ui;
import io.github.bonigarcia.wdm.WebDriverManager;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JProgressBar;
import javax.swing.JTextField;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import xcastbot.ui.MainFrame;
import xcraftbot.logic.ButtonNavigate;
import xcraftbot.logic.Textbox;
/**
*
* @author agreiner
*/
public class MarketplaceUI {
private String name;
private String password;
public MarketplaceUI(){
}
public static void main(String[] args) {
MarketplaceUI ui = new MarketplaceUI();
ui.showLoginFrame();
}
public void MarketplaceUI2(){
WebDriverManager.chromedriver().setup();
WebDriver driver = new ChromeDriver();
JFrame frame = new JFrame("Marketplace");
frame.setSize(300, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JTextField txtSearch = new JTextField();
txtSearch.setBounds(100, 510, 100, 30);
JButton btnStart = new JButton("Start");
btnStart.setBounds(100, 430, 100, 30);
btnStart.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
driver.navigate().refresh();
for(;;){
try{
WebElement elem = driver.findElement(By.xpath("//*[contains(text(), '"+txtSearch.getText()+"')]"));
System.out.println(elem.getText());
if (driver instanceof JavascriptExecutor) {
((JavascriptExecutor)driver).executeScript("arguments[0].style.border='3px solid red'", elem);
}
break;
}catch(Exception ex){
driver.navigate().refresh();
}
}
}
});
JTextField txtName = new JTextField();
txtName.setBounds(100,100,100,30);
JPasswordField pw = new JPasswordField();
pw.setBounds(100,150,100,30);
JButton btnLogin = new JButton("Login");
btnLogin.setBounds(100,200, 100, 30);
btnLogin.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
driver.get("https://xcraftkkrieger.cx.edvschule-plattling.de/XCraft/");
WebElement boxName = driver.findElement(By.name(Textbox.USERNAME.getNameString()));
boxName.sendKeys(txtName.getText());
WebElement boxPassword = driver.findElement(By.name(Textbox.PASSWORD.getNameString()));
boxPassword.sendKeys(pw.getText());
WebElement btnLogin = driver.findElement(By.name(ButtonNavigate.LOGIN.getNameString()));
btnLogin.click();
}
});
panel.setLayout(null);
panel.add(txtName);
panel.add(pw);
panel.add(btnLogin);
panel.add(btnStart);
panel.add(txtSearch);
frame.add(panel);
frame.setVisible(true);
frame.setVisible(true);
}
public void showLoginFrame(){
WebDriverManager.chromedriver().setup();
WebDriver driver = new ChromeDriver();
JFrame frameLogin = new JFrame("Login");
frameLogin.setSize(300, 300);
frameLogin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panelLogin = new JPanel();
panelLogin.setLayout(null);
JLabel lblName = new JLabel("Name:");
JTextField txtName = new JTextField();
JLabel lblPassword = new JLabel("Password:");
JPasswordField txtPassword = new JPasswordField();
JButton btnBotLogin = new JButton("Login");
JLabel lblMessage = new JLabel("");
lblName.setBounds(10, 10, 100, 30);
txtName.setBounds(120, 10, 100, 30);
lblPassword.setBounds(10, 50, 100, 30);
txtPassword.setBounds(120,50,100,30);
btnBotLogin.setBounds(10, 90, 210, 30);
lblMessage.setBounds(10,130,210,30);
lblMessage.setForeground(Color.RED);
panelLogin.add(lblName);
panelLogin.add(txtName);
panelLogin.add(lblPassword);
panelLogin.add(txtPassword);
panelLogin.add(btnBotLogin);
panelLogin.add(lblMessage);
btnBotLogin.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
boolean successfull = loginToXCast(driver, txtName.getText(), txtPassword.getText());
if(successfull){
name = txtName.getText();
password = txtPassword.getText();
frameLogin.dispose();
showSnipeFrame(driver);
}else{
lblMessage.setText("Login failed");
}
}
});
txtPassword.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
boolean successfull = loginToXCast(driver, txtName.getText(), txtPassword.getText());
if(successfull){
name = txtName.getText();
password = txtPassword.getText();
frameLogin.dispose();
showSnipeFrame(driver);
}else{
lblMessage.setText("Login failed");
}
}
});
frameLogin.add(panelLogin);
frameLogin.setVisible(true);
}
/**
* Erzeugt Markeplace Sniper Frame
* @param driver WebDriver im Shop
*/
public void showSnipeFrame(WebDriver driver){
JFrame frameSnipe = new JFrame("Snipe");
frameSnipe.setSize(300, 300);
frameSnipe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panelSnipe = new JPanel();
panelSnipe.setLayout(new GridBagLayout());
JLabel lblText = new JLabel("Text:");
JTextField txtText = new JTextField();
txtText.setPreferredSize(new Dimension(200, 30));
panelSnipe.add(lblText,makeGridBagConstraint(1, 0, 0));
panelSnipe.add(txtText, makeGridBagConstraint(1, 1, 0));
JProgressBar progressBar = new JProgressBar(0, 50);
JLabel lblMessage = new JLabel();
panelSnipe.add(progressBar, makeGridBagConstraint(1, 0, 2, 2, 1));
panelSnipe.add(progressBar, makeGridBagConstraint(1, 0, 2, 2, 1));
JButton btnSnipe = new JButton("Snipe");
panelSnipe.add(btnSnipe, makeGridBagConstraint(1, 0, 1, 2, 1));
btnSnipe.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
snipe(panelSnipe, driver, txtText.getText(), progressBar, btnSnipe);
}
});
txtText.addActionListener((e) -> {
snipe(panelSnipe, driver, txtText.getText(), progressBar, btnSnipe);
});
frameSnipe.add(panelSnipe);
frameSnipe.setVisible(true);
}
public void snipe(JPanel panel, WebDriver driver, String text, JProgressBar progressBar, JButton btn){
progressBar.setValue(0);
progressBar.setStringPainted(true);
Thread t = new Thread(){
@Override
public void run() {
btn.setEnabled(false);
driver.navigate().refresh();
System.out.println("Suche: "+text);
for(int i=1; i<=progressBar.getMaximum(); i++){
progressBar.setValue(i);
progressBar.setString(""+i);
try{
List<WebElement> elems = driver.findElements(By.xpath("//*[contains(text(), '"+text+"')]"));
if (driver instanceof JavascriptExecutor) {
for(WebElement elem: elems){
((JavascriptExecutor)driver).executeScript("arguments[0].style.border='3px solid red'", elem);
}
}
if(elems.isEmpty()){
throw new Exception("Nix gefunden");
}
break;
}catch(Exception ex){
driver.navigate().refresh();
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
btn.setEnabled(true);
}
};
t.start();
}
//<editor-fold defaultstate="collapsed" desc="Utility">
public boolean loginToXCast(WebDriver driver, String username, String password){
try{
driver.get("https://xcraftkkrieger.cx.edvschule-plattling.de/XCraft/");
WebElement boxName = driver.findElement(By.name(Textbox.USERNAME.getNameString()));
boxName.sendKeys(username);
WebElement boxPassword = driver.findElement(By.name(Textbox.PASSWORD.getNameString()));
boxPassword.sendKeys(password);
WebElement btnLogin = driver.findElement(By.name(ButtonNavigate.LOGIN.getNameString()));
btnLogin.click();
WebElement btnXCast = driver.findElement(By.xpath("//input[@value='zum Schwarzmarkt-Händler']"));
btnXCast.click();
return true;
}catch(Exception e){
return false;
}
}
public WebElement findWebElementByText(WebDriver driver, String text){
WebElement elem = driver.findElement(By.xpath("//*[contains(text(), '"+text+"')]"));
return elem;
}
private GridBagConstraints makeGridBagConstraint(int fill, int x, int y) {
GridBagConstraints c = new GridBagConstraints();
c.fill = fill;
c.gridx = x;
c.gridy = y;
c.insets = new Insets(3, 3, 3, 3);
return c;
}
private GridBagConstraints makeGridBagConstraint(int fill, int x, int y, int gridwidth, int gridheigt) {
GridBagConstraints c = makeGridBagConstraint(fill, x, y);
c.gridwidth = gridwidth;
c.gridheight = gridheigt;
return c;
}
//</editor-fold>
}

View File

@ -0,0 +1,553 @@
package xcraftbot.ui;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import xcraftbot.logic.XCraftBot;
import xcraftbot.xcraftobjects.Item;
import xcraftbot.xcraftobjects.Material;
import xcraftbot.xcraftobjects.XCharacter;
import java.awt.Color;
import java.awt.Component;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Stream;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JTextPane;
import javax.swing.ListCellRenderer;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import xcraftbot.xcraftobjects.Recipe;
public class SwingUI2 {
// <editor-fold defaultstate="collapsed" desc=" Region: Attributes ">
private JFrame frame;
private JTabbedPane tabbedPane;
private XCraftBot xbot;
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc=" Region: Constructors and Main ">
public SwingUI2(XCraftBot xbot) {
this.xbot = xbot;
frame = new JFrame("XCraft Bot");
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
if (JOptionPane.showConfirmDialog(frame,
"Are you sure you want to close this window?", "Close Window?",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
xbot.driver.close();
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("taskkill /im chromedriver.exe /f /t");
} catch (IOException ex) {
}
System.exit(0);
}
}
});
tabbedPane = new JTabbedPane();
tabbedPane.addTab("Login", makeLoginPanel());
frame.getContentPane().add(tabbedPane);
frame.setVisible(true);
}
public static void main(String[] args) {
XCraftBot xbot = new XCraftBot();
SwingUI2 ui = new SwingUI2(xbot);
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc=" Region: Pop-Up Windows ">
private void showRuestung(String slot) {
JFrame f = new JFrame("Slot");
f.setSize(800, 800);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.getContentPane().setLayout(new GridBagLayout());
Object[][] data = new Object[xbot.getAccount().getXcharacters().size()][3];
List<Integer> werte = new ArrayList<>();
String[] colNames = {"Character", "Name", "Wert"};
for (int i = 0; i < xbot.getAccount().getXcharacters().size(); i++) {
XCharacter dude = xbot.getAccount().getXcharacters().get(i);
data[i][0] = dude.getName();
for (Item it : dude.getEquipment().getItems()) {
if (it.getPosition().equals(slot)) {
data[i][1] = it.getGegenstand();
data[i][2] = it.getRuestung();
werte.add(it.getRuestung());
break;
} else {
data[i][1] = "---";
data[i][2] = "---";
}
}
}
JTable table = new JTable(data, colNames);
table.getColumnModel().getColumn(0).setMinWidth(100);
table.getColumnModel().getColumn(1).setMinWidth(300);
table.getColumnModel().getColumn(0).setMinWidth(50);
table.setPreferredSize(new Dimension(700, 700));
table.setPreferredScrollableViewportSize(table.getPreferredSize());
table.setFillsViewportHeight(true);
//table.setEnabled(false);
table.setDefaultRenderer(Object.class, new TableCellRenderer() {
private DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (column == 2) {
if (value instanceof String) {
String wert = (String) value;
if (wert.equals("---")) {
c.setBackground(Color.GRAY);
} else {
c.setBackground(Color.WHITE);
}
} else {
int wert = (int) value;
if (wert == 0) {
c.setBackground(Color.GRAY);
} else {
Integer maxNumber = werte.stream().max(Comparator.comparing(Integer::valueOf)).get();
Integer minNumber = werte.stream().min(Comparator.comparing(Integer::valueOf)).get();
if (wert == maxNumber) {
c.setBackground(Color.GREEN);
} else if (wert > minNumber) {
c.setBackground(Color.YELLOW);
} else {
c.setBackground(Color.RED);
}
}
}
} else {
c.setBackground(Color.WHITE);
}
return c;
}
});
JScrollPane scrollPane = new JScrollPane(table);
f.getContentPane().add(scrollPane);
f.setVisible(true);
}
private void showBewaffnung(String slot) {
JFrame f = new JFrame("Slot");
f.setSize(800, 800);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.getContentPane().setLayout(new GridBagLayout());
Object[][] data = new Object[xbot.getAccount().getXcharacters().size()][5];
String[] colNames = {"Character", "Name", "Angriff", "Verteidigung", "Schaden"};
for (int i = 0; i < xbot.getAccount().getXcharacters().size(); i++) {
XCharacter dude = xbot.getAccount().getXcharacters().get(i);
data[i][0] = dude.getName();
for (Item it : dude.getEquipment().getItems()) {
if (it.getPosition().equals(slot)) {
System.out.println(it.getPosition());
data[i][1] = it.getGegenstand();
data[i][2] = it.getAngriff();
data[i][3] = it.getVerteidigung();
data[i][4] = it.getSchaden();
break;
} else {
data[i][1] = "---";
data[i][2] = "---";
}
}
}
JTable table = new JTable(data, colNames);
table.getColumnModel().getColumn(0).setMinWidth(100);
table.getColumnModel().getColumn(1).setMinWidth(300);
table.getColumnModel().getColumn(0).setMinWidth(50);
table.setPreferredSize(new Dimension(700, 700));
table.setPreferredScrollableViewportSize(table.getPreferredSize());
table.setFillsViewportHeight(true);
//table.setEnabled(false);
JScrollPane scrollPane = new JScrollPane(table);
f.getContentPane().add(scrollPane);
f.setVisible(true);
}
private void showBewaffnungGesamt() {
JFrame f = new JFrame("Slot");
f.setSize(800, 800);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.getContentPane().setLayout(new GridBagLayout());
Object[][] data = new Object[xbot.getAccount().getXcharacters().size()][5];
String[] colNames = {"Character", "Name", "Angriff", "Verteidigung", "Schaden"};
for (int i = 0; i < xbot.getAccount().getXcharacters().size(); i++) {
XCharacter dude = xbot.getAccount().getXcharacters().get(i);
data[i][0] = dude.getName();
data[i][1] = "";
data[i][2] = 0;
data[i][3] = 0;
data[i][4] = 0;
for (Item it : dude.getEquipment().getItems()) {
if (it.getPosition().equals("Zweihandwaffe") || it.getPosition().equals("Waffenhand")) {
data[i][1] = it.getGegenstand().split("\\(")[0];
data[i][2] = (int) data[i][2] + it.getAngriff();
data[i][3] = (int) data[i][3] + it.getVerteidigung();
data[i][4] = (int) data[i][4] + it.getSchaden();
} else if (it.getPosition().equals("Schildhand")) {
data[i][1] += " + " + it.getGegenstand().split("\\(")[0];
}
}
}
JTable table = new JTable(data, colNames);
table.getColumnModel().getColumn(0).setMinWidth(100);
table.getColumnModel().getColumn(1).setMinWidth(300);
table.getColumnModel().getColumn(2).setMinWidth(50);
table.getColumnModel().getColumn(3).setMinWidth(50);
table.getColumnModel().getColumn(4).setMinWidth(50);
table.setPreferredSize(new Dimension(700, 700));
table.setPreferredScrollableViewportSize(table.getPreferredSize());
table.setFillsViewportHeight(true);
JScrollPane scrollPane = new JScrollPane(table);
f.getContentPane().add(scrollPane);
f.setVisible(true);
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc=" Region: Make Panels ">
private JPanel makeLoginPanel() {
JPanel p = new JPanel();
p.setLayout(new GridBagLayout());
JLabel lblName = new JLabel("Name:");
p.add(lblName, makeGridBagConstraint(GridBagConstraints.CENTER, 0, 0));
JLabel lblPassword = new JLabel("Password:");
p.add(lblPassword, makeGridBagConstraint(GridBagConstraints.CENTER, 0, 1));
JTextField txtName = new JTextField();
txtName.setPreferredSize(new Dimension(150, 30));
p.add(txtName, makeGridBagConstraint(GridBagConstraints.CENTER, 1, 0));
JPasswordField txtPassword = new JPasswordField();
txtPassword.setPreferredSize(new Dimension(150, 30));
p.add(txtPassword, makeGridBagConstraint(GridBagConstraints.CENTER, 1, 1));
JButton btnLogin = new JButton("Login");
btnLogin.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
login(txtName.getText(), txtPassword.getText());
}
});
p.add(btnLogin, makeGridBagConstraint(GridBagConstraints.CENTER, 0, 2, 2, 1));
return p;
}
private JPanel makeOverviewPanel() {
JPanel p = new JPanel();
p.setLayout(new GridBagLayout());
JLabel lblRuestungen = new JLabel("Ruestungen");
p.add(lblRuestungen, makeGridBagConstraint(GridBagConstraints.CENTER, 0, 0));
String[] ruestungsbuttons = {"Kopf", "Rücken", "Körper", "Arme", "Hände", "Beine", "Füsse"};
for (int i = 0; i < ruestungsbuttons.length; i++) {
JButton btn = new JButton(ruestungsbuttons[i]);
btn.addActionListener((ActionEvent e) -> {
showRuestung(btn.getText());
});
p.add(btn, makeGridBagConstraint(GridBagConstraints.CENTER, 0, i + 1));
}
JLabel lblBewaffnung = new JLabel("Bewaffnung");
p.add(lblBewaffnung, makeGridBagConstraint(GridBagConstraints.CENTER, 0, 1 + ruestungsbuttons.length));
String[] waffenbuttons = {"Zweihandwaffe", "Waffenhand", "Schildhand"};
for (int i = 0; i < waffenbuttons.length; i++) {
JButton btn = new JButton(waffenbuttons[i]);
btn.addActionListener((ActionEvent e) -> {
showBewaffnung(btn.getText());
});
p.add(btn, makeGridBagConstraint(GridBagConstraints.CENTER, 0, i + ruestungsbuttons.length + 2));
}
JButton btn = new JButton("Gesamtbewaffnung");
btn.addActionListener((ActionEvent e) -> {
showBewaffnungGesamt();
});
p.add(btn, makeGridBagConstraint(GridBagConstraints.CENTER, 0, waffenbuttons.length + ruestungsbuttons.length + 2));
return p;
}
private JPanel makeMaterialPanel() {
JPanel p = new JPanel();
p.setLayout(new GridBagLayout());
JLabel lblHolz = new JLabel("Holz");
p.add(lblHolz, makeGridBagConstraint(GridBagConstraints.NONE, 0, 0));
JTable table = makeMaterialTable(xbot.getAccount().getMaterialInventory().getHolz());
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setPreferredSize(new Dimension(350, 90));
p.add(scrollPane, makeGridBagConstraint(GridBagConstraints.NONE, 0, 1));
JLabel lblMetall = new JLabel("Metall");
p.add(lblMetall, makeGridBagConstraint(GridBagConstraints.NONE, 1, 0));
JTable table2 = makeMaterialTable(xbot.getAccount().getMaterialInventory().getMetall());
JScrollPane scrollPane2 = new JScrollPane(table2);
scrollPane2.setPreferredSize(new Dimension(350, 90));
p.add(scrollPane2, makeGridBagConstraint(GridBagConstraints.NONE, 1, 1));
JLabel lblLeder = new JLabel("Leder");
p.add(lblLeder, makeGridBagConstraint(GridBagConstraints.NONE, 0, 2));
JTable table3 = makeMaterialTable(xbot.getAccount().getMaterialInventory().getLeder());
JScrollPane scrollPane3 = new JScrollPane(table3);
scrollPane3.setPreferredSize(new Dimension(350, 90));
p.add(scrollPane3, makeGridBagConstraint(GridBagConstraints.NONE, 0, 3));
JLabel lblPelz = new JLabel("Pelz");
p.add(lblPelz, makeGridBagConstraint(GridBagConstraints.NONE, 1, 2));
JTable table4 = makeMaterialTable(xbot.getAccount().getMaterialInventory().getPelz());
JScrollPane scrollPane4 = new JScrollPane(table4);
scrollPane4.setPreferredSize(new Dimension(350, 90));
p.add(scrollPane4, makeGridBagConstraint(GridBagConstraints.NONE, 1, 3));
JButton btn = new JButton("Reload");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
tabbedPane.remove(1);
xbot.loadMaterials();
tabbedPane.add("Material", makeMaterialPanel());
tabbedPane.setSelectedIndex(1);
}
});
GridBagConstraints gbc = makeGridBagConstraint(GridBagConstraints.NONE, 1, 4);
gbc.gridwidth = 2;
p.add(btn, gbc);
return p;
}
private JTable makeMaterialTable(List<Material> mats) {
Object[][] data = new Object[mats.size()][2];
String[] colNames = {"Name", "Anzahl"};
for (int i = 0; i < mats.size(); i++) {
data[i][0] = mats.get(i).getName();
data[i][1] = mats.get(i).getAmount();
}
JTable table = new JTable(data, colNames);
table.setDefaultRenderer(Object.class, new TableCellRenderer() {
private DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (isSelected) {
c.setBackground(Color.YELLOW);
} else {
if (row % 2 == 0) {
c.setBackground(Color.WHITE);
} else {
c.setBackground(Color.LIGHT_GRAY);
}
}
return c;
}
});
return table;
}
private JPanel makeCraftingPanel() {
JPanel p = new JPanel();
p.setLayout(new GridBagLayout());
JComboBox comboboxCharacter = new JComboBox(xbot.getAccount().getXcharacters().toArray());
comboboxCharacter.setPreferredSize(new Dimension(100, 30));
comboboxCharacter.setRenderer(new ListCellRenderer() {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
XCharacter xc = (XCharacter) value;
JLabel renderer = (JLabel) new DefaultListCellRenderer().getListCellRendererComponent(list, xc.getName(), index, isSelected, cellHasFocus);
return renderer;
}
});
comboboxCharacter.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (Component c : p.getComponents()) {
if (c instanceof JComboBox) {
JComboBox jcb = (JComboBox) c;
if (jcb.getSelectedItem() instanceof Recipe) {
p.remove(c);
p.repaint();
p.getParent().repaint();
}
}
}
XCharacter xc = (XCharacter) comboboxCharacter.getSelectedItem();
JComboBox comboboxRecipes = new JComboBox(xc.getRecipes().toArray());
comboboxRecipes.setPreferredSize(new Dimension(180, 30));
comboboxRecipes.setRenderer(new ListCellRenderer() {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Recipe recipe = (Recipe) value;
JLabel renderer = (JLabel) new DefaultListCellRenderer().getListCellRendererComponent(list, recipe.getName(), index, isSelected, cellHasFocus);
return renderer;
}
});
p.add(comboboxRecipes, makeGridBagConstraint(GridBagConstraints.CENTER, 1, 0));
p.repaint();
p.getParent().repaint();
}
});
p.add(comboboxCharacter, makeGridBagConstraint(GridBagConstraints.CENTER, 0, 0));
XCharacter xc = (XCharacter) comboboxCharacter.getSelectedItem();
JComboBox comboboxRecipes = new JComboBox(xc.getRecipes().toArray());
comboboxRecipes.setPreferredSize(new Dimension(180, 30));
comboboxRecipes.setRenderer(new ListCellRenderer() {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Recipe recipe = (Recipe) value;
JLabel renderer = (JLabel) new DefaultListCellRenderer().getListCellRendererComponent(list, recipe.getName(), index, isSelected, cellHasFocus);
return renderer;
}
});
p.add(comboboxRecipes, makeGridBagConstraint(GridBagConstraints.CENTER, 1, 0));
p.repaint();
JLabel lbl4 = new JLabel("Anzahl:");
p.add(lbl4, makeGridBagConstraint(GridBagConstraints.CENTER, 2, 0));
JTextField txtCountNew = new JTextField();
txtCountNew.setPreferredSize(new Dimension(100, 30));
p.add(txtCountNew, makeGridBagConstraint(GridBagConstraints.CENTER, 3, 0));
JButton btn2 = new JButton("Click");
btn2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
XCharacter xc = (XCharacter) comboboxCharacter.getSelectedItem();
System.out.println("Character: " + xc.getName());
int anzahl = Integer.parseInt(txtCountNew.getText());
System.out.println("Anzahl: " + anzahl);
for (Component c : p.getComponents()) {
if (c instanceof JComboBox) {
JComboBox jcb = (JComboBox) c;
if (jcb.getSelectedItem() instanceof Recipe) {
Recipe r = (Recipe) jcb.getSelectedItem();
System.out.println("Recipe: " + r.getName() + " in " + r.getTimeInMin() + "mins");
xbot.btn2Click(xc, r, anzahl);
break;
}
}
}
}
});
p.add(btn2, makeGridBagConstraint(GridBagConstraints.CENTER, 4, 0));
JButton btnMarketsnipe = new JButton("Marketplace Sniper");
p.add(btnMarketsnipe,makeGridBagConstraint(GridBagConstraints.CENTER, 0, 1));
return p;
}
private JPanel makeFeaturesPanel() {
JPanel p = new JPanel();
p.setLayout(new GridBagLayout());
JButton btnMarketplace = new JButton("Marketplace Sniper");
btnMarketplace.addActionListener((e) -> {
MarketplaceUI marketplaceUI = new MarketplaceUI();
});
p.add(btnMarketplace, makeGridBagConstraint(GridBagConstraints.CENTER, 0, 0));
JButton btnXCastFarmPlant = new JButton("XCast Plant Farm");
p.add(btnXCastFarmPlant, makeGridBagConstraint(GridBagConstraints.CENTER, 0, 1));
JButton btnXCastHealthFarm = new JButton("XCast Health Farm");
p.add(btnXCastHealthFarm, makeGridBagConstraint(GridBagConstraints.CENTER, 0, 2));
return p;
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc=" Region: Random Stuff ">
private void login(String username, String password) {
xbot.loginToXCraft(xbot.driver, username, password);
tabbedPane.remove(0);
tabbedPane.add("Overview", makeOverviewPanel());
xbot.loadCharacters();
xbot.loadMaterials();
tabbedPane.add("Materials", makeMaterialPanel());
tabbedPane.add("Crafting", makeCraftingPanel());
for (XCharacter xc : xbot.getAccount().getXcharacters()) {
System.out.println(Arrays.toString(xc.getEquipment().getItems().toArray()));
}
}
private GridBagConstraints makeGridBagConstraint(int fill, int x, int y) {
GridBagConstraints c = new GridBagConstraints();
c.fill = fill;
c.gridx = x;
c.gridy = y;
c.insets = new Insets(3, 3, 3, 3);
return c;
}
private GridBagConstraints makeGridBagConstraint(int fill, int x, int y, int gridwidth, int gridheigt) {
GridBagConstraints c = makeGridBagConstraint(fill, x, y);
c.gridwidth = gridwidth;
c.gridheight = gridheigt;
return c;
}
// </editor-fold>
}

View File

@ -0,0 +1,160 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package xcraftbot.ui;
import io.github.bonigarcia.wdm.WebDriverManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import xcraftbot.logic.ButtonNavigate;
import xcraftbot.logic.Textbox;
/**
*
* @author agreiner
*/
public class XCastHealthFarm {
public XCastHealthFarm(){
WebDriverManager.chromedriver().setup();
WebDriver driverMain = new ChromeDriver();
WebDriver driverBot = new ChromeDriver();
JFrame frame = new JFrame("Marketplace");
frame.setSize(600, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(null);
JLabel lblBotName = new JLabel("Bot Name:");
JTextField txtBotName = new JTextField();
JLabel lblBotPassword = new JLabel("Bot Password:");
JPasswordField txtBotPassword = new JPasswordField();
JLabel lblMainName = new JLabel("Main Name:");
JTextField txtMainName = new JTextField();
JLabel lblMainPassword = new JLabel("Main Password:");
JPasswordField txtMainPassword = new JPasswordField();
JButton btnBotLogin = new JButton("Login");
lblBotName.setBounds(10, 10, 100, 30);
txtBotName.setBounds(120, 10, 100, 30);
lblBotPassword.setBounds(10, 50, 100, 30);
txtBotPassword.setBounds(120,50,100,30);
lblMainName.setBounds(250, 10, 100, 30);
txtMainName.setBounds(360, 10, 100, 30);
lblMainPassword.setBounds(250, 50, 100, 30);
txtMainPassword.setBounds(360,50,100,30);
btnBotLogin.setBounds(10, 90, 450, 30);
panel.add(lblBotName);
panel.add(txtBotName);
panel.add(lblBotPassword);
panel.add(txtBotPassword);
panel.add(lblMainName);
panel.add(txtMainName);
panel.add(lblMainPassword);
panel.add(txtMainPassword);
panel.add(btnBotLogin);
btnBotLogin.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
boolean success=true;
try{
loginToXCraftCrafting(driverBot, txtBotName.getText(), txtBotPassword.getText());
loginToXCraftCrafting(driverMain, txtMainName.getText(), txtMainPassword.getText());
panel.removeAll();
panel.repaint();
frame.repaint();
}catch (Exception ex){
System.out.println("Login failed!");
success=false;
}
if(success){
init(frame, panel, txtBotName.getText(), driverBot, txtMainName.getText(), driverMain);
}
}
});
frame.add(panel);
frame.setVisible(true);
frame.setVisible(true);
}
public void init(JFrame frame, JPanel panel,String botName, WebDriver driverBot, String mainName, WebDriver driverMain){
JLabel lblBotName = new JLabel(botName);
lblBotName.setBounds(10, 10, 100, 30);
JLabel lblMainName = new JLabel(mainName);
lblMainName.setBounds(310, 10,100,30);
panel.add(lblBotName);
panel.add(lblMainName);
clickButtonByValue(driverBot, "XCast");
clickButtonByValue(driverMain, "XCast");
JLabel lblBotCount = new JLabel("Okari-Nuesse: "+countByText(driverBot,"Okari"));
JLabel lblMainCount = new JLabel("Okari-Nuesse: "+countByText(driverMain,"Okari"));
lblBotCount.setBounds(15, 50, 150, 30);
lblMainCount.setBounds(315, 50, 150, 30);
panel.add(lblBotCount);
panel.add(lblMainCount);
}
public static void main(String[] args) {
XCastHealthFarm ui = new XCastHealthFarm();
}
public boolean loginToXCraftCrafting(WebDriver driver, String username, String password){
driver.get("https://xcraftkkrieger.cx.edvschule-plattling.de/XCraft/");
WebElement boxName = driver.findElement(By.name(Textbox.USERNAME.getNameString()));
boxName.sendKeys(username);
WebElement boxPassword = driver.findElement(By.name(Textbox.PASSWORD.getNameString()));
boxPassword.sendKeys(password);
WebElement btnLogin = driver.findElement(By.name(ButtonNavigate.LOGIN.getNameString()));
btnLogin.click();
return true;
}
public void clickButtonByValue(WebDriver driver,String value){
driver.findElement(By.xpath("//input[@value='"+value+"']")).click();
}
public int countByText(WebDriver driver, String text){
List<WebElement> webElements = driver.findElements(By.xpath("//*[contains(text(), '"+text+"')]"));
return webElements.size();
}
}

View File

@ -0,0 +1,208 @@
package xcraftbot.ui;
import io.github.bonigarcia.wdm.WebDriverManager;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import net.bytebuddy.agent.builder.AgentBuilder;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import xcraftbot.logic.ButtonNavigate;
import xcraftbot.logic.Textbox;
import xcraftbot.xcraftobjects.Plant;
import xcraftbot.xcraftobjects.PlantType;
public class XCastOkariFarm {
public XCastOkariFarm(){
WebDriverManager.chromedriver().setup();
WebDriver driver = new ChromeDriver();
JFrame frame = new JFrame("Marketplace");
frame.setSize(300, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(null);
JLabel lblName = new JLabel("Name:");
JTextField txtName = new JTextField();
JLabel lblPassword = new JLabel("Password:");
JPasswordField txtPassword = new JPasswordField();
JButton btnBotLogin = new JButton("Login");
lblName.setBounds(10, 10, 100, 30);
txtName.setBounds(120, 10, 100, 30);
lblPassword.setBounds(10, 50, 100, 30);
txtPassword.setBounds(120,50,100,30);
btnBotLogin.setBounds(10, 90, 210, 30);
panel.add(lblName);
panel.add(txtName);
panel.add(lblPassword);
panel.add(txtPassword);
panel.add(btnBotLogin);
btnBotLogin.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
boolean success=true;
try{
loginToXCraftCrafting(driver, txtName.getText(), txtPassword.getText());
panel.removeAll();
panel.repaint();
frame.repaint();
init(frame, txtName.getText(), driver);
}catch (Exception ex){
System.out.println("Login failed!");
System.out.println(ex);
success=false;
}
}
});
frame.add(panel);
frame.setVisible(true);
frame.setVisible(true);
}
public void init(JFrame frameOld, String name, WebDriver driver){
frameOld.dispose();
JFrame frame = new JFrame();
frame.setSize(400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTabbedPane tabbedPane = new JTabbedPane();
JPanel panelOverview = new JPanel();
tabbedPane.addTab("Overview", panelOverview);
frame.add(tabbedPane);
JLabel lblName = new JLabel(name);
lblName.setBounds(10, 10, 100, 30);
panelOverview.add(lblName);
clickButtonByValue(driver, "XCast");
List<Plant> plants = loadPlants(driver);
Predicate<Plant> predicateOkari = p-> p.getType()==PlantType.OKARI_NUSS;
Object[] okaris = plants.stream().filter(predicateOkari)
.sorted((p1, p2) -> p2.compareTo(p1))
.toArray();
JLabel lblCount = new JLabel("Okari-Nuesse: "+okaris.length);
lblCount.setBounds(15, 50, 150, 30);
panelOverview.add(lblCount);
JPanel panelOkari = new JPanel();
Object[][] data = new Object[okaris.length][1];
for(int i=0;i<okaris.length;i++){
data[i][0] = okaris[i];
}
String[] colNames = {"Okari-Nuss"};
JTable tableOkari= new JTable(data, colNames);
tableOkari.setDefaultRenderer(Object.class, new TableCellRenderer() {
private DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (isSelected) {
c.setBackground(new Color(c.getBackground().getRGB()+40));
} else {
Plant plant = (Plant) value;
if(plant.isMax()){
c.setBackground(Color.GREEN);
}else{
c.setBackground(Color.LIGHT_GRAY);
}
}
return c;
}
});
tableOkari.getColumnModel().getColumn(0).setPreferredWidth(200);
JScrollPane scrollPaneOkari = new JScrollPane(tableOkari);
panelOkari.add(scrollPaneOkari);
tabbedPane.add(panelOkari,"Okari-Nuesse");
frame.setVisible(true);
}
public static void main(String[] args) {
XCastOkariFarm ui = new XCastOkariFarm();
}
public boolean loginToXCraftCrafting(WebDriver driver, String username, String password){
driver.get("https://xcraftkkrieger.cx.edvschule-plattling.de/XCraft/");
WebElement boxName = driver.findElement(By.name(Textbox.USERNAME.getNameString()));
boxName.sendKeys(username);
WebElement boxPassword = driver.findElement(By.name(Textbox.PASSWORD.getNameString()));
boxPassword.sendKeys(password);
WebElement btnLogin = driver.findElement(By.name(ButtonNavigate.LOGIN.getNameString()));
btnLogin.click();
return true;
}
public void clickButtonByValue(WebDriver driver,String value){
driver.findElement(By.xpath("//input[@value='"+value+"']")).click();
}
public int countByText(WebDriver driver, String text){
List<WebElement> webElements = driver.findElements(By.xpath("//*[contains(text(), '"+text+"')]"));
return webElements.size();
}
public List<Plant> loadPlants(WebDriver driver){
JFrame frame = new JFrame("Loading Plants!");
frame.setSize(200, 100);
frame.setLocation(500, 500);
JLabel lblStatus = new JLabel("Loaded: 0");
frame.getContentPane().add(lblStatus);
frame.setVisible(true);
List<Plant> plants = new ArrayList<>();
int count = 0;
for(PlantType planttype:PlantType.values()){
System.out.println("Start findElements");
List<WebElement> webElements = driver.findElements(By.xpath("//*[contains(text(), '"+planttype.getBezeichnung()+"')]"));
System.out.println("End findElements");
for(WebElement elem: webElements){
String text = elem.getText();
String klammern = elem.getText().substring(text.indexOf("(")+1, text.indexOf(")"));
String[] parts = klammern.split("/");
plants.add(new Plant(planttype, Integer.parseInt(parts[0]), Integer.parseInt(parts[1]), Integer.parseInt(parts[2])));
count++;
lblStatus.setText("Loaded: "+count);
System.out.print("adding");
}
System.out.println("");
}
System.out.println("Done loading");
return plants;
}
}

View File

@ -0,0 +1,64 @@
package xcraftbot.xcraftobjects;
import java.util.List;
public class Account {
//Attribute
private String name;
private String password;
private List<XCharacter> xcharacters;
private MaterialInventory materialInventory;
private boolean loggedIn;
//Konstruktor
public Account(){
setLoggedIn(false);
materialInventory=new MaterialInventory();
}
//Getter und Setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<XCharacter> getXcharacters() {
return xcharacters;
}
public void setXcharacters(List<XCharacter> xcharacters) {
this.xcharacters = xcharacters;
}
public boolean isLoggedIn() {
return loggedIn;
}
public void setLoggedIn(boolean loggedIn) {
this.loggedIn = loggedIn;
}
public MaterialInventory getMaterialInventory() {
return materialInventory;
}
public void setMaterialInventory(MaterialInventory materialInventory) {
this.materialInventory = materialInventory;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
//ToString
@Override
public String toString() {
return "Account{" + "name=" + name + ", xcharacters=" + xcharacters + ", materialInventory=" + materialInventory + ", loggedIn=" + loggedIn + '}';
}
}

View File

@ -0,0 +1,28 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package xcraftbot.xcraftobjects;
/**
*
* @author kelle
*/
public enum CharacterSelectEnum {
AyronTeor("//*[@id=\"j_idt39\"]/table/tbody/tr[1]/td/div/input","Ayron Teor"),
SanosMilon("//*[@id=\"j_idt39\"]/table/tbody/tr[2]/td/div/input","Sanos Milon"),
IshdaMilon("//*[@id=\"j_idt39\"]/table/tbody/tr[3]/td/div/input","Ishda Milon");
private final String pfad;
private final String name;
private CharacterSelectEnum(String pfad, String name) {
this.pfad = pfad;
this.name = name;
}
}

View File

@ -0,0 +1,82 @@
package xcraftbot.xcraftobjects;
public class Geldmenge {
private int kupfer;
private int silber;
private int gold;
private int platin;
public Geldmenge(int kupfer, int silber, int gold, int platin) {
setPlatin(platin);
setGold(gold);
setSilber(silber);
setKupfer(kupfer);
}
public Geldmenge(int kupfer){
setPlatin(0);
setGold(0);
setSilber(0);
setKupfer(kupfer);
}
private int getKupfer() {
return kupfer;
}
private void setKupfer(int kupfer) {
if(kupfer>=10){
setSilber(getSilber()+kupfer/10);
this.kupfer=kupfer%10;
}else{
this.kupfer = kupfer;
}
}
private int getSilber() {
return silber;
}
private void setSilber(int silber) {
if(silber>=100){
setGold(getGold()+silber/100);
this.silber=silber%100;
}else{
this.silber = silber;
}
}
private int getGold() {
return gold;
}
private void setGold(int gold) {
if(gold>=1000){
setPlatin(getPlatin()+gold/1000);
this.gold=gold%1000;
}else{
this.gold = gold;
}
}
private int getPlatin() {
return platin;
}
private void setPlatin(int platin) {
this.platin = platin;
}
public int getKupferValue(){
return getKupfer()+(getSilber()*10)+(getGold()*100)+(getGold()*1000);
}
@Override
public String toString() {
return "Geldmenge{" + "kupfer=" + kupfer + ", silber=" + silber + ", gold=" + gold + ", platin=" + platin + '}';
}
}

View File

@ -0,0 +1,25 @@
package xcraftbot.xcraftobjects;
import java.util.ArrayList;
import java.util.List;
public class Inventory {
private List<Item> items = new ArrayList<>();
public Inventory(List<Item> items) {
this.items = items;
}
public Inventory() {
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}

View File

@ -0,0 +1,99 @@
package xcraftbot.xcraftobjects;
public class Item {
private String position;
private String gegenstand;
private int qualitaet;
private int angriff;
private int verteidigung;
private int schaden;
private int ruestung;
private Geldmenge preis;
public Item(String position, String gegenstand, int qualitaet, int angriff, int verteidigung, int schaden, int ruestung, Geldmenge preis) {
this.position = position;
this.gegenstand = gegenstand;
this.qualitaet = qualitaet;
this.angriff = angriff;
this.verteidigung = verteidigung;
this.schaden = schaden;
this.ruestung = ruestung;
this.preis = preis;
}
public Item() {
}
public String getGegenstand() {
return gegenstand;
}
public void setGegenstand(String gegenstand) {
this.gegenstand = gegenstand;
}
public int getQualitaet() {
return qualitaet;
}
public void setQualitaet(int qualitaet) {
this.qualitaet = qualitaet;
}
public int getAngriff() {
return angriff;
}
public void setAngriff(int angriff) {
this.angriff = angriff;
}
public int getVerteidigung() {
return verteidigung;
}
public void setVerteidigung(int verteidigung) {
this.verteidigung = verteidigung;
}
public int getSchaden() {
return schaden;
}
public void setSchaden(int schaden) {
this.schaden = schaden;
}
public int getRuestung() {
return ruestung;
}
public void setRuestung(int ruestung) {
this.ruestung = ruestung;
}
public Geldmenge getPreis() {
return preis;
}
public void setPreis(Geldmenge preis) {
this.preis = preis;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
@Override
public String toString() {
return "Item{" + "position=" + position + ", gegenstand=" + gegenstand + ", qualitaet=" + qualitaet + ", angriff=" + angriff + ", verteidigung=" + verteidigung + ", schaden=" + schaden + ", ruestung=" + ruestung + ", preis=" + preis + '}';
}
}

View File

@ -0,0 +1,48 @@
package xcraftbot.xcraftobjects;
public class Material {
//Attribute
private int amount;
private String name;
private int tier;
public static final String[] HOLZ = {"Nadelholz", "Hartholz", "Steineiche", "Düsterholz"};
public static final String[] METALL = {"Bronze", "Eisen", "Mithril", "Adamant"};
public static final String[] LEDER = {"Wildleder", "Alpha-Leder", "Mythenleder", "Drachenleder"};
public static final String[] PELZ = {"Wolfspelz", "Tigerpelz", "Löwenpelz", "Schneetigerpelz"};
//Konstruktor
public Material(int amount, String name, int tier) {
this.amount = amount;
this.name = name;
this.tier = tier;
}
//Getter und Setter
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getTier() {
return tier;
}
public void setTier(int tier) {
this.tier = tier;
}
//ToString
@Override
public String toString() {
return "Material{" + "amount=" + amount + ", name=" + name + ", tier=" + tier + '}';
}
}

View File

@ -0,0 +1,31 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package xcraftbot.xcraftobjects;
/**
*
* @author kelle
*/
public enum MaterialCraftingEnum {
Wanderstecken("//*[@id=\"j_idt61:0:craftTemplate:craftButton\"]","Wanderstecken"),Messer("//*[@id=\"j_idt61:1:craftTemplate:craftButton\"]","Messer"),
Pelzumhang("//*[@id=\"j_idt61:2:craftTemplate:craftButton\"]","Pelzumhang"),Lederweste("//*[@id=\"j_idt61:3:craftTemplate:craftButton\"]","Lederweste"),
Lederarmschienen("//*[@id=\"j_idt61:4:craftTemplate:craftButton\"]","Lederarmschienen"),Knüppel("//*[@id=\"j_idt61:5:craftTemplate:craftButton\"]","Knüppel"),
Holzspeer("//*[@id=\"j_idt61:6:craftTemplate:craftButton\"]","Holzspeer");
private final String path;
private final String name;
private MaterialCraftingEnum(String path, String name) {
this.path = path;
this.name = name;
}
}

View File

@ -0,0 +1,54 @@
package xcraftbot.xcraftobjects;
import java.util.ArrayList;
import java.util.List;
public class MaterialInventory {
//Attribute
private List<Material> holz;
private List<Material> metall;
private List<Material> leder;
private List<Material> pelz;
//Konstruktor
public MaterialInventory() {
holz = new ArrayList<>();
metall = new ArrayList<>();
leder = new ArrayList<>();
pelz = new ArrayList<>();
}
//Getter und Setter
public List<Material> getHolz() {
return holz;
}
public void setHolz(List<Material> holz) {
this.holz = holz;
}
public List<Material> getMetall() {
return metall;
}
public void setMetall(List<Material> metall) {
this.metall = metall;
}
public List<Material> getLeder() {
return leder;
}
public void setLeder(List<Material> leder) {
this.leder = leder;
}
public List<Material> getPelz() {
return pelz;
}
public void setPelz(List<Material> pelz) {
this.pelz = pelz;
}
@Override
public String toString() {
return "MaterialInventory{" + "holz=" + holz + ", metall=" + metall + ", leder=" + leder + ", pelz=" + pelz + '}';
}
}

View File

@ -0,0 +1,88 @@
package xcraftbot.xcraftobjects;
public class Plant implements Comparable<Plant>{
private PlantType type;
private int illnessResistance;
private int pestResistance;
private int effectifity;
public Plant(PlantType type, int illnessResistance, int pestResistance, int effectifity) {
this.type = type;
this.illnessResistance = illnessResistance;
this.pestResistance = pestResistance;
this.effectifity = effectifity;
}
public PlantType getType() {
return type;
}
public void setType(PlantType type) {
this.type = type;
}
public int getIllnessResistance() {
return illnessResistance;
}
public void setIllnessResistance(int illnessResistance) {
this.illnessResistance = illnessResistance;
}
public int getPestResistance() {
return pestResistance;
}
public void setPestResistance(int pestResistance) {
this.pestResistance = pestResistance;
}
public int getEffectifity() {
return effectifity;
}
public void setEffectifity(int effectifity) {
this.effectifity = effectifity;
}
public int totoalStats(){
return illnessResistance+pestResistance+effectifity;
}
public boolean isMax(){
return totoalStats()==300;
}
@Override
public String toString() {
return type.getBezeichnung()+" ("+illnessResistance+"/"+pestResistance+"/"+effectifity+") "+totoalStats();
}
public String toRealString() {
return type.getBezeichnung()+" ("+illnessResistance+"/"+pestResistance+"/"+effectifity+")";
}
@Override
public int compareTo(Plant o) {
return this.totoalStats()-o.totoalStats();
}
public static Plant parsePlant(String plantString){
String typeString = plantString.split(" ")[0];
PlantType type;
if(typeString.equals("Okari-Nuss")){
type=PlantType.OKARI_NUSS;
}else{
type=PlantType.NOA_BLATT;
}
String klammern = plantString.substring(plantString.indexOf("(")+1, plantString.indexOf(")"));
String[] parts = klammern.split("/");
Plant p = new Plant(type, Integer.parseInt(parts[0]), Integer.parseInt(parts[1]), Integer.parseInt(parts[2]));
return p;
}
}

View File

@ -0,0 +1,23 @@
package xcraftbot.xcraftobjects;
public enum PlantType {
OKARI_NUSS("Okari-Nuss"), NOA_BLATT("Noa-Blatt");
private String bezeichnung;
private PlantType(String bezeichnung) {
this.bezeichnung = bezeichnung;
}
public String getBezeichnung() {
return bezeichnung;
}
public void setBezeichnung(String bezeichnung) {
this.bezeichnung = bezeichnung;
}
}

View File

@ -0,0 +1,60 @@
package xcraftbot.xcraftobjects;
public class Recipe {
// <editor-fold defaultstate="collapsed" desc=" Region: Attributes ">
private String name;
private String xpath;
private int timeInMin;
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc=" Region: Constructors ">
public Recipe(String name, String xpath, int timeInMin) {
this.name = name;
this.xpath = xpath;
this.timeInMin = timeInMin;
}
public Recipe() {
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc=" Region: Getter und Setter">
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getXpath() {
return xpath;
}
public void setXpath(String xpath) {
this.xpath = xpath;
}
public int getTimeInMin() {
return timeInMin;
}
public void setTimeInMin(int timeInMin) {
this.timeInMin = timeInMin;
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc=" Region: Default Methods ">
@Override
public String toString() {
return "Recipe{" + "name=" + name + ", xpath=" + xpath + ", timeInMin=" + timeInMin + '}';
}
// </editor-fold>
}

View File

@ -0,0 +1,263 @@
package xcraftbot.xcraftobjects;
import java.util.ArrayList;
import java.util.List;
public class XCharacter {
// <editor-fold defaultstate="collapsed" desc=" Region: Attributes ">
private String name;
private Inventory equipment;
private int craftedCount;
private int fightCount;
private int winCount;
private int killCount;
//Stats
private int gesundheit;
private int maxGesundheit;
private int angriff;
private int angriffCharacter;
private int angriffItems;
private int verteidigung;
private int verteidigungCharacter;
private int verteidigungItems;
private int schaden;
private int schadenCharacter;
private int schadenItems;
private int ruestung;
private int ruestungCharacter;
private int ruestungItems;
//Cratfing
private boolean crafting;
private int timeInSec;
private List<Recipe> recipes;
//XPaths
private String xpathName;
private String xpathBericht;
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc=" Region: Constructors ">
public XCharacter() {
recipes = new ArrayList<>();
equipment = new Inventory();
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc=" Region: Getter und Setter ">
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Inventory getEquipment() {
return equipment;
}
public void setEquipment(Inventory equipment) {
this.equipment = equipment;
}
public int getCraftedCount() {
return craftedCount;
}
public void setCraftedCount(int craftedCount) {
this.craftedCount = craftedCount;
}
public int getFightCount() {
return fightCount;
}
public void setFightCount(int fightCount) {
this.fightCount = fightCount;
}
public int getWinCount() {
return winCount;
}
public void setWinCount(int winCount) {
this.winCount = winCount;
}
public int getKillCount() {
return killCount;
}
public void setKillCount(int killCount) {
this.killCount = killCount;
}
public int getGesundheit() {
return gesundheit;
}
public void setGesundheit(int gesundheit) {
this.gesundheit = gesundheit;
}
public int getMaxGesundheit() {
return maxGesundheit;
}
public void setMaxGesundheit(int maxGesundheit) {
this.maxGesundheit = maxGesundheit;
}
public int getAngriff() {
return angriff;
}
public void setAngriff(int angriff) {
this.angriff = angriff;
}
public int getAngriffCharacter() {
return angriffCharacter;
}
public void setAngriffCharacter(int angriffCharacter) {
this.angriffCharacter = angriffCharacter;
}
public int getAngriffItems() {
return angriffItems;
}
public void setAngriffItems(int angriffItems) {
this.angriffItems = angriffItems;
}
public int getVerteidigung() {
return verteidigung;
}
public void setVerteidigung(int verteidigung) {
this.verteidigung = verteidigung;
}
public int getVerteidigungCharacter() {
return verteidigungCharacter;
}
public void setVerteidigungCharacter(int verteidigungCharacter) {
this.verteidigungCharacter = verteidigungCharacter;
}
public int getVerteidigungItems() {
return verteidigungItems;
}
public void setVerteidigungItems(int verteidigungItems) {
this.verteidigungItems = verteidigungItems;
}
public int getSchaden() {
return schaden;
}
public void setSchaden(int schaden) {
this.schaden = schaden;
}
public int getSchadenCharacter() {
return schadenCharacter;
}
public void setSchadenCharacter(int schadenCharacter) {
this.schadenCharacter = schadenCharacter;
}
public int getSchadenItems() {
return schadenItems;
}
public void setSchadenItems(int schadenItems) {
this.schadenItems = schadenItems;
}
public int getRuestung() {
return ruestung;
}
public void setRuestung(int ruestung) {
this.ruestung = ruestung;
}
public int getRuestungCharacter() {
return ruestungCharacter;
}
public void setRuestungCharacter(int ruestungCharacter) {
this.ruestungCharacter = ruestungCharacter;
}
public int getRuestungItems() {
return ruestungItems;
}
public void setRuestungItems(int ruestungItems) {
this.ruestungItems = ruestungItems;
}
public boolean isCrafting() {
return crafting;
}
public void setCrafting(boolean crafting) {
this.crafting = crafting;
}
public int getTimeInSec() {
return timeInSec;
}
public void setTimeInSec(int timeInSec) {
this.timeInSec = timeInSec;
}
public String getXpathName() {
return xpathName;
}
public void setXpathName(String xpathName) {
this.xpathName = xpathName;
}
public String getXpathBericht() {
return xpathBericht;
}
public void setXpathBericht(String xpathBericht) {
this.xpathBericht = xpathBericht;
}
public List<Recipe> getRecipes() {
return recipes;
}
public void setRecipes(List<Recipe> recipes) {
this.recipes = recipes;
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc=" Region: Default Methods ">
@Override
public String toString() {
return "Character{" + "name=" + name + ", equipment=" + equipment + ", craftedCount=" + craftedCount + ", fightCount=" + fightCount + ", winCount=" + winCount + ", killCount=" + killCount + ", gesundheit=" + gesundheit + ", maxGesundheit=" + maxGesundheit + ", angriff=" + angriff + ", angriffCharacter=" + angriffCharacter + ", angriffItems=" + angriffItems + ", verteidigung=" + verteidigung + ", verteidigungCharacter=" + verteidigungCharacter + ", verteidigungItems=" + verteidigungItems + ", schaden=" + schaden + ", schadenCharacter=" + schadenCharacter + ", schadenItems=" + schadenItems + ", ruestung=" + ruestung + ", ruestungCharacter=" + ruestungCharacter + ", ruestungItems=" + ruestungItems + ", crafting=" + crafting + ", timeInSec=" + timeInSec + '}';
}
// </editor-fold>
}