The big refactoring #238
@ -22,8 +22,13 @@ package de.steamwar.fightsystem.fight;
|
||||
import com.sk89q.worldedit.EditSession;
|
||||
import com.sk89q.worldedit.MaxChangedBlocksException;
|
||||
import com.sk89q.worldedit.WorldEdit;
|
||||
import com.sk89q.worldedit.WorldEditException;
|
||||
import com.sk89q.worldedit.bukkit.BukkitWorld;
|
||||
import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard;
|
||||
import com.sk89q.worldedit.extent.clipboard.Clipboard;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.BuiltInClipboardFormat;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardWriter;
|
||||
import com.sk89q.worldedit.function.operation.ForwardExtentCopy;
|
||||
import com.sk89q.worldedit.function.operation.Operations;
|
||||
import com.sk89q.worldedit.math.BlockVector3;
|
||||
import com.sk89q.worldedit.math.transform.AffineTransform;
|
||||
@ -39,14 +44,17 @@ import de.steamwar.sql.Schematic;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.scoreboard.Team;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
class FightTeam_14 {
|
||||
public class FightTeam_14 {
|
||||
private FightTeam_14(){}
|
||||
|
||||
private static final Set<BaseBlock> WOOL_SET = Collections.singleton(Objects.requireNonNull(BlockTypes.PINK_WOOL).getDefaultState().toBaseBlock());
|
||||
@ -78,8 +86,8 @@ class FightTeam_14 {
|
||||
e.flushSession();
|
||||
}
|
||||
|
||||
static EditSession pasteSchematic(Clipboard clipboard, int pX, int pY, int pZ, boolean rotate) throws Schematic.WrongVersionException, IOException, NoClipboardException {
|
||||
BlockVector3 paste = BlockVector3.at(pX, pY, pZ);
|
||||
static EditSession pasteSchematic(Clipboard clipboard, Region region, boolean rotate) throws Schematic.WrongVersionException, IOException, NoClipboardException {
|
||||
BlockVector3 paste = BlockVector3.at(region.centerX(), region.getMinY(), region.centerZ());
|
||||
|
||||
World w = new BukkitWorld(Bukkit.getWorlds().get(0));
|
||||
BlockVector3 dimensions = clipboard.getDimensions();
|
||||
@ -93,7 +101,7 @@ class FightTeam_14 {
|
||||
v = paste.subtract(dimensions.getX()/2, 0, dimensions.getZ()/2).subtract(offset);
|
||||
}
|
||||
|
||||
if(Config.AlignWater){
|
||||
if(Config.WaterDepth != 0){
|
||||
BlockVector3 it = clipboard.getMinimumPoint();
|
||||
int depth = 0;
|
||||
while(!clipboard.getBlock(it).getBlockType().getMaterial().isAir()){
|
||||
@ -110,4 +118,35 @@ class FightTeam_14 {
|
||||
e.flushSession();
|
||||
return e;
|
||||
}
|
||||
|
||||
public static boolean checkPistonMoving(Block block){
|
||||
return block.getType() == Material.MOVING_PISTON;
|
||||
}
|
||||
|
||||
public static void saveSchem(Schematic schem, Region region) {
|
||||
World w = new BukkitWorld(Bukkit.getWorlds().get(0));
|
||||
BlockVector3 min = BlockVector3.at(region.getMinX(), region.getMinY(), region.getMinZ());
|
||||
CuboidRegion cuboidRegion = new CuboidRegion(w, min, BlockVector3.at(region.getMaxX(), region.getMaxY(), region.getMaxZ()));
|
||||
BlockArrayClipboard clipboard = new BlockArrayClipboard(cuboidRegion);
|
||||
EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(w, -1);
|
||||
|
||||
ForwardExtentCopy forwardExtentCopy = new ForwardExtentCopy(editSession, cuboidRegion, clipboard, min);
|
||||
forwardExtentCopy.setCopyingEntities(false);
|
||||
try{
|
||||
Operations.complete(forwardExtentCopy);
|
||||
}catch(WorldEditException e){
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
|
||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
try {
|
||||
ClipboardWriter writer = BuiltInClipboardFormat.SPONGE_SCHEMATIC.getWriter(outputStream);
|
||||
writer.write(clipboard);
|
||||
writer.close();
|
||||
} catch (IOException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
|
||||
schem.saveFromBytes(outputStream.toByteArray(), true);
|
||||
}
|
||||
}
|
||||
|
@ -30,10 +30,7 @@ import de.steamwar.fightsystem.Config;
|
||||
import de.steamwar.fightsystem.IFightSystem;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.UnpooledByteBufAllocator;
|
||||
import net.minecraft.server.v1_14_R1.Block;
|
||||
import net.minecraft.server.v1_14_R1.IBlockData;
|
||||
import net.minecraft.server.v1_14_R1.IRegistry;
|
||||
import net.minecraft.server.v1_14_R1.MinecraftKey;
|
||||
import net.minecraft.server.v1_14_R1.*;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
@ -54,6 +51,16 @@ public class TechHider_14 {
|
||||
hiddenBlockIds.add(Block.getCombinedId(data));
|
||||
}
|
||||
}
|
||||
|
||||
if(Config.HiddenBlocks.contains("water")){
|
||||
Fluid water = FluidTypes.WATER.a(false);
|
||||
for(IBlockData data : Block.REGISTRY_ID){
|
||||
if(data.p() == water){
|
||||
hiddenBlockIds.add(Block.getCombinedId(data));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return hiddenBlockIds;
|
||||
}
|
||||
|
||||
|
@ -20,10 +20,7 @@
|
||||
package de.steamwar.fightsystem.utils;
|
||||
|
||||
import de.steamwar.fightsystem.Config;
|
||||
import net.minecraft.server.v1_15_R1.Block;
|
||||
import net.minecraft.server.v1_15_R1.IBlockData;
|
||||
import net.minecraft.server.v1_15_R1.IRegistry;
|
||||
import net.minecraft.server.v1_15_R1.MinecraftKey;
|
||||
import net.minecraft.server.v1_15_R1.*;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
@ -38,6 +35,16 @@ class TechHider_15 {
|
||||
hiddenBlockIds.add(Block.getCombinedId(data));
|
||||
}
|
||||
}
|
||||
|
||||
if(Config.HiddenBlocks.contains("water")){
|
||||
Fluid water = FluidTypes.WATER.a(false);
|
||||
for(IBlockData data : Block.REGISTRY_ID){
|
||||
if(data.getFluid() == water){
|
||||
hiddenBlockIds.add(Block.getCombinedId(data));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return hiddenBlockIds;
|
||||
}
|
||||
|
||||
|
@ -19,13 +19,14 @@
|
||||
|
||||
package de.steamwar.fightsystem.fight;
|
||||
|
||||
import com.sk89q.worldedit.EditSession;
|
||||
import com.sk89q.worldedit.MaxChangedBlocksException;
|
||||
import com.sk89q.worldedit.Vector;
|
||||
import com.sk89q.worldedit.WorldEdit;
|
||||
import com.sk89q.worldedit.*;
|
||||
import com.sk89q.worldedit.blocks.BaseBlock;
|
||||
import com.sk89q.worldedit.bukkit.BukkitWorld;
|
||||
import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard;
|
||||
import com.sk89q.worldedit.extent.clipboard.Clipboard;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardWriter;
|
||||
import com.sk89q.worldedit.function.operation.ForwardExtentCopy;
|
||||
import com.sk89q.worldedit.function.operation.Operations;
|
||||
import com.sk89q.worldedit.math.transform.AffineTransform;
|
||||
import com.sk89q.worldedit.regions.CuboidRegion;
|
||||
@ -39,13 +40,15 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.scoreboard.Team;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
|
||||
class FightTeam_8 {
|
||||
public class FightTeam_8 {
|
||||
private FightTeam_8(){}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@ -87,10 +90,10 @@ class FightTeam_8 {
|
||||
e.flushQueue();
|
||||
}
|
||||
|
||||
static EditSession pasteSchematic(Clipboard clipboard, int pasteX, int pasteY, int pasteZ, boolean rotate) throws Schematic.WrongVersionException, IOException, NoClipboardException {
|
||||
static EditSession pasteSchematic(Clipboard clipboard, Region paste, boolean rotate) throws Schematic.WrongVersionException, IOException, NoClipboardException {
|
||||
World w = new BukkitWorld(Bukkit.getWorlds().get(0));
|
||||
Vector dimensions = clipboard.getDimensions();
|
||||
Vector v = new Vector(pasteX, pasteY, pasteZ);
|
||||
Vector v = new Vector(paste.centerX(), paste.getMinY(), paste.centerZ());
|
||||
Vector offset = clipboard.getMinimumPoint().subtract(clipboard.getOrigin());
|
||||
AffineTransform aT = new AffineTransform();
|
||||
if(rotate){
|
||||
@ -100,7 +103,7 @@ class FightTeam_8 {
|
||||
v = v.subtract(dimensions.getX()/2 - dimensions.getX()%2, 0, dimensions.getZ()/2 - dimensions.getZ()%2).subtract(offset);
|
||||
}
|
||||
|
||||
if(Config.AlignWater){
|
||||
if(Config.WaterDepth != 0){
|
||||
Vector it = clipboard.getMinimumPoint();
|
||||
int depth = 0;
|
||||
while(!clipboard.getBlock(it).isAir()){
|
||||
@ -117,4 +120,35 @@ class FightTeam_8 {
|
||||
e.flushQueue();
|
||||
return e;
|
||||
}
|
||||
|
||||
public static boolean checkPistonMoving(Block block){
|
||||
return block.getType() == Material.PISTON_MOVING_PIECE;
|
||||
}
|
||||
|
||||
public static void saveSchem(Schematic schem, Region region) {
|
||||
World w = new BukkitWorld(Bukkit.getWorlds().get(0));
|
||||
Vector min = new Vector(region.getMinX(), region.getMinY(), region.getMinZ());
|
||||
CuboidRegion cuboidRegion = new CuboidRegion(w, min, new Vector(region.getMaxX(), region.getMaxY(), region.getMaxZ()));
|
||||
BlockArrayClipboard clipboard = new BlockArrayClipboard(cuboidRegion);
|
||||
EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(w, -1);
|
||||
|
||||
ForwardExtentCopy forwardExtentCopy = new ForwardExtentCopy(editSession, cuboidRegion, clipboard, min);
|
||||
forwardExtentCopy.setCopyingEntities(false);
|
||||
try{
|
||||
Operations.complete(forwardExtentCopy);
|
||||
}catch(WorldEditException e){
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
|
||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
try {
|
||||
ClipboardWriter writer = ClipboardFormat.SCHEMATIC.getWriter(outputStream);
|
||||
writer.write(clipboard, w.getWorldData());
|
||||
writer.close();
|
||||
} catch (IOException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
|
||||
schem.saveFromBytes(outputStream.toByteArray(), false);
|
||||
}
|
||||
}
|
||||
|
@ -61,12 +61,11 @@ public class Config {
|
||||
public static final Location TeamRedSpawn;
|
||||
public static final Location SpecSpawn;
|
||||
|
||||
private static final int TeamBluetoReddistanceX;
|
||||
private static final int TeamBluetoReddistanceY;
|
||||
public static final int TeamBluetoReddistanceZ;
|
||||
private static final int BlueToRedX;
|
||||
private static final int BlueToRedY;
|
||||
public static final int BlueToRedZ;
|
||||
|
||||
public static final int BorderFromSchematic;
|
||||
public static final boolean AlignWater;
|
||||
public static final int PreperationArea;
|
||||
public static final int WaterDepth;
|
||||
public static final boolean GroundWalkable;
|
||||
|
||||
@ -77,6 +76,7 @@ public class Config {
|
||||
public static final de.steamwar.sql.SchematicType SchematicType;
|
||||
public static final boolean RedRotate;
|
||||
public static final boolean BlueRotate;
|
||||
public static final boolean PasteAligned;
|
||||
public static final boolean ReplaceObsidianBedrock;
|
||||
public static final boolean ReplaceWithBlockupdates;
|
||||
|
||||
@ -134,14 +134,14 @@ public class Config {
|
||||
if(!new File(IFightSystem.getPlugin().getDataFolder(), System.getProperty("config", "config.yml")).exists()) {
|
||||
IFightSystem.getPlugin().saveDefaultConfig();
|
||||
Bukkit.getLogger().log(Level.SEVERE, "Arenaconfig fehlt!");
|
||||
IFightSystem.shutdown(null);
|
||||
Bukkit.shutdown();
|
||||
}
|
||||
FileConfiguration config = IFightSystem.getPlugin().getConfig();
|
||||
|
||||
File worldConfigFile = new File(Bukkit.getWorlds().get(0).getWorldFolder(), config.getString("Arenaconfig", "config.yml"));
|
||||
if(!worldConfigFile.exists()) {
|
||||
Bukkit.getLogger().log(Level.SEVERE, "Weltconfig fehlt!");
|
||||
IFightSystem.shutdown(null);
|
||||
Bukkit.shutdown();
|
||||
}
|
||||
FileConfiguration worldconfig = YamlConfiguration.loadConfiguration(worldConfigFile);
|
||||
|
||||
@ -151,30 +151,30 @@ public class Config {
|
||||
PreFightDuration = config.getInt("Times.PreFightDuration");
|
||||
SpectatorDuration = config.getInt("Times.SpectatorDuration");
|
||||
|
||||
int underBorder = worldconfig.getInt("UnderBorder");
|
||||
int blueCornerX = worldconfig.getInt("BlueCorner.x");
|
||||
int blueCornerY = worldconfig.getInt("BlueCorner.y");
|
||||
int blueCornerZ = worldconfig.getInt("BlueCorner.z");
|
||||
BlueToRedX = worldconfig.getInt("BlueToRed.x");
|
||||
BlueToRedY = worldconfig.getInt("BlueToRed.y");
|
||||
BlueToRedZ = worldconfig.getInt("BlueToRed.z");
|
||||
double teamBlueSpawnOffsetX = worldconfig.getDouble("SpawnOffset.x");
|
||||
double teamBlueSpawnOffsetY = worldconfig.getDouble("SpawnOffset.y");
|
||||
double teamBlueSpawnOffsetZ = worldconfig.getDouble("SpawnOffset.z");
|
||||
WaterDepth = config.getInt("Arena.WaterDepth");
|
||||
int schemsizeX = config.getInt("Arena.Schemsize.x");
|
||||
int schemsizeY = config.getInt("Arena.Schemsize.y");
|
||||
int schemsizeZ = config.getInt("Arena.Schemsize.z");
|
||||
int teamBlueCornerX = worldconfig.getInt("Arena.TeamBlueCorner.x");
|
||||
int teamBlueCornerY = worldconfig.getInt("Arena.TeamBlueCorner.y");
|
||||
int teamBlueCornerZ = worldconfig.getInt("Arena.TeamBlueCorner.z");
|
||||
TeamBluetoReddistanceX = worldconfig.getInt("Arena.TeamBluetoReddistance.x");
|
||||
TeamBluetoReddistanceY = worldconfig.getInt("Arena.TeamBluetoReddistance.y");
|
||||
TeamBluetoReddistanceZ = worldconfig.getInt("Arena.TeamBluetoReddistance.z");
|
||||
int schem2BorderX = config.getInt("Arena.Schem2Border.x");
|
||||
int schem2BorderZ = config.getInt("Arena.Schem2Border.z");
|
||||
int underArenaBorder = worldconfig.getInt("Arena.underArenaBorder");
|
||||
BorderFromSchematic = config.getInt("Arena.BorderFromSchematic");
|
||||
AlignWater = worldconfig.getBoolean("Arena.AlignWater");
|
||||
WaterDepth = worldconfig.getInt("Arena.WaterDepth");
|
||||
PreperationArea = config.getInt("Arena.BorderFromSchematic");
|
||||
GroundWalkable = config.getBoolean("Arena.GroundWalkable");
|
||||
double teamBlueSpawnOffsetX = worldconfig.getDouble("Arena.SpawnOffset.x");
|
||||
double teamBlueSpawnOffsetY = worldconfig.getDouble("Arena.SpawnOffset.y");
|
||||
double teamBlueSpawnOffsetZ = worldconfig.getDouble("Arena.SpawnOffset.z");
|
||||
|
||||
RanksEnabled = config.getBoolean("Schematic.RanksEnabled");
|
||||
SchematicType = de.steamwar.sql.SchematicType.fromDB(config.getString("Schematic.SchematicType"));
|
||||
IgnorePublicOnly = config.getBoolean("Schematic.IgnorePublicOnly");
|
||||
boolean rotate = config.getBoolean("Schematic.Rotate");
|
||||
PasteAligned = config.getBoolean("Schematic.PasteAligned");
|
||||
ReplaceObsidianBedrock = config.getBoolean("Schematic.ReplaceObsidianBedrock");
|
||||
ReplaceWithBlockupdates = config.getBoolean("Schematic.ReplaceWithBlockupdates");
|
||||
|
||||
@ -202,32 +202,32 @@ public class Config {
|
||||
|
||||
if(schemsizeX < 0){
|
||||
schemsizeX = -schemsizeX;
|
||||
teamBlueCornerX = teamBlueCornerX - schemsizeX;
|
||||
blueCornerX = blueCornerX - schemsizeX;
|
||||
}
|
||||
if(schemsizeY < 0){
|
||||
schemsizeY = -schemsizeY;
|
||||
teamBlueCornerY = teamBlueCornerY - schemsizeY;
|
||||
blueCornerY = blueCornerY - schemsizeY;
|
||||
}
|
||||
if(schemsizeZ < 0){
|
||||
schemsizeZ = -schemsizeZ;
|
||||
teamBlueCornerZ = teamBlueCornerZ - schemsizeZ;
|
||||
blueCornerZ = blueCornerZ - schemsizeZ;
|
||||
}
|
||||
|
||||
|
||||
int teamRedCornerX = TeamBluetoReddistanceX + teamBlueCornerX;
|
||||
int teamRedCornerY = TeamBluetoReddistanceY + teamBlueCornerY;
|
||||
int teamRedCornerZ = TeamBluetoReddistanceZ + teamBlueCornerZ;
|
||||
int teamRedCornerX = BlueToRedX + blueCornerX;
|
||||
int teamRedCornerY = BlueToRedY + blueCornerY;
|
||||
int teamRedCornerZ = BlueToRedZ + blueCornerZ;
|
||||
|
||||
int teamBluePasteX = teamBlueCornerX + schemsizeX / 2;
|
||||
int teamBluePasteZ = teamBlueCornerZ + schemsizeZ / 2;
|
||||
int teamRedPasteX = teamBluePasteX + TeamBluetoReddistanceX;
|
||||
int teamRedPasteZ = teamBluePasteZ + TeamBluetoReddistanceZ;
|
||||
int teamBluePasteX = blueCornerX + schemsizeX / 2;
|
||||
int teamBluePasteZ = blueCornerZ + schemsizeZ / 2;
|
||||
int teamRedPasteX = teamBluePasteX + BlueToRedX;
|
||||
int teamRedPasteZ = teamBluePasteZ + BlueToRedZ;
|
||||
|
||||
World world = Bukkit.getWorlds().get(0);
|
||||
|
||||
TeamBlueSpawn = new Location(world,
|
||||
teamBluePasteX + 0.5 + teamBlueSpawnOffsetX,
|
||||
teamBlueCornerY + 0.5 + teamBlueSpawnOffsetY,
|
||||
blueCornerY + 0.5 + teamBlueSpawnOffsetY,
|
||||
teamBluePasteZ + 0.5 + teamBlueSpawnOffsetZ);
|
||||
|
||||
TeamRedSpawn = new Location(world,
|
||||
@ -236,9 +236,9 @@ public class Config {
|
||||
teamRedPasteZ + 0.5 - teamBlueSpawnOffsetZ);
|
||||
|
||||
SpecSpawn = new Location(world,
|
||||
teamBluePasteX + TeamBluetoReddistanceX/2.0,
|
||||
teamBlueCornerY + TeamBluetoReddistanceY/2.0 + schemsizeY/2.0,
|
||||
teamBluePasteZ + TeamBluetoReddistanceZ/2.0);
|
||||
teamBluePasteX + BlueToRedX /2.0,
|
||||
blueCornerY + BlueToRedY /2.0 + schemsizeY/2.0,
|
||||
teamBluePasteZ + BlueToRedZ /2.0);
|
||||
|
||||
Vector v1 = TeamBlueSpawn.toVector().subtract(TeamRedSpawn.toVector());
|
||||
double pitch = Math.toDegrees(v1.angle(v1.clone().setY(0)));
|
||||
@ -257,26 +257,26 @@ public class Config {
|
||||
int arenaMaxX;
|
||||
int arenaMinZ;
|
||||
int arenaMaxZ;
|
||||
if(TeamBluetoReddistanceX > 0){
|
||||
arenaMinX = teamBlueCornerX - schem2BorderX;
|
||||
if(BlueToRedX > 0){
|
||||
arenaMinX = blueCornerX - schem2BorderX;
|
||||
arenaMaxX = teamRedCornerX + schemsizeX + schem2BorderX;
|
||||
teamRedRotate = true;
|
||||
teamBlueRotate = false;
|
||||
}else{
|
||||
arenaMinX = teamRedCornerX - schem2BorderX;
|
||||
arenaMaxX = teamBlueCornerX + schemsizeX + schem2BorderX;
|
||||
arenaMaxX = blueCornerX + schemsizeX + schem2BorderX;
|
||||
teamRedRotate = false;
|
||||
teamBlueRotate = true;
|
||||
}
|
||||
if(TeamBluetoReddistanceZ > 0){
|
||||
arenaMinZ = teamBlueCornerZ - schem2BorderZ;
|
||||
if(BlueToRedZ > 0){
|
||||
arenaMinZ = blueCornerZ - schem2BorderZ;
|
||||
arenaMaxZ = teamRedCornerZ + schemsizeZ + schem2BorderZ;
|
||||
teamRedRotate = true;
|
||||
teamBlueRotate = false;
|
||||
}else{
|
||||
arenaMinZ = teamRedCornerZ - schem2BorderZ;
|
||||
arenaMaxZ = teamBlueCornerZ + schemsizeZ + schem2BorderZ;
|
||||
if(TeamBluetoReddistanceZ != 0){
|
||||
arenaMaxZ = blueCornerZ + schemsizeZ + schem2BorderZ;
|
||||
if(BlueToRedZ != 0){
|
||||
teamRedRotate = false;
|
||||
teamBlueRotate = true;
|
||||
}
|
||||
@ -289,19 +289,19 @@ public class Config {
|
||||
BlueRotate = teamBlueRotate;
|
||||
|
||||
RedPasteRegion = new Region(teamRedCornerX, teamRedCornerY, teamRedCornerZ, schemsizeX, schemsizeY, schemsizeZ);
|
||||
BluePasteRegion = new Region(teamBlueCornerX, teamBlueCornerY, teamBlueCornerZ, schemsizeX, schemsizeY, schemsizeZ);
|
||||
BluePasteRegion = new Region(blueCornerX, blueCornerY, blueCornerZ, schemsizeX, schemsizeY, schemsizeZ);
|
||||
|
||||
RedExtendRegion = new Region(teamRedCornerX, underArenaBorder, teamRedCornerZ, schemsizeX, schemsizeY, schemsizeZ, BorderFromSchematic, BorderFromSchematic);
|
||||
BlueExtendRegion = new Region(teamBlueCornerX, underArenaBorder, teamBlueCornerZ, schemsizeX, schemsizeY, schemsizeZ, BorderFromSchematic, BorderFromSchematic);
|
||||
int upperArenaBorder = teamBlueCornerY + schemsizeY + BorderFromSchematic;
|
||||
ArenaRegion = new Region(arenaMinX, underArenaBorder, arenaMinZ, arenaMaxX - arenaMinX, upperArenaBorder - underArenaBorder, arenaMaxZ - arenaMinZ);
|
||||
RedExtendRegion = new Region(teamRedCornerX, underBorder, teamRedCornerZ, schemsizeX, schemsizeY, schemsizeZ, PreperationArea, PreperationArea);
|
||||
BlueExtendRegion = new Region(blueCornerX, underBorder, blueCornerZ, schemsizeX, schemsizeY, schemsizeZ, PreperationArea, PreperationArea);
|
||||
int upperArenaBorder = blueCornerY + schemsizeY + PreperationArea;
|
||||
ArenaRegion = new Region(arenaMinX, underBorder, arenaMinZ, arenaMaxX - arenaMinX, upperArenaBorder - underBorder, arenaMaxZ - arenaMinZ);
|
||||
|
||||
EventKampfID = Integer.parseInt(System.getProperty("fightID", "0"));
|
||||
if(EventKampfID >= 1){
|
||||
EventFight eventFight = EventFight.get(EventKampfID);
|
||||
if(eventFight == null){
|
||||
Bukkit.getLogger().log(Level.SEVERE, "Failed to load EventFight");
|
||||
IFightSystem.shutdown(null);
|
||||
Bukkit.shutdown();
|
||||
}
|
||||
|
||||
assert eventFight != null;
|
||||
@ -310,7 +310,7 @@ public class Config {
|
||||
|
||||
if(team1 == null || team2 == null){
|
||||
Bukkit.getLogger().log(Level.SEVERE, "Failed to load Team");
|
||||
IFightSystem.shutdown(null);
|
||||
Bukkit.shutdown();
|
||||
}
|
||||
|
||||
assert team1 != null;
|
||||
@ -379,7 +379,7 @@ public class Config {
|
||||
}
|
||||
|
||||
public static boolean test(){
|
||||
return EventKampfID == -1;
|
||||
return ArenaMode.Test.contains(ArenaMode.TEST);
|
||||
}
|
||||
public static boolean recording(){
|
||||
return mode == ArenaMode.EVENT;
|
||||
|
@ -20,7 +20,6 @@
|
||||
package de.steamwar.fightsystem;
|
||||
|
||||
import de.steamwar.sql.EventFight;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
@ -50,21 +49,4 @@ public class IFightSystem {
|
||||
public static Player getEventLeiter(){
|
||||
return eventLeiter;
|
||||
}
|
||||
|
||||
public static void shutdown(String reason){
|
||||
if(reason != null)
|
||||
Bukkit.broadcastMessage(reason);
|
||||
//Staggered kick to prevent lobby overloading
|
||||
kickNext();
|
||||
}
|
||||
|
||||
private static void kickNext(){
|
||||
if(Bukkit.getOnlinePlayers().isEmpty()){
|
||||
Bukkit.shutdown();
|
||||
return;
|
||||
}
|
||||
|
||||
Bukkit.getOnlinePlayers().iterator().next().kickPlayer(null);
|
||||
Bukkit.getScheduler().runTaskLater(plugin, IFightSystem::kickNext, 10);
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
package de.steamwar.fightsystem.utils;
|
||||
|
||||
import org.apache.logging.log4j.util.TriConsumer;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
|
||||
@ -121,4 +120,8 @@ public class Region {
|
||||
public boolean inRegion(Block block){
|
||||
return in2dRegion(block) && minY <= block.getY() && block.getY() < maxY;
|
||||
}
|
||||
|
||||
public interface TriConsumer<T, V, U>{
|
||||
void accept(T x, V y, U z);
|
||||
}
|
||||
}
|
||||
|
@ -31,6 +31,7 @@ import de.steamwar.fightsystem.listener.*;
|
||||
import de.steamwar.fightsystem.record.RecordSystem;
|
||||
import de.steamwar.fightsystem.record.Recorder;
|
||||
import de.steamwar.fightsystem.states.FightState;
|
||||
import de.steamwar.fightsystem.states.OneShotStateDependent;
|
||||
import de.steamwar.fightsystem.utils.EnterHandler;
|
||||
import de.steamwar.fightsystem.utils.FightStatistics;
|
||||
import de.steamwar.fightsystem.utils.TechHider;
|
||||
@ -121,6 +122,12 @@ public class FightSystem extends JavaPlugin {
|
||||
new AkCommand();
|
||||
new LeaderCommand();
|
||||
new LockschemCommand();
|
||||
new StateCommand();
|
||||
new SkipCommand();
|
||||
|
||||
new OneShotStateDependent(ArenaMode.All, FightState.PreRunning, () -> Bukkit.broadcastMessage(PREFIX + "§aDer Kampf beginnt!"));
|
||||
new OneShotStateDependent(ArenaMode.All, FightState.Running, () -> Bukkit.broadcastMessage(PREFIX + "§aArena freigegeben!"));
|
||||
new OneShotStateDependent(ArenaMode.AntiTest, FightState.Running, FightStatistics::start);
|
||||
|
||||
try {
|
||||
CommandRemover.removeAll("gamemode");
|
||||
@ -160,15 +167,10 @@ public class FightSystem extends JavaPlugin {
|
||||
|
||||
public static void setPreRunningState() {
|
||||
FightState.setFightState(FightState.PRE_RUNNING);
|
||||
|
||||
Bukkit.broadcastMessage(PREFIX + "§aDer Kampf beginnt!");
|
||||
}
|
||||
|
||||
public static void setRunningState() {
|
||||
FightState.setFightState(FightState.RUNNING);
|
||||
|
||||
FightStatistics.start();
|
||||
Bukkit.broadcastMessage(PREFIX + "§aArena freigegeben!");
|
||||
}
|
||||
|
||||
public static void setSpectateState(FightTeam winFightTeam, String windescription) {
|
||||
@ -211,6 +213,19 @@ public class FightSystem extends JavaPlugin {
|
||||
}
|
||||
|
||||
public static void shutdown(String reason){
|
||||
IFightSystem.shutdown(reason);
|
||||
if(reason != null)
|
||||
Bukkit.broadcastMessage(reason);
|
||||
//Staggered kick to prevent lobby overloading
|
||||
kickNext();
|
||||
}
|
||||
|
||||
private static void kickNext(){
|
||||
if(Bukkit.getOnlinePlayers().isEmpty()){
|
||||
Bukkit.shutdown();
|
||||
return;
|
||||
}
|
||||
|
||||
Bukkit.getOnlinePlayers().iterator().next().kickPlayer(null);
|
||||
Bukkit.getScheduler().runTaskLater(plugin, FightSystem::kickNext, 10);
|
||||
}
|
||||
}
|
||||
|
@ -88,6 +88,14 @@ public class Commands {
|
||||
}
|
||||
|
||||
static void toggleReady(Player p){
|
||||
FightTeam fightTeam = checkGetTeam(p);
|
||||
if(fightTeam == null || checkGetLeader(p) == null)
|
||||
return;
|
||||
|
||||
fightTeam.skip();
|
||||
}
|
||||
|
||||
static void toggleSkip(Player p){
|
||||
if(checkSetup(p))
|
||||
return;
|
||||
|
||||
|
@ -67,6 +67,20 @@ public class GUI {
|
||||
inv.open();
|
||||
}
|
||||
|
||||
public static void state(Player p){
|
||||
SWInventory inv = new SWInventory(p, 9, "Kampfstatus");
|
||||
inv.setItem(0, Material.GLASS, "§7PRE_LEADER_SETUP", (ClickType click) -> FightSystem.setPreLeaderState());
|
||||
inv.setItem(1, Material.GLASS, "§7PRE_SCHEM_SETUP", (ClickType click) -> FightSystem.setPreSchemState());
|
||||
inv.setItem(2, Material.GLASS, "§7POST_SCHEM_SETUP", (ClickType click) -> FightSystem.setPostSchemState());
|
||||
inv.setItem(3, Material.GLASS, "§ePRE_RUNNING", (ClickType click) -> FightSystem.setPreRunningState());
|
||||
inv.setItem(4, Material.GLASS, "§eRUNNING", (ClickType click) -> FightSystem.setRunningState());
|
||||
inv.setItem(5, Material.GLASS, "§7SPECTATE Blue", (ClickType click) -> FightSystem.setSpectateState(Fight.getBlueTeam(), "operator"));
|
||||
inv.setItem(6, Material.GLASS, "§7SPECTATE Red", (ClickType click) -> FightSystem.setSpectateState(Fight.getRedTeam(), "operator"));
|
||||
inv.setItem(7, Material.GLASS, "§7SPECTATE Tie", (ClickType click) -> FightSystem.setSpectateState(null, "operator"));
|
||||
inv.setCallback(-999, (ClickType click) -> p.closeInventory());
|
||||
inv.open();
|
||||
}
|
||||
|
||||
public static void chooseInvitation(Player p){
|
||||
List<SWListInv.SWListEntry<UUID>> players = SWListInv.createPlayerList(p.getUniqueId());
|
||||
players.removeIf(swItemUUIDPair -> Fight.getFightPlayer(Bukkit.getPlayer(swItemUUIDPair.getObject())) != null);
|
||||
|
@ -0,0 +1,27 @@
|
||||
package de.steamwar.fightsystem.commands;
|
||||
|
||||
import de.steamwar.fightsystem.ArenaMode;
|
||||
import de.steamwar.fightsystem.states.FightState;
|
||||
import de.steamwar.fightsystem.states.StateDependentCommand;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class SkipCommand implements CommandExecutor {
|
||||
|
||||
public SkipCommand() {
|
||||
new StateDependentCommand(ArenaMode.AntiPrepare, FightState.Running, "skip", this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if(!(sender instanceof Player)) {
|
||||
return false;
|
||||
}
|
||||
Player player = (Player) sender;
|
||||
|
||||
Commands.toggleSkip(player);
|
||||
return false;
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package de.steamwar.fightsystem.commands;
|
||||
|
||||
import de.steamwar.fightsystem.ArenaMode;
|
||||
import de.steamwar.fightsystem.states.FightState;
|
||||
import de.steamwar.fightsystem.states.StateDependentCommand;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class StateCommand implements CommandExecutor {
|
||||
|
||||
public StateCommand() {
|
||||
new StateDependentCommand(ArenaMode.Test, FightState.All, "state", this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if(!(sender instanceof Player)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
GUI.state((Player) sender);
|
||||
return false;
|
||||
}
|
||||
}
|
@ -31,8 +31,13 @@ import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class Countdown {
|
||||
|
||||
private static final List<Countdown> currentCountdowns = new ArrayList<>();
|
||||
|
||||
private final int totalTime;
|
||||
private final Sound sound;
|
||||
private final boolean level;
|
||||
@ -71,15 +76,35 @@ public abstract class Countdown {
|
||||
public void enable() {
|
||||
time = totalTime;
|
||||
task = Bukkit.getScheduler().runTaskTimer(FightSystem.getPlugin(), this::count, 20, 20);
|
||||
currentCountdowns.add(this);
|
||||
}
|
||||
|
||||
public void disable() {
|
||||
if(task != null){
|
||||
task.cancel();
|
||||
currentCountdowns.remove(this);
|
||||
task = null;
|
||||
}
|
||||
}
|
||||
|
||||
public static void skip(){
|
||||
if(currentCountdowns.isEmpty())
|
||||
return;
|
||||
|
||||
int smallestTime = currentCountdowns.get(0).time;
|
||||
for(Countdown countdown : currentCountdowns){
|
||||
if(countdown.time < smallestTime)
|
||||
smallestTime = countdown.time;
|
||||
}
|
||||
|
||||
smallestTime--;
|
||||
for(Countdown countdown : currentCountdowns){
|
||||
countdown.time -= smallestTime;
|
||||
}
|
||||
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§aBeide Teams waren damit einverstanden, zum nächsten Event zu beschleunigen!");
|
||||
}
|
||||
|
||||
private void broadcast(String message){
|
||||
RecordSystem.actionBar(message);
|
||||
BaseComponent[] msg = TextComponent.fromLegacyText(message);
|
||||
|
@ -115,21 +115,21 @@ public class FightSchematic extends StateDependent {
|
||||
try {
|
||||
VersionedRunnable.call(new VersionedRunnable(() -> {
|
||||
try {
|
||||
EditSession e = FightTeam_8.pasteSchematic(clipboard, region.centerX(), region.getMinY(), region.centerZ(), rotate);
|
||||
EditSession e = FightTeam_8.pasteSchematic(clipboard, region, rotate);
|
||||
FightTeam_8.replaceTeamColor(e, c, region);
|
||||
} catch (Schematic.WrongVersionException | IOException | NoClipboardException ex) {
|
||||
throw new SecurityException("Error pasting arena in schematic", ex);
|
||||
}
|
||||
}, 8), new VersionedRunnable(() -> {
|
||||
try {
|
||||
EditSession e = FightTeam_8.pasteSchematic(clipboard, region.centerX(), region.getMinY(), region.centerZ(), rotate);
|
||||
EditSession e = FightTeam_8.pasteSchematic(clipboard, region, rotate);
|
||||
FightTeam_12.replaceTeamColor(e, c, region);
|
||||
} catch (Schematic.WrongVersionException | IOException | NoClipboardException ex) {
|
||||
throw new SecurityException("Error pasting arena in schematic", ex);
|
||||
}
|
||||
}, 12), new VersionedRunnable(() -> {
|
||||
try {
|
||||
EditSession e = FightTeam_14.pasteSchematic(clipboard, region.centerX(), region.getMinY(), region.centerZ(), rotate);
|
||||
EditSession e = FightTeam_14.pasteSchematic(clipboard, region, rotate);
|
||||
FightTeam_14.replaceTeamColor(e, c, region);
|
||||
} catch (Schematic.WrongVersionException | IOException | NoClipboardException ex) {
|
||||
throw new SecurityException("Error pasting arena in schematic", ex);
|
||||
|
@ -24,6 +24,7 @@ import de.steamwar.core.VersionedRunnable;
|
||||
import de.steamwar.fightsystem.ArenaMode;
|
||||
import de.steamwar.fightsystem.Config;
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.countdown.Countdown;
|
||||
import de.steamwar.fightsystem.listener.BasicListener;
|
||||
import de.steamwar.fightsystem.listener.PersonalKitCreator;
|
||||
import de.steamwar.fightsystem.record.RecordSystem;
|
||||
@ -48,11 +49,11 @@ import java.util.*;
|
||||
|
||||
public class FightTeam implements IFightTeam{
|
||||
|
||||
private FightPlayer leader;
|
||||
private UUID designatedLeader;
|
||||
private FightPlayer leader;
|
||||
private final Map<Player, FightPlayer> players = new HashMap<>();
|
||||
private boolean ready;
|
||||
private final Set<Player> invited = new HashSet<>();
|
||||
|
||||
private final String name;
|
||||
private final String prefix;
|
||||
private final ChatColor color;
|
||||
@ -60,6 +61,9 @@ public class FightTeam implements IFightTeam{
|
||||
private final Team team;
|
||||
private final boolean blue;
|
||||
|
||||
private boolean ready;
|
||||
private boolean skip;
|
||||
|
||||
private final Location spawn;
|
||||
private final Region schemRegion;
|
||||
private final Region extendRegion;
|
||||
@ -71,6 +75,7 @@ public class FightTeam implements IFightTeam{
|
||||
this.name = name;
|
||||
this.prefix = prefix;
|
||||
this.ready = false;
|
||||
this.skip = false;
|
||||
this.blue = blue;
|
||||
this.designatedLeader = designatedLeader;
|
||||
this.color = ChatColor.getByChar(ChatColor.getLastColors(prefix).replace("§", ""));
|
||||
@ -315,6 +320,18 @@ public class FightTeam implements IFightTeam{
|
||||
}
|
||||
}
|
||||
|
||||
public void skip(){
|
||||
this.skip = !skip;
|
||||
if(skip){
|
||||
broadcast(FightSystem.PREFIX + "§aEuer Team ist nun bereit, zum nächsten Event zu beschleunigen!");
|
||||
if(Fight.getOpposite(this).skip || Config.test()){
|
||||
Countdown.skip();
|
||||
}
|
||||
}else{
|
||||
broadcast(FightSystem.PREFIX + "§cEuer Team ist nicht mehr bereit, zum nächsten Event zu beschleunigen!");
|
||||
}
|
||||
}
|
||||
|
||||
public Set<Player> getInvited() {
|
||||
return invited;
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ import org.bukkit.event.player.PlayerQuitEvent;
|
||||
public class EventJoin implements Listener {
|
||||
|
||||
public EventJoin() {
|
||||
new StateDependentListener(ArenaMode.Event, FightState.Setup, this);
|
||||
new StateDependentListener(ArenaMode.Event, FightState.All, this);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@ -58,29 +58,32 @@ public class EventJoin implements Listener {
|
||||
@EventHandler
|
||||
public void handlePlayerJoin(PlayerJoinEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
//player.setResourcePack("https://steamwar.de/antixray.zip");
|
||||
SteamwarUser user = SteamwarUser.get(player.getUniqueId());
|
||||
|
||||
FightTeam team = null;
|
||||
if(user.getTeam() == Config.EventTeamBlueID)
|
||||
team = Fight.getBlueTeam();
|
||||
else if(user.getTeam() == Config.EventTeamRedID)
|
||||
team = Fight.getRedTeam();
|
||||
|
||||
if(Config.BothTeamsPublic){
|
||||
if(Fight.getRedTeam().getPlayers().size() < Fight.getBlueTeam().getPlayers().size())
|
||||
team = Fight.getRedTeam();
|
||||
else
|
||||
if(FightState.Setup.contains(FightState.getFightState())){
|
||||
FightTeam team = null;
|
||||
if(user.getTeam() == Config.EventTeamBlueID)
|
||||
team = Fight.getBlueTeam();
|
||||
}else if(team == null){
|
||||
if(Config.EventTeamRedID == 0)
|
||||
else if(user.getTeam() == Config.EventTeamRedID)
|
||||
team = Fight.getRedTeam();
|
||||
else if(Config.EventTeamBlueID == 0)
|
||||
team = Fight.getBlueTeam();
|
||||
}
|
||||
|
||||
if(team != null && team.getPlayers().size() < Config.MaximumTeamMembers){
|
||||
team.addMember(player);
|
||||
return;
|
||||
if(Config.BothTeamsPublic){
|
||||
if(Fight.getRedTeam().getPlayers().size() < Fight.getBlueTeam().getPlayers().size())
|
||||
team = Fight.getRedTeam();
|
||||
else
|
||||
team = Fight.getBlueTeam();
|
||||
}else if(team == null){
|
||||
if(Config.EventTeamRedID == 0)
|
||||
team = Fight.getRedTeam();
|
||||
else if(Config.EventTeamBlueID == 0)
|
||||
team = Fight.getBlueTeam();
|
||||
}
|
||||
|
||||
if(team != null && team.getPlayers().size() < Config.MaximumTeamMembers){
|
||||
team.addMember(player);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if(user.getId() == FightSystem.getEventFight().getKampfleiter()){
|
||||
@ -98,4 +101,14 @@ public class EventJoin implements Listener {
|
||||
if(player == FightSystem.getEventLeiter())
|
||||
FightSystem.setEventLeiter(null);
|
||||
}
|
||||
|
||||
/*@EventHandler
|
||||
public void onResourcepack(PlayerResourcePackStatusEvent e){
|
||||
if(e.getStatus() == PlayerResourcePackStatusEvent.Status.ACCEPTED || e.getStatus() == PlayerResourcePackStatusEvent.Status.SUCCESSFULLY_LOADED)
|
||||
return;
|
||||
|
||||
Player player = e.getPlayer();
|
||||
player.sendMessage(FightSystem.PREFIX + "§cAuf Eventserver kann nur mit dem SteamWar-Resourcepack beigetreten werden");
|
||||
player.kickPlayer(null);
|
||||
}*/
|
||||
}
|
||||
|
@ -19,12 +19,21 @@
|
||||
|
||||
package de.steamwar.fightsystem.listener;
|
||||
|
||||
import de.steamwar.core.VersionedCallable;
|
||||
import de.steamwar.core.VersionedRunnable;
|
||||
import de.steamwar.fightsystem.ArenaMode;
|
||||
import de.steamwar.fightsystem.Config;
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.fight.FightTeam_14;
|
||||
import de.steamwar.fightsystem.fight.FightTeam_8;
|
||||
import de.steamwar.fightsystem.states.FightState;
|
||||
import de.steamwar.fightsystem.states.StateDependentListener;
|
||||
import de.steamwar.fightsystem.utils.Region;
|
||||
import de.steamwar.sql.Schematic;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
@ -37,7 +46,38 @@ public class PrepareSchem implements Listener {
|
||||
@Override
|
||||
public void disable() {
|
||||
super.disable();
|
||||
//TODO
|
||||
Region region = Fight.getBlueTeam().getExtendRegion();
|
||||
World world = Bukkit.getWorlds().get(0);
|
||||
|
||||
Schematic schem;
|
||||
try{
|
||||
schem = Schematic.getSchemFromDB(Config.PrepareSchemID);
|
||||
}catch(SecurityException e){
|
||||
FightSystem.shutdown(FightSystem.PREFIX + "§cAnscheinend wurde die auszufahrende Schematic gelöscht, Einsenden wird abgebrochen.");
|
||||
return;
|
||||
}
|
||||
|
||||
try{
|
||||
region.forEach((x, y, z) -> {
|
||||
if(VersionedCallable.call(
|
||||
new VersionedCallable<>(() -> FightTeam_8.checkPistonMoving(world.getBlockAt(x, y, z)), 8),
|
||||
new VersionedCallable<>(() -> FightTeam_14.checkPistonMoving(world.getBlockAt(x, y, z)), 14))){
|
||||
FightSystem.shutdown(FightSystem.PREFIX + "§cIm Teambereich wurden sich noch bewegende Pistons gefunden, Einsenden wird abgebrochen.");
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
});
|
||||
}catch (IllegalStateException e){
|
||||
return;
|
||||
}
|
||||
|
||||
try{
|
||||
VersionedRunnable.call(
|
||||
new VersionedRunnable(() -> FightTeam_8.saveSchem(schem, region), 8),
|
||||
new VersionedRunnable(() -> FightTeam_14.saveSchem(schem, region), 14));
|
||||
}catch(IllegalStateException e){
|
||||
FightSystem.shutdown(FightSystem.PREFIX + "§cDie Schematic konnte nicht gespeichert werden, Einsenden wird abgebrochen.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ public class TeamArea implements Listener {
|
||||
}
|
||||
|
||||
private void checkInInnerArea(Player player, Location to, FightTeam team){
|
||||
if(team.getSchemRegion().playerInRegion(to) && Config.BorderFromSchematic >= 5){ // Preventing false positives due to small extension
|
||||
if(team.getSchemRegion().playerInRegion(to) && Config.PreperationArea >= 5){ // Preventing false positives due to small extension
|
||||
player.kickPlayer(null);
|
||||
Bukkit.getLogger().log(Level.SEVERE, player.getName() + " ist in einen Teambereich eingedrungen.");
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
|
||||
public class WaterRemover implements Listener {
|
||||
|
||||
private static final int MIN_Y = Config.BluePasteRegion.getMinY() + (Config.AlignWater ? Config.WaterDepth : 0);
|
||||
private static final int MIN_Y = Config.BluePasteRegion.getMinY() + Config.WaterDepth;
|
||||
|
||||
public WaterRemover() {
|
||||
new StateDependentListener(ArenaMode.All, FightState.Running, this);
|
||||
|
@ -0,0 +1,25 @@
|
||||
package de.steamwar.fightsystem.states;
|
||||
|
||||
import de.steamwar.fightsystem.ArenaMode;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public class OneShotStateDependent extends StateDependent{
|
||||
|
||||
private final Runnable runnable;
|
||||
|
||||
public OneShotStateDependent(Set<ArenaMode> mode, Set<FightState> states, Runnable runnable) {
|
||||
super(mode, states);
|
||||
this.runnable = runnable;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enable() {
|
||||
runnable.run();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disable() {
|
||||
//Do nothing, oneshot
|
||||
}
|
||||
}
|
@ -126,6 +126,9 @@ public class TechHider implements IStateDependent {
|
||||
if(Core.getVersion() > 8) {
|
||||
protocolManager.addPacketListener(updateBlockEntity);
|
||||
}
|
||||
if(Core.getVersion() > 12) {
|
||||
protocolManager.addPacketListener(blockBreakHider);
|
||||
}
|
||||
if(chunkHider != null) {
|
||||
protocolManager.getAsynchronousManager().registerAsyncHandler(chunkHider).start(threadMultiplier * 4);
|
||||
}
|
||||
@ -139,6 +142,9 @@ public class TechHider implements IStateDependent {
|
||||
if(Core.getVersion() > 8) {
|
||||
protocolManager.removePacketListener(updateBlockEntity);
|
||||
}
|
||||
if(Core.getVersion() > 12) {
|
||||
protocolManager.removePacketListener(blockBreakHider);
|
||||
}
|
||||
if(chunkHider != null) {
|
||||
protocolManager.getAsynchronousManager().unregisterAsyncHandler(chunkHider);
|
||||
}
|
||||
@ -223,6 +229,35 @@ public class TechHider implements IStateDependent {
|
||||
}
|
||||
};
|
||||
|
||||
private final PacketAdapter blockBreakHider = new PacketAdapter(IFightSystem.getPlugin(), PacketType.Play.Server.BLOCK_BREAK) {
|
||||
@Override
|
||||
public void onPacketSending(PacketEvent e) {
|
||||
PacketContainer packet = e.getPacket();
|
||||
BlockPosition pos = packet.getBlockPositionModifier().read(0);
|
||||
|
||||
Player p = e.getPlayer();
|
||||
if(bypass(p, ITechHider.posToChunk(pos.getX()), ITechHider.posToChunk(pos.getZ())))
|
||||
return;
|
||||
|
||||
|
||||
PacketContainer cached = packetCache.get(packet);
|
||||
if(cached != null){
|
||||
e.setPacket(cached);
|
||||
return;
|
||||
}
|
||||
|
||||
cached = packet.deepClone();
|
||||
packetCache.put(packet, cached);
|
||||
e.setPacket(cached);
|
||||
StructureModifier<WrappedBlockData> blockStructure = cached.getBlockData();
|
||||
WrappedBlockData block = blockStructure.read(0);
|
||||
if(Config.HiddenBlocks.contains(block.getType().name())){
|
||||
block.setType(obfuscateMaterial);
|
||||
blockStructure.write(0, block);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private final PacketAdapter updateBlockEntity = new PacketAdapter(FightSystem.getPlugin(), PacketType.Play.Server.TILE_ENTITY_DATA) {
|
||||
@Override
|
||||
public void onPacketSending(PacketEvent event) {
|
||||
|
@ -51,7 +51,7 @@ public class WinconditionTimeTechKO extends Wincondition {
|
||||
public WinconditionTimeTechKO(){
|
||||
super("TechKO", "", " §chat den Gegner Tech K.O. gesetzt!");
|
||||
|
||||
if(Config.TeamBluetoReddistanceZ > 0) {
|
||||
if(Config.BlueToRedZ > 0) {
|
||||
smallerZteam = Fight.getBlueTeam();
|
||||
biggerZteam = Fight.getRedTeam();
|
||||
}else{
|
||||
|
@ -18,3 +18,5 @@ commands:
|
||||
remove:
|
||||
leader:
|
||||
lockschem:
|
||||
state:
|
||||
skip:
|
In neuem Issue referenzieren
Einen Benutzer sperren