Merge branch 'project-cosmetics' of https://github.com/Mineplex-LLC/Minecraft-PC into project-cosmetics

This commit is contained in:
LCastr0 2016-04-26 23:23:45 -03:00
commit d0e7590b2a
14 changed files with 248 additions and 55 deletions

View File

@ -0,0 +1,110 @@
package mineplex.core.common.block;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.bukkit.Bukkit;
import org.bukkit.block.Block;
import org.bukkit.craftbukkit.v1_8_R3.CraftChunk;
import org.bukkit.entity.Player;
import org.bukkit.util.BlockVector;
import mineplex.core.common.util.MapUtil;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import net.minecraft.server.v1_8_R3.Chunk;
import net.minecraft.server.v1_8_R3.ChunkCoordIntPair;
import net.minecraft.server.v1_8_R3.PacketPlayOutMultiBlockChange;
import net.minecraft.server.v1_8_R3.PacketPlayOutMultiBlockChange.MultiBlockChangeInfo;
public class MultiBlockUpdaterAgent
{
private Map<Chunk, List<BlockVector>> _chunks = new HashMap<Chunk, List<BlockVector>>();
public MultiBlockUpdaterAgent()
{
}
public void addBlock(Block block)
{
Chunk c = ((CraftChunk)block.getChunk()).getHandle();
List<BlockVector> list = _chunks.get(c);
if(list == null)
{
list = new ArrayList<BlockVector>();
_chunks.put(c, list);
}
if(list.size() >= 64) return;
list.add(block.getLocation().toVector().toBlockVector());
}
public void send()
{
send(UtilServer.getPlayersCollection());
}
public void reset()
{
_chunks.clear();
}
public void send(Collection<? extends Player> players)
{
for(Player p : players)
{
for(Chunk c : _chunks.keySet())
{
if(!p.getWorld().equals(c.bukkitChunk.getWorld())) continue;
int x = p.getLocation().getChunk().getX();
int z = p.getLocation().getChunk().getZ();
int chunkDist = Math.max(Math.abs(c.locX-x), Math.abs(c.locZ-z));
if(chunkDist > Bukkit.getViewDistance()) continue;
sendPacket(c, players);
}
}
}
private void sendPacket(Chunk c, Collection<? extends Player> players)
{
List<BlockVector> list = _chunks.get(c);
if(list == null) return;
if(list.size() >= 64)
{
for(Player p : players)
{
MapUtil.SendChunkForPlayer(c, p);
}
}
else
{
PacketPlayOutMultiBlockChange packet = new PacketPlayOutMultiBlockChange();
packet.a = new ChunkCoordIntPair(c.locX, c.locZ);
packet.b = new MultiBlockChangeInfo[list.size()];
for(int i = 0; i < list.size(); i++)
{
BlockVector bv = list.get(i);
short xyz = (short)((bv.getBlockX() & 0xF) << 12 | (bv.getBlockZ() & 0xF) << 8 | bv.getBlockY());
packet.b[i] = packet.new MultiBlockChangeInfo(xyz, c);
}
for(Player p : players)
{
UtilPlayer.sendPacket(p, packet);
}
}
}
}

View File

@ -5,6 +5,8 @@ import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import com.mysql.jdbc.Util;
import mineplex.core.common.block.DataLocationMap; import mineplex.core.common.block.DataLocationMap;
import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilBlock;
@ -54,6 +56,8 @@ public class Schematic
int startY = originLocation.getBlockY(); int startY = originLocation.getBlockY();
int startZ = originLocation.getBlockZ(); int startZ = originLocation.getBlockZ();
UtilBlock.startQuickRecording();
for (int x = 0; x < _width; x++) for (int x = 0; x < _width; x++)
{ {
for (int y = 0; y < _height; y++) for (int y = 0; y < _height; y++)
@ -109,6 +113,8 @@ public class Schematic
} }
} }
UtilBlock.stopQuickRecording();
return locationMap; return locationMap;
} }

View File

@ -3,7 +3,6 @@ package mineplex.core.common.util;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Queue;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@ -28,6 +27,7 @@ import org.bukkit.inventory.meta.BannerMeta;
import org.bukkit.inventory.meta.SkullMeta; import org.bukkit.inventory.meta.SkullMeta;
import org.bukkit.material.Bed; import org.bukkit.material.Bed;
import mineplex.core.common.block.MultiBlockUpdaterAgent;
import net.minecraft.server.v1_8_R3.BlockPosition; import net.minecraft.server.v1_8_R3.BlockPosition;
import net.minecraft.server.v1_8_R3.Blocks; import net.minecraft.server.v1_8_R3.Blocks;
import net.minecraft.server.v1_8_R3.IBlockData; import net.minecraft.server.v1_8_R3.IBlockData;
@ -91,6 +91,8 @@ public class UtilBlock
*/ */
public static HashSet<BlockFace> horizontals = new HashSet<>(); public static HashSet<BlockFace> horizontals = new HashSet<>();
private static MultiBlockUpdaterAgent _quickChangeRecorder;
static static
{ {
@ -1512,6 +1514,39 @@ public class UtilBlock
return state.update(false, false); return state.update(false, false);
} }
/**
* See {@link #setQuick(World, int, int, int, int, byte)}
*/
public static void startQuickRecording()
{
if(_quickChangeRecorder != null)
{
_quickChangeRecorder.send();
_quickChangeRecorder.reset();
}
else
{
_quickChangeRecorder = new MultiBlockUpdaterAgent();
}
}
/**
* See {@link #setQuick(World, int, int, int, int, byte)}
*/
public static void stopQuickRecording()
{
if(_quickChangeRecorder == null) return;
_quickChangeRecorder.send();
_quickChangeRecorder.reset();
_quickChangeRecorder = null;
}
/**
* This doesn't send the block changes to the client. If you want to change lots of blocks and then send it to the player
* then do <code>startQuickRecording()</code> first. Change all the blocks you want. Then to send it do
* <code>stopQuickRecording()</code>. This will automatically send all the block changes to all relevant players.
*/
public static void setQuick(World world, int x, int y, int z, int type, byte data) public static void setQuick(World world, int x, int y, int z, int type, byte data)
{ {
int cx = x >> 4; int cx = x >> 4;
@ -1525,6 +1560,11 @@ public class UtilBlock
BlockPosition pos = new BlockPosition(x, y, z); BlockPosition pos = new BlockPosition(x, y, z);
IBlockData ibd = net.minecraft.server.v1_8_R3.Block.getById(type).fromLegacyData(data); IBlockData ibd = net.minecraft.server.v1_8_R3.Block.getById(type).fromLegacyData(data);
chunk.a(pos, ibd); chunk.a(pos, ibd);
if(_quickChangeRecorder != null)
{
_quickChangeRecorder.addBlock(world.getBlockAt(x, y, z));
}
} }
/** /**

View File

@ -53,7 +53,7 @@ public class WinEffectBabyChicken extends WinEffectGadget
@Override @Override
public void play() public void play()
{ {
_chicken = spawnChicken(player, _baseLocation); _chicken = spawnChicken(_player, _baseLocation);
UtilEnt.addGoalSelector(_chicken, 0, new PathfinderRandomRun(((CraftChicken)_chicken).getHandle(), getBaseLocation(), 4, 2.8)); UtilEnt.addGoalSelector(_chicken, 0, new PathfinderRandomRun(((CraftChicken)_chicken).getHandle(), getBaseLocation(), 4, 2.8));
@ -103,7 +103,7 @@ public class WinEffectBabyChicken extends WinEffectGadget
{ {
// Flap Chicken Wings // Flap Chicken Wings
PacketPlayOutRelEntityMove packet = new PacketPlayOutRelEntityMove(_chicken.getEntityId(), (byte) 0, (byte) 0, (byte) 0, false); PacketPlayOutRelEntityMove packet = new PacketPlayOutRelEntityMove(_chicken.getEntityId(), (byte) 0, (byte) 0, (byte) 0, false);
UtilPlayer.getNearby(_chicken.getLocation(), 64).stream().forEach(p -> UtilPlayer.sendPacket(player, packet)); UtilPlayer.getNearby(_chicken.getLocation(), 64).stream().forEach(p -> UtilPlayer.sendPacket(_player, packet));
((CraftChicken) _chicken).getHandle().lastDamager = ((CraftChicken) _chicken).getHandle(); ((CraftChicken) _chicken).getHandle().lastDamager = ((CraftChicken) _chicken).getHandle();
@ -138,7 +138,7 @@ public class WinEffectBabyChicken extends WinEffectGadget
@Override @Override
public void finish() public void finish()
{ {
UtilPlayer.showForAll(player); UtilPlayer.showForAll(_player);
_text.keySet().forEach(h -> h.stop()); _text.keySet().forEach(h -> h.stop());
_text.clear(); _text.clear();
_chicken.remove(); _chicken.remove();

View File

@ -42,7 +42,7 @@ public class WinEffectFireworks extends WinEffectGadget
start.add(0, 0, r); start.add(0, 0, r);
start.setDirection(new Vector(1, 0, 0)); start.setDirection(new Vector(1, 0, 0));
_npc = getNPC(player, start); _npc = getNPC(_player, start);
AnimatorEntity animator = new AnimatorEntity(Manager.getPlugin(), _npc.GetEntity().getBukkitEntity()); AnimatorEntity animator = new AnimatorEntity(Manager.getPlugin(), _npc.GetEntity().getBukkitEntity());

View File

@ -28,6 +28,8 @@ public class WinEffectFlames extends WinEffectGadget
{ {
super(manager, "Flames", UtilText.splitLineToArray(C.cGray + "Oh shit, my feets are on fire!", LineFormat.LORE), super(manager, "Flames", UtilText.splitLineToArray(C.cGray + "Oh shit, my feets are on fire!", LineFormat.LORE),
1, Material.BLAZE_POWDER, (byte) 0); 1, Material.BLAZE_POWDER, (byte) 0);
_schematicName = "FlamesPodium";
} }
@Override @Override
@ -36,13 +38,13 @@ public class WinEffectFlames extends WinEffectGadget
int i = 0; int i = 0;
int points = 12; int points = 12;
double r = 3; double r = 4;
Location start = getBaseLocation(); Location start = getBaseLocation();
start.add(0, 0, r); start.add(0, 0, r);
start.setDirection(new Vector(1, 0, 0)); start.setDirection(new Vector(1, 0, 0));
_npc = getNPC(player, start); _npc = getNPC(_player, start);
AnimatorEntity animator = new AnimatorEntity(Manager.getPlugin(), _npc.GetEntity().getBukkitEntity()); AnimatorEntity animator = new AnimatorEntity(Manager.getPlugin(), _npc.GetEntity().getBukkitEntity());

View File

@ -47,6 +47,8 @@ public class WinEffectLavaTrap extends WinEffectGadget
{ {
super(manager, "Lava Trap", UtilText.splitLineToArray(C.cGray + "FINALLY! A movie where the villain's master plan succeeds!", LineFormat.LORE), super(manager, "Lava Trap", UtilText.splitLineToArray(C.cGray + "FINALLY! A movie where the villain's master plan succeeds!", LineFormat.LORE),
1, Material.LAVA_BUCKET, (byte) 0); 1, Material.LAVA_BUCKET, (byte) 0);
_schematicName = "LavaTrapPodium";
} }
@Override @Override
@ -57,11 +59,11 @@ public class WinEffectLavaTrap extends WinEffectGadget
_lever = getBaseLocation().add(_baseLocation.getDirection().normalize()).getBlock(); _lever = getBaseLocation().add(_baseLocation.getDirection().normalize()).getBlock();
_lever.setTypeIdAndData(Material.LEVER.getId(), (byte) 5, false); _lever.setTypeIdAndData(Material.LEVER.getId(), (byte) 5, false);
playerNPC = getNPC(player, getBaseLocation()); playerNPC = getNPC(_player, getBaseLocation());
{ {
Vector forward = getBaseLocation().getDirection().normalize().multiply(1.3); Vector forward = getBaseLocation().getDirection().normalize().multiply(1.3);
Vector right = UtilAlg.getRight(forward.clone()).multiply(2); Vector right = UtilAlg.getRight(forward.clone()).multiply(1);
int maxPerRow = 6; int maxPerRow = 6;
@ -71,7 +73,7 @@ public class WinEffectLavaTrap extends WinEffectGadget
int inRow = index%maxPerRow; int inRow = index%maxPerRow;
int rowSize = Math.min(nonTeam.size()-(row*maxPerRow), maxPerRow); int rowSize = Math.min(nonTeam.size()-(row*maxPerRow), maxPerRow);
Vector f = forward.clone().multiply(3 + row); Vector f = forward.clone().multiply(2.5 + row);
Vector r = right.clone().multiply((-rowSize/2.0) + 0.5); Vector r = right.clone().multiply((-rowSize/2.0) + 0.5);
r.add(right.clone().multiply(inRow)); r.add(right.clone().multiply(inRow));
@ -94,7 +96,7 @@ public class WinEffectLavaTrap extends WinEffectGadget
Location loc = getBaseLocation().add(f).add(r); Location loc = getBaseLocation().add(f).add(r);
loc.setDirection(getBaseLocation().subtract(loc).toVector()); loc.setDirection(getBaseLocation().subtract(loc).toVector());
getNPC(team.get(index), loc); ((ArmorStand)getNPC(nonTeam.get(index), loc).GetEntity().getBukkitEntity()).setGravity(true);
} }
} }
@ -128,23 +130,40 @@ public class WinEffectLavaTrap extends WinEffectGadget
_lever.getWorld().playSound(_lever.getLocation(), Sound.CLICK, 0.3f, 0.6f); _lever.getWorld().playSound(_lever.getLocation(), Sound.CLICK, 0.3f, 0.6f);
} }
if(_tick == 20*3 + 1)
{
getBaseLocation().getWorld().playSound(getBaseLocation(), Sound.IRONGOLEM_HIT, 0.2f, 1.6f);
}
if(_tick == 20*3 + 10) if(_tick == 20*3 + 10)
{ {
UtilBlock.getInBoundingBox(a, b.clone().add(0, -1, 0), false).forEach(block -> // UtilBlock.getInBoundingBox(a, b.clone().add(0, -1, 0), false).forEach(block ->
{ // {
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getTypeId()); // block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getTypeId());
//
// block.setType(Material.AIR);
// });
getBaseLocation().getWorld().playSound(getBaseLocation(), Sound.IRONGOLEM_DEATH, 0.2f, 0.5f);
block.setType(Material.AIR); getBaseLocation().getWorld().playSound(getBaseLocation(), Sound.DIG_STONE, 1, 1f);
}); getBaseLocation().getWorld().playSound(getBaseLocation(), Sound.DIG_STONE, 1, 1.2f);
getBaseLocation().getWorld().playSound(getBaseLocation(), Sound.DIG_STONE, 1, 1.8f);
getBaseLocation().getWorld().playSound(getBaseLocation(), Sound.DIG_STONE, 1, 1.5f);
getBaseLocation().getWorld().playSound(getBaseLocation(), Sound.DIG_STONE, 1, 0.5f);
pasteScematic("LavaTrapPodium-part-2");
} }
} }
@EventHandler @EventHandler
public void onPhysics(BlockFromToEvent event) public void onPhysics(BlockFromToEvent event)
{ {
/*
if(!isRunning()) return; if(!isRunning()) return;
if(_webs.contains(event.getToBlock())) event.setCancelled(true); if(_webs.contains(event.getToBlock())) event.setCancelled(true);
*/
} }
@Override @Override
@ -160,6 +179,8 @@ public class WinEffectLavaTrap extends WinEffectGadget
public void buildWinnerRoom(Location loc) public void buildWinnerRoom(Location loc)
{ {
super.buildWinnerRoom(loc);
/*
loc = loc.getBlock().getLocation(); loc = loc.getBlock().getLocation();
Location floorCenter = loc.clone().add(0, -1, 0); Location floorCenter = loc.clone().add(0, -1, 0);
Location floorA = floorCenter.clone().subtract(8, 0, 8); Location floorA = floorCenter.clone().subtract(8, 0, 8);
@ -216,12 +237,14 @@ public class WinEffectLavaTrap extends WinEffectGadget
((CraftChunk)loc.getWorld().getChunkAt(x, z)).getHandle().initLighting(); ((CraftChunk)loc.getWorld().getChunkAt(x, z)).getHandle().initLighting();
} }
} }
*/
} }
@Override @Override
public void teleport(Player player, List<Player> team, List<Player> other, Location loc) public void teleport(Player player, List<Player> team, List<Player> other, Location loc)
{ {
loc = getBaseLocation().add(loc.getDirection().normalize().multiply(4)).add(-0.5, 3, -0.5); Vector dir = loc.getDirection().normalize();
loc = getBaseLocation().add(UtilAlg.getRight(dir).multiply(5)).add(0, 2, 0).subtract(dir);
super.teleport(player, team, other, loc); super.teleport(player, team, other, loc);
} }

View File

@ -28,7 +28,7 @@ public class WinEffectLightningStrike extends WinEffectGadget
@Override @Override
public void play() public void play()
{ {
final DisguisePlayer player = getNPC(this.player, getBaseLocation()); final DisguisePlayer player = getNPC(this._player, getBaseLocation());
Bukkit.getScheduler().runTaskLater(Manager.getPlugin(), Bukkit.getScheduler().runTaskLater(Manager.getPlugin(),
new Runnable() new Runnable()
{ {

View File

@ -40,7 +40,7 @@ public class WinEffectMrPunchMan extends WinEffectGadget
@Override @Override
public void play() public void play()
{ {
_npc = getNPC(player, getBaseLocation()); _npc = getNPC(_player, getBaseLocation());
List<Player> players = new ArrayList<>(); List<Player> players = new ArrayList<>();

View File

@ -35,19 +35,19 @@ public class WinEffectPodium extends WinEffectGadget
@Override @Override
public void play() public void play()
{ {
_baseLocation = _baseLocation.getBlock().getLocation(); // _baseLocation = _baseLocation.getBlock().getLocation();
Location a = getBaseLocation().add(1, 0, 1); // Location a = getBaseLocation().add(1, 0, 1);
Location b = getBaseLocation().add(-2, 0, -2); // Location b = getBaseLocation().add(-2, 0, -2);
UtilBlock.getInBoundingBox(a, b, false).forEach(block -> block.setTypeIdAndData(Material.STAINED_CLAY.getId(), (byte) 4, false)); // UtilBlock.getInBoundingBox(a, b, false).forEach(block -> block.setTypeIdAndData(Material.STAINED_CLAY.getId(), (byte) 4, false));
a = getBaseLocation().add(0, 1, 0); // a = getBaseLocation().add(0, 1, 0);
b = getBaseLocation().add(-1, 0, -1); // b = getBaseLocation().add(-1, 0, -1);
//
// UtilBlock.getInBoundingBox(a, b, false).forEach(block -> block.setTypeIdAndData(Material.STAINED_CLAY.getId(), (byte) 5, false));
UtilBlock.getInBoundingBox(a, b, false).forEach(block -> block.setTypeIdAndData(Material.STAINED_CLAY.getId(), (byte) 5, false)); _npc = getNPC(this._player, getBaseLocation());
_npc = getNPC(this.player, getBaseLocation().add(0, 2, 0));
AnimatorEntity animator = new AnimatorEntity(Manager.getPlugin(), _npc.GetEntity().getBukkitEntity()); AnimatorEntity animator = new AnimatorEntity(Manager.getPlugin(), _npc.GetEntity().getBukkitEntity());

View File

@ -51,8 +51,8 @@ public class WinEffectRiseOfTheElderGuardian extends WinEffectGadget
UtilEnt.setAI(_guardian, false); UtilEnt.setAI(_guardian, false);
Location loc = getBaseLocation(); Location loc = getBaseLocation();
loc.setDirection(player.getLocation().subtract(loc).toVector()); loc.setDirection(_player.getLocation().subtract(loc).toVector());
_npc = getNPC(player, loc); _npc = getNPC(_player, loc);
_npc.setHeldItem(new ItemStack(Material.DIAMOND_SWORD)); _npc.setHeldItem(new ItemStack(Material.DIAMOND_SWORD));
_npc.sendPacket(_npc.getEquipmentPackets().toArray(new Packet[5])); _npc.sendPacket(_npc.getEquipmentPackets().toArray(new Packet[5]));

View File

@ -1,5 +1,6 @@
package mineplex.core.gadget.gadgets.wineffect; package mineplex.core.gadget.gadgets.wineffect;
import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -28,12 +29,13 @@ public class WinEffectSnowTrails extends WinEffectGadget
{ {
super(manager, "Snow Trail", UtilText.splitLinesToArray(new String[] {C.cGray + "Oh the weather outside is frightful.", C.cGray + "But the fire is so delightful.", C.cGray + "And since we've no place to go.", C.cGray + "Let It Snow! Let It Snow! Let It Snow!"}, LineFormat.LORE), super(manager, "Snow Trail", UtilText.splitLinesToArray(new String[] {C.cGray + "Oh the weather outside is frightful.", C.cGray + "But the fire is so delightful.", C.cGray + "And since we've no place to go.", C.cGray + "Let It Snow! Let It Snow! Let It Snow!"}, LineFormat.LORE),
1, Material.SNOW_BALL, (byte) 0); 1, Material.SNOW_BALL, (byte) 0);
_schematicName = "SnowPodium";
} }
@Override @Override
public void play() public void play()
{ {
_loc = getBaseLocation().add(0, 6, 0); _loc = getBaseLocation().add(0, 6, 0);
int i = 0; int i = 0;
@ -44,7 +46,7 @@ public class WinEffectSnowTrails extends WinEffectGadget
start.add(0, 0, r); start.add(0, 0, r);
start.setDirection(new Vector(1, 0, 0)); start.setDirection(new Vector(1, 0, 0));
_npc = getNPC(player, start); _npc = getNPC(_player, start);
AnimatorEntity animator = new AnimatorEntity(Manager.getPlugin(), _npc.GetEntity().getBukkitEntity()); AnimatorEntity animator = new AnimatorEntity(Manager.getPlugin(), _npc.GetEntity().getBukkitEntity());

View File

@ -17,6 +17,7 @@ import org.bukkit.potion.PotionEffectType;
import com.mojang.authlib.GameProfile; import com.mojang.authlib.GameProfile;
import mineplex.core.common.block.schematic.Schematic;
import mineplex.core.common.block.schematic.UtilSchematic; import mineplex.core.common.block.schematic.UtilSchematic;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
@ -27,11 +28,13 @@ import mineplex.core.gadget.GadgetManager;
public abstract class WinEffectGadget extends Gadget public abstract class WinEffectGadget extends Gadget
{ {
protected Player player; protected Player _player;
protected long start; protected long _start;
protected long finish; protected long _finish;
protected Location _baseLocation; protected Location _baseLocation;
protected String _schematicName = "WinRoomPodium";
/** All the players on the winners team. Empty if solo game. */ /** All the players on the winners team. Empty if solo game. */
protected List<Player> team; protected List<Player> team;
/** All the other players on the other teams that didn't win. */ /** All the other players on the other teams that didn't win. */
@ -65,7 +68,7 @@ public abstract class WinEffectGadget extends Gadget
public void runPlay() public void runPlay()
{ {
this.finish = start + 1000*12; this._finish = _start + 1000*12;
play(); play();
} }
@ -87,7 +90,7 @@ public abstract class WinEffectGadget extends Gadget
{ {
finish(); finish();
UtilServer.getPlayersCollection().forEach(p -> {unlockPlayer(p); UtilPlayer.showForAll(p); }); UtilServer.getPlayersCollection().forEach(p -> {unlockPlayer(p); UtilPlayer.showForAll(p); });
player = null; _player = null;
_baseLocation = null; _baseLocation = null;
team.clear(); team.clear();
team = null; team = null;
@ -103,15 +106,15 @@ public abstract class WinEffectGadget extends Gadget
public boolean isRunning() public boolean isRunning()
{ {
if(player == null) return false; if(_player == null) return false;
if(_baseLocation == null) return false; if(_baseLocation == null) return false;
if(System.currentTimeMillis() >= finish) return false; if(System.currentTimeMillis() >= _finish) return false;
return true; return true;
} }
public Player getPlayer() public Player getPlayer()
{ {
return player; return _player;
} }
public Location getBaseLocation() public Location getBaseLocation()
@ -121,24 +124,24 @@ public abstract class WinEffectGadget extends Gadget
public long getStart() public long getStart()
{ {
return start; return _start;
} }
public long getFinish() public long getFinish()
{ {
return finish; return _finish;
} }
public void activate(Player player, List<Player> team, List<Player> nonTeam, Location loc) public void activate(Player player, List<Player> team, List<Player> nonTeam, Location loc)
{ {
this.player = player; this._player = player;
this.team = team; this.team = team;
this.nonTeam = nonTeam; this.nonTeam = nonTeam;
this.other = new ArrayList<>(); this.other = new ArrayList<>();
other.addAll(UtilServer.getPlayersCollection()); other.addAll(UtilServer.getPlayersCollection());
other.remove(player); other.remove(player);
other.removeAll(team); other.removeAll(team);
this.start = System.currentTimeMillis(); this._start = System.currentTimeMillis();
this._baseLocation = loc.clone(); this._baseLocation = loc.clone();
} }
@ -221,14 +224,7 @@ public abstract class WinEffectGadget extends Gadget
// ((CraftChunk)loc.getChunk()).getHandle().initLighting(); // ((CraftChunk)loc.getChunk()).getHandle().initLighting();
*/ */
try pasteScematic(_schematicName);
{
UtilSchematic.loadSchematic(new File("schematic" + File.separator + "WinRoom.schematic")).paste(getBaseLocation(), true);
}
catch (IOException e)
{
e.printStackTrace();
}
} }
@ -248,4 +244,18 @@ public abstract class WinEffectGadget extends Gadget
return disguise; return disguise;
} }
public Schematic pasteScematic(String schematicName) {
try
{
Schematic schematic = UtilSchematic.loadSchematic(new File("schematic" + File.separator + schematicName + ".schematic"));
schematic.paste(getBaseLocation(), false, true);
return schematic;
}
catch(IOException e)
{
e.printStackTrace();
return null;
}
}
} }

View File

@ -63,7 +63,7 @@ public class WinEffectManager
protected void playEffect() { protected void playEffect() {
WinEffectGadget effect = getWinEffect(winner); WinEffectGadget effect = getWinEffect(winner);
effect.teleport(winner, team, other, loc.clone().add(loc.getDirection().normalize().multiply(10)).add(0, 5, 0)); effect.teleport(winner, team, other, loc.clone().add(loc.getDirection().normalize().multiply(10)).add(0, 3, 0));
new BukkitRunnable() { new BukkitRunnable() {
public void run() { public void run() {
game.CreatureAllowOverride = true; game.CreatureAllowOverride = true;