Fix Loader Redstone #89
@ -3,12 +3,15 @@ package de.steamwar.bausystem.world;
|
|||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.bukkit.block.data.Powerable;
|
import org.bukkit.block.data.Powerable;
|
||||||
|
import org.bukkit.block.data.type.Switch;
|
||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.event.block.Action;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
|
||||||
class AutoLoader_15 {
|
class AutoLoader_15 {
|
||||||
|
|
||||||
private AutoLoader_15() {
|
private AutoLoader_15() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -30,10 +33,32 @@ class AutoLoader_15 {
|
|||||||
Powerable powerable = (Powerable) data;
|
Powerable powerable = (Powerable) data;
|
||||||
powerable.setPowered(active);
|
powerable.setPowered(active);
|
||||||
block.setBlockData(powerable);
|
block.setBlockData(powerable);
|
||||||
block.getState().update(true);
|
|
||||||
|
if (data instanceof Switch){
|
||||||
|
Switch swtch = (Switch) data;
|
||||||
|
Block relative;
|
||||||
|
|||||||
|
switch(swtch.getFace()){
|
||||||
|
case FLOOR:
|
||||||
|
relative = block.getRelative(BlockFace.DOWN);
|
||||||
|
break;
|
||||||
|
case CEILING:
|
||||||
|
relative = block.getRelative(BlockFace.UP);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
relative = block.getRelative(swtch.getFacing());
|
||||||
|
break;
|
||||||
Lixfel
hat
Funktioniert das auch, wenn man einfach denselben block (wie er eh gerade da ist) hinsetzt? das wäre eleganter, wenn es funktioniert. Funktioniert das auch, wenn man einfach denselben block (wie er eh gerade da ist) hinsetzt? das wäre eleganter, wenn es funktioniert.
YoyoNow
hat
Nein, weil das dann theoretisch soweit ich es verstanden habe kein Block Change ist, weil es ja derselbe ist Nein, weil das dann theoretisch soweit ich es verstanden habe kein Block Change ist, weil es ja derselbe ist
Chaoscaot
hat
Habe es grade auch noch mal getestet, es würden keine BlockUpdates auf das Redstone hinter dem Block kommen. Habe es grade auch noch mal getestet, es würden keine BlockUpdates auf das Redstone hinter dem Block kommen.
Lixfel
hat
Wenn man ein BlockUpdate auf die Blöcke sendet, die 1 UND 2 Block weit entfernt sind? Das hauptproblem ist ja, dass bei einem Block Distanz eine Änderung stattfinden muss, damit das triggert. (Btw. würde ich immer noch bevorzugen, wenn das ganze über Blockfaces läuft (block.getRelative()), da muss dann nichts geklont, und auch keine offsets addiert werden. Dann ggf. mit einem Rekursiven Algorithmus, der die Blocktiefe auf 2 beschränkt? Wenn man ein BlockUpdate auf die Blöcke sendet, die 1 UND 2 Block weit entfernt sind? Das hauptproblem ist ja, dass bei einem Block Distanz eine Änderung stattfinden muss, damit das triggert. (Btw. würde ich immer noch bevorzugen, wenn das ganze über Blockfaces läuft (block.getRelative()), da muss dann nichts geklont, und auch keine offsets addiert werden. Dann ggf. mit einem Rekursiven Algorithmus, der die Blocktiefe auf 2 beschränkt?
|
|||||||
|
}
|
||||||
|
updateBlock(relative);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void updateBlock(Block block) {
|
||||||
|
BlockData data = block.getBlockData();
|
||||||
|
block.setType(Material.BARRIER, true);
|
||||||
|
block.setBlockData(data, true);
|
||||||
|
}
|
||||||
|
|
||||||
static void onPlayerInteract(IAutoLoader loader, PlayerInteractEvent event) {
|
static void onPlayerInteract(IAutoLoader loader, PlayerInteractEvent event) {
|
||||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK && event.getAction() != Action.PHYSICAL)
|
if (event.getAction() != Action.RIGHT_CLICK_BLOCK && event.getAction() != Action.PHYSICAL)
|
||||||
return;
|
return;
|
||||||
|
Das geht eleganter, wenn du mit block.getNeighbour? oder so ähnlich arbeitest, da übergibst du dann nur ein BlockFace, was die Richtung des Blocks angibt.
Ich habe kurz mit ihm gesprochen, dass man das nicht mit clones macht sondern das man die echte location Offsetet ohne eine Kopie zu machen.