测试版
This commit is contained in:
parent
f0ed4534e7
commit
6db1f114d5
|
@ -8,6 +8,7 @@ import me.Demon.BlockWars.Util.BossBarUtil;
|
||||||
import me.Demon.BlockWars.Util.ComputeBlock;
|
import me.Demon.BlockWars.Util.ComputeBlock;
|
||||||
import me.Demon.BlockWars.Util.GameUtil;
|
import me.Demon.BlockWars.Util.GameUtil;
|
||||||
import org.bukkit.*;
|
import org.bukkit.*;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.boss.BarColor;
|
import org.bukkit.boss.BarColor;
|
||||||
import org.bukkit.boss.BarStyle;
|
import org.bukkit.boss.BarStyle;
|
||||||
import org.bukkit.boss.BossBar;
|
import org.bukkit.boss.BossBar;
|
||||||
|
@ -28,6 +29,7 @@ import java.util.Random;
|
||||||
|
|
||||||
public class GameData {
|
public class GameData {
|
||||||
|
|
||||||
|
public static final Material[] BLOCK_TYPES = new Material[] {Material.IRON_BLOCK, Material.GOLD_BLOCK, Material.DIAMOND_BLOCK, Material.EMERALD_BLOCK};
|
||||||
private Region region;
|
private Region region;
|
||||||
private World world;
|
private World world;
|
||||||
private static boolean started;
|
private static boolean started;
|
||||||
|
@ -222,6 +224,51 @@ public class GameData {
|
||||||
this.blockRegionList = blockRegions;
|
this.blockRegionList = blockRegions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateBlockType(Block block) {
|
||||||
|
if (!region.isInRegion(block.getLocation())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int y = block.getY();
|
||||||
|
int maxY = (int) region.getMax().getY();// 获取最高y
|
||||||
|
int minY = (int) region.getMin().getY();// 获取最低y
|
||||||
|
int range = maxY - minY; // 总范围
|
||||||
|
double partSize = (double) range / 4; // 每个部分的大小
|
||||||
|
int level = 3; // 初始 level
|
||||||
|
if (y < minY || y > maxY) {
|
||||||
|
level = 0;
|
||||||
|
} else {
|
||||||
|
// 计算 y 在哪个部分
|
||||||
|
if (y < minY + partSize) {
|
||||||
|
level = 0;
|
||||||
|
} else if (y < minY + 2 * partSize) {
|
||||||
|
level = 1;
|
||||||
|
} else if (y < minY + 3 * partSize) {
|
||||||
|
level = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Material material = BLOCK_TYPES[level];
|
||||||
|
block.setType(material);
|
||||||
|
}
|
||||||
|
public Material updateBlockType(int y) {
|
||||||
|
int maxY = (int) region.getMax().getY();// 获取最高y
|
||||||
|
int minY = (int) region.getMin().getY();// 获取最低y
|
||||||
|
int range = maxY - minY; // 总范围
|
||||||
|
double partSize = (double) range / 4; // 每个部分的大小
|
||||||
|
int level = 0; // 初始 level
|
||||||
|
if (y < minY || y > maxY) {
|
||||||
|
level = 0;
|
||||||
|
} else {
|
||||||
|
if (y < minY + 2 * partSize) {
|
||||||
|
level = 1;
|
||||||
|
} else if (y < minY + 3 * partSize) {
|
||||||
|
level = 2;
|
||||||
|
} else {
|
||||||
|
level = 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return BLOCK_TYPES[level];
|
||||||
|
}
|
||||||
|
|
||||||
public List<BlockRegion> getBlockRegionList() {
|
public List<BlockRegion> getBlockRegionList() {
|
||||||
return blockRegionList;
|
return blockRegionList;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.block.Action;
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
import org.bukkit.event.block.BlockExplodeEvent;
|
import org.bukkit.event.block.BlockExplodeEvent;
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
|
@ -106,6 +107,43 @@ public class GameListener implements Listener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler //*禁止在游戏区外放置方块*//
|
||||||
|
public void onUsePlace(PlayerInteractEvent e) {
|
||||||
|
Player p = e.getPlayer();
|
||||||
|
Block block = e.getClickedBlock();
|
||||||
|
if(e.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
||||||
|
if (Main.gameData.isStarted()) {
|
||||||
|
if(Main.configYml.isGameSettings("speedplace")) {
|
||||||
|
Region region = Main.gameData.getRegion();
|
||||||
|
// 检测方块是否在游戏场地
|
||||||
|
if (region.isInRegion(block.getLocation())) {
|
||||||
|
// 检测方块下方是否存在空缺
|
||||||
|
Location location = block.getLocation();
|
||||||
|
int indexY = location.getBlockY();
|
||||||
|
for (int y = (int) region.getMin().getY(); y < indexY; y++) {
|
||||||
|
Block block1 = location.getWorld().getBlockAt(location.getBlockX(), y, location.getBlockZ());
|
||||||
|
if (block1.getType().equals(Material.AIR)) {
|
||||||
|
indexY = y;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(location.getY() == indexY){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
e.setCancelled(true);
|
||||||
|
Block block1 = location.getWorld().getBlockAt(location.getBlockX(), indexY, location.getBlockZ());
|
||||||
|
Main.gameData.updateBlockType(block1);
|
||||||
|
GameUtil.refreshPlayerHandStack(p);
|
||||||
|
boolean sounds_butt = Main.configYml.isGameSettings("placesounds");
|
||||||
|
if(sounds_butt) {
|
||||||
|
p.playSound(p.getLocation(), Sound.BLOCK_AMETHYST_BLOCK_PLACE, 1, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 启动快速搭建方块
|
* 启动快速搭建方块
|
||||||
* */
|
* */
|
||||||
|
@ -121,6 +159,7 @@ public class GameListener implements Listener {
|
||||||
if(Main.configYml.isGameSettings("speedplace")) {
|
if(Main.configYml.isGameSettings("speedplace")) {
|
||||||
if (!isPlaceNextBlock(block)) {
|
if (!isPlaceNextBlock(block)) {
|
||||||
GameUtil.refreshPlayerHandStack(p);
|
GameUtil.refreshPlayerHandStack(p);
|
||||||
|
Main.gameData.updateBlockType(block);
|
||||||
if(sounds_butt) {
|
if(sounds_butt) {
|
||||||
p.playSound(p.getLocation(), Sound.BLOCK_AMETHYST_BLOCK_PLACE, 1.0F, 1.0F);
|
p.playSound(p.getLocation(), Sound.BLOCK_AMETHYST_BLOCK_PLACE, 1.0F, 1.0F);
|
||||||
}
|
}
|
||||||
|
@ -137,13 +176,14 @@ public class GameListener implements Listener {
|
||||||
}
|
}
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
int a = 1;
|
int a = 1;
|
||||||
for (int place_y = indexY; place_y <= (indexY+2); place_y++) {
|
for (int place_y = indexY; place_y <= (indexY+3); place_y++) {
|
||||||
int finalPlace_y = place_y;
|
int finalPlace_y = place_y;
|
||||||
new BukkitRunnable() {
|
new BukkitRunnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
Block block1 = world.getBlockAt(location.getBlockX(), finalPlace_y, location.getBlockZ());
|
Block block1 = world.getBlockAt(location.getBlockX(), finalPlace_y, location.getBlockZ());
|
||||||
if (block1.getType().equals(Material.AIR)) {
|
if (block1.getType().equals(Material.AIR)) {
|
||||||
|
Main.gameData.updateBlockType(block1);
|
||||||
if (sounds_butt) {
|
if (sounds_butt) {
|
||||||
p.playSound(p.getLocation(), Sound.BLOCK_METAL_PLACE, 1.0F, 1.0F);
|
p.playSound(p.getLocation(), Sound.BLOCK_METAL_PLACE, 1.0F, 1.0F);
|
||||||
p.playSound(p.getLocation(), Sound.BLOCK_AMETHYST_BLOCK_PLACE, 1.0F, 1.0F);
|
p.playSound(p.getLocation(), Sound.BLOCK_AMETHYST_BLOCK_PLACE, 1.0F, 1.0F);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user