potion effects and banners

This commit is contained in:
boy0001 2015-02-12 15:53:49 +11:00
parent 7afe2c0799
commit a2ddd702cb
3 changed files with 45 additions and 0 deletions

View File

@ -72,6 +72,9 @@ public class EntityWrapper {
entity.setCustomName(this.lived.name); entity.setCustomName(this.lived.name);
entity.setCustomNameVisible(this.lived.visible); entity.setCustomNameVisible(this.lived.visible);
} }
if (this.lived.potions != null && this.lived.potions.size() > 0) {
entity.addPotionEffects(this.lived.potions);
}
entity.setRemainingAir(this.lived.air); entity.setRemainingAir(this.lived.air);
entity.setRemoveWhenFarAway(this.lived.persistent); entity.setRemoveWhenFarAway(this.lived.persistent);
@ -98,6 +101,7 @@ public class EntityWrapper {
public void storeLiving(final LivingEntity lived) { public void storeLiving(final LivingEntity lived) {
this.lived = new LivingEntityStats(); this.lived = new LivingEntityStats();
this.lived.potions = lived.getActivePotionEffects();
this.lived.loot = lived.getCanPickupItems(); this.lived.loot = lived.getCanPickupItems();
this.lived.name = lived.getCustomName(); this.lived.name = lived.getCustomName();
this.lived.visible = lived.isCustomNameVisible(); this.lived.visible = lived.isCustomNameVisible();

View File

@ -1,6 +1,9 @@
package com.intellectualcrafters.plot.object.entity; package com.intellectualcrafters.plot.object.entity;
import java.util.Collection;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
public class LivingEntityStats { public class LivingEntityStats {
@ -22,5 +25,6 @@ public class LivingEntityStats {
public ItemStack boots; public ItemStack boots;
public ItemStack leggings; public ItemStack leggings;
public ItemStack chestplate; public ItemStack chestplate;
public Collection<PotionEffect> potions;
} }

View File

@ -8,11 +8,13 @@ import java.util.HashSet;
import org.apache.commons.lang.mutable.MutableInt; import org.apache.commons.lang.mutable.MutableInt;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.DyeColor;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Note; import org.bukkit.Note;
import org.bukkit.SkullType; import org.bukkit.SkullType;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.Banner;
import org.bukkit.block.Beacon; import org.bukkit.block.Beacon;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
@ -29,6 +31,8 @@ import org.bukkit.block.Jukebox;
import org.bukkit.block.NoteBlock; import org.bukkit.block.NoteBlock;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
import org.bukkit.block.Skull; import org.bukkit.block.Skull;
import org.bukkit.block.banner.Pattern;
import org.bukkit.block.banner.PatternType;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
@ -117,6 +121,8 @@ public class ChunkManager {
private static HashMap<BlockLoc, String> cmdData; private static HashMap<BlockLoc, String> cmdData;
private static HashMap<BlockLoc, String[]> signContents; private static HashMap<BlockLoc, String[]> signContents;
private static HashMap<BlockLoc, Note> noteBlockContents; private static HashMap<BlockLoc, Note> noteBlockContents;
private static HashMap<BlockLoc, ArrayList<Byte[]>> bannerColors;
private static HashMap<BlockLoc, Byte> bannerBase;
private static HashSet<EntityWrapper> entities; private static HashSet<EntityWrapper> entities;
@ -234,6 +240,8 @@ public class ChunkManager {
noteBlockContents = new HashMap<>(); noteBlockContents = new HashMap<>();
signContents = new HashMap<>(); signContents = new HashMap<>();
cmdData = new HashMap<>(); cmdData = new HashMap<>();
bannerBase= new HashMap<>();
bannerColors = new HashMap<>();
entities = new HashSet<>(); entities = new HashSet<>();
} }
@ -425,6 +433,22 @@ public class ChunkManager {
} }
else { PlotMain.sendConsoleSenderMessage("&c[WARN] Plot clear failed to regenerate furnace: "+loc.x + x_offset+","+loc.y+","+loc.z + z_offset); } else { PlotMain.sendConsoleSenderMessage("&c[WARN] Plot clear failed to regenerate furnace: "+loc.x + x_offset+","+loc.y+","+loc.z + z_offset); }
} }
for (BlockLoc loc: bannerBase.keySet()) {
Block block = world.getBlockAt(loc.x + x_offset, loc.y, loc.z + z_offset);
BlockState state = block.getState();
if (state instanceof Banner) {
Banner banner = (Banner) state;
byte base = bannerBase.get(loc);
ArrayList<Byte[]> colors = bannerColors.get(loc);
banner.setBaseColor(DyeColor.values()[base]);
for (Byte[] color : colors) {
banner.addPattern(new Pattern(DyeColor.getByDyeData(color[1]), PatternType.values()[color[0]]));
}
state.update(true);
}
else { PlotMain.sendConsoleSenderMessage("&c[WARN] Plot clear failed to regenerate banner: "+loc.x + x_offset+","+loc.y+","+loc.z + z_offset); }
}
} }
public static void saveBlock(World world, int maxY, int x, int z) { public static void saveBlock(World world, int maxY, int x, int z) {
@ -537,6 +561,19 @@ public class ChunkManager {
short rot = (short) getOrdinal(BlockFace.values(), skull.getRotation()); short rot = (short) getOrdinal(BlockFace.values(), skull.getRotation());
skullData.put(bl, new Object[] {o, rot, skulltype}); skullData.put(bl, new Object[] {o, rot, skulltype});
break; break;
case 176:
case 177:
bl = new BlockLoc(x, y, z);
Banner banner = (Banner) block.getState();
byte base = getOrdinal(DyeColor.values(), banner.getBaseColor());
ArrayList<Byte[]> types = new ArrayList<>();
for (Pattern pattern : banner.getPatterns()) {
types.add(new Byte[] {getOrdinal(PatternType.values(), pattern.getPattern()), pattern.getColor().getDyeData() });
}
bannerBase.put(bl, base);
bannerColors.put(bl, types);
break;
} }
} }
} }