개인 자료란 (JE)

  서버 커뮤니티

Profile logdev 대표칭호 없음
Profile

질문하기 Java

플러그인 에서 가상 블럭 생성

2020.04.08 조회 수 377 추천 수 0
이해도 플러그인 
게임버전 (JE) 버킷 

falling block외엔 가상 블럭을 만드는 방법이 아예 없나요? 제가 쓴 코드입니다.

package me.logdev.anaconda;


import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;


public class Event implements Listener {

    int num1 = 1;

    @EventHandler
    public void onPlayerClicks(PlayerInteractEvent event) {
        Player player = event.getPlayer();
        Action action = event.getAction();

        if(action == (Action.RIGHT_CLICK_AIR) || action == (Action.RIGHT_CLICK_BLOCK)){
            @SuppressWarnings("all")
            FallingBlock fallingBlock = player.getWorld().spawnFallingBlock(player.getLocation(), player.getInventory().getItemInMainHand().getType(), player.getInventory().getItemInMainHand().getData().getData());
            fallingBlock.setInvulnerable(true);
            fallingBlock.setGravity(false);
            fallingBlock.setDropItem(false);
            fallingBlock.setTicksLived(-2147483648);
            ArmorStand as = (ArmorStand) player.getWorld().spawnEntity(player.getLocation(), EntityType.ARMOR_STAND);
            as.setVisible(false);
            as.setCustomName(String.valueOf(num1));
            as.addPassenger(fallingBlock);
            num1 += 1;







        }

    }

}

 이렇게 작성해서 fallingblock을 띄우는 것까지 성공했습니다. 이것 외엔 블럭을 아예 띄우는 방법이 없나요?




6개의 댓글

분열
2020.04.08
1. deprecate된 메소드
player.sendBlockChange(위치, 머터리얼값, 바이트);
2. 패킷사용 (protocollib, packetwrapper)
//WrapperPlayServerBlockChange 래퍼 생성후 플레이어에게 전달.
3. deprecate 안된 메소드 (1.12.2에선 안됨)
//BlockData내에 sendBlockChange메소드가 있다고 함


logdev
2020.04.08
@분열

그러니까 sendBlockChange 라는 메소드를 쓰면 가상블록을 만들수 있다는 건가요?

logdev
2020.04.08
@logdev

시도해본 결과 그 자리에 있는 블록을 바꾸는 것입니다...

PatrickKR
2020.04.08
@logdev

제생각에는 아머스탠드를 띄우고 그 머리에 블록을 씌우는게 가장 안정적인 방법이라 생각됩니다.

아글
2020.05.10
@PatrickKR

혹시 아머스탠드를 띄우고 아머스탠드에 블록 씌우는 구문 뭔지 아시나요?

분열
2020.04.08
@logdev

sendblockchange는 플레이어에게만 보이는 블럭을 보내는 방식이라 상호작용(좌/우클)이나 재접속시 사라지게 됩니다. 

block을 set하는 방식이 아니라서 실제 블럭이 설치되는건 아닐텐데요..?

뉴스 및 창작물
/files/thumbnails/268/789/003/262x150.crop.jpg?20240515192032

레드스톤

벌레먹은 돌 빠르게 제거하는 법

GlassesFilm

2024-05-15

0

/files/thumbnails/797/788/003/262x150.crop.jpg?20240515090924

건축

마인크래프트로 구현한 카르카손 보드게임

Warak

2024-05-15

1

/files/thumbnails/487/784/003/262x150.crop.jpg?20240508233607

모드

Windows Borderless 모드에서 악성코드 발견 2

학교가기싫다

2024-05-08

1

/files/thumbnails/384/778/003/262x150.crop.jpg?20240512002324

업데이트

마인크래프트 자바 에디션 스냅샷 24w18a

학교가기싫다

2024-05-06

0

/files/thumbnails/855/781/003/262x150.crop.jpg?20240505141129

레드스톤

레이저 클리너

GlassesFilm

2024-05-05

1