Minecraft MCP IndexOutOfBoundsException?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Du musst

mc.thePlayer.openContainer

oder

mc.thePlayer.inventoryContainer

benutzen.

Google sonst mal nach chest minecraft slot bildern

private void windowClick(int clicked, int to, ClickMode mode) {
  mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, clicked, to, mode.getType(), mc.thePlayer);
  mc.playerController.updateController();
}

private enum ClickMode {
        
    BASIC_CLICK(0), SHIFT_CLICK(1), HOTBAR(2), PICK_BLOCK(3), DROP(4), DOUBLE_CLICK(6);
          
    private int type;
          
    ClickMode(int type) {
        this.type = type;
    }
          
    public int getType() {
        return type;
    }
}

thx

0
@Didi1150801

Oder wie soll ich sonst kleine Delays zwischen die windowClicks packen?

0
@Didi1150801
public class TimeHelper {

    private long lastMS;
    
    public TimeHelper() {
        this.lastMS = getCurrentMS();
    }

    public long getCurrentMS() {
        return System.nanoTime() / 1000000L;
    }

    public long getLastMS() {
        return this.lastMS;
    }

    public boolean hasReached(long milliseconds) {
        return getCurrentMS() - this.lastMS >= milliseconds;
    }

    public void reset() {
        this.lastMS = getCurrentMS();
    }

    public void setLastMS(long currentMS) {
        this.lastMS = currentMS;
    }

    public long getTimeSinceReset() {
        return getCurrentMS() - this.lastMS;
    }

    public void setLastMS() {
        this.lastMS = System.currentTimeMillis();
    }

    public boolean isDelayComplete(long delay) {
        if (System.currentTimeMillis() - this.lastMS >= delay) {
            return true;
        }
        return false;
    }

    public int convertToMS(int perSecond) {
        return 1000 / perSecond;
    }

    public boolean delay(float milliSec) {
        return (float) (getCurrentMS() - this.lastMS) >= milliSec;
    }

    public long getDifference() {
        return getCurrentMS() - this.lastMS;
    }

    public void setDifference(long difference) {
        this.lastMS = (getCurrentMS() - difference);
    }
}
0
@Didi1150801

Ich glaube ich bin wirklich zu dumm.

Wie soll ich das denn nun verwenden ohne for-Schleife

Warte. . .

Mit delay, oder?

0
@Didi1150801

so z.B.

public class ChestStealer {

  private TimeHelper timeHelper = new TimeHelper();

  public void onTick() {
     if(timeHelper.hasReached(1000L) {
       System.out.println("Ich werde jede Sekunde ausgegeben.");
       timeHelper.reset();
     }
  }
}
0
@colum123

Colum123, weißt du wie ich mit windowclick etwas ins Inventar stelle,

Zum Beispiel : Wenn ich pick_block ausgeführt habe, und das Item an der Maus hängt, wie kann ich den Block von der Maus ins Inventar bekommen?

0
@Didi1150801

probiers einfach aus. ansonsten schau, was für ein clickevent du benutzt, wenn du es ins inventar tust

0
@colum123

Und kann ich windowclicks nacheinander ausführen, wenn ich sage,

if(time.hasReached(1000L){

Blablalba;

}

if(time.hasReached(2000L){

blabla;

time.reset();

}

Kann ich dann zwei Operationen nacheinander ausführen?

0
@Didi1150801
if(time.hasReached(1000L){

Blablalba;

}

if(time.hasReached(2000L){

blabla;

time.reset();

}

ja so kann man das machen

0
@Didi1150801

Aber ich habe da in einer Loop, wie mache ich es, dass bei die Operationen jeweils nur einmal ausgeführt werden?

0
@colum123

ok:

if (time.hasReached(500L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(1000L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(1500L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(2000L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(2500L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(3000L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(3500L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(4000L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(4500L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(5000L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(5500L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(6000L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(6500L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(7000L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(7500L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(8000L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(8500L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(9000L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(9500L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(10000L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(10500L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(11000L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(11500L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(12000L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(12500L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(13000L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(13500L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(14000L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(14500L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

if (time.hasReached(15000L)) {

mc.playerController.windowClick(mc.thePlayer.openContainer.windowId, 54, 0, 0, mc.thePlayer);

}

0
@Didi1150801

aber so ungefähr sieht es aus, abgesehen davon, dass die Slot Zahlen sich mit jeden 500L um 1 steigern

0
@colum123

nur mal als Frage, wie soll ich das in eine for Loop packen, wenn alle Delays ich unterscheiden?

0
@Didi1150801
Aber ich habe da in einer Loop

ich dachte du hast das schon in ner loop

0
@Didi1150801

Ach ja, und ich habe die Methode mittlerweile in einen Nebenthread gepackt. der Nebenthread befindet sich in einer Loop , deswegen wird er dauerhaft gestartet. Wie lasse ich ihn nur einmal starten?

0

Was möchtest Du wissen?