Converted to maven project
This commit is contained in:
commit
22463f6547
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
target/
|
27
pom.xml
Normal file
27
pom.xml
Normal 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>
|
71
src/main/java/xcastbot/ui/MainFrame.java
Normal file
71
src/main/java/xcastbot/ui/MainFrame.java
Normal 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>
|
||||
|
||||
|
||||
|
||||
}
|
199
src/main/java/xcastbot/ui/PlantPanel.java
Normal file
199
src/main/java/xcastbot/ui/PlantPanel.java
Normal 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;
|
||||
}
|
||||
|
||||
|
||||
}
|
35
src/main/java/xcastbot/ui/PlantProcess.java
Normal file
35
src/main/java/xcastbot/ui/PlantProcess.java
Normal 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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
255
src/main/java/xcastbot/ui/TopfPanel.java
Normal file
255
src/main/java/xcastbot/ui/TopfPanel.java
Normal 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>
|
||||
|
||||
}
|
161
src/main/java/xcastbot/ui/XCastPlantFarm.java
Normal file
161
src/main/java/xcastbot/ui/XCastPlantFarm.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
98
src/main/java/xcastbot/ui/ZuchtPanel.java
Normal file
98
src/main/java/xcastbot/ui/ZuchtPanel.java
Normal 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");
|
||||
}
|
||||
}
|
21
src/main/java/xcraftbot/logic/ButtonNavigate.java
Normal file
21
src/main/java/xcraftbot/logic/ButtonNavigate.java
Normal 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;
|
||||
}
|
||||
|
||||
|
||||
}
|
19
src/main/java/xcraftbot/logic/Textbox.java
Normal file
19
src/main/java/xcraftbot/logic/Textbox.java
Normal 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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
264
src/main/java/xcraftbot/logic/XCraftBot.java
Normal file
264
src/main/java/xcraftbot/logic/XCraftBot.java
Normal 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;
|
||||
}
|
||||
}
|
321
src/main/java/xcraftbot/ui/MarketplaceUI.java
Normal file
321
src/main/java/xcraftbot/ui/MarketplaceUI.java
Normal 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>
|
||||
|
||||
}
|
553
src/main/java/xcraftbot/ui/SwingUI2.java
Normal file
553
src/main/java/xcraftbot/ui/SwingUI2.java
Normal 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>
|
||||
}
|
160
src/main/java/xcraftbot/ui/XCastHealthFarm.java
Normal file
160
src/main/java/xcraftbot/ui/XCastHealthFarm.java
Normal 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();
|
||||
}
|
||||
}
|
208
src/main/java/xcraftbot/ui/XCastOkariFarm.java
Normal file
208
src/main/java/xcraftbot/ui/XCastOkariFarm.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
64
src/main/java/xcraftbot/xcraftobjects/Account.java
Normal file
64
src/main/java/xcraftbot/xcraftobjects/Account.java
Normal 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 + '}';
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
82
src/main/java/xcraftbot/xcraftobjects/Geldmenge.java
Normal file
82
src/main/java/xcraftbot/xcraftobjects/Geldmenge.java
Normal 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 + '}';
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
25
src/main/java/xcraftbot/xcraftobjects/Inventory.java
Normal file
25
src/main/java/xcraftbot/xcraftobjects/Inventory.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
99
src/main/java/xcraftbot/xcraftobjects/Item.java
Normal file
99
src/main/java/xcraftbot/xcraftobjects/Item.java
Normal 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 + '}';
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
48
src/main/java/xcraftbot/xcraftobjects/Material.java
Normal file
48
src/main/java/xcraftbot/xcraftobjects/Material.java
Normal 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 + '}';
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
54
src/main/java/xcraftbot/xcraftobjects/MaterialInventory.java
Normal file
54
src/main/java/xcraftbot/xcraftobjects/MaterialInventory.java
Normal 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 + '}';
|
||||
}
|
||||
|
||||
|
||||
}
|
88
src/main/java/xcraftbot/xcraftobjects/Plant.java
Normal file
88
src/main/java/xcraftbot/xcraftobjects/Plant.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
23
src/main/java/xcraftbot/xcraftobjects/PlantType.java
Normal file
23
src/main/java/xcraftbot/xcraftobjects/PlantType.java
Normal 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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
60
src/main/java/xcraftbot/xcraftobjects/Recipe.java
Normal file
60
src/main/java/xcraftbot/xcraftobjects/Recipe.java
Normal 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>
|
||||
|
||||
}
|
263
src/main/java/xcraftbot/xcraftobjects/XCharacter.java
Normal file
263
src/main/java/xcraftbot/xcraftobjects/XCharacter.java
Normal 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>
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user