Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package net.redman.sorcererking.common.entities;
- import net.minecraft.entity.*;
- import net.minecraft.entity.projectile.DamagingProjectileEntity;
- import net.minecraft.entity.projectile.ProjectileItemEntity;
- import net.minecraft.nbt.CompoundNBT;
- import net.minecraft.network.datasync.DataParameter;
- import net.minecraft.network.datasync.DataSerializers;
- import net.minecraft.network.datasync.EntityDataManager;
- import net.minecraft.util.DamageSource;
- import net.minecraft.util.Direction;
- import net.minecraft.util.math.*;
- import net.minecraft.util.math.vector.Vector2f;
- import net.minecraft.util.math.vector.Vector3d;
- import net.minecraft.world.World;
- import javax.annotation.Nullable;
- public class MagicArrowEntity extends DamagingProjectileEntity {
- private static final DataParameter<Integer> ID_SIZE = EntityDataManager.defineId(MagicArrowEntity.class, DataSerializers.INT);
- public MagicArrowEntity(EntityType<? extends MagicArrowEntity> type, World world){
- super(type, world);
- this.setNoGravity(true);
- }
- public MagicArrowEntity(LivingEntity caster, World world, int scale){
- this(world, caster.getX(), caster.getEyeY() - 0.10000000149011612D, caster.getZ(), scale);
- }
- public MagicArrowEntity(EntityType<? extends MagicArrowEntity> entityType, World world, LivingEntity caster){
- this(entityType, world);
- }
- public MagicArrowEntity(World world, double x, double y, double z, int scale) {
- super((EntityType)ModEntities.MAGIC_ARROW_ENTITY.get(),world);
- this.setPos(x,y,z);
- System.out.println("dims: "+ this.getType().getDimensions());
- System.out.println("Bb0 : "+this.getBoundingBox());
- this.setNoGravity(true);
- this.setSize(scale);
- // this.setBoundingBox(this.getBoundingBox().inflate(scale));
- }
- public void shoot(@Nullable Entity caster, Vector3d look, float velocity, float inaccuracy){
- this.shoot(look.get(Direction.Axis.X), look.get(Direction.Axis.Y), look.get(Direction.Axis.Z), velocity, inaccuracy);
- }
- @Override
- public void shoot(double x, double y, double z, float velocity, float inaccuracy) {
- System.out.println("dims1: "+ this.getType().getDimensions());
- System.out.println("BB1 : "+this.getBoundingBox());
- //System.out.println("dims : "+this.getType().getDimensions());
- Vector3d Vector3d = (new Vector3d(x,y,z).normalize().scale((double) velocity));
- this.setDeltaMovement(Vector3d);
- float f = MathHelper.sqrt(getHorizontalDistanceSqr(Vector3d));
- this.yRot = (float)(MathHelper.atan2(Vector3d.x,Vector3d.z)*57.2957763671875D);
- this.xRot = (float)(MathHelper.atan2(Vector3d.y, (double)f)*57.2957763671875D);
- this.xRotO = xRot;
- this.yRotO = yRot;
- }
- @Override
- public void onSyncedDataUpdated(DataParameter<?> parameter) {
- System.out.println("DataUpdated");
- if(ID_SIZE.equals(parameter)){
- this.refreshDimensions();
- }
- super.onSyncedDataUpdated(parameter);
- }
- @Override
- protected void defineSynchedData() {
- System.out.println("defineData");
- super.defineSynchedData();
- this.entityData.define(ID_SIZE, 1);
- }
- @Override
- public EntitySize getDimensions(Pose pose) {
- System.out.println("get dims");
- return super.getDimensions(pose).scale(0.255f*(float)this.getSize());
- }
- private void setSize(int size ){
- this.entityData.set(ID_SIZE, size);
- this.reapplyPosition();
- this.refreshDimensions();
- }
- private int getSize() {
- return this.entityData.get(ID_SIZE);
- }
- @Override
- public void addAdditionalSaveData(CompoundNBT nbt) {
- super.addAdditionalSaveData(nbt);
- nbt.putInt("Size", this.getSize()-1);
- }
- @Override
- public void readAdditionalSaveData(CompoundNBT nbt) {
- int i = nbt.getInt("Size");
- if(i <0){i=0;}
- this.setSize(i+1);
- super.readAdditionalSaveData(nbt);
- }
- private EntitySize scale(float s){
- EntitySize size = this.getType().getDimensions().scale(s);
- System.out.println("dims scale : "+size);
- return size;
- }
- @Override
- protected void onHit(RayTraceResult rayTraceResult) {
- System.out.println("magic arrow hit");
- System.out.println(rayTraceResult.getLocation().x +", " + rayTraceResult.getLocation().y +"," +rayTraceResult.getLocation().z);
- RayTraceResult.Type rayTraceResult$Type = rayTraceResult.getType();
- if(rayTraceResult$Type == RayTraceResult.Type.ENTITY){
- System.out.println("magic arrow hit entity");
- this.onHitEntity((EntityRayTraceResult) rayTraceResult);
- System.out.println("magic arrow affected entity entity");
- }else if(rayTraceResult$Type == RayTraceResult.Type.BLOCK){
- System.out.println("magic arrow hit block");
- BlockRayTraceResult blockRayTraceResult = (BlockRayTraceResult)rayTraceResult;
- this.blockHit(blockRayTraceResult.getBlockPos(), blockRayTraceResult.getDirection());
- System.out.println("magic arrow affected block");
- }
- if(!this.level.isClientSide()){
- this.remove();
- }
- }
- @Override
- protected void onHitEntity(EntityRayTraceResult entityRayTraceResult) {
- Entity entity = entityRayTraceResult.getEntity();
- if(entity instanceof LivingEntity){
- this.entityHit((LivingEntity)entity);
- }
- }
- private void entityHit(LivingEntity entity) {
- entity.kill();
- }
- private void blockHit(BlockPos blockPos, Direction direction) {
- this.applyEffect(blockPos, direction, (Entity)null);
- }
- private void applyEffect(BlockPos blockPos, Direction direction, Entity entity) {
- if(entity != null){
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement