diff --git a/FightSystem_12/pom.xml b/FightSystem_12/pom.xml index 950fc3d..6414e37 100644 --- a/FightSystem_12/pom.xml +++ b/FightSystem_12/pom.xml @@ -32,6 +32,12 @@ FightSystem_8 1.0 + + steamwar + FAWE + 1.0 + provided + steamwar Spigot diff --git a/FightSystem_12/src/de/steamwar/fightsystem/fight/FightTeam_12.java b/FightSystem_12/src/de/steamwar/fightsystem/fight/FightTeam_12.java index 6a11df1..bfd47f0 100644 --- a/FightSystem_12/src/de/steamwar/fightsystem/fight/FightTeam_12.java +++ b/FightSystem_12/src/de/steamwar/fightsystem/fight/FightTeam_12.java @@ -1,16 +1,24 @@ package de.steamwar.fightsystem.fight; +import com.boydti.fawe.FaweAPI; import com.sk89q.worldedit.EditSession; -import com.sk89q.worldedit.MaxChangedBlocksException; +import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.blocks.BaseBlock; +import com.sk89q.worldedit.bukkit.BukkitWorld; +import com.sk89q.worldedit.math.transform.AffineTransform; import com.sk89q.worldedit.regions.CuboidRegion; +import com.sk89q.worldedit.world.World; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.DyeColor; import org.bukkit.Material; import org.bukkit.scoreboard.Team; +import java.io.File; +import java.io.IOException; import java.util.Collections; import java.util.Set; +import java.util.logging.Level; public class FightTeam_12 { private FightTeam_12(){} @@ -35,11 +43,43 @@ public class FightTeam_12 { @SuppressWarnings("deprecation") static void replaceTeamColor(EditSession e, DyeColor c, CuboidRegion region){ FightTeam_8.replaceTeamColor(e, c, region); + e.replaceBlocks(region, CONCRETE_SET, new BaseBlock(CONCRETE.getId(), c.getWoolData())); + e.replaceBlocks(region, CONCRETE_POWDER_SET, new BaseBlock(CONCRETE_POWDER.getId(), c.getWoolData())); + } + + static EditSession pasteSchematic(File file, Vector paste, boolean rotate, boolean alignWater, int waterDepth){ + com.boydti.fawe.object.schematic.Schematic schem; try { - e.replaceBlocks(region, CONCRETE_SET, new BaseBlock(CONCRETE.getId(), c.getWoolData())); - e.replaceBlocks(region, CONCRETE_POWDER_SET, new BaseBlock(CONCRETE_POWDER.getId(), c.getWoolData())); - } catch (MaxChangedBlocksException ex) { - // ignore, will never occur + schem = FaweAPI.load(file); + if(schem.getClipboard() == null) + throw new IOException(); + }catch(IOException e){ + Bukkit.getLogger().log(Level.SEVERE, "Failed loading Schematic", e); + return null; } + + World w = new BukkitWorld(Bukkit.getWorlds().get(0)); + Vector dimensions = schem.getClipboard().getDimensions(); + Vector v; + Vector offset = new Vector(schem.getClipboard().getRegion().getMinimumPoint()).subtract(schem.getClipboard().getOrigin()); + AffineTransform aT = new AffineTransform(); + if(rotate){ + aT = aT.rotateY(180); + v = paste.add(dimensions.getX()/2 + dimensions.getX()%2, 0, dimensions.getZ()/2 + dimensions.getZ()%2).subtract(offset.multiply(-1, 1, -1)).subtract(1, 0, 1); + }else{ + v = paste.subtract(dimensions.getX()/2 - dimensions.getX()%2, 0, dimensions.getZ()/2 - dimensions.getZ()%2).subtract(offset); + } + + if(alignWater){ + Vector it = schem.getClipboard().getMinimumPoint(); + int depth = 0; + while(!schem.getClipboard().getBlock(it).isAir()){ + depth++; + it = it.setY(it.getY()+1); + } + v = v.add(0, waterDepth - depth, 0); + } + + return schem.paste(w, v, false, true, aT); } } diff --git a/FightSystem_12/src/de/steamwar/fightsystem/utils/TechHider_v12.java b/FightSystem_12/src/de/steamwar/fightsystem/utils/TechHider_12.java similarity index 91% rename from FightSystem_12/src/de/steamwar/fightsystem/utils/TechHider_v12.java rename to FightSystem_12/src/de/steamwar/fightsystem/utils/TechHider_12.java index a81959a..ca07526 100644 --- a/FightSystem_12/src/de/steamwar/fightsystem/utils/TechHider_v12.java +++ b/FightSystem_12/src/de/steamwar/fightsystem/utils/TechHider_12.java @@ -6,8 +6,8 @@ import org.bukkit.craftbukkit.v1_12_R1.CraftChunk; import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; import org.bukkit.entity.Player; -class TechHider_v12 { - private TechHider_v12(){} +class TechHider_12 { + private TechHider_12(){} static void reloadChunk(Player p, Pair chunk){ ((CraftPlayer)p).getHandle().playerConnection.sendPacket(new PacketPlayOutMapChunk(((CraftChunk)p.getWorld().getChunkAt(chunk.getKey(), chunk.getValue())).getHandle(), 65535)); diff --git a/FightSystem_8/src/de/steamwar/fightsystem/fight/FightTeam_8.java b/FightSystem_8/src/de/steamwar/fightsystem/fight/FightTeam_8.java index 3e6e8cc..ef10ebe 100644 --- a/FightSystem_8/src/de/steamwar/fightsystem/fight/FightTeam_8.java +++ b/FightSystem_8/src/de/steamwar/fightsystem/fight/FightTeam_8.java @@ -1,17 +1,29 @@ package de.steamwar.fightsystem.fight; -import com.sk89q.worldedit.EditSession; -import com.sk89q.worldedit.MaxChangedBlocksException; +import com.sk89q.worldedit.*; import com.sk89q.worldedit.blocks.BaseBlock; +import com.sk89q.worldedit.bukkit.BukkitWorld; import com.sk89q.worldedit.regions.CuboidRegion; +import com.sk89q.worldedit.schematic.SchematicFormat; +import com.sk89q.worldedit.world.DataException; +import com.sk89q.worldedit.world.World; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.DyeColor; import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.HandlerList; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockPhysicsEvent; +import org.bukkit.plugin.Plugin; import org.bukkit.scoreboard.NameTagVisibility; import org.bukkit.scoreboard.Team; +import java.io.File; +import java.io.IOException; import java.util.Collections; import java.util.Set; +import java.util.logging.Level; class FightTeam_8 { private FightTeam_8(){} @@ -49,4 +61,55 @@ class FightTeam_8 { // ignore, will never occur } } + + static EditSession pasteSchematic(File file, Vector paste, boolean rotate, boolean alignWater, int waterDepth, Plugin plugin){ + CuboidClipboard clipboard; + + try { + clipboard = SchematicFormat.getFormat(file).load(file); + }catch(IOException | DataException e){ + Bukkit.getLogger().log(Level.SEVERE, "Failed loading Schematic", e); + return null; + } + + World w = new BukkitWorld(Bukkit.getWorlds().get(0)); + Vector dimensions = clipboard.getSize(); + Vector v; + Vector offset = new Vector(clipboard.getOffset()); + if(rotate){ + clipboard.rotate2D(180); + v = paste.add(dimensions.getX()/2 + dimensions.getX()%2, 0, dimensions.getZ()/2 + dimensions.getZ()%2).subtract(offset.multiply(-1, 1, -1)).subtract(1, 0, 1); + }else{ + v = paste.subtract(dimensions.getX()/2 - dimensions.getX()%2, 0, dimensions.getZ()/2 - dimensions.getZ()%2).subtract(offset); + } + + if(alignWater){ + Vector it = Vector.ZERO; + int depth = 0; + while(!clipboard.getBlock(it).isAir()){ + depth++; + it = it.setY(it.getY()+1); + } + v = v.add(0, waterDepth - depth, 0); + } + + EditSession e = WorldEdit.getInstance().getEditSessionFactory().getEditSession(w, -1); + FreezeWorld freezer = new FreezeWorld(); + Bukkit.getPluginManager().registerEvents(freezer, plugin); + try { + clipboard.paste(e, v, false, true); + } catch (MaxChangedBlocksException ex) { + //ignore + } + e.flushQueue(); + HandlerList.unregisterAll(freezer); + return e; + } + + static class FreezeWorld implements Listener{ + @EventHandler + public void onBlockPhysicsEvent(BlockPhysicsEvent e){ + e.setCancelled(true); + } + } } diff --git a/FightSystem_8/src/de/steamwar/fightsystem/utils/TechHider_v8.java b/FightSystem_8/src/de/steamwar/fightsystem/utils/TechHider_8.java similarity index 91% rename from FightSystem_8/src/de/steamwar/fightsystem/utils/TechHider_v8.java rename to FightSystem_8/src/de/steamwar/fightsystem/utils/TechHider_8.java index f8944b4..a9dcc61 100644 --- a/FightSystem_8/src/de/steamwar/fightsystem/utils/TechHider_v8.java +++ b/FightSystem_8/src/de/steamwar/fightsystem/utils/TechHider_8.java @@ -6,8 +6,8 @@ import org.bukkit.craftbukkit.v1_8_R3.CraftChunk; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; import org.bukkit.entity.Player; -class TechHider_v8 { - private TechHider_v8(){} +class TechHider_8 { + private TechHider_8(){} static void reloadChunk(Player p, Pair chunk){ ((CraftPlayer)p).getHandle().playerConnection.sendPacket(new PacketPlayOutMapChunk(((CraftChunk)p.getWorld().getChunkAt(chunk.getKey(), chunk.getValue())).getHandle(), true, 65535)); diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/fight/FightTeam.java b/FightSystem_Main/src/de/steamwar/fightsystem/fight/FightTeam.java index 671998d..835624e 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/fight/FightTeam.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/fight/FightTeam.java @@ -1,12 +1,8 @@ package de.steamwar.fightsystem.fight; -import com.boydti.fawe.FaweAPI; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.Vector; -import com.sk89q.worldedit.bukkit.BukkitWorld; -import com.sk89q.worldedit.math.transform.AffineTransform; import com.sk89q.worldedit.regions.CuboidRegion; -import com.sk89q.worldedit.world.World; import de.steamwar.core.Core; import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.kit.KitManager; @@ -21,12 +17,10 @@ import org.bukkit.inventory.Inventory; import org.bukkit.scoreboard.Team; import java.io.File; -import java.io.IOException; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.UUID; -import java.util.logging.Level; public class FightTeam { @@ -207,39 +201,14 @@ public class FightTeam { private void pasteSchematic(){ File file = new File(Config.SchematicDirectory + SteamwarUser.get(schematic.getSchemOwner()).getUUID().toString(), schematic.getSchemName() + ".schematic"); - com.boydti.fawe.object.schematic.Schematic schem; - try { - schem = FaweAPI.load(file); - if(schem.getClipboard() == null) - throw new IOException(); - }catch(IOException e){ - Bukkit.getLogger().log(Level.SEVERE, "Failed loading Schematic", e); - return; + EditSession e; + switch(Core.getVersion()){ + case 8: + e = FightTeam_8.pasteSchematic(file, paste, rotate, Config.AlignWater, Config.WaterDepth, FightSystem.getPlugin()); + break; + default: + e = FightTeam_12.pasteSchematic(file, paste, rotate, Config.AlignWater, Config.WaterDepth); } - - World w = new BukkitWorld(Bukkit.getWorlds().get(0)); - Vector dimensions = schem.getClipboard().getDimensions(); - Vector v; - Vector offset = new Vector(schem.getClipboard().getRegion().getMinimumPoint()).subtract(schem.getClipboard().getOrigin()); - AffineTransform aT = new AffineTransform(); - if(rotate){ - aT = aT.rotateY(180); - v = paste.add(dimensions.getX()/2 + dimensions.getX()%2, 0, dimensions.getZ()/2 + dimensions.getZ()%2).subtract(offset.multiply(-1, 1, -1)).subtract(1, 0, 1); - }else{ - v = paste.subtract(dimensions.getX()/2 - dimensions.getX()%2, 0, dimensions.getZ()/2 - dimensions.getZ()%2).subtract(offset); - } - - if(Config.AlignWater){ - Vector it = schem.getClipboard().getMinimumPoint(); - int depth = 0; - while(!schem.getClipboard().getBlock(it).isAir()){ - depth++; - it = it.setY(it.getY()+1); - } - v = v.add(0, Config.WaterDepth - depth, 0); - } - - EditSession e = schem.paste(w, v, false, true, aT); replaceTeamColor(e); Bukkit.getScheduler().runTaskLater(FightSystem.getPlugin(), this::teleportToSpawn,40); } diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/kit/Kit.java b/FightSystem_Main/src/de/steamwar/fightsystem/kit/Kit.java index c57b83d..e54c323 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/kit/Kit.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/kit/Kit.java @@ -9,12 +9,14 @@ public class Kit { private boolean leaderAllowed; private boolean memberAllowed; private ItemStack[] inventory; + private ItemStack[] armor; - Kit(String name, boolean leaderAllowed, boolean memberAllowed, ItemStack[] inventory) { + Kit(String name, boolean leaderAllowed, boolean memberAllowed, ItemStack[] inventory, ItemStack[] armor) { this.name = name; this.leaderAllowed = leaderAllowed; this.memberAllowed = memberAllowed; this.inventory = inventory; + this.armor = armor; } public String getName() { @@ -33,8 +35,14 @@ public class Kit { return inventory; } + ItemStack[] getArmor(){ + return armor; + } + public void loadToPlayer(Player player) { player.getInventory().setContents(inventory); + if(armor != null) + player.getInventory().setArmorContents(armor); player.updateInventory(); } } diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/kit/KitManager.java b/FightSystem_Main/src/de/steamwar/fightsystem/kit/KitManager.java index f877c88..12b912e 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/kit/KitManager.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/kit/KitManager.java @@ -24,7 +24,7 @@ public class KitManager { private static final ArrayList loadedKits = new ArrayList<>(); public static void saveInventory(String kitName, Player player){ - loadedKits.add(new Kit(kitName, true, true, player.getInventory().getContents())); + loadedKits.add(new Kit(kitName, true, true, player.getInventory().getContents(), player.getInventory().getArmorContents())); saveAllKits(); } @@ -33,10 +33,14 @@ public class KitManager { if(kitData.contains(path)) { List items = (List) kitData.getList(path + ".Items"); + ItemStack[] armor = null; + if(kitData.isList(path + ".Armor")) + armor = kitData.getList(path + ".Armor").toArray(new ItemStack[1]); + boolean leaderAllowed = kitData.getBoolean(path + ".LeaderAllowed"); boolean memberAllowed = kitData.getBoolean(path + ".MemberAllowed"); - return new Kit(name, leaderAllowed, memberAllowed, items.toArray(new ItemStack[1])); + return new Kit(name, leaderAllowed, memberAllowed, items.toArray(new ItemStack[1]), armor); } return null; } @@ -61,6 +65,8 @@ public class KitManager { for(Kit k : loadedKits){ String path = "Kits." + k.getName(); yamlConfiguration.set(path + ".Items", k.getInventory()); + if(k.getArmor() != null) + yamlConfiguration.set(path + ".Armor", k.getArmor()); yamlConfiguration.set(path + ".LeaderAllowed", k.isLeaderAllowed()); yamlConfiguration.set(path + ".MemberAllowed", k.isMemberAllowed()); } diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/utils/TechHider.java b/FightSystem_Main/src/de/steamwar/fightsystem/utils/TechHider.java index 47cff33..b204a92 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/utils/TechHider.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/utils/TechHider.java @@ -104,15 +104,20 @@ public class TechHider { return; running = true; - if(disabled() || Core.getVersion() != 12) + if(disabled()) return; Bukkit.getScheduler().runTaskTimer(FightSystem.getPlugin(), packetCache::clear, 1, 1); - chunkHider(); - multiBlockHider(); - blockHider(); - blockActionHider(); + switch(Core.getVersion()){ + case 8: + break; + default: + chunkHider(); + multiBlockHider(); + blockHider(); + blockActionHider(); + } } private static boolean bypass(Player p, int chunkX, int chunkZ){ @@ -368,10 +373,10 @@ public class TechHider { private static void reloadChunk(Player p, Pair chunk){ switch(Core.getVersion()){ case 8: - TechHider_v8.reloadChunk(p, chunk); + TechHider_8.reloadChunk(p, chunk); break; default: - TechHider_v12.reloadChunk(p, chunk); + TechHider_12.reloadChunk(p, chunk); } } diff --git a/pom.xml b/pom.xml index a329df0..2b894a4 100644 --- a/pom.xml +++ b/pom.xml @@ -54,12 +54,6 @@ 1.0 provided - - steamwar - FAWE - 1.0 - provided - steamwar ProtocolLib