Проблема с setPosition

Статус
В этой теме нельзя размещать новые ответы.
Версия Minecraft
1.12.2
У меня есть предмет который телепортирует игрока по использованию.
Вот код:
это итем:
 BlockPos coord = playerIn.rayTrace(8000,1).getBlockPos();
        coord = coord.up(1);
        playerIn.setPosition(coord.getX(),coord.getY(),coord.getZ());
Так же я сделал тоже самое но только по нажатию клавиши 'x':
это по нажатию:
 EntityPlayer player = Minecraft.getMinecraft().player;
            BlockPos coord = player.rayTrace(20,1).getBlockPos();
            coord.up(1);
            player.setPosition(coord.getX(),coord.getY(),coord.getZ());
Вот в чем проблема, предетом я могу телепортироваться например на 2 блока перед собой соответственно смотря на него.
Но если я делаю это с помощью нажатия клавиши, то телепортируясь на позицию блока в которую я смотрю, то меня тут же телепортирует назад.
В ходе теста я понял что могу телепортироваться только смотря в воздух.
 
Решение
О великий бог пакетов, да снизойдет на меня благодать твоя, да пошли слово свое и укажи мне путь истинный!
Crash:
proxy\CommonProxy.java:4: error: package codechicken.lib.packet does not exist
import codechicken.lib.packet.PacketCustom;
                             ^
  • Создай в корне проекта папку libs
  • Добавь в нее CodeChickenLib-1.12.2-3.2.3.358-deobf.jar

  • Сделай refresh gradle в своей ide(в idea нужно просто нажать на кнопку с таким именем, в эклипсе вроде нужно проект пересобрать и переимпортировать)

  • Если не получилось, то добавь в build.gradle
Gradle (Groovy):
dependencies {
    compile fileTree(dir: './libs/', include: '*.jar')
}
  • И повтори refresh gradle
7,099
324
1,510
Когда на кнопку нажимаешь, пакет на сервер шлешь?
 
пакет..... ну как сказать
Java:
@Mod.EventBusSubscriber
public class EventsHandler {

    @SubscribeEvent
    public static void teleporter(InputEvent.KeyInputEvent event){
        if (Keyboard.isKeyDown(Keyboard.KEY_X)){
            EntityPlayer player = Minecraft.getMinecraft().player;
            BlockPos coord = player.rayTrace(20,1).getBlockPos();
            coord.up(1);
            player.setPosition(coord.getX(),coord.getY(),coord.getZ());

        }
    }
}
 
Когда на кнопку нажимаешь, пакет на сервер шлешь?
О великий бог пакетов, да снизойдет на меня благодать твоя, да пошли слово свое и укажи мне путь истинный!
Crash:
proxy\CommonProxy.java:4: error: package codechicken.lib.packet does not exist
import codechicken.lib.packet.PacketCustom;
                             ^
 
1,038
57
229
MyMod.java:
@Mod(MyMod.MOD_ID)
public class MyMod
{
    // Directly reference a log4j logger.
    public static final Logger LOGGER = LogManager.getLogger();
    public static final String MOD_ID = "mymod";
    public static final String MODNAME = "My Mod";
    static final String MODVERSION = "@VERSION@";

    public static IProxy PROXY;
    public static MyMod instance;

    public MyMod() {
        instance = this;
        PROXY = DistExecutor.runForDist(() -> ClientProxy::new, () -> ServerProxy::new);
    }
}

IProxy.java:
public interface IProxy {

    World theClientWorld();

    PlayerEntity getClientPlayer();

    MinecraftServer getServer();

    void openSyncGui(ItemStack stack, Hand hand);

}

SideProxy:
public class SideProxy implements IProxy {

    @Nullable private static MinecraftServer server;

    SideProxy() {
        FMLJavaModLoadingContext.get().getModEventBus().addListener(SideProxy::commonSetup);
        FMLJavaModLoadingContext.get().getModEventBus().addListener(SideProxy::imcEnqueue);
        FMLJavaModLoadingContext.get().getModEventBus().addListener(SideProxy::imcProcess);

        //FMLJavaModLoadingContext.get().getModEventBus().addListener(ModBlocks::registerAll);
        FMLJavaModLoadingContext.get().getModEventBus().addListener(ModItems::registerAll);
        //FMLJavaModLoadingContext.get().getModEventBus().addListener(ModTileEntities::registerAll);

        MinecraftForge.EVENT_BUS.addListener(SideProxy::serverAboutToStart);
        MinecraftForge.EVENT_BUS.addListener(SideProxy::serverStarted);
        MinecraftForge.EVENT_BUS.addListener(SideProxy::serverStarting);
        MinecraftForge.EVENT_BUS.addListener(SideProxy::serverStopping);

        //Config.init();
        Network.init();

        //ModLootStuff.init();
        ModRecipes.init();
    }

    private static void commonSetup(FMLCommonSetupEvent event) {
        //
    }

    private static void imcEnqueue(InterModEnqueueEvent event) {}

    private static void imcProcess(InterModProcessEvent event) {}

    private static void serverAboutToStart(FMLServerAboutToStartEvent event) {
        IReloadableResourceManager resourceManager = event.getServer().getResourceManager();
        //resourceManager.addReloadListener(TraitManager.INSTANCE);
        //resourceManager.addReloadListener(PartManager.INSTANCE);
    }

    private static void serverStarting(FMLServerStartingEvent event) {
        //ModCommands.registerAll(event.getServer().getCommandManager().getDispatcher());
    }

    private static void serverStarted(FMLServerStartedEvent event) {
        server = event.getServer();
    }

    private static void serverStopping(FMLServerStoppingEvent event) {
        server = null;
    }

    @Override
    public World theClientWorld() {
        return null;
    }

    @Nullable
    @Override
    public PlayerEntity getClientPlayer() {
        return null;
    }

    @Nullable
    @Override
    public MinecraftServer getServer() {
        return server;
    }

    @Override
    public void openSyncGui(ItemStack stack, Hand hand) {

    }
}

CLientProxy.java:
public class ClientProxy extends SideProxy {
    public ClientProxy() {
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::clientSetup);

        //MinecraftForge.EVENT_BUS.register(TooltipHandler.INSTANCE);
        MinecraftForge.EVENT_BUS.addListener(this::onPlayerLoggedIn);
    }

    private void clientSetup(FMLClientSetupEvent event) {
        //ModTileEntities.registerRenderers(event);
        //ModContainers.registerScreens(event);
    }

    private void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) {
        //
    }

    @Nullable
    @Override
    public PlayerEntity getClientPlayer() {
        return Minecraft.getInstance().player;
    }
}

ServerProxy.java:
public class ServerProxy extends SideProxy {
    public ServerProxy() {
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::serverSetup);
    }

    private void serverSetup(FMLDedicatedServerSetupEvent event) {}
}

Network.java:
public final class Network {
    private static final ResourceLocation NAME = new ResourceLocation(MyMod.MOD_ID, "network");
    private static final String PROTOCOL_VERSION = "1";

    public static final SimpleChannel channel = NetworkRegistry.ChannelBuilder
            .named(GameInGame.RL("main_channel"))
            .clientAcceptedVersions(PROTOCOL_VERSION::equals)
            .serverAcceptedVersions(PROTOCOL_VERSION::equals)
            .networkProtocolVersion(() -> PROTOCOL_VERSION)
            .simpleChannel();
    private static int det = 0;

    private static int nextId() {
        return det++;
    }

    public static void init() {
        channel.registerMessage(nextId(), ItemBeamMessage.class,
                ItemBeamMessage::toBytes, ItemBeamMessage::new, ItemBeamMessage::handle);
    }
}

ItemBeamMessage.java:
public class ItemBeamMessage {
    private BlockPos pos1;

    public ItemBeamMessage() {
    }

    public ItemBeamMessage(ByteBuf buf) {
        PacketBuffer pb = new PacketBuffer(buf);
        pos1 = pb.readBlockPos();
    }

    public ItemBeamMessage(BlockPos pos1) {
        this.pos1 = pos1;
    }

    public void toBytes(ByteBuf buf) {
        PacketBuffer pb = new PacketBuffer(buf);
        pb.writeBlockPos(pos1);
    }

    public void handle(Supplier<NetworkEvent.Context> ctx) {
        ctx.get().enqueueWork(() -> {
            World w = GameInGame.PROXY.theClientWorld();
            if (w != null) {
                //если мы со стороны клиента его получили
            }
            else
            {
                //получили на сервере
            }
        });
        ctx.get().setPacketHandled(true);
    }
}

ну и отправка сообщения (пакета) на сервер
Network.channel.sendToServer(new ItemBeamMessage( MyMod.PROXY.getClientPlayer().getPosition() ) );
 
Последнее редактирование:
3,005
192
592
@ZZZubec Куча не нужного кода.. Да и еще не на ту версию... Лайк не глядя!!!
 
1,038
57
229
вот ты вредина...
Ну да, это 1.14.4, глядишь туда перейдет, да и отличия должны быть минимальными
 
7,099
324
1,510
О великий бог пакетов, да снизойдет на меня благодать твоя, да пошли слово свое и укажи мне путь истинный!
Crash:
proxy\CommonProxy.java:4: error: package codechicken.lib.packet does not exist
import codechicken.lib.packet.PacketCustom;
                             ^
  • Создай в корне проекта папку libs
  • Добавь в нее CodeChickenLib-1.12.2-3.2.3.358-deobf.jar

  • Сделай refresh gradle в своей ide(в idea нужно просто нажать на кнопку с таким именем, в эклипсе вроде нужно проект пересобрать и переимпортировать)

  • Если не получилось, то добавь в build.gradle
Gradle (Groovy):
dependencies {
    compile fileTree(dir: './libs/', include: '*.jar')
}
  • И повтори refresh gradle
 
Последнее редактирование:
Когда на кнопку нажимаешь, пакет на сервер шлешь?
Благодарю тебя и твою библиотеку!
 
7,099
324
1,510
Это не моя библиотека, а Chicken_Bones. Однако, это не делает ее менее крутой либой
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху