- Баллы
- 66
- Имя в Minecraft
- SKQ0
По названию понятно что я создаю плагин на кирку 3х3.
Написал уже код, но по скольку я новенький в этом, и при тесте плагина у меня возникли некоторые ошибки, люди сделайте доброе дело - пересмотрите мое творение и если возможно - допишите мне в код рубку блоков алмазной киркой на зачарование "Огнестойкость 100", и чтобы рубились только камень, андезит, руды, диорит, гранит, светокамень.
Спасибо!!
Главный файл MineAssist
Об рубке блоков aWaitBreak
Спасибо!!!
Плагин вот
По названию понятно что я создаю плагин на кирку 3х3.
Написал уже код, но по скольку я новенький в этом, и при тесте плагина у меня возникли некоторые ошибки, люди сделайте доброе дело - пересмотрите мое творение и если возможно - допишите мне в код рубку блоков алмазной киркой на зачарование "Огнестойкость 100", и чтобы рубились только камень, андезит, руды, диорит, гранит, светокамень.
Спасибо!!
Главный файл MineAssist
Об рубке блоков aWaitBreak
Спасибо!!!
Плагин вот https://drive.google.com/open?id=1Y3jbtHujzS4tmXfKCMhN9ijQvR9FGmiB
Написал уже код, но по скольку я новенький в этом, и при тесте плагина у меня возникли некоторые ошибки, люди сделайте доброе дело - пересмотрите мое творение и если возможно - допишите мне в код рубку блоков алмазной киркой на зачарование "Огнестойкость 100", и чтобы рубились только камень, андезит, руды, диорит, гранит, светокамень.
Спасибо!!
Главный файл MineAssist
Код:
package com.DJMixa;
import com.DJMixa.Providers.RegionProvider;
import com.DJMixa.Utills.EnchantmentsHelper;
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 javax.smartcardio.TerminalFactory;
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;
private TerminalFactory item;
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 itemInTools = player.getItemInHand();
if(itemInTools == null)return;
List<Block> blocks = getBlocks(aWaitBreak);
int silkTouch = itemInTools.getEnchantmentLevel(Enchantment.SILK_TOUCH);
int fortune = itemInTools.getEnchantmentLevel(Enchantment.LOOT_BONUS_BLOCKS);
int durability = itemInTools.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)))
itemInTools.setDurability((short)(itemInTools.getDurability() + 1));
for(ItemStack is : EnchantmentsHelper.getDrops((List<ItemStack>)block.getDrops(itemInTools),block,silkTouch,fortune))
{
player.getWorld().dropItemNaturally(block.getLocation(),is);
}
if(itemInTools.getDurability() >= itemInTools.getType().getMaxDurability())
{
isBroken = true;
player.getInventory().removeItem(itemInTools);
break;
}
if(player.getGameMode() == GameMode.SURVIVAL) {
player.setExhaustion(player.getExhaustion() + 0.045f);
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(itemInTools);
}
@EventHandler
public void onInteract(PlayerInteractEvent event)
{
Player 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)
{
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;
}
}
Плагин вот
По названию понятно что я создаю плагин на кирку 3х3.
Написал уже код, но по скольку я новенький в этом, и при тесте плагина у меня возникли некоторые ошибки, люди сделайте доброе дело - пересмотрите мое творение и если возможно - допишите мне в код рубку блоков алмазной киркой на зачарование "Огнестойкость 100", и чтобы рубились только камень, андезит, руды, диорит, гранит, светокамень.
Спасибо!!
Главный файл MineAssist
Код:
package com.DJMixa;
import com.DJMixa.Providers.RegionProvider;
import com.DJMixa.Utills.EnchantmentsHelper;
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 javax.smartcardio.TerminalFactory;
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;
private TerminalFactory item;
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 itemInTools = player.getItemInHand();
if(itemInTools == null)return;
List<Block> blocks = getBlocks(aWaitBreak);
int silkTouch = itemInTools.getEnchantmentLevel(Enchantment.SILK_TOUCH);
int fortune = itemInTools.getEnchantmentLevel(Enchantment.LOOT_BONUS_BLOCKS);
int durability = itemInTools.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)))
itemInTools.setDurability((short)(itemInTools.getDurability() + 1));
for(ItemStack is : EnchantmentsHelper.getDrops((List<ItemStack>)block.getDrops(itemInTools),block,silkTouch,fortune))
{
player.getWorld().dropItemNaturally(block.getLocation(),is);
}
if(itemInTools.getDurability() >= itemInTools.getType().getMaxDurability())
{
isBroken = true;
player.getInventory().removeItem(itemInTools);
break;
}
if(player.getGameMode() == GameMode.SURVIVAL) {
player.setExhaustion(player.getExhaustion() + 0.045f);
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(itemInTools);
}
@EventHandler
public void onInteract(PlayerInteractEvent event)
{
Player 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)
{
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;
}
}
Плагин вот https://drive.google.com/open?id=1Y3jbtHujzS4tmXfKCMhN9ijQvR9FGmiB