+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 17
  1. #1
    Team Hund Avatar von Gnoccy
    Registriert seit
    25.12.2010
    Beiträge
    457
    Minecraft
    Gnoccy

    Spieler in Dimension verletzen

    Ich habe zur Zeit ein kleines Problem. Und zwar will ich, dass ein Spieler in einer von mir erstellten Dimension Schaden bekommt, solange er sich nicht innerhalb eines bestimmten Blocks befindet.
    Wie man abfragt in welcher Dimension sich ein Spieler befindet weiß ich. Wie man einen Spieler verletzt weiß ich auch. Das Problem ist nur, dass ich das ganze ja auch irgendwie aufrufen lassen muss.
    Meine erste Idee war die gesamte Dimension mit von mir erstellten Blöcken zu fluten, die den Spieler verletzen, wenn er sich innerhalb eines solchen Blocks befindet. Das führt aber zu enormen Frame einbrüchen.
    Gibt es noch eine andere möglichkeit eine Methode alle paar Sekunden für alle Spieler in einer Dimension aufzurufen?

  2. #2
    Mit Forge nen ServerTickHanlder erstellen.
    Achtung Pseudocode der besonderen Art :

    Code:
    onTick(){
    
    for(server.getPlayerEntities()){
       if(player.dimension == myDimension.id){
          if(world.getBlock(player.position).id != myBlock.id){
              player.hurt();
          }
       }
    }
    
    }

  3. #3
    Team Hund Avatar von Gnoccy
    Registriert seit
    25.12.2010
    Beiträge
    457
    Minecraft
    Gnoccy
    Danke erstmal für den Tipp, aber ich bekomme es irgendwie nicht hin.
    Ich habe mir eine Klasse erstellt, die das Interface ITickHandler implementiert. Dann habe ich in der Hauptklasse meiner Mod ein Objekt dieser Klasse erstellt und es mit
    Code:
    TickRegistry.registerTickHandler(serverTickHandler, Side.SERVER);
    registriert.

    Aber die Mehtode
    Code:
    public void tickStart(EnumSet<TickType> type, Object... tickData) {}
    In meinem TickHandler wird nicht aufgerufen.

  4. #4
    Team Hund
    Registriert seit
    12.11.2010
    Beiträge
    3.619
    Minecraft
    Marlor
    Ist es nicht am einfachsten eine Vergiftung zu benutzen?
    Du wirst in der Dimension ständig vergiftet und in der nähe der bestimmten blöcke wird das Gift gelöscht

  5. #5
    Team Hund Avatar von Gnoccy
    Registriert seit
    25.12.2010
    Beiträge
    457
    Minecraft
    Gnoccy
    @Marlor
    Das wäre sicherlich eine Möglichkeit, würde aber thematisch nicht zu meiner Mod passen. Außerdem hätte ich dann doch das selbe Problem. Ob ich den Spieler nun vergifte oder direkt verletze spielt doch keine Rolle.

  6. #6
    Team Hund
    Registriert seit
    12.11.2010
    Beiträge
    3.619
    Minecraft
    Marlor
    Thema ist ja wohl egal ob der buff jetzt vergiftung verstrahlung oder luftmangel heißt
    Dann gibst du dem spieler wenigstens feedback.
    Sonst kommt der schaden ja von irgentwoher ohne das der Spieler weis was es damit aufsich hat.

    Ich glaub auch das es einfacher umzusetzen ist da das Buffsystem ja schon implementiert ist

  7. #7
    Team Hund Avatar von Gnoccy
    Registriert seit
    25.12.2010
    Beiträge
    457
    Minecraft
    Gnoccy
    Mein Problem ist ja nicht, dass ich nicht weiß, wie ich den Spieler verletzen soll, sondern wie ich die Methode aufrufe, die den Spieler verletzt. Ob diese Methode den Spieler verletzt, vergiftet oder verbrennt ist ja letztendlich egal. Von daher sehe ich nicht, wie mir das mit meinem Problem weiterhelfen soll.
    Außerdem habe ich es doch schon fast hinbekommen. Aus irgendeinem Grund wird mein TickHandler nur nicht richtig erkannt.

  8. #8
    Team Hund
    Registriert seit
    12.11.2010
    Beiträge
    3.619
    Minecraft
    Marlor
    Und da du nicht wusstest wie man die Methode aufrufst hab ich dir den Tip mit dem Buff gegeben den kannst du überall aufrufen

  9. #9
    Team Hund Avatar von Gnoccy
    Registriert seit
    25.12.2010
    Beiträge
    457
    Minecraft
    Gnoccy
    Ich glaube wir reden immer noch aneinander vorbei. Den Spieler kann ich auch überall verletzen. Einfach mit
    Code:
    for(int i = 0; i < playerArray.length; i++){
    			
    	if(playerArray[i].dimension == 22){
    		playerArray[i].setEntityHealth(playerArray[i].getHealth() - 1);
    	}
    }
    Die Frage ist nur, wie sorge ich dafür, dass dieser Codeschnipsel auch alle paar Sekunden aufgerufen wird?

  10. #10
    @Gnoccy

    Da scheint nur was am registrieren des Tickhandlers falschgelaufen zu sein, du darfst den Tickhandler nicht im CommonProxy registrieren sondern in der Modklasse an sich, gib mal vollständigen Code, der Tickhandlerklasse und der ModKlasse.

    @Marlor

    Dann hätte man immernoch das Problem sekündlcih zu checken ob sich der Spieler innerhalb des beasagten Blocks oder überhaupt in der Dimension befindet.

+ Antworten