nova.core.wrapper.mc.forge.v17.wrapper.entity.forward.MCEntityTransform.java Source code

Java tutorial

Introduction

Here is the source code for nova.core.wrapper.mc.forge.v17.wrapper.entity.forward.MCEntityTransform.java

Source

/*
 * Copyright (c) 2015 NOVA, All rights reserved.
 * This library is free software, licensed under GNU Lesser General Public License version 3
 *
 * This file is part of NOVA.
 *
 * NOVA is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * NOVA is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with NOVA.  If not, see <http://www.gnu.org/licenses/>.
 */

package nova.core.wrapper.mc.forge.v17.wrapper.entity.forward;

import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraftforge.common.DimensionManager;
import nova.core.component.transform.EntityTransform;
import nova.core.util.math.RotationUtil;
import nova.core.util.math.Vector3DUtil;
import nova.core.world.World;
import nova.internal.core.Game;
import org.apache.commons.math3.geometry.euclidean.threed.Rotation;
import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;

import java.util.Arrays;

/**
 * Wraps Transform3d used in entity
 * @author Calclavia
 */
public class MCEntityTransform extends EntityTransform {
    public final net.minecraft.entity.Entity wrapper;

    public MCEntityTransform(net.minecraft.entity.Entity wrapper) {
        this.wrapper = wrapper;
        this.setPivot(Vector3D.ZERO);
        this.setScale(Vector3DUtil.ONE);
    }

    @Override
    public World world() {
        return Game.natives().toNova(wrapper.worldObj);
    }

    @Override
    public void setWorld(nova.core.world.World world) {
        wrapper.travelToDimension(Arrays.stream(DimensionManager.getWorlds())
                .filter(w -> w.getProviderName().equals(world.getID())).findAny().get().provider.dimensionId);
    }

    @Override
    public Vector3D position() {
        return new Vector3D(wrapper.posX, wrapper.posY, wrapper.posZ);
    }

    @Override
    public void setPosition(Vector3D position) {
        if (wrapper instanceof EntityPlayerMP) {
            ((EntityPlayerMP) wrapper).playerNetServerHandler.setPlayerLocation(position.getX(), position.getY(),
                    position.getZ(), wrapper.rotationYaw, wrapper.rotationPitch);
        } else {
            wrapper.setPosition(position.getX(), position.getY(), position.getZ());
        }
    }

    @Override
    public Rotation rotation() {
        return new Rotation(RotationUtil.DEFAULT_ORDER, -Math.toRadians(wrapper.rotationYaw) - Math.PI,
                -Math.toRadians(wrapper.rotationPitch), 0);
    }

    @Override
    public void setRotation(Rotation rotation) {
        double[] euler = rotation.getAngles(RotationUtil.DEFAULT_ORDER);
        wrapper.rotationYaw = (float) Math.toDegrees(euler[0]);
        wrapper.rotationPitch = (float) Math.toDegrees(euler[1]);
    }
}