commit 22463f6547143b8b3e8a314b02381f810d0e1fcc Author: Andreas Greiner Date: Fri Feb 2 17:33:39 2024 +0100 Converted to maven project diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9f97022 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +target/ \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..748aa4b --- /dev/null +++ b/pom.xml @@ -0,0 +1,27 @@ + + + 4.0.0 + com.greinet + XCraftBots + 1.0 + jar + + + org.seleniumhq.selenium + selenium-server + 3.141.59 + + + io.github.bonigarcia + webdrivermanager + 5.6.3 + + + + UTF-8 + 17 + 17 + com.greinet.xcraftequipbot.XCraftEquipBot + + XCraftBots + \ No newline at end of file diff --git a/src/main/java/xcastbot/ui/MainFrame.java b/src/main/java/xcastbot/ui/MainFrame.java new file mode 100644 index 0000000..e6ecfeb --- /dev/null +++ b/src/main/java/xcastbot/ui/MainFrame.java @@ -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); + } + + // + 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; + } + +// + + + +} diff --git a/src/main/java/xcastbot/ui/PlantPanel.java b/src/main/java/xcastbot/ui/PlantPanel.java new file mode 100644 index 0000000..c6e1ea2 --- /dev/null +++ b/src/main/java/xcastbot/ui/PlantPanel.java @@ -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 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 isMax = (p) -> {return p.isMax();}; + Predicate 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 isMax = (p) -> {return p.isMax();}; + Predicate 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(); + List webElements = driver.findElements(By. + xpath("//form[@id=\"j_idt117\"]//*[contains(text(), '"+plantType.getBezeichnung()+"')]")); + + + //List 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(); + } + + // + 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(); + } +// + + public void removePlant(Plant toRemove){ + for (Plant plant : plants) { + if(plant.toRealString().equals(toRemove.toRealString())){ + plants.remove(plant); + remove(scrollPane); + Predicate 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 getPlants() { + return plants; + } + + +} diff --git a/src/main/java/xcastbot/ui/PlantProcess.java b/src/main/java/xcastbot/ui/PlantProcess.java new file mode 100644 index 0000000..7dbe157 --- /dev/null +++ b/src/main/java/xcastbot/ui/PlantProcess.java @@ -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(); + } + + } + + + +} diff --git a/src/main/java/xcastbot/ui/TopfPanel.java b/src/main/java/xcastbot/ui/TopfPanel.java new file mode 100644 index 0000000..b32bc83 --- /dev/null +++ b/src/main/java/xcastbot/ui/TopfPanel.java @@ -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); + } + } + } + + + // + 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(); + } + // + +} diff --git a/src/main/java/xcastbot/ui/XCastPlantFarm.java b/src/main/java/xcastbot/ui/XCastPlantFarm.java new file mode 100644 index 0000000..b5ea933 --- /dev/null +++ b/src/main/java/xcastbot/ui/XCastPlantFarm.java @@ -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 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 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 plants = new ArrayList<>(); + int count = 0; + for(PlantType planttype:PlantType.values()){ + System.out.println("Start findElements"); + List 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; + } + +} diff --git a/src/main/java/xcastbot/ui/ZuchtPanel.java b/src/main/java/xcastbot/ui/ZuchtPanel.java new file mode 100644 index 0000000..47a95bb --- /dev/null +++ b/src/main/java/xcastbot/ui/ZuchtPanel.java @@ -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(); + } + + // + 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(); + } + // + + // + public MainFrame getMainFrame() { + return mainFrame; + } + // + + 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"); + } +} diff --git a/src/main/java/xcraftbot/logic/ButtonNavigate.java b/src/main/java/xcraftbot/logic/ButtonNavigate.java new file mode 100644 index 0000000..2692094 --- /dev/null +++ b/src/main/java/xcraftbot/logic/ButtonNavigate.java @@ -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; + } + + +} diff --git a/src/main/java/xcraftbot/logic/Textbox.java b/src/main/java/xcraftbot/logic/Textbox.java new file mode 100644 index 0000000..1de8155 --- /dev/null +++ b/src/main/java/xcraftbot/logic/Textbox.java @@ -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; + } + + + +} diff --git a/src/main/java/xcraftbot/logic/XCraftBot.java b/src/main/java/xcraftbot/logic/XCraftBot.java new file mode 100644 index 0000000..f88469d --- /dev/null +++ b/src/main/java/xcraftbot/logic/XCraftBot.java @@ -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 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 { + 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 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(); + } + + + // + 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; + } +// + +} diff --git a/src/main/java/xcraftbot/ui/SwingUI2.java b/src/main/java/xcraftbot/ui/SwingUI2.java new file mode 100644 index 0000000..4aa0a23 --- /dev/null +++ b/src/main/java/xcraftbot/ui/SwingUI2.java @@ -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 { + + // + private JFrame frame; + private JTabbedPane tabbedPane; + private XCraftBot xbot; + // + + // + 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); + } + +// + + // + 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 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); + } + +// + + // + 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 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; + } + + +// + + // + 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; + } + +// +} diff --git a/src/main/java/xcraftbot/ui/XCastHealthFarm.java b/src/main/java/xcraftbot/ui/XCastHealthFarm.java new file mode 100644 index 0000000..2d8f56d --- /dev/null +++ b/src/main/java/xcraftbot/ui/XCastHealthFarm.java @@ -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 webElements = driver.findElements(By.xpath("//*[contains(text(), '"+text+"')]")); + return webElements.size(); + } +} diff --git a/src/main/java/xcraftbot/ui/XCastOkariFarm.java b/src/main/java/xcraftbot/ui/XCastOkariFarm.java new file mode 100644 index 0000000..7c50c09 --- /dev/null +++ b/src/main/java/xcraftbot/ui/XCastOkariFarm.java @@ -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 plants = loadPlants(driver); + Predicate 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 webElements = driver.findElements(By.xpath("//*[contains(text(), '"+text+"')]")); + return webElements.size(); + } + + public List 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 plants = new ArrayList<>(); + int count = 0; + for(PlantType planttype:PlantType.values()){ + System.out.println("Start findElements"); + List 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; + } + +} diff --git a/src/main/java/xcraftbot/xcraftobjects/Account.java b/src/main/java/xcraftbot/xcraftobjects/Account.java new file mode 100644 index 0000000..524004d --- /dev/null +++ b/src/main/java/xcraftbot/xcraftobjects/Account.java @@ -0,0 +1,64 @@ +package xcraftbot.xcraftobjects; + +import java.util.List; + +public class Account { + +//Attribute + private String name; + private String password; + private List 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 getXcharacters() { + return xcharacters; + } + public void setXcharacters(List 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 + '}'; + } + + + + + + +} diff --git a/src/main/java/xcraftbot/xcraftobjects/CharacterSelectEnum.java b/src/main/java/xcraftbot/xcraftobjects/CharacterSelectEnum.java new file mode 100644 index 0000000..dec61ff --- /dev/null +++ b/src/main/java/xcraftbot/xcraftobjects/CharacterSelectEnum.java @@ -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; + } + + + +} diff --git a/src/main/java/xcraftbot/xcraftobjects/Geldmenge.java b/src/main/java/xcraftbot/xcraftobjects/Geldmenge.java new file mode 100644 index 0000000..ad94e9c --- /dev/null +++ b/src/main/java/xcraftbot/xcraftobjects/Geldmenge.java @@ -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 + '}'; + } + + + +} diff --git a/src/main/java/xcraftbot/xcraftobjects/Inventory.java b/src/main/java/xcraftbot/xcraftobjects/Inventory.java new file mode 100644 index 0000000..8783b03 --- /dev/null +++ b/src/main/java/xcraftbot/xcraftobjects/Inventory.java @@ -0,0 +1,25 @@ +package xcraftbot.xcraftobjects; + +import java.util.ArrayList; +import java.util.List; + +public class Inventory { + + private List items = new ArrayList<>(); + + public Inventory(List items) { + this.items = items; + } + + public Inventory() { + } + + public List getItems() { + return items; + } + + public void setItems(List items) { + this.items = items; + } + +} diff --git a/src/main/java/xcraftbot/xcraftobjects/Item.java b/src/main/java/xcraftbot/xcraftobjects/Item.java new file mode 100644 index 0000000..f56145c --- /dev/null +++ b/src/main/java/xcraftbot/xcraftobjects/Item.java @@ -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 + '}'; + } + + + +} diff --git a/src/main/java/xcraftbot/xcraftobjects/Material.java b/src/main/java/xcraftbot/xcraftobjects/Material.java new file mode 100644 index 0000000..0ad1ed1 --- /dev/null +++ b/src/main/java/xcraftbot/xcraftobjects/Material.java @@ -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 + '}'; + } + +} diff --git a/src/main/java/xcraftbot/xcraftobjects/MaterialCraftingEnum.java b/src/main/java/xcraftbot/xcraftobjects/MaterialCraftingEnum.java new file mode 100644 index 0000000..af79f94 --- /dev/null +++ b/src/main/java/xcraftbot/xcraftobjects/MaterialCraftingEnum.java @@ -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; + } + + + + + +} diff --git a/src/main/java/xcraftbot/xcraftobjects/MaterialInventory.java b/src/main/java/xcraftbot/xcraftobjects/MaterialInventory.java new file mode 100644 index 0000000..5dda9eb --- /dev/null +++ b/src/main/java/xcraftbot/xcraftobjects/MaterialInventory.java @@ -0,0 +1,54 @@ +package xcraftbot.xcraftobjects; + +import java.util.ArrayList; +import java.util.List; + +public class MaterialInventory { + +//Attribute + private List holz; + private List metall; + private List leder; + private List pelz; + +//Konstruktor + public MaterialInventory() { + holz = new ArrayList<>(); + metall = new ArrayList<>(); + leder = new ArrayList<>(); + pelz = new ArrayList<>(); + } + +//Getter und Setter + public List getHolz() { + return holz; + } + public void setHolz(List holz) { + this.holz = holz; + } + public List getMetall() { + return metall; + } + public void setMetall(List metall) { + this.metall = metall; + } + public List getLeder() { + return leder; + } + public void setLeder(List leder) { + this.leder = leder; + } + public List getPelz() { + return pelz; + } + public void setPelz(List pelz) { + this.pelz = pelz; + } + + @Override + public String toString() { + return "MaterialInventory{" + "holz=" + holz + ", metall=" + metall + ", leder=" + leder + ", pelz=" + pelz + '}'; + } + + +} diff --git a/src/main/java/xcraftbot/xcraftobjects/Plant.java b/src/main/java/xcraftbot/xcraftobjects/Plant.java new file mode 100644 index 0000000..a33969b --- /dev/null +++ b/src/main/java/xcraftbot/xcraftobjects/Plant.java @@ -0,0 +1,88 @@ +package xcraftbot.xcraftobjects; + +public class Plant implements Comparable{ + + 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; + } + +} diff --git a/src/main/java/xcraftbot/xcraftobjects/PlantType.java b/src/main/java/xcraftbot/xcraftobjects/PlantType.java new file mode 100644 index 0000000..aa6c9e4 --- /dev/null +++ b/src/main/java/xcraftbot/xcraftobjects/PlantType.java @@ -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; + } + + + +} diff --git a/src/main/java/xcraftbot/xcraftobjects/Recipe.java b/src/main/java/xcraftbot/xcraftobjects/Recipe.java new file mode 100644 index 0000000..f332525 --- /dev/null +++ b/src/main/java/xcraftbot/xcraftobjects/Recipe.java @@ -0,0 +1,60 @@ +package xcraftbot.xcraftobjects; + +public class Recipe { + + // + private String name; + private String xpath; + private int timeInMin; + +// + + // + public Recipe(String name, String xpath, int timeInMin) { + this.name = name; + this.xpath = xpath; + this.timeInMin = timeInMin; + } + + public Recipe() { + } + +// + + // + + 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; + } + +// + + // + @Override + public String toString() { + return "Recipe{" + "name=" + name + ", xpath=" + xpath + ", timeInMin=" + timeInMin + '}'; + } + +// + +} diff --git a/src/main/java/xcraftbot/xcraftobjects/XCharacter.java b/src/main/java/xcraftbot/xcraftobjects/XCharacter.java new file mode 100644 index 0000000..cc91f57 --- /dev/null +++ b/src/main/java/xcraftbot/xcraftobjects/XCharacter.java @@ -0,0 +1,263 @@ +package xcraftbot.xcraftobjects; + +import java.util.ArrayList; +import java.util.List; + +public class XCharacter { + + + // + 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 recipes; + + //XPaths + private String xpathName; + private String xpathBericht; + +// + + // + public XCharacter() { + recipes = new ArrayList<>(); + equipment = new Inventory(); + } + +// + + // + 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 getRecipes() { + return recipes; + } + + public void setRecipes(List recipes) { + this.recipes = recipes; + } + +// + + // + @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 + '}'; + } + +// + +}