Compare commits
No commits in common. '13d55d76531b13775660796ec18858664c3e4930' and 'c88d55d93f486d5d49ec84eceb92e9992fde8c26' have entirely different histories.
13d55d7653
...
c88d55d93f
4 changed files with 11 additions and 90 deletions
@ -0,0 +1,10 @@ |
|||||||
|
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 { |
||||||
|
} |
@ -1,50 +0,0 @@ |
|||||||
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값을 반환하면 명령어가 실패한 것으로 간주
|
|
||||||
} |
|
||||||
} |
|
@ -1,37 +0,0 @@ |
|||||||
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…
Reference in new issue