Hotfix MultipleFacingAttribute and AttributesPlaceListener and AttributesCopyCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
Dieser Commit ist enthalten in:
Ursprung
e7e714f8ee
Commit
6a52a319ab
@ -62,6 +62,9 @@ public class AttributesCopyCommand extends SWCommand {
|
||||
}
|
||||
BlockData blockData = block.getBlockData();
|
||||
List<String> attributesToCopy = new ArrayList<>();
|
||||
if (needsType(block)) {
|
||||
attributesToCopy.add("§8-§7 type " + block.getType().name().toLowerCase());
|
||||
}
|
||||
for (BlockAttribute blockAttribute : blockAttributeList) {
|
||||
if (blockAttribute.type().isInstance(blockData)) {
|
||||
blockAttribute.copy(attributesToCopy, blockData);
|
||||
@ -98,7 +101,23 @@ public class AttributesCopyCommand extends SWCommand {
|
||||
if (itemStack.getType() == Material.WITHER_SKELETON_SKULL && block.getType() == Material.WITHER_SKELETON_WALL_SKULL) return true;
|
||||
if (itemStack.getType() == Material.TORCH && block.getType() == Material.WALL_TORCH) return true;
|
||||
if (itemStack.getType() == Material.SOUL_TORCH && block.getType() == Material.SOUL_WALL_TORCH) return true;
|
||||
if (itemStack.getType() == Material.REDSTONE_TORCH && block.getType() == Material.REDSTONE_WALL_TORCH) return true;
|
||||
if (itemStack.getType().name().contains("_BANNER") && block.getType().name().contains("_WALL_BANNER")) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean needsType(Block block) {
|
||||
if (block.getType().name().contains("WALL")) return true;
|
||||
if (block.getType() == Material.PLAYER_HEAD) return true;
|
||||
if (block.getType() == Material.ZOMBIE_HEAD) return true;
|
||||
if (block.getType() == Material.CREEPER_HEAD) return true;
|
||||
if (block.getType() == Material.DRAGON_HEAD) return true;
|
||||
if (block.getType() == Material.SKELETON_SKULL) return true;
|
||||
if (block.getType() == Material.WITHER_SKELETON_SKULL) return true;
|
||||
if (block.getType() == Material.TORCH) return true;
|
||||
if (block.getType() == Material.SOUL_TORCH) return true;
|
||||
if (block.getType() == Material.REDSTONE_TORCH) return true;
|
||||
if (block.getType().name().contains("_BANNER")) return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -24,13 +24,16 @@ import de.steamwar.linkage.Linked;
|
||||
import de.steamwar.linkage.MinVersion;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.Skull;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.profile.PlayerProfile;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
@ -53,12 +56,32 @@ public class AttributesPlaceListener implements Listener {
|
||||
if (strings.isEmpty()) return;
|
||||
if (!strings.get(0).equals("§eAttributes§8:")) return;
|
||||
Material type = event.getBlock().getType();
|
||||
OfflinePlayer offlinePlayer = null;
|
||||
if (event.getBlock().getState() instanceof Skull) {
|
||||
Skull skull = (Skull) event.getBlock().getState();
|
||||
offlinePlayer = skull.getOwningPlayer();
|
||||
}
|
||||
OfflinePlayer finalPlayerProfile = offlinePlayer;
|
||||
event.setCancelled(true);
|
||||
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
|
||||
event.getBlock().setType(type, false);
|
||||
Material material = strings.stream()
|
||||
.filter(s -> s.startsWith("§8-§7 type "))
|
||||
.map(s -> s.replace("§8-§7 type ", ""))
|
||||
.map(String::toUpperCase)
|
||||
.map(Material::valueOf)
|
||||
.findFirst()
|
||||
.orElse(type);
|
||||
event.getBlock().setType(material, false);
|
||||
Set<String> attributesToPaste = new HashSet<>(strings);
|
||||
Block block = event.getBlock();
|
||||
BlockData blockData = block.getBlockData();
|
||||
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
|
||||
if (block.getState() instanceof Skull && finalPlayerProfile != null) {
|
||||
Skull skull = (Skull) block.getState();
|
||||
skull.setOwningPlayer(finalPlayerProfile);
|
||||
skull.update(true, false);
|
||||
}
|
||||
}, 1);
|
||||
for (BlockAttribute blockAttribute : blockAttributeList) {
|
||||
if (blockAttribute.type().isInstance(blockData)) {
|
||||
blockAttribute.paste(attributesToPaste, blockData);
|
||||
|
@ -47,7 +47,6 @@ public class MultipleFacingAttribute implements BlockAttribute<MultipleFacing> {
|
||||
@Override
|
||||
public void paste(Set<String> attributes, MultipleFacing blockData) {
|
||||
for (BlockFace blockFace : BlockFace.values()) {
|
||||
if (!blockData.getAllowedFaces().contains(blockFace)) continue;
|
||||
blockData.setFace(blockFace, attributes.contains(attribute + blockFace.name().toLowerCase()));
|
||||
}
|
||||
}
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren