mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2024-09-29 15:17:29 +02:00
Support glowing ink in blueprints (#1842)
Fixes https://github.com/BentoBoxWorld/BentoBox/issues/1837
This commit is contained in:
parent
fa41abc062
commit
faf351fd59
@ -190,6 +190,91 @@ public class BlueprintClipboard {
|
||||
Vector pos = new Vector(x, y, z);
|
||||
|
||||
// Set entities
|
||||
List<BlueprintEntity> bpEnts = setEntities(entities);
|
||||
// Store
|
||||
if (!bpEnts.isEmpty()) {
|
||||
bpEntities.put(pos, bpEnts);
|
||||
}
|
||||
|
||||
// Return if this is just air block
|
||||
if (!copyAir && block.getType().equals(Material.AIR) && !entities.isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BlueprintBlock b = bluePrintBlock(pos, block);
|
||||
if (b != null) {
|
||||
this.bpBlocks.put(pos, b);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private BlueprintBlock bluePrintBlock(Vector pos, Block block) {
|
||||
// Block state
|
||||
BlockState blockState = block.getState();
|
||||
BlueprintBlock b = new BlueprintBlock(block.getBlockData().getAsString());
|
||||
// Biome
|
||||
b.setBiome(block.getBiome());
|
||||
// Signs
|
||||
if (blockState instanceof Sign sign) {
|
||||
b.setSignLines(Arrays.asList(sign.getLines()));
|
||||
b.setGlowingText(sign.isGlowingText());
|
||||
}
|
||||
// Set block data
|
||||
if (blockState.getData() instanceof Attachable) {
|
||||
// Placeholder for attachment
|
||||
bpBlocks.put(pos, new BlueprintBlock("minecraft:air"));
|
||||
bpAttachable.put(pos, b);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (block.getType().equals(Material.BEDROCK)) {
|
||||
// Find highest bedrock
|
||||
if(blueprint.getBedrock() == null) {
|
||||
blueprint.setBedrock(pos);
|
||||
} else {
|
||||
if (pos.getBlockY() > blueprint.getBedrock().getBlockY()) {
|
||||
blueprint.setBedrock(pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Chests
|
||||
if (blockState instanceof InventoryHolder ih) {
|
||||
b.setInventory(new HashMap<>());
|
||||
for (int i = 0; i < ih.getInventory().getSize(); i++) {
|
||||
ItemStack item = ih.getInventory().getItem(i);
|
||||
if (item != null) {
|
||||
b.getInventory().put(i, item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (blockState instanceof CreatureSpawner spawner) {
|
||||
b.setCreatureSpawner(getSpawner(spawner));
|
||||
}
|
||||
|
||||
// Banners
|
||||
if (blockState instanceof Banner) {
|
||||
b.setBannerPatterns(((Banner) blockState).getPatterns());
|
||||
}
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
private BlueprintCreatureSpawner getSpawner(CreatureSpawner spawner) {
|
||||
BlueprintCreatureSpawner cs = new BlueprintCreatureSpawner();
|
||||
cs.setSpawnedType(spawner.getSpawnedType());
|
||||
cs.setDelay(spawner.getDelay());
|
||||
cs.setMaxNearbyEntities(spawner.getMaxNearbyEntities());
|
||||
cs.setMaxSpawnDelay(spawner.getMaxSpawnDelay());
|
||||
cs.setMinSpawnDelay(spawner.getMinSpawnDelay());
|
||||
cs.setRequiredPlayerRange(spawner.getRequiredPlayerRange());
|
||||
cs.setSpawnRange(spawner.getSpawnRange());
|
||||
return cs;
|
||||
}
|
||||
|
||||
private List<BlueprintEntity> setEntities(Collection<LivingEntity> entities) {
|
||||
List<BlueprintEntity> bpEnts = new ArrayList<>();
|
||||
for (LivingEntity entity: entities) {
|
||||
BlueprintEntity bpe = new BlueprintEntity();
|
||||
@ -229,74 +314,7 @@ public class BlueprintClipboard {
|
||||
}
|
||||
bpEnts.add(bpe);
|
||||
}
|
||||
// Store
|
||||
if (!bpEnts.isEmpty()) {
|
||||
bpEntities.put(pos, bpEnts);
|
||||
}
|
||||
|
||||
// Return if this is just air block
|
||||
if (!copyAir && block.getType().equals(Material.AIR) && !entities.isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Block state
|
||||
BlockState blockState = block.getState();
|
||||
BlueprintBlock b = new BlueprintBlock(block.getBlockData().getAsString());
|
||||
// Biome
|
||||
b.setBiome(block.getBiome());
|
||||
// Signs
|
||||
if (blockState instanceof Sign sign) {
|
||||
b.setSignLines(Arrays.asList(sign.getLines()));
|
||||
}
|
||||
// Set block data
|
||||
if (blockState.getData() instanceof Attachable) {
|
||||
// Placeholder for attachment
|
||||
bpBlocks.put(pos, new BlueprintBlock("minecraft:air"));
|
||||
bpAttachable.put(pos, b);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (block.getType().equals(Material.BEDROCK)) {
|
||||
// Find highest bedrock
|
||||
if(blueprint.getBedrock() == null) {
|
||||
blueprint.setBedrock(pos);
|
||||
} else {
|
||||
if (pos.getBlockY() > blueprint.getBedrock().getBlockY()) {
|
||||
blueprint.setBedrock(pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Chests
|
||||
if (blockState instanceof InventoryHolder ih) {
|
||||
b.setInventory(new HashMap<>());
|
||||
for (int i = 0; i < ih.getInventory().getSize(); i++) {
|
||||
ItemStack item = ih.getInventory().getItem(i);
|
||||
if (item != null) {
|
||||
b.getInventory().put(i, item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (blockState instanceof CreatureSpawner spawner) {
|
||||
BlueprintCreatureSpawner cs = new BlueprintCreatureSpawner();
|
||||
cs.setSpawnedType(spawner.getSpawnedType());
|
||||
cs.setDelay(spawner.getDelay());
|
||||
cs.setMaxNearbyEntities(spawner.getMaxNearbyEntities());
|
||||
cs.setMaxSpawnDelay(spawner.getMaxSpawnDelay());
|
||||
cs.setMinSpawnDelay(spawner.getMinSpawnDelay());
|
||||
cs.setRequiredPlayerRange(spawner.getRequiredPlayerRange());
|
||||
cs.setSpawnRange(spawner.getSpawnRange());
|
||||
b.setCreatureSpawner(cs);
|
||||
}
|
||||
|
||||
// Banners
|
||||
if (blockState instanceof Banner) {
|
||||
b.setBannerPatterns(((Banner) blockState).getPatterns());
|
||||
}
|
||||
|
||||
this.bpBlocks.put(pos, b);
|
||||
return true;
|
||||
return bpEnts;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -290,26 +290,19 @@ public class BlueprintPaster {
|
||||
// Get the block state
|
||||
BlockState bs = block.getState();
|
||||
// Signs
|
||||
if (bs instanceof org.bukkit.block.Sign) {
|
||||
writeSign(block, bpBlock.getSignLines());
|
||||
if (bs instanceof org.bukkit.block.Sign sign) {
|
||||
writeSign(block, bpBlock.getSignLines(), bpBlock.isGlowingText());
|
||||
}
|
||||
// Chests, in general
|
||||
if (bs instanceof InventoryHolder) {
|
||||
Inventory ih = ((InventoryHolder)bs).getInventory();
|
||||
// Double chests are pasted as two blocks so inventory is filled twice. This code stops over filling for the first block.
|
||||
// Double chests are pasted as two blocks so inventory is filled twice.
|
||||
// This code stops over-filling for the first block.
|
||||
bpBlock.getInventory().forEach(ih::setItem);
|
||||
}
|
||||
// Mob spawners
|
||||
if (bs instanceof CreatureSpawner spawner) {
|
||||
BlueprintCreatureSpawner s = bpBlock.getCreatureSpawner();
|
||||
spawner.setSpawnedType(s.getSpawnedType());
|
||||
spawner.setMaxNearbyEntities(s.getMaxNearbyEntities());
|
||||
spawner.setMaxSpawnDelay(s.getMaxSpawnDelay());
|
||||
spawner.setMinSpawnDelay(s.getMinSpawnDelay());
|
||||
spawner.setDelay(s.getDelay());
|
||||
spawner.setRequiredPlayerRange(s.getRequiredPlayerRange());
|
||||
spawner.setSpawnRange(s.getSpawnRange());
|
||||
bs.update(true, false);
|
||||
setSpawner(spawner, bpBlock.getCreatureSpawner());
|
||||
}
|
||||
// Banners
|
||||
if (bs instanceof Banner banner && bpBlock.getBannerPatterns() != null) {
|
||||
@ -319,6 +312,17 @@ public class BlueprintPaster {
|
||||
}
|
||||
}
|
||||
|
||||
private void setSpawner(CreatureSpawner spawner, BlueprintCreatureSpawner s) {
|
||||
spawner.setSpawnedType(s.getSpawnedType());
|
||||
spawner.setMaxNearbyEntities(s.getMaxNearbyEntities());
|
||||
spawner.setMaxSpawnDelay(s.getMaxSpawnDelay());
|
||||
spawner.setMinSpawnDelay(s.getMinSpawnDelay());
|
||||
spawner.setDelay(s.getDelay());
|
||||
spawner.setRequiredPlayerRange(s.getRequiredPlayerRange());
|
||||
spawner.setSpawnRange(s.getSpawnRange());
|
||||
spawner.update(true, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets any entity that is in this location
|
||||
* @param location - location
|
||||
@ -383,7 +387,7 @@ public class BlueprintPaster {
|
||||
}
|
||||
}
|
||||
|
||||
private void writeSign(final Block block, final List<String> lines) {
|
||||
private void writeSign(final Block block, final List<String> lines, boolean glow) {
|
||||
BlockFace bf;
|
||||
if (block.getType().name().contains("WALL_SIGN")) {
|
||||
WallSign wallSign = (WallSign)block.getBlockData();
|
||||
@ -422,6 +426,7 @@ public class BlueprintPaster {
|
||||
s.setLine(i, lines.get(i));
|
||||
}
|
||||
}
|
||||
s.setGlowingText(glow);
|
||||
// Update the sign
|
||||
s.update();
|
||||
}
|
||||
|
@ -34,6 +34,8 @@ public class BlueprintBlock {
|
||||
*/
|
||||
@Expose
|
||||
private List<Pattern> bannerPatterns;
|
||||
@Expose
|
||||
private boolean glowingText;
|
||||
|
||||
public BlueprintBlock(String blockData) {
|
||||
this.blockData = blockData;
|
||||
@ -124,4 +126,20 @@ public class BlueprintBlock {
|
||||
public void setBiome(Biome biome) {
|
||||
this.biome = biome;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the glowingText
|
||||
*/
|
||||
public boolean isGlowingText() {
|
||||
return glowingText;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param glowingText the glowingText to set
|
||||
*/
|
||||
public void setGlowingText(boolean glowingText) {
|
||||
this.glowingText = glowingText;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user