You are not logged in.

  • Login
Bitte besucht unser neues Forum unter https://forum.nitrado.net | Please visit our new Forum at https://forum.nitrado.net

Dear visitor, welcome to Nitrado.net Prepaid Gameserver Community-Support - Archiv. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

frankfurt100

User / Kunde

  • "frankfurt100" started this thread

Posts: 39

  • Send private message

1

Sunday, May 27th 2018, 7:28pm

Bedwars Bettlocationabfrage | Negative Koordinaten

Hallo,

ich programmiere gerade ein Bedwars und bin da auch schon relativ weit. Das, woran ich gerade hänge ist abzufragen ob das Bett des jeweiligen Teams abgebaut wurde. Hierbei ist es so, dass es bei Team Blau funktioniert, nur bei Team Rot nicht.
Koordinaten von Team Blau:
x: 95
y: 70
z: 1
Koordinaten von Team Rot:
x: -94
y: 70
z: -1

Jetzt zu meinem Code:
Hier die Abfrage im BlockBreakEvent:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
							Block b = e.getBlock();
							if(b.getType() == Material.BED_BLOCK) {
								int x = (int) b.getLocation().getX();
								World w = b.getLocation().getWorld();
								int y = (int) b.getLocation().getY();
								int z = (int) b.getLocation().getZ();
								Location loc = new Location(w, x, y, z);
								World redworldunten = Bukkit.getWorld(Main.instance.bedscfg.getString("Betten.red.unten" + "." + Main.instance.playedMap + ".world"));
								int xredunten = Main.instance.bedscfg.getInt("Betten.red.unten" + "." + Main.instance.playedMap + ".x");
								int yredunten = Main.instance.bedscfg.getInt("Betten.red.unten" + "." + Main.instance.playedMap + ".y");
								int zredunten = Main.instance.bedscfg.getInt("Betten.red.unten" + "." + Main.instance.playedMap + ".z");
								Location loc_red_unten = new Location(redworldunten, xredunten, yredunten, zredunten);
								World redworldoben = Bukkit.getWorld(Main.instance.bedscfg.getString("Betten.red.oben" + "." + Main.instance.playedMap + ".world"));
								int xredoben = Main.instance.bedscfg.getInt("Betten.red.oben" + "." + Main.instance.playedMap + ".x");
								int yredoben = Main.instance.bedscfg.getInt("Betten.red.oben" + "." + Main.instance.playedMap + ".y");
								int zredoben = Main.instance.bedscfg.getInt("Betten.red.oben" + "." + Main.instance.playedMap + ".z");
								Location loc_red_oben = new Location(redworldoben, xredoben, yredoben, zredoben);
								World blueworldunten = Bukkit.getWorld(Main.instance.bedscfg.getString("Betten.blue.unten" + "." + Main.instance.playedMap + ".world"));
								int xblueunten = Main.instance.bedscfg.getInt("Betten.blue.unten" + "." + Main.instance.playedMap + ".x");
								int yblueunten = Main.instance.bedscfg.getInt("Betten.blue.unten" + "." + Main.instance.playedMap + ".y");
								int zblueunten = Main.instance.bedscfg.getInt("Betten.blue.unten" + "." + Main.instance.playedMap + ".z");
								Location loc_blue_unten = new Location(blueworldunten, xblueunten, yblueunten, zblueunten);
								World blueworldoben = Bukkit.getWorld(Main.instance.bedscfg.getString("Betten.blue.oben" + "." + Main.instance.playedMap + ".world"));
								int xblueoben = Main.instance.bedscfg.getInt("Betten.blue.oben" + "." + Main.instance.playedMap + ".x");
								int yblueoben = Main.instance.bedscfg.getInt("Betten.blue.oben" + "." + Main.instance.playedMap + ".y");
								int zblueoben = Main.instance.bedscfg.getInt("Betten.blue.oben" + "." + Main.instance.playedMap + ".z");
								Location loc_blue_oben = new Location(blueworldoben, xblueoben, yblueoben, zblueoben);
								if(loc_blue_unten.equals(loc) | loc_blue_oben.equals(loc)) {
									p.sendMessage("Blaues Bett");
								} else {
	 								if(loc_red_unten.equals(loc) | loc_red_oben.equals(loc)) {
	 									p.sendMessage("Rotes Bett");
									}
								}

Ich habe es auch schonmal mit double getestet, allerdings funktioniert es da gar nicht. Ich kann es mir eigentlich nur so erklären, dass ihm die negativen Zahlen nicht gefallen.
Hoffe ihr könnt mir helfen.

EDIT: Fehler gibt es btw. keine.

LG

frankfurt100

This post has been edited 2 times, last edit by "frankfurt100" (May 27th 2018, 11:18pm)


Ceddy_14

User / Kunde

  • "Ceddy_14" is male

Posts: 277

Occupation: Schüler und Projektleiter

Thanks: 15

  • Send private message

2

Sunday, May 27th 2018, 9:40pm

Versuch's mal mit einem byte, short oder long :)
- Projektleiter des CraftGigant-Netzwerks -
:arrow: CraftGigant.de (Version: 1.13.2) [Derzeit in Überarbeitung]
:arrow: twitter.com/craftgigant

This post has been edited 1 times, last edit by "Ceddy_14" (May 27th 2018, 9:45pm)


frankfurt100

User / Kunde

  • "frankfurt100" started this thread

Posts: 39

  • Send private message

3

Sunday, May 27th 2018, 10:21pm

Nein, leider funktioniert es immernoch nur bei dem Team wo die Koordinaten im Plusbereich sind. Ich habe schon getestet, dass beim anderen Team sich das Bett auch im Plusbereich befindet. Da klappt es einwandfrei.
Hier mein geänderter Code:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
								byte x = (byte) b.getLocation().getX();
								World w = b.getLocation().getWorld();
								byte y = (byte) b.getLocation().getY();
								byte z = (byte) b.getLocation().getZ();
								Location loc = new Location(w, x, y, z);
								World redworldunten = Bukkit.getWorld(Main.instance.bedscfg.getString("Betten.red.unten" + "." + Main.instance.playedMap + ".world"));
								byte xredunten = (byte) Main.instance.bedscfg.getInt("Betten.red.unten" + "." + Main.instance.playedMap + ".x");
								byte yredunten = (byte) Main.instance.bedscfg.getInt("Betten.red.unten" + "." + Main.instance.playedMap + ".y");
								byte zredunten = (byte) Main.instance.bedscfg.getInt("Betten.red.unten" + "." + Main.instance.playedMap + ".z");
								Location loc_red_unten = new Location(redworldunten, xredunten, yredunten, zredunten);
								World redworldoben = Bukkit.getWorld(Main.instance.bedscfg.getString("Betten.red.oben" + "." + Main.instance.playedMap + ".world"));
								byte xredoben = (byte) Main.instance.bedscfg.getInt("Betten.red.oben" + "." + Main.instance.playedMap + ".x");
								byte yredoben = (byte) Main.instance.bedscfg.getInt("Betten.red.oben" + "." + Main.instance.playedMap + ".y");
								byte zredoben = (byte) Main.instance.bedscfg.getInt("Betten.red.oben" + "." + Main.instance.playedMap + ".z");
								Location loc_red_oben = new Location(redworldoben, xredoben, yredoben, zredoben);
								World blueworldunten = Bukkit.getWorld(Main.instance.bedscfg.getString("Betten.blue.unten" + "." + Main.instance.playedMap + ".world"));
								byte xblueunten = (byte) Main.instance.bedscfg.getInt("Betten.blue.unten" + "." + Main.instance.playedMap + ".x");
								byte yblueunten = (byte) Main.instance.bedscfg.getInt("Betten.blue.unten" + "." + Main.instance.playedMap + ".y");
								byte zblueunten = (byte) Main.instance.bedscfg.getInt("Betten.blue.unten" + "." + Main.instance.playedMap + ".z");
								Location loc_blue_unten = new Location(blueworldunten, xblueunten, yblueunten, zblueunten);
								World blueworldoben = Bukkit.getWorld(Main.instance.bedscfg.getString("Betten.blue.oben" + "." + Main.instance.playedMap + ".world"));
								byte xblueoben = (byte) Main.instance.bedscfg.getInt("Betten.blue.oben" + "." + Main.instance.playedMap + ".x");
								byte yblueoben = (byte) Main.instance.bedscfg.getInt("Betten.blue.oben" + "." + Main.instance.playedMap + ".y");
								byte zblueoben = (byte) Main.instance.bedscfg.getInt("Betten.blue.oben" + "." + Main.instance.playedMap + ".z");
								Location loc_blue_oben = new Location(blueworldoben, xblueoben, yblueoben, zblueoben);

Wie du siehst habe es jetzt mit bytes gemacht. Leider funktioniert es immernoch nicht. (Ich habe es auch mit long, short probiert.)

LG

This post has been edited 1 times, last edit by "frankfurt100" (May 27th 2018, 10:30pm)


xtrumb

User / Kunde

  • "xtrumb" is male

Posts: 2,295

Location: hier

Occupation: Fachinformatiker für Systemintegration

Thanks: 16

  • Send private message

4

Monday, May 28th 2018, 6:58am

Java source code

1
2
3
4
int x = (int) b.getLocation().getX();
World w = b.getLocation().getWorld();
int y = (int) b.getLocation().getY();
int z = (int) b.getLocation().getZ();


Versuch hier mal getblockX/Y/Z statt es zum integer zu casten.

Außerdem nimm am besten "||" bei deiner Abfrage und nicht "|"
Mit freundlichen Grüßen
TrueMB

Dienstleistungs Service
Unser Csgo Team

frankfurt100

User / Kunde

  • "frankfurt100" started this thread

Posts: 39

  • Send private message

5

Monday, May 28th 2018, 11:58am

Nein, leider funktioniert es immernoch nur bei dem blauen Team :(
Hier der geänderte Code:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
							Block b = e.getBlock();
							if(b.getType() == Material.BED_BLOCK) {
								int x = b.getX();
								World w = b.getWorld();
								int y = b.getY();
								int z = b.getZ();
								Location loc = new Location(w, x, y, z);
								World redworldunten = Bukkit.getWorld(Main.instance.bedscfg.getString("Betten.red.unten" + "." + Main.instance.playedMap + ".world"));
								int xredunten = Main.instance.bedscfg.getInt("Betten.red.unten" + "." + Main.instance.playedMap + ".x");
								int yredunten = Main.instance.bedscfg.getInt("Betten.red.unten" + "." + Main.instance.playedMap + ".y");
								int zredunten = Main.instance.bedscfg.getInt("Betten.red.unten" + "." + Main.instance.playedMap + ".z");
								Location loc_red_unten = new Location(redworldunten, xredunten, yredunten, zredunten);
								World redworldoben = Bukkit.getWorld(Main.instance.bedscfg.getString("Betten.red.oben" + "." + Main.instance.playedMap + ".world"));
								int xredoben = Main.instance.bedscfg.getInt("Betten.red.oben" + "." + Main.instance.playedMap + ".x");
								int yredoben = Main.instance.bedscfg.getInt("Betten.red.oben" + "." + Main.instance.playedMap + ".y");
								int zredoben = Main.instance.bedscfg.getInt("Betten.red.oben" + "." + Main.instance.playedMap + ".z");
								Location loc_red_oben = new Location(redworldoben, xredoben, yredoben, zredoben);
								World blueworldunten = Bukkit.getWorld(Main.instance.bedscfg.getString("Betten.blue.unten" + "." + Main.instance.playedMap + ".world"));
								int xblueunten = Main.instance.bedscfg.getInt("Betten.blue.unten" + "." + Main.instance.playedMap + ".x");
								int yblueunten = Main.instance.bedscfg.getInt("Betten.blue.unten" + "." + Main.instance.playedMap + ".y");
								int zblueunten = Main.instance.bedscfg.getInt("Betten.blue.unten" + "." + Main.instance.playedMap + ".z");
								Location loc_blue_unten = new Location(blueworldunten, xblueunten, yblueunten, zblueunten);
								World blueworldoben = Bukkit.getWorld(Main.instance.bedscfg.getString("Betten.blue.oben" + "." + Main.instance.playedMap + ".world"));
								int xblueoben = Main.instance.bedscfg.getInt("Betten.blue.oben" + "." + Main.instance.playedMap + ".x");
								int yblueoben = Main.instance.bedscfg.getInt("Betten.blue.oben" + "." + Main.instance.playedMap + ".y");
								int zblueoben = Main.instance.bedscfg.getInt("Betten.blue.oben" + "." + Main.instance.playedMap + ".z");
								Location loc_blue_oben = new Location(blueworldoben, xblueoben, yblueoben, zblueoben);
								if(loc_blue_unten.equals(loc) || loc_blue_oben.equals(loc)) {
									p.sendMessage("Blaues Bett");
								} else {
	 								if(loc_red_unten.equals(loc) || loc_red_oben.equals(loc)) {
	 									p.sendMessage("Rotes Bett");
									}
								}

Fehler gibt es nach wie vor keine.
EDIT: Vielleicht noch die Config:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Betten:
  red:
    unten:
      SuperMarioBW:
        world: SuperMarioBW
        x: -94
        y: 70
        z: 0
    oben:
      SuperMarioBW:
        world: SuperMarioBW
        x: -94
        y: 70
        z: -1
  blue:
    unten:
      SuperMarioBW:
        world: SuperMarioBW
        x: 95
        y: 70
        z: 1
    oben:
      SuperMarioBW:
        world: SuperMarioBW
        x: 95
        y: 70
        z: 2

LG

frankfurt100

xtrumb

User / Kunde

  • "xtrumb" is male

Posts: 2,295

Location: hier

Occupation: Fachinformatiker für Systemintegration

Thanks: 16

  • Send private message

6

Monday, May 28th 2018, 3:07pm

um das Gesuche mal zu verkürzen, gebe dir mal die Location aus
Mit freundlichen Grüßen
TrueMB

Dienstleistungs Service
Unser Csgo Team

frankfurt100

User / Kunde

  • "frankfurt100" started this thread

Posts: 39

  • Send private message

7

Monday, May 28th 2018, 3:15pm

Ah ich glaube ich habe es gefunden.
Hier habe ich mir die Location ausgegeben:

Source code

1
2
3
4
5
6
7
								if(loc_blue_unten.equals(loc) || loc_blue_oben.equals(loc)) {
									p.sendMessage("Blaues Bett");
								} else {
									System.out.println(loc);
									System.out.println(loc_red_unten);
									System.out.println(loc_red_oben);
								}

Heraus bekomme ich die Locations:

Source code

1
2
3
[15:11:14 INFO]: Location{world=CraftWorld{name=SuperMarioBW},x=-95.0,y=70.0,z=-1.0,pitch=0.0,yaw=0.0}
[15:11:14 INFO]: Location{world=CraftWorld{name=SuperMarioBW},x=-94.0,y=70.0,z=0.0,pitch=0.0,yaw=0.0}
[15:11:14 INFO]: Location{world=CraftWorld{name=SuperMarioBW},x=-94.0,y=70.0,z=-1.0,pitch=0.0,yaw=0.0}

Wie man siehst rundet er bei meinen Locations von 94,irgendwas auf 94 und bei der Location vom abgebauten Block rundet er auf 95. Daran wird es liegen...
Hast du vielleicht eine Idee bei der ich das ganze hier nicht immer machen muss? Also ich meine dass ich jedes Mal schauen muss ob er jetzt aufgerundet hat und das bei beiden Locations oder ob er bei der einen Location auf und der anderen abgerundet hat?
Hoffe du verstehst was ich meine :D

LG


Ich muss mich korrigieren. Also es ist ja generell so, dass ich im Spiel mit einem Befehl die Location in die Config speicher. Das Ganze als int. Allerdings scheint er dabei nicht mit den Kommastellen auf und oder abzurunden. Er nimmt einfach die Ganze Zahl und trägt sie in die Config ein.Bedeutet, dass ich jedes Mal einen Block nach vorne, nach links oder rechtes gehen müsste, damit die Location vom e.getBlock und der Location in der Config übereinstimmen. Hättest du da vielleicht eine Idee?

LG

This post has been edited 1 times, last edit by "frankfurt100" (May 28th 2018, 3:20pm)


xtrumb

User / Kunde

  • "xtrumb" is male

Posts: 2,295

Location: hier

Occupation: Fachinformatiker für Systemintegration

Thanks: 16

  • Send private message

8

Monday, May 28th 2018, 3:35pm

Das dachte ich mir schon, deswegen ja b.getBlockX/Y/Z
Mit freundlichen Grüßen
TrueMB

Dienstleistungs Service
Unser Csgo Team

frankfurt100

User / Kunde

  • "frankfurt100" started this thread

Posts: 39

  • Send private message

9

Monday, May 28th 2018, 3:50pm

Ja nur es ist so:
Ingame sind die Koordinaten die ich speichere:
(Bett unten)
x: -94,570
y: 70,56250
z:-0.608

(Bett oben)
x:-94,567
y:70,56250
z:-1,510

In der Config sind es dann:
(Bett unten)
x: -94
y: 70
z: 0

(Bett oben)
x: -94
y: 70
z: -1

Allerdings will er von mir bei x -95 und bei z einmal -1 und einmal -2. Ich kann es mir nur so erklären, dass er von den Koordinaten Ingame die ganzen Zahlen nimmt und die Nachkommastellen ignoriert. Hast du eine Idee wie ich das lösen kann?
Meine Idee wäre es über Math.round() zu machen. Also praktisch, dass ich die Koordinaten als double abspeichere und dann über Math.round() sie zur nächsten ganzen Zahl runde.

Ja es geht tatsächlich mit Math.round(). Allerdings darf man nur die x und z Koordinate runden lassen. Die y-Koordinate einfach normal als int speichern. Ein kleiner Nachteil ist noch vorhanden, und zwar muss man extrem daraus achten, dass man in der Mitte des unteren oder oberen Teils des Bettes steht. Sonst rundet er falsch. Aber da überlege ich mir noch was. ;) Danke auf jeden Fall @xtrumb

LG

This post has been edited 2 times, last edit by "frankfurt100" (May 28th 2018, 4:46pm)


Stuppsman

User / Kunde

Posts: 2,766

Thanks: 25

  • Send private message

10

Tuesday, May 29th 2018, 4:20am

Deswegen ja getBlockX und nicht getX - dann musst du mit Math.round() überhaupt nicht mehr arbeiten. Ich denk, das meinte @xtrump
Nein, ich hab kein Skype.. bei Interesse an einer privaten Unterrichtsstunde, wende dich bitte direkt an mein Team! 8)

xtrumb

User / Kunde

  • "xtrumb" is male

Posts: 2,295

Location: hier

Occupation: Fachinformatiker für Systemintegration

Thanks: 16

  • Send private message

11

Wednesday, May 30th 2018, 8:41am

Meines wissen fängt der block doch bei 0.0 x 0.0 x0.0 an? Wenn du nun also aufrundest, würde er ja zu einem anderen Block springen? :?
Mit freundlichen Grüßen
TrueMB

Dienstleistungs Service
Unser Csgo Team

Bitte besucht unser neues Forum unter https://forum.nitrado.net| Please visit our new Forum at https://forum.nitrado.net