Compare commits

...

2 Commits

Author SHA1 Message Date
poopki 13d55d7653 custom item effect 처리 3 years ago
poopki 90f3bfded3 custom item effect 처리 3 years ago
  1. 10
      Command.java
  2. 4
      User_DB.java
  3. 50
      itemeffect.java
  4. 37
      itemeffect_eventhandler.java

@ -1,10 +0,0 @@
package org.poopki.duckdns.user_db;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public class Command implements CommandExecutor {
}

@ -24,7 +24,9 @@ public final class User_DB extends JavaPlugin implements Listener {
} catch (SQLException e) {
throw new RuntimeException(e);
}
getCommand("test").setExecutor(new CustomItem_test());
getCommand("shotgun").setExecutor(new itemeffect(this));
getServer().getPluginManager().registerEvents(new itemeffect_eventhandler(), this);
getServer().getPluginManager().registerEvents(new UserJoin(m_InfoArrayInstance, m_AccountArrayInstance),this);
}

@ -0,0 +1,50 @@
package org.poopki.duckdns.user_db;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Player;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.util.Vector;
import java.util.Random;
public class itemeffect implements CommandExecutor{
JavaPlugin plugin;
public itemeffect(JavaPlugin plugin) {
this.plugin = plugin; //메타데이터를 위해 플러그인 객체를 갖고 있어야 함
}
private Vector getDir(double yaw, double dirY, double angleAdd) //바라보는 방향을 벡터로 가져오는 함수
{
double dirX = Math.cos(Math.toRadians(yaw + 90 + angleAdd));
double dirZ = Math.sin(Math.toRadians(yaw + 90 + angleAdd));
return new Vector(dirX, dirY, dirZ);
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { //명령어 실행 시
if(sender instanceof Player) { //명령어 사용자가 플레이어인 경우
Player player = (Player)sender; //명령어 사용자 객체를 플레이어 객체로 변환할 수 있음
Random random = new Random();
for(int i = 0; i < 15; i++) {
//화살을 수평으로 15개 발사
Arrow pr = player.launchProjectile(Arrow.class, getDir(player.getLocation().getYaw(), player.getLocation().getDirection().getY(), random.nextDouble() * 45 - 22.5).multiply(3));
pr.setMetadata("shotgun", new FixedMetadataValue(plugin, true)); //생성된 화살에 명령어로 생성되었다는 것을 표시
pr.setGravity(false); //중력의 영향을 받지 않게 설정하여 낙차가 없게 함
pr.setCritical(true); //화살의 이펙트를 위해 크리티컬 판정을 설정
pr.setDamage(10); //화살 피격 시 10대미지를 받도록 설정 (일반 플레이어 체력의 반)
}
return true; //true값을 반환하면 명령어가 성공한 것으로 간주
}
else if(sender instanceof ConsoleCommandSender) { //명령어 사용자가 콘솔인 경우
sender.sendMessage("콘솔에서는 이 명령어를 실행할 수 없습니다.");
return false; //false값을 반환하면 명령어가 실패한 것으로 간주
}
return false; //false값을 반환하면 명령어가 실패한 것으로 간주
}
}

@ -0,0 +1,37 @@
package org.poopki.duckdns.user_db;
import org.bukkit.entity.Arrow;
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.entity.ProjectileHitEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
public class itemeffect_eventhandler implements Listener {
@EventHandler
public void onProjectileHit(ProjectileHitEvent e) { //투사체 착탄시 실행
if (e.getEntity().hasMetadata("shotgun")) { //만약 화살이 명령어로 생성되었다면
Arrow arrow = (Arrow) e.getEntity(); //객체를 화살로 변환
arrow.getWorld().createExplosion(arrow.getLocation(), 1); //화살의 착탄 위치에 폭발 생성
arrow.remove(); //화 삭제
}
}
@EventHandler
public void onPlayerInteract(PlayerInteractEvent e) { //플레이어가 상호작용을 할 때 실행
Player player = e.getPlayer(); //상호작용한 플레이어
Action action = e.getAction(); //플레이어가 한 상호작용
ItemStack item = e.getItem(); //플레이어가 상호작용할 때 손에 들고 있던 아이템
//플레이어가 좌클릭을 눌렀을 때(허공을 때리거나 블럭을 때릴 때)
if (action.equals(Action.LEFT_CLICK_AIR) || action.equals(Action.LEFT_CLICK_BLOCK)) {
if (item != null) { //플레이어 손에 무언가 있으면
switch (item.getType()) {
case BOW: //그 무언가가 활이라면
player.performCommand("User_DB:shotgun"); //산탄화살 발사
}
}
}
}
}
Loading…
Cancel
Save