- Баллы
- 66
- Имя в Minecraft
- SKQ0
По названию понятно что я создаю плагин на кирку 3х3.
Написал уже код, но по скольку я новенький в этом, и при тесте плагина у меня возникли некоторые ошибки, люди сделайте доброе дело - пересмотрите мое творение и если возможно - допишите мне в код чтобы рубились только камень, андезит, руды, диорит, гранит, светокамень. И пересмотрите код который связан с названием кирки, ибо я не могу изменить цвет кирки.
Спасибо!!
Главный файл MineAssist
Об рубке блоков aWaitBreak
Интеграция WorldGuard
Управление зачарованиями
Написал уже код, но по скольку я новенький в этом, и при тесте плагина у меня возникли некоторые ошибки, люди сделайте доброе дело - пересмотрите мое творение и если возможно - допишите мне в код чтобы рубились только камень, андезит, руды, диорит, гранит, светокамень. И пересмотрите код который связан с названием кирки, ибо я не могу изменить цвет кирки.
Спасибо!!
Главный файл MineAssist
Код:
package com.DJMixa;
import com.DJMixa.Providers.RegionProvider;
import com.DJMixa.Utills.EnchantmentsHelper;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.*********ventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.util.BlockIterator;
import javax.sql.RowSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* Created by DJMixa on 13.04.2018.
*/
public class MineAssist extends JavaPlugin implements Listener {
List<AWaitBreak> aWaitBreaks = new ArrayList<>();
RegionProvider regionProvider;
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
regionProvider = new RegionProvider(this);
}
@EventHandler
public void onBreak(BlockBreakEvent event) {
Player player = event.getPlayer();
if (player == null) return;
AWaitBreak aWaitBreak = AWaitBreak.get(player, aWaitBreaks);
if (aWaitBreak == null) return;
ItemStack itemInHand = player.getItemInHand();
if (itemInHand == null) return;
List<Block> blocks = getBlocks(aWaitBreak);
int silkTouch = itemInHand.getEnchantmentLevel(Enchantment.SILK_TOUCH);
int fortune = itemInHand.getEnchantmentLevel(Enchantment.LOOT_BONUS_BLOCKS);
int durability = itemInHand.getEnchantmentLevel(Enchantment.DURABILITY);
Random random = new Random();
boolean isBroken = false;
aWaitBreaks.remove(aWaitBreak);
if (!regionProvider.canChangeRegion(player, event.getBlock().getLocation())) return;
if (player.getFoodLevel() == 0) return;
for (Block block : blocks) {
if (!regionProvider.canChangeRegion(player, block.getLocation())) continue;
if (random.nextInt(100) < (100 / (1 + durability)))
itemInHand.setDurability((short) (itemInHand.getDurability() + 1));
for (ItemStack is : EnchantmentsHelper.getDrops((List<ItemStack>) block.getDrops(itemInHand), block, silkTouch, fortune)) {
player.getWorld().dropItemNaturally(block.getLocation(), is);
}
if (itemInHand.getDurability() >= itemInHand.getType().getMaxDurability()) {
isBroken = true;
player.getInventory().removeItem(itemInHand);
break;
}
if (player.getGameMode() == GameMode.SURVIVAL) {
player.setExhaustion(player.getExhaustion() + 0.025f);
if (player.getExhaustion() >= 4) {
if (player.getSaturation() >= 1) {
player.setSaturation(player.getSaturation() - 1);
} else {
player.setFoodLevel(player.getFoodLevel() - 1);
}
player.setExhaustion(0);
}
}
block.setType(Material.AIR);
}
if (!isBroken)
player.setItemInHand(itemInHand);
}
@EventHandler
public void onInteract(PlayerInteractEvent event) {
Player player = event.getPlayer();
if (player == null) return;{
}
AWaitBreak aWaitBreak = AWaitBreak.get(player, aWaitBreaks);
if (aWaitBreak != null) aWaitBreaks.remove(aWaitBreak);
if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
ItemStack item = player.getItemInHand();
if (item.getItemMeta() == null || item.getItemMeta().getDisplayName() == null) return;
if ((item.getItemMeta().getDisplayName()).equalsIgnoreCase(ChatColor.GREEN + "Кирка 3x3"));
}
{
aWaitBreaks.add(new AWaitBreak(player, event.getClickedBlock(), event.getBlockFace()));
}
}
public List<Block> getBlocks(AWaitBreak aWaitBreak) {
if (aWaitBreak.face == BlockFace.DOWN || aWaitBreak.face == BlockFace.UP)
return getBlocks(aWaitBreak, 1, 0, 1);
else if (aWaitBreak.face == BlockFace.EAST || aWaitBreak.face == BlockFace.WEST)
return getBlocks(aWaitBreak, 0, 1, 1);
else return getBlocks(aWaitBreak, 1, 1, 0);
}
public List<Block> getBlocks(AWaitBreak aWaitBreak, int x, int y, int z) {
List<Block> blocks = new ArrayList<>();
World world = aWaitBreak.player.getWorld();
int bX = aWaitBreak.block.getX();
int bY = aWaitBreak.block.getY();
int bZ = aWaitBreak.block.getZ();
for (int cX = -x; cX <= x; cX++)
for (int cY = -y; cY <= y; cY++)
for (int cZ = -z; cZ <= z; cZ++) {
Block block = world.getBlockAt(bX + cX, bY + cY, bZ + cZ);
if (aWaitBreak.block == block) continue;
if (block.getType() == Material.AIR) continue;
blocks.add(block);
}
return blocks;
}
}
Код:
package com.DJMixa;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import java.util.List;
/**
* Created by DJMixa on 13.04.2018.
*/
public class AWaitBreak {
public Player player;
public Block block;
public BlockFace face;
public AWaitBreak(Player player, Block block, BlockFace face) {
this.player = player;
this.block = block;
this.face = face;
}
public static AWaitBreak get(Player player, List<AWaitBreak> list) {
for (AWaitBreak aWaitBreak : list) {
if (aWaitBreak.player.getName().equals(player.getName())) return aWaitBreak;
}
return null;
}
}
Код:
package com.DJMixa.Providers;
import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.managers.RegionManager;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.logging.Logger;
/**
* Created by DJMixa on 14.04.2018.
*/
public class RegionProvider {
private Logger logger;
private WorldGuardPlugin worldGuard;
public RegionProvider(JavaPlugin plugin)
{
logger = plugin.getLogger();
Plugin wg = plugin.getServer().getPluginManager().getPlugin("WorldGuard");
if(wg != null && wg instanceof WorldGuardPlugin)
{
worldGuard = (WorldGuardPlugin)wg;
logger.info("WorldGuard was found and integrated");
}
else
{
logger.info("WorldGuard was not found");
}
}
public boolean canChangeRegion(Player player, Location location)
{
if(worldGuard != null && worldGuard.isEnabled())
{
return worldGuard.canBuild(player,location);
}
return true;
}
}
Код:
package com.DJMixa.Utills;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.*********ventory.ItemStack;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* Created by DJMixa on 14.04.2018.
*/
public class EnchantmentsHelper {
public static ItemStack getDrops(ItemStack naturally, Block block, int silk, int fortune)
{
if(silk == 1)
{
naturally.setAmount(1);
if(block.getType() == Material.GLOWING_REDSTONE_ORE)
{
naturally.setType(Material.REDSTONE_ORE);
}
else naturally.setType(block.getType());
}
else
{
int chanceToExtra = 49/(2+fortune);
Random random = new Random();
if(block.getType() == Material.GLOWSTONE && fortune > 0)
{
naturally.setAmount(4);
}
else if(block.getType() == Material.GRAVEL)
{
if(fortune == 0)chanceToExtra = 10;
else if(fortune == 1)chanceToExtra = 14;
else if(fortune == 2)chanceToExtra = 25;
else chanceToExtra = 49;
if(random.nextInt(100) < chanceToExtra)naturally.setType(Material.FLINT);
else naturally.setType(Material.GRAVEL);
naturally.setAmount(1);
}
else
{
int multiplier = 1;
for(int i = 1; i<= fortune+1;i++)
{
if(random.nextInt(100) < chanceToExtra)multiplier=i;
}
naturally.setAmount(naturally.getAmount() * multiplier);
}
}
return naturally;
}
public static List<ItemStack> getDrops(List<ItemStack> naturally, Block block, int silk, int fortune)
{
List<ItemStack> list = new ArrayList<>();
if(silk == 1)
list.add(getDrops(naturally.get(0),block,silk,fortune));
else
{
for(ItemStack is : naturally)
{
list.add(getDrops(is,block,silk,fortune));
}
}
return list;
}
}
Последнее редактирование: