개인 자료란 (JE)

  서버 커뮤니티

Profile 박상진5122 대표칭호 없음
Profile

질문하기 플러그인

현재 철문을 우클릭해서 열고 닫는 비밀번호 문을 만들고 있는데요

2023.07.02 조회 수 51 추천 수 0
이해도 입문자 
게임버전 (JE) 1.7.10 
게임버전 (BE) 관련없음 

package doorplugin;


import org.bukkit.Material;

import org.bukkit.block.Block;

import org.bukkit.block.BlockState;

import org.bukkit.command.Command;

import org.bukkit.command.CommandSender;

import org.bukkit.entity.Player;

import org.bukkit.event.EventHandler;

import org.bukkit.event.Listener;

import org.bukkit.event.player.PlayerInteractEvent;

import org.bukkit.material.MaterialData;

import org.bukkit.plugin.java.JavaPlugin;


import java.util.HashMap;

import java.util.Map;

import java.util.regex.Pattern;


public class Doorplugin extends JavaPlugin implements Listener {

    private Map<Block, String> doorPasswords;

    private Pattern passwordPattern;


    @Override

    public void onEnable() {

        getServer().getPluginManager().registerEvents(this, this);

        doorPasswords = new HashMap<>();

        passwordPattern = Pattern.compile("[1-9]{4}");

    }


    @EventHandler

    public void onPlayerInteract(PlayerInteractEvent event) {

        Player player = event.getPlayer();

        Block block = event.getClickedBlock();


        // 플레이어가 철문을 Right-click했는지 확인

        if (block != null && block.getType() == Material.IRON_DOOR) {

            // 비밀번호가 설정되어 있는지 확인

            if (doorPasswords.containsKey(block)) {

                // 비밀번호가 맞는지 확인

                String password = doorPasswords.get(block);

                if (!password.isEmpty() && !password.equals(player.getName())) {

                    player.sendMessage("비밀번호가 일치하지 않습니다.");

                    return;

                }

            } else {

                player.sendMessage("비밀번호가 설정되지 않았습니다.");

                return;

            }


            // 비밀번호가 맞거나 비밀번호가 설정되지 않은 경우, 철문 열기/닫기

            BlockState blockState = block.getState();

            MaterialData data = blockState.getData();

            // 철문의 열림 상태 설정

            data.setData((byte) (data.getData() ^ 0x4));

            blockState.update();

        }

    }


    @Override

    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

        if (cmd.getName().equalsIgnoreCase("setpassword")) {

            if (sender instanceof Player) {

                Player player = (Player) sender;

                Block block = player.getTargetBlock(null, 5);


                if (block != null && block.getType() == Material.IRON_DOOR) {

                    if (args.length > 0) {

                        String password = args[0];

                        if (passwordPattern.matcher(password).matches()) {

                            doorPasswords.put(block, password);

                            player.sendMessage("철문에 비밀번호를 설정했습니다.");

                        } else {

                            player.sendMessage("비밀번호는 1에서 9까지의 4자리 숫자여야 합니다.");

                        }

                    } else {

                        player.sendMessage("비밀번호를 입력해주세요.");

                    }

                } else {

                    player.sendMessage("철문을 향해 바라보고 명령어를 사용해주세요.");

                }

            } else {

                sender.sendMessage("플레이어만 이 명령어를 사용할 수 있습니다.");

            }

            return true;

        }

        return false;

    }

}

버킷에서enable도 나왔고 컴파일도 통과했는데 인게임에서 어째서 작동을 안할까요 ㅠㅠ

4개의 댓글

qsef1256
2023.07.02

안녕하세요, 그냥 작동이 안된다고만 말하면 코드에서 무엇이 문제인지 찾기 어려워요. 정확히 어떤 게 안되는지, 발생하는 오류는 있는지, plugin.yml에 명령어 등록은 했는지, 등등 신경 써야 할 지점이 많아요.

박상진5122
2023.07.02
@qsef1256

안녕하세요, 보시면 철문을 우클릭하면 동작이 일어나야하는데 아무일도 일어나지 않고요 plugin.yml에 명령어 등록을 안했기도 합니다 처음 만들어봐서 몰랐어요.. 방법을 알려주시면 감사하겠습니다

main: doorplugin.Doorplugin

name: Doorplugin

version: 1.0

author: park

description: Doorplugin1

 

본문은 저의 plugin.yml파일 내용입니다

0reo
2023.07.04

이벤트랑 커맨드랑 한클래스에 다 쑤셔넣는건 나중에 고치기 힘들어져요 분할하시는게?

명령어 등록 안하심

public class Doorplugin extends JavaPlugin implements Listener 대신

public class Doorplugin extends JavaPlugin implements Listener, CommandExecutor

onEnable() 메소드안에 getCommand("명령어이름").setExecutor(this);

plugin.yml 안에

commands:

명령어이름

추가 ㄱㄱ

0reo
2023.07.04
@0reo

다고친건아니고 그냥 대충봣을때 보이는문제만 말씀드린거에용

뉴스 및 창작물
/files/thumbnails/932/812/003/262x150.crop.jpg?20240616121638

업데이트

마인크래프트 1.21 정식 업데이트

학교가기싫다

2024-06-14

1

/files/thumbnails/308/805/003/262x150.crop.jpg?20240605201646

레드스톤

[노트블럭 커버] 팬서비스/mona 【 HoneyWorks 】

노트블럭전문가

2024-06-05

0

/files/thumbnails/288/791/003/262x150.crop.jpg?20240602150002

아티클

《까다로운 시련》 업데이트 날짜 공개 및 정보

학교가기싫다

2024-06-02

0

/files/thumbnails/841/773/003/262x150.crop.jpg?20240526120908

레드스톤

마인크래프트 노트블록버전 『 봄을 고하다 (春を告げる) 』 [더블옥타브 버전]

노트블럭전문가

2024-05-26

0

/files/thumbnails/712/796/003/262x150.crop.jpg?20240525085438

레드스톤

마인크래프트 노트블록으로 만든 『 봄을 고하다 (春を告げる) 』 1

Sonttukk

2024-05-25

1