개인 자료란 (JE)

  서버 커뮤니티

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

질문하기 플러그인

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

2023.07.02 조회 수 48 추천 수 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/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 모드에서 악성코드 발견 3

학교가기싫다

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