日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Minecraft 1.12.2模组开发(四十五) 水火两用船

發(fā)布時(shí)間:2024/1/8 编程问答 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Minecraft 1.12.2模组开发(四十五) 水火两用船 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天我們?cè)贛C中實(shí)現(xiàn)一艘可以在水中和巖漿中滑行的船

本期教程之前可以先復(fù)習(xí)一下生物實(shí)體教程,會(huì)比較好理解一些。

1.船是一種生物實(shí)體,所以我們首先要制作船的模型,這里直接使用了原版的船模型,當(dāng)然你也可以用Blockbench制作模型。

ModelObBoat.java

package com.joy187.rejoymod.entity.model;import com.joy187.rejoymod.entity.EntityObBoat; import net.minecraft.client.model.IMultipassModel; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.renderer.GLAllocation; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.Entity; import net.minecraft.util.math.MathHelper;public class ModelObBoat extends ModelBase implements IMultipassModel {public ModelRenderer[] boatSides = new ModelRenderer[5];public ModelRenderer[] paddles = new ModelRenderer[2];public ModelRenderer noWater;private final int patchList = GLAllocation.generateDisplayLists(1);public ModelObBoat(){this.boatSides[0] = (new ModelRenderer(this, 0, 0)).setTextureSize(128, 64);this.boatSides[1] = (new ModelRenderer(this, 0, 19)).setTextureSize(128, 64);this.boatSides[2] = (new ModelRenderer(this, 0, 27)).setTextureSize(128, 64);this.boatSides[3] = (new ModelRenderer(this, 0, 35)).setTextureSize(128, 64);this.boatSides[4] = (new ModelRenderer(this, 0, 43)).setTextureSize(128, 64);int i = 32;int j = 6;int k = 20;int l = 4;int i1 = 28;this.boatSides[0].addBox(-14.0F, -9.0F, -3.0F, 28, 16, 3, 0.0F);this.boatSides[0].setRotationPoint(0.0F, 3.0F, 1.0F);this.boatSides[1].addBox(-13.0F, -7.0F, -1.0F, 18, 6, 2, 0.0F);this.boatSides[1].setRotationPoint(-15.0F, 4.0F, 4.0F);this.boatSides[2].addBox(-8.0F, -7.0F, -1.0F, 16, 6, 2, 0.0F);this.boatSides[2].setRotationPoint(15.0F, 4.0F, 0.0F);this.boatSides[3].addBox(-14.0F, -7.0F, -1.0F, 28, 6, 2, 0.0F);this.boatSides[3].setRotationPoint(0.0F, 4.0F, -9.0F);this.boatSides[4].addBox(-14.0F, -7.0F, -1.0F, 28, 6, 2, 0.0F);this.boatSides[4].setRotationPoint(0.0F, 4.0F, 9.0F);this.boatSides[0].rotateAngleX = ((float)Math.PI / 2F);this.boatSides[1].rotateAngleY = ((float)Math.PI * 3F / 2F);this.boatSides[2].rotateAngleY = ((float)Math.PI / 2F);this.boatSides[3].rotateAngleY = (float)Math.PI;this.paddles[0] = this.makePaddle(true);this.paddles[0].setRotationPoint(3.0F, -5.0F, 9.0F);this.paddles[1] = this.makePaddle(false);this.paddles[1].setRotationPoint(3.0F, -5.0F, -9.0F);this.paddles[1].rotateAngleY = (float)Math.PI;this.paddles[0].rotateAngleZ = 0.19634955F;this.paddles[1].rotateAngleZ = 0.19634955F;this.noWater = (new ModelRenderer(this, 0, 0)).setTextureSize(128, 64);this.noWater.addBox(-14.0F, -9.0F, -3.0F, 28, 16, 3, 0.0F);this.noWater.setRotationPoint(0.0F, -3.0F, 1.0F);this.noWater.rotateAngleX = ((float)Math.PI / 2F);}/*** Sets the models various rotation angles then renders the model.*/public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale){GlStateManager.rotate(90.0F, 0.0F, 1.0F, 0.0F);EntityObBoat entityboat = (EntityObBoat)entityIn;this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn);for (int i = 0; i < 5; ++i){this.boatSides[i].render(scale);}this.renderPaddle(entityboat, 0, scale, limbSwing);this.renderPaddle(entityboat, 1, scale, limbSwing);}public void renderMultipass(Entity p_187054_1_, float p_187054_2_, float p_187054_3_, float p_187054_4_, float p_187054_5_, float p_187054_6_, float scale){GlStateManager.rotate(90.0F, 0.0F, 1.0F, 0.0F);GlStateManager.colorMask(false, false, false, false);this.noWater.render(scale);GlStateManager.colorMask(true, true, true, true);}protected ModelRenderer makePaddle(boolean p_187056_1_){ModelRenderer modelrenderer = (new ModelRenderer(this, 62, p_187056_1_ ? 0 : 20)).setTextureSize(128, 64);int i = 20;int j = 7;int k = 6;float f = -5.0F;modelrenderer.addBox(-1.0F, 0.0F, -5.0F, 2, 2, 18);modelrenderer.addBox(p_187056_1_ ? -1.001F : 0.001F, -3.0F, 8.0F, 1, 6, 7);return modelrenderer;}protected void renderPaddle(EntityObBoat boat, int paddle, float scale, float limbSwing){float f = boat.getRowingTime(paddle, limbSwing);ModelRenderer modelrenderer = this.paddles[paddle];modelrenderer.rotateAngleX = (float) MathHelper.clampedLerp(-1.0471975803375244D, -0.2617993950843811D, (double)((MathHelper.sin(-f) + 1.0F) / 2.0F));modelrenderer.rotateAngleY = (float)MathHelper.clampedLerp(-(Math.PI / 4D), (Math.PI / 4D), (double)((MathHelper.sin(-f + 1.0F) + 1.0F) / 2.0F));if (paddle == 1){modelrenderer.rotateAngleY = (float)Math.PI - modelrenderer.rotateAngleY;}modelrenderer.render(scale);} }

2.我們要讓船在巖漿和水上行走,所以我們的EntityObBoat類要繼承船實(shí)體類,同時(shí)讓船對(duì)巖漿產(chǎn)生免疫:

EntityObBoat.java

package com.joy187.rejoymod.entity;import com.joy187.rejoymod.item.ModItems; import net.minecraft.block.BlockLiquid; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.MoverType; import net.minecraft.entity.item.EntityBoat; import net.minecraft.entity.passive.EntityAnimal; import net.minecraft.entity.passive.EntityWaterMob; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.MobEffects; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.datasync.DataParameter; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.network.datasync.EntityDataManager; import net.minecraft.network.play.client.CPacketSteerBoat; import net.minecraft.potion.PotionEffect; import net.minecraft.util.*; import net.minecraft.util.math.*; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly;import java.util.ArrayList; import java.util.List;public class EntityObBoat extends EntityBoat {private static final DataParameter<Integer> TIME_SINCE_HIT = EntityDataManager.createKey(EntityObBoat.class, DataSerializers.VARINT);private static final DataParameter<Integer> FORWARD_DIRECTION = EntityDataManager.createKey(EntityObBoat.class, DataSerializers.VARINT);private static final DataParameter<Float> DAMAGE_TAKEN = EntityDataManager.createKey(EntityObBoat.class, DataSerializers.FLOAT);private static final DataParameter<Boolean>[] DATA_ID_PADDLE = new DataParameter[]{EntityDataManager.createKey(EntityObBoat.class, DataSerializers.BOOLEAN), EntityDataManager.createKey(EntityObBoat.class, DataSerializers.BOOLEAN)};private final float[] paddlePositions;private float outOfControlCounter;private float deltaRotation;private int lerpSteps;private double boatPitch;private double lerpY;private double lerpZ;private double boatYaw;private double lerpXRot;private boolean leftInputDown;private boolean rightInputDown;private boolean forwardInputDown;private boolean backInputDown;private double lavaLevel;private float boatGlide;private Status status;private Status previousStatus;private double lastYd;public EntityObBoat(World world){super(world);//我們的船對(duì)巖漿、火免疫,不然會(huì)燒掉this.isImmuneToFire = true;this.paddlePositions = new float[2];this.preventEntitySpawning = true;this.setSize(1.375F, 0.5625F);}public EntityObBoat(World world, double x, double y, double z){this(world);this.motionX = 0.0D;this.motionY = 0.0D;this.motionZ = 0.0D;this.prevPosX = x;this.prevPosY = y;this.prevPosZ = z;this.setPosition(x, y, z);}@Overrideprotected boolean canTriggerWalking(){return false;}@Overrideprotected void entityInit(){this.dataManager.register(TIME_SINCE_HIT, 0);this.dataManager.register(FORWARD_DIRECTION, 1);this.dataManager.register(DAMAGE_TAKEN, 0.0F);for(DataParameter<Boolean> parameter : DATA_ID_PADDLE){this.dataManager.register(parameter, false);}}@Overridepublic AxisAlignedBB getCollisionBox(Entity entity){return entity.canBePushed() ? entity.getEntityBoundingBox() : null;}@Overridepublic AxisAlignedBB getCollisionBoundingBox(){return this.getEntityBoundingBox();}@Overridepublic boolean canBePushed(){return true;}@Overridepublic double getMountedYOffset(){return -0.1D;}@Overridepublic boolean attackEntityFrom(DamageSource source, float amount){if(this.isEntityInvulnerable(source)){return false;}else if(!this.world.isRemote && !this.isDead){if(source instanceof EntityDamageSourceIndirect && source.getTrueSource() != null && this.isPassenger(source.getTrueSource())){return false;}else{this.setForwardDirection(-this.getForwardDirection());this.setTimeSinceHit(10);this.setDamageTaken(this.getDamageTaken() + amount * 10.0F);this.markVelocityChanged();boolean takeDamage = source.getTrueSource() instanceof EntityPlayer && ((EntityPlayer) source.getTrueSource()).capabilities.isCreativeMode;if(takeDamage || this.getDamageTaken() > 40.0F){ //判斷我們?nèi)绻麑⒋蚱坪髸?huì)掉落什么物品if(!takeDamage && this.world.getGameRules().getBoolean("doEntityDrops")){this.dropItemWithOffset(ModItems.OBBOAT, 1, 0.0F);}this.setDead();}return true;}}else{return true;}}@Overridepublic void applyEntityCollision(Entity entity){if(entity instanceof EntityObBoat){if(entity.getEntityBoundingBox().minY < this.getEntityBoundingBox().maxY){super.applyEntityCollision(entity);}}else if(entity.getEntityBoundingBox().minY <= this.getEntityBoundingBox().minY){super.applyEntityCollision(entity);}}@Override@SideOnly(Side.CLIENT)public void performHurtAnimation(){this.setForwardDirection(-this.getForwardDirection());this.setTimeSinceHit(10);this.setDamageTaken(this.getDamageTaken() * 11.0F);}@Overridepublic boolean canBeCollidedWith(){return !this.isDead;}@Override@SideOnly(Side.CLIENT)public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean teleport){this.boatPitch = x;this.lerpY = y;this.lerpZ = z;this.boatYaw = yaw;this.lerpXRot = pitch;this.lerpSteps = 10;}@Overridepublic EnumFacing getAdjustedHorizontalFacing(){return this.getHorizontalFacing().rotateY();}@Overridepublic void onUpdate(){this.previousStatus = this.status;this.status = this.getBoatStatus();if(this.status != Status.UNDER_LAVA && this.status != Status.UNDER_FLOWING_LAVA){this.outOfControlCounter = 0.0F;}else{this.outOfControlCounter++;}if(!this.world.isRemote && this.outOfControlCounter >= 60.0F){this.removePassengers();}if(this.getTimeSinceHit() > 0){this.setTimeSinceHit(this.getTimeSinceHit() - 1);}if(this.getDamageTaken() > 0.0F){this.setDamageTaken(this.getDamageTaken() - 1.0F);}this.prevPosX = this.posX;this.prevPosY = this.posY;this.prevPosZ = this.posZ;if(!this.world.isRemote){this.setFlag(6, this.isGlowing());}this.onEntityUpdate();this.tickLerp();if(this.canPassengerSteer()){if(this.getPassengers().size() == 0 || !(this.getPassengers().get(0) instanceof EntityPlayer)){this.setPaddleState(false, false);}this.updateMotion();if(this.world.isRemote){this.controlBoat();this.world.sendPacketToServer(new CPacketSteerBoat(this.getPaddleState(0), this.getPaddleState(1)));}this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ);}else{this.motionX = 0.0D;this.motionY = 0.0D;this.motionZ = 0.0D;}for(int i = 0; i <= 1; i++){if(this.getPaddleState(i)){if(!this.isSilent() && (double) (this.paddlePositions[i] % ((float) Math.PI * 2F)) <= (Math.PI / 4D) && ((double) this.paddlePositions[i] + 0.39269909262657166D) % (Math.PI * 2D) >= (Math.PI / 4D)){SoundEvent event = this.getPaddleSound();if(event != null){Vec3d look = this.getLook(1.0F);double lookX = i == 1 ? -look.z : look.z;double lookZ = i == 1 ? look.x : -look.x;this.world.playSound(null, this.posX + lookX, this.posY, this.posZ + lookZ, event, this.getSoundCategory(), 1.0F, 0.8F + 0.4F * this.rand.nextFloat());}}this.paddlePositions[i] = (float) ((double) this.paddlePositions[i] + 0.39269909262657166D);}else{this.paddlePositions[i] = 0.0F;}}this.doBlockCollisions();List<Entity> entities = this.world.getEntitiesInAABBexcluding(this, this.getEntityBoundingBox().expand(0.20000000298023224D, -0.009999999776482582D, 0.20000000298023224D), EntitySelectors.getTeamCollisionPredicate(this));if(!entities.isEmpty()){boolean flag = !this.world.isRemote && !(this.getControllingPassenger() instanceof EntityPlayer);for(Entity entity : entities){if(!entity.isPassenger(this)){if(flag && this.getPassengers().size() < 2 && !entity.isRiding() && entity.width < this.width && entity instanceof EntityLivingBase && !(entity instanceof EntityWaterMob) && !(entity instanceof EntityPlayer)){entity.startRiding(this);}else{this.applyEntityCollision(entity);}}}}}//船被打破之后掉落的物品@Overridepublic ItemStack getPickedResult(RayTraceResult target){return new ItemStack(ModItems.OBBOAT, 1, 0);}private void tickLerp(){if(this.lerpSteps > 0 && !this.canPassengerSteer()){double posX = this.posX + (this.boatPitch - this.posX) / (double) this.lerpSteps;double posY = this.posY + (this.lerpY - this.posY) / (double) this.lerpSteps;double posZ = this.posZ + (this.lerpZ - this.posZ) / (double) this.lerpSteps;double yaw = MathHelper.wrapDegrees(this.boatYaw - (double) this.rotationYaw);this.rotationYaw = (float) ((double) this.rotationYaw + yaw / (double) this.lerpSteps);this.rotationPitch = (float) ((double) this.rotationPitch + (this.lerpXRot - (double) this.rotationPitch) / (double) this.lerpSteps);this.lerpSteps--;this.setPosition(posX, posY, posZ);this.setRotation(this.rotationYaw, this.rotationPitch);}}@Overridepublic void setPaddleState(boolean leftPaddle, boolean rightPaddle){this.dataManager.set(DATA_ID_PADDLE[0], leftPaddle);this.dataManager.set(DATA_ID_PADDLE[1], rightPaddle);}@Override@SideOnly(Side.CLIENT)public float getRowingTime(int side, float limbSwing){return this.getPaddleState(side) ? (float) MathHelper.clampedLerp((double) this.paddlePositions[side] - 0.39269909262657166D, this.paddlePositions[side], limbSwing) : 0.0F;}private Status getBoatStatus(){Status status = this.getUnderLavaStatus();if(status != null){this.lavaLevel = this.getEntityBoundingBox().maxY;return status;}else if(this.checkInLava()){return Status.IN_LAVA;}else{float f = this.getBoatGlide();if(f > 0.0F){this.boatGlide = f;return Status.ON_LAND;}else{return Status.IN_AIR;}}}private float getLavaLevelAbove(){AxisAlignedBB boundingBox = this.getEntityBoundingBox();int minX = MathHelper.floor(boundingBox.minX);int maxX = MathHelper.ceil(boundingBox.maxX);int minY = MathHelper.floor(boundingBox.maxY);int maxY = MathHelper.ceil(boundingBox.maxY - this.lastYd);int minZ = MathHelper.floor(boundingBox.minZ);int maxZ = MathHelper.ceil(boundingBox.maxZ);BlockPos.PooledMutableBlockPos mutableBlockPos = BlockPos.PooledMutableBlockPos.retain();try{label78:for(int y = minY; y < maxY; y++){float liquidHeight = 0.0F;int x = minX;while(true){if(x >= maxX){if(liquidHeight < 1.0F){return (float) mutableBlockPos.getY() + liquidHeight;}break;}for(int z = minZ; z < maxZ; z++){mutableBlockPos.setPos(x, y, z);IBlockState state = this.world.getBlockState(mutableBlockPos);//判斷船是否在巖漿或者水上if(state.getMaterial() == Material.LAVA || state.getMaterial() == Material.WATER){liquidHeight = Math.max(liquidHeight, BlockLiquid.getBlockLiquidHeight(state, this.world, mutableBlockPos));}if(liquidHeight >= 1.0F){continue label78;}}x++;}}return (float) (maxY + 1);}finally{mutableBlockPos.release();}}@Overridepublic float getBoatGlide(){AxisAlignedBB entityBoundingBox = this.getEntityBoundingBox();AxisAlignedBB boundingBox = new AxisAlignedBB(entityBoundingBox.minX, entityBoundingBox.minY - 0.001D, entityBoundingBox.minZ, entityBoundingBox.maxX, entityBoundingBox.minY, entityBoundingBox.maxZ);int minX = MathHelper.floor(boundingBox.minX) - 1;int maxX = MathHelper.ceil(boundingBox.maxX) + 1;int minY = MathHelper.floor(boundingBox.minY) - 1;int maxY = MathHelper.ceil(boundingBox.maxY) + 1;int minZ = MathHelper.floor(boundingBox.minZ) - 1;int maxZ = MathHelper.ceil(boundingBox.maxZ) + 1;List<AxisAlignedBB> list = new ArrayList<>();float slipperiness = 0.0F;int friction = 0;BlockPos.PooledMutableBlockPos mutableBlockPos = BlockPos.PooledMutableBlockPos.retain();try{for(int x = minX; x < maxX; x++){for(int z = minZ; z < maxZ; z++){int offset = (x != minX && x != maxX - 1 ? 0 : 1) + (z != minZ && z != maxZ - 1 ? 0 : 1);if(offset != 2){for(int y = minY; y < maxY; y++){if(offset <= 0 || y != minY && y != maxY - 1){mutableBlockPos.setPos(x, y, z);IBlockState state = this.world.getBlockState(mutableBlockPos);state.addCollisionBoxToList(this.world, mutableBlockPos, boundingBox, list, this, false);if(!list.isEmpty()){slipperiness += state.getBlock().getSlipperiness(state, this.world, mutableBlockPos, this);friction++;}list.clear();}}}}}}finally{mutableBlockPos.release();}return slipperiness / (float) friction;}private boolean checkInLava(){AxisAlignedBB entityBoundingBox = this.getEntityBoundingBox();int minX = MathHelper.floor(entityBoundingBox.minX);int maxX = MathHelper.ceil(entityBoundingBox.maxX);int minY = MathHelper.floor(entityBoundingBox.minY);int maxY = MathHelper.ceil(entityBoundingBox.minY + 0.001D);int minZ = MathHelper.floor(entityBoundingBox.minZ);int maxZ = MathHelper.ceil(entityBoundingBox.maxZ);boolean flag = false;this.lavaLevel = Double.MIN_VALUE;BlockPos.PooledMutableBlockPos mutableBlockPos = BlockPos.PooledMutableBlockPos.retain();try{for(int x = minX; x < maxX; x++){for(int y = minY; y < maxY; y++){for(int z = minZ; z < maxZ; z++){mutableBlockPos.setPos(x, y, z);IBlockState state = this.world.getBlockState(mutableBlockPos);//判斷巖漿是否在巖漿或水中滑行if(state.getMaterial() == Material.LAVA || state.getMaterial() == Material.WATER){float liquidHeight = BlockLiquid.getLiquidHeight(state, this.world, mutableBlockPos);this.lavaLevel = Math.max(liquidHeight, this.lavaLevel);flag |= entityBoundingBox.minY < (double) liquidHeight;}}}}}finally{mutableBlockPos.release();}return flag;}private Status getUnderLavaStatus(){AxisAlignedBB entityBoundingBox = this.getEntityBoundingBox();double entityHeight = entityBoundingBox.maxY + 0.001D;int minX = MathHelper.floor(entityBoundingBox.minX);int maxX = MathHelper.ceil(entityBoundingBox.maxX);int minY = MathHelper.floor(entityBoundingBox.maxY);int maxY = MathHelper.ceil(entityHeight);int minZ = MathHelper.floor(entityBoundingBox.minZ);int maxZ = MathHelper.ceil(entityBoundingBox.maxZ);boolean flag = false;BlockPos.PooledMutableBlockPos mutableBlockPos = BlockPos.PooledMutableBlockPos.retain();try{for(int x = minX; x < maxX; x++){for(int y = minY; y < maxY; y++){for(int z = minZ; z < maxZ; z++){mutableBlockPos.setPos(x, y, z);IBlockState state = this.world.getBlockState(mutableBlockPos);if((state.getMaterial() == Material.LAVA || state.getMaterial() == Material.WATER) && entityHeight < (double) BlockLiquid.getLiquidHeight(state, this.world, mutableBlockPos)){if(state.getValue(BlockLiquid.LEVEL) != 0){return Status.UNDER_FLOWING_LAVA;}flag = true;}}}}}finally{mutableBlockPos.release();}return flag ? Status.UNDER_LAVA : null;}private void updateMotion(){double gravity = this.hasNoGravity() ? 0.0D : -0.03999999910593033D;double position = 0.0D;float momentum = 0.05F;if(this.previousStatus == Status.IN_AIR && this.status != Status.IN_AIR && this.status != Status.ON_LAND){this.lavaLevel = this.getEntityBoundingBox().minY + (double) this.height;this.setPosition(this.posX, (double) (this.getLavaLevelAbove() - this.height) + 0.101D, this.posZ);this.motionY = 0.0D;this.lastYd = 0.0D;this.status = Status.IN_LAVA;}else{if(this.status == Status.IN_LAVA){position = (this.lavaLevel - this.getEntityBoundingBox().minY) / (double) this.height;momentum = 0.9F;}else if(this.status == Status.UNDER_FLOWING_LAVA){gravity = -7.0E-4D;momentum = 0.9F;}else if(this.status == Status.UNDER_LAVA){position = 0.009999999776482582D;momentum = 0.45F;}else if(this.status == Status.IN_AIR){momentum = 0.9F;}else if(this.status == Status.ON_LAND){momentum = this.boatGlide;if(this.getControllingPassenger() instanceof EntityPlayer){this.boatGlide /= 2.0F;}}this.motionX *= momentum;this.motionZ *= momentum;this.deltaRotation *= momentum;this.motionY += gravity;if(position > 0.0D){this.motionY += position * 0.06153846016296973D;this.motionY *= 0.75D;}}}private void controlBoat(){if(this.isBeingRidden()){float speed = 0.0F;if(this.leftInputDown){this.deltaRotation += -1.0F;}if(this.rightInputDown){this.deltaRotation++;}if(this.rightInputDown != this.leftInputDown && !this.forwardInputDown && !this.backInputDown){speed += 0.005F;}this.rotationYaw += this.deltaRotation;if(this.forwardInputDown){speed += 0.04F;}if(this.backInputDown){speed -= 0.005F;}this.motionX += (MathHelper.sin(-this.rotationYaw * 0.017453292F) * speed);this.motionZ += (MathHelper.cos(this.rotationYaw * 0.017453292F) * speed);this.setPaddleState(this.rightInputDown && !this.leftInputDown || this.forwardInputDown, this.leftInputDown && !this.rightInputDown || this.forwardInputDown);}}@Overridepublic void updatePassenger(Entity passenger){//當(dāng)玩家進(jìn)入船中,防止其著火,就賦予其防火效果((EntityLivingBase)passenger).addPotionEffect(new PotionEffect(MobEffects.FIRE_RESISTANCE, 100));if(this.isPassenger(passenger)){float x = 0.0F;float height = (float) ((this.isDead ? 0.009999999776482582D : this.getMountedYOffset()) + passenger.getYOffset());if(this.getPassengers().size() > 1){int index = this.getPassengers().indexOf(passenger);if(index == 0){x = 0.2F;}else{x = -0.6F;}if(passenger instanceof EntityAnimal){x = (float) ((double) x + 0.2D);}}Vec3d pos = (new Vec3d(x, 0.0D, 0.0D)).rotateYaw(-this.rotationYaw * 0.017453292F - ((float) Math.PI / 2F));passenger.setPosition(this.posX + pos.x, this.posY + (double) height, this.posZ + pos.z);passenger.rotationYaw += this.deltaRotation;passenger.setRotationYawHead(passenger.getRotationYawHead() + this.deltaRotation);this.applyYawToEntity(passenger);if(passenger instanceof EntityAnimal && this.getPassengers().size() > 1){int rotation = passenger.getEntityId() % 2 == 0 ? 90 : 270;passenger.setRenderYawOffset(((EntityAnimal) passenger).renderYawOffset + (float) rotation);passenger.setRotationYawHead(passenger.getRotationYawHead() + (float) rotation);}if(this.isInsideOfMaterial(Material.WATER)){passenger.dismountRidingEntity();}}}@Overrideprotected void applyYawToEntity(Entity entityToUpdate){entityToUpdate.setRenderYawOffset(this.rotationYaw);float yaw = MathHelper.wrapDegrees(entityToUpdate.rotationYaw - this.rotationYaw);float clampedYaw = MathHelper.clamp(yaw, -105.0F, 105.0F);entityToUpdate.prevRotationYaw += clampedYaw - yaw;entityToUpdate.rotationYaw += clampedYaw - yaw;entityToUpdate.setRotationYawHead(entityToUpdate.rotationYaw);}@Override@SideOnly(Side.CLIENT)public void applyOrientationToEntity(Entity entityToUpdate){this.applyYawToEntity(entityToUpdate);}@Overrideprotected void writeEntityToNBT(NBTTagCompound compound){}@Overrideprotected void readEntityFromNBT(NBTTagCompound compound){}@Overridepublic boolean processInitialInteract(EntityPlayer player, EnumHand hand){if(player.isSneaking()){return false;}else{if(!this.world.isRemote && this.outOfControlCounter < 60.0F && !this.isInsideOfMaterial(Material.WATER)){player.startRiding(this);}return true;}}@Overrideprotected void updateFallState(double y, boolean onGround, IBlockState state, BlockPos pos){this.lastYd = this.motionY;if(!this.isRiding()){if(onGround){if(this.fallDistance > 3.0F){if(this.status != Status.ON_LAND){this.fallDistance = 0.0F;return;}this.fall(this.fallDistance, 1.0F);if(!this.world.isRemote && !this.isDead){this.setDead();if(this.world.getGameRules().getBoolean("doEntityDrops")){for(int i = 0; i < 3; i++){this.entityDropItem(new ItemStack(Blocks.OBSIDIAN, 1, 0), 0.0F);}}}}this.fallDistance = 0.0F;}else if(this.world.getBlockState((new BlockPos(this)).down()).getMaterial() != Material.LAVA && y < 0.0D ||this.world.getBlockState((new BlockPos(this)).down()).getMaterial() != Material.WATER && y < 0.0D){this.fallDistance = (float) ((double) this.fallDistance - y);}}}@Overridepublic boolean getPaddleState(int state){return this.dataManager.get(DATA_ID_PADDLE[state]) && this.getControllingPassenger() != null;}@Overridepublic void setDamageTaken(float damageTaken){this.dataManager.set(DAMAGE_TAKEN, damageTaken);}@Overridepublic float getDamageTaken(){return this.dataManager.get(DAMAGE_TAKEN);}@Overridepublic void setTimeSinceHit(int timeSinceHit){this.dataManager.set(TIME_SINCE_HIT, timeSinceHit);}@Overridepublic int getTimeSinceHit(){return this.dataManager.get(TIME_SINCE_HIT);}@Overridepublic void setForwardDirection(int forwardDirection){this.dataManager.set(FORWARD_DIRECTION, forwardDirection);}@Overridepublic int getForwardDirection(){return this.dataManager.get(FORWARD_DIRECTION);}@Overrideprotected boolean canFitPassenger(Entity passenger){return this.getPassengers().size() < 2;}@Overridepublic Entity getControllingPassenger(){List<Entity> passengers = this.getPassengers();return passengers.isEmpty() ? null : passengers.get(0);}@Override@SideOnly(Side.CLIENT)public void updateInputs(boolean left, boolean right, boolean forward, boolean back){this.leftInputDown = left;this.rightInputDown = right;this.forwardInputDown = forward;this.backInputDown = back;}//枚舉船的幾種狀態(tài)public enum Status{IN_LAVA,UNDER_LAVA,UNDER_FLOWING_LAVA,ON_LAND,IN_AIR} }

3.新建船的渲染類RenderObBoat.java,這里直接使用原版的船渲染類。

RenderObBoat.java

package com.joy187.rejoymod.entity.render;import com.joy187.rejoymod.entity.EntityObBoat; import com.joy187.rejoymod.entity.model.ModelObBoat; import com.joy187.rejoymod.util.Reference; import net.minecraft.client.model.IMultipassModel; import net.minecraft.client.model.ModelBase; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.entity.Render; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.MathHelper;public class RenderObBoat extends Render<EntityObBoat> {//這個(gè)要對(duì)應(yīng)我們的船的皮膚貼圖文件路徑public static final ResourceLocation TEXTURES = new ResourceLocation(Reference.Mod_ID + ":textures/entity/obboat.png");protected ModelBase modelBoat = new ModelObBoat();public RenderObBoat(RenderManager renderManagerIn){super(renderManagerIn);this.shadowSize = 0.5F;this.modelBoat = new ModelObBoat();}public void doRender(EntityObBoat entity, double x, double y, double z, float entityYaw, float partialTicks){GlStateManager.pushMatrix();this.setupTranslation(x, y, z);this.setupRotation(entity, entityYaw, partialTicks);this.bindEntityTexture(entity);if (this.renderOutlines){GlStateManager.enableColorMaterial();GlStateManager.enableOutlineMode(this.getTeamColor(entity));}this.modelBoat.render(entity, partialTicks, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);if (this.renderOutlines){GlStateManager.disableOutlineMode();GlStateManager.disableColorMaterial();}GlStateManager.popMatrix();super.doRender(entity, x, y, z, entityYaw, partialTicks);}public void setupRotation(EntityObBoat p_188311_1_, float p_188311_2_, float p_188311_3_){GlStateManager.rotate(180.0F - p_188311_2_, 0.0F, 1.0F, 0.0F);float f = (float)p_188311_1_.getTimeSinceHit() - p_188311_3_;float f1 = p_188311_1_.getDamageTaken() - p_188311_3_;if (f1 < 0.0F){f1 = 0.0F;}if (f > 0.0F){GlStateManager.rotate(MathHelper.sin(f) * f * f1 / 10.0F * (float)p_188311_1_.getForwardDirection(), 1.0F, 0.0F, 0.0F);}GlStateManager.scale(-1.0F, -1.0F, 1.0F);}public void setupTranslation(double p_188309_1_, double p_188309_3_, double p_188309_5_){GlStateManager.translate((float)p_188309_1_, (float)p_188309_3_ + 0.375F, (float)p_188309_5_);}/*** Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture.*/protected ResourceLocation getEntityTexture(EntityObBoat entity){return TEXTURES;}public boolean isMultipass(){return true;}public void renderMultipass(EntityObBoat p_188300_1_, double p_188300_2_, double p_188300_4_, double p_188300_6_, float p_188300_8_, float p_188300_9_){GlStateManager.pushMatrix();this.setupTranslation(p_188300_2_, p_188300_4_, p_188300_6_);this.setupRotation(p_188300_1_, p_188300_8_, p_188300_9_);this.bindEntityTexture(p_188300_1_);((IMultipassModel)this.modelBoat).renderMultipass(p_188300_1_, p_188300_9_, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);GlStateManager.popMatrix();} }

在RenderHandler.java中的registerEntityRenders()中添加船的渲染注冊(cè):

RenderHandler.java

public class RenderHandler {public static void registerEntityRenders() {RenderingRegistry.registerEntityRenderingHandler(EntityObBoat.class, new IRenderFactory<EntityObBoat>(){@Overridepublic Render<? super EntityObBoat> createRenderFor(RenderManager manager){return new RenderObBoat(manager);}});} }

4.在EntityInit.java中添加我們的船的注冊(cè)信息:

registerEntity("obboat", EntityObBoat.class, ENTITY_NEXT_ID, 20);

5.生物實(shí)體部分完成,我們要制作一個(gè)專門生成船的物品,新建ItemObBoat類。

ItemObBoat.java

package com.joy187.rejoymod.item;import com.joy187.rejoymod.entity.EntityObBoat; import net.minecraft.block.Block; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.stats.StatList; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World;import java.util.List;public class ItemObBoat extends ItemBase{public ItemObBoat(String name, CreativeTabs tab) {super(name,tab);this.maxStackSize=1;}private EntityObBoat.Type type= EntityObBoat.Type.OAK;public ItemObBoat(EntityObBoat.Type typeIn){this.type = typeIn;this.maxStackSize = 1;this.setCreativeTab(CreativeTabs.TRANSPORTATION);this.setUnlocalizedName("boat." + "ob");}/*** Called when the equipped item is right clicked.*/public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn){ItemStack itemstack = playerIn.getHeldItem(handIn);float f = 1.0F;float f1 = playerIn.prevRotationPitch + (playerIn.rotationPitch - playerIn.prevRotationPitch) * 1.0F;float f2 = playerIn.prevRotationYaw + (playerIn.rotationYaw - playerIn.prevRotationYaw) * 1.0F;double d0 = playerIn.prevPosX + (playerIn.posX - playerIn.prevPosX) * 1.0D;double d1 = playerIn.prevPosY + (playerIn.posY - playerIn.prevPosY) * 1.0D + (double)playerIn.getEyeHeight();double d2 = playerIn.prevPosZ + (playerIn.posZ - playerIn.prevPosZ) * 1.0D;Vec3d vec3d = new Vec3d(d0, d1, d2);float f3 = MathHelper.cos(-f2 * 0.017453292F - (float)Math.PI);float f4 = MathHelper.sin(-f2 * 0.017453292F - (float)Math.PI);float f5 = -MathHelper.cos(-f1 * 0.017453292F);float f6 = MathHelper.sin(-f1 * 0.017453292F);float f7 = f4 * f5;float f8 = f3 * f5;double d3 = 5.0D;Vec3d vec3d1 = vec3d.addVector((double)f7 * 5.0D, (double)f6 * 5.0D, (double)f8 * 5.0D);RayTraceResult raytraceresult = worldIn.rayTraceBlocks(vec3d, vec3d1, true);if (raytraceresult == null){return new ActionResult<ItemStack>(EnumActionResult.PASS, itemstack);}else{Vec3d vec3d2 = playerIn.getLook(1.0F);boolean flag = false;List<Entity> list = worldIn.getEntitiesWithinAABBExcludingEntity(playerIn, playerIn.getEntityBoundingBox().expand(vec3d2.x * 5.0D, vec3d2.y * 5.0D, vec3d2.z * 5.0D).grow(1.0D));for (int i = 0; i < list.size(); ++i){Entity entity = list.get(i);if (entity.canBeCollidedWith()){AxisAlignedBB axisalignedbb = entity.getEntityBoundingBox().grow((double)entity.getCollisionBorderSize());if (axisalignedbb.contains(vec3d)){flag = true;}}}if (flag){return new ActionResult<ItemStack>(EnumActionResult.PASS, itemstack);}else if (raytraceresult.typeOfHit != RayTraceResult.Type.BLOCK){return new ActionResult<ItemStack>(EnumActionResult.PASS, itemstack);}else{Block block = worldIn.getBlockState(raytraceresult.getBlockPos()).getBlock();boolean flag1 = block == Blocks.WATER || block == Blocks.FLOWING_WATER || block == Blocks.LAVA || block == Blocks.FLOWING_LAVA;//這里聲明我們要召喚的船的實(shí)體類(第2步中的實(shí)體類)EntityObBoat entityboat = new EntityObBoat(worldIn, raytraceresult.hitVec.x, flag1 ? raytraceresult.hitVec.y - 0.12D : raytraceresult.hitVec.y, raytraceresult.hitVec.z);//entityboat.setBoatType(this.type);entityboat.rotationYaw = playerIn.rotationYaw;if (!worldIn.getCollisionBoxes(entityboat, entityboat.getEntityBoundingBox().grow(-0.1D)).isEmpty()){return new ActionResult<ItemStack>(EnumActionResult.FAIL, itemstack);}else{if (!worldIn.isRemote){worldIn.spawnEntity(entityboat);}if (!playerIn.capabilities.isCreativeMode){itemstack.shrink(1);}playerIn.addStat(StatList.getObjectUseStats(this));return new ActionResult<ItemStack>(EnumActionResult.SUCCESS, itemstack);}}}} }

在ModItems.java中添加該物品的注冊(cè)信息:

//物品名稱 放入哪個(gè)物品欄public static final Item OBBOAT = new ItemObBoat("obboat",IdlFramework.ITEM_TAB);

6.在resources包中的assets\rejoymod\models\item中新建物品模型文件:

obboat.json

{"parent": "item/generated","textures": {"layer0": "rejoymod:items/obboat"} }

在en_us.lang中添加船物品和船實(shí)體的英文名稱:

item.obboat.name=Example Boat entity.obboat.name=Example Boat

在textures\item中添加物品的貼圖:

在textures\entity中添加船實(shí)體的皮膚貼圖:

7.保存所有文件 -> 進(jìn)入游戲測(cè)試:

巖漿中行船

水中行船

總結(jié)

以上是生活随笔為你收集整理的Minecraft 1.12.2模组开发(四十五) 水火两用船的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

欧美激情视频一二区 | 狠狠干综合网 | 国产成人61精品免费看片 | 99久久99久久免费精品蜜臀 | 夜夜嗨av色一区二区不卡 | av在线一| 精品久久久免费 | 九九激情视频 | 97视频在线观看视频免费视频 | 一 级 黄 色 片免费看的 | 美女国产精品 | 精品久久久影院 | 欧美国产日韩一区二区三区 | 免费观看的av | 中文字幕视频播放 | 日韩成人在线一区二区 | 久久国内精品 | 国产一二三精品 | 视频在线观看日韩 | 色婷五月 | 久久三级视频 | 久久精品久久99 | 日日干天天爽 | 在线综合 亚洲 欧美在线视频 | 久久99亚洲精品 | 国产精品成人免费一区久久羞羞 | 国产成人61精品免费看片 | 日韩伦理一区二区三区av在线 | 色婷婷激情五月 | 久久久免费精品国产一区二区 | 九九久久免费视频 | 成人精品一区二区三区中文字幕 | 99久热 | 国产精品国产三级国产aⅴ9色 | 久久成人亚洲欧美电影 | 亚洲美女久久 | 中文视频在线播放 | bbw av| 激情视频久久 | 国产精品久久久久久吹潮天美传媒 | 免费成人av在线看 | 久日视频 | 久久久久久久国产精品影院 | 69视频在线播放 | 天天草av | 中文字幕色在线视频 | 色爱成人网| 视频在线日韩 | 国产一级片久久 | 久久久久久久久久免费 | 成人影片在线免费观看 | 欧美少妇bbwhd | 国产在线观看91 | 天天视频色 | 在线观看视频在线观看 | 久久综合免费 | 国产精品精品久久久久久 | 日本不卡一区二区 | 久久在线电影 | 伊人天堂av | 国产精品入口麻豆www | 超碰97免费在线 | 国产区欧美| 国产麻豆精品免费视频 | 久久精品视频免费播放 | 国产麻豆成人传媒免费观看 | 国产精品久久久久永久免费 | 久久国内精品99久久6app | 国产精品第54页 | 亚洲精品在线资源 | 久久免费毛片视频 | 中文一区在线 | 久久99精品国产麻豆宅宅 | 最近更新中文字幕 | 中文字幕乱码在线播放 | av中文国产 | 久草av在线播放 | 精品国产乱码久久久久 | 成人一区在线观看 | 亚州av一区 | 久久精品三级 | 亚洲天堂网在线视频 | 国产在线永久 | 色视频网站在线 | 亚洲精品免费在线观看视频 | 久久69av | 国产精品美乳一区二区免费 | 日韩xxxx视频 | 成人免费视频视频在线观看 免费 | 91爱在线| 九九热在线精品视频 | 亚洲视频免费在线 | 五月婷婷综合在线视频 | 日韩av电影网站在线观看 | 九九九九九九精品任你躁 | 在线看片91 | 亚洲涩涩网| 视频精品一区二区三区 | 久草9视频 | 欧美视频国产视频 | 青青草视频精品 | 91九色porn在线资源 | 超碰在线人人艹 | 国产又粗又猛又爽又黄的视频免费 | 色伊人网 | 激情视频在线观看网址 | 日韩精品视频一二三 | 日日夜夜亚洲 | 六月色丁香 | 精品国产一区二区在线 | h视频日本| 国产黄色片久久久 | 久久久久久久久久国产精品 | 视频国产在线观看18 | 亚洲免费在线 | 国产黄在线 | 福利视频一二区 | 国产精品露脸在线 | 米奇四色影视 | 99re8这里有精品热视频免费 | 色999精品 | 欧美一区二区三区在线观看 | 欧美久久久一区二区三区 | 亚洲资源在线 | 国产亚洲免费观看 | 一区二区三区影院 | 精品一区二区三区电影 | 人人草人 | 色婷婷亚洲婷婷 | 日日爱av| 一区二区三区在线免费观看视频 | 永久免费精品视频 | 免费观看av网站 | 福利片视频区 | 日韩精品 在线视频 | 久久天堂影院 | 视频国产在线观看18 | 综合网欧美 | 久久久久久久久久久免费 | 中日韩在线视频 | 99亚洲天堂 | 国产黄a三级三级三级三级三级 | 91色偷偷| 91资源在线观看 | 黄色片网站免费 | 久久成人免费视频 | 欧美日韩a视频 | 激情网在线观看 | 欧美一级免费高清 | 九九热免费在线视频 | 免费黄色激情视频 | 国产1级毛片 | 五月激情站 | 日韩大片在线免费观看 | 欧美性做爰猛烈叫床潮 | 最近中文字幕大全 | 日韩欧美国产激情在线播放 | 久久国产精品99久久久久久丝袜 | 特片网久久 | 麻豆免费在线视频 | 九色精品免费永久在线 | 不卡在线一区 | 国产福利一区二区在线 | 最新av网址大全 | 久久久天堂 | 色婷在线 | 欧美色久 | 天天干天天操天天做 | 午夜色场 | 久久综合加勒比 | 青青河边草观看完整版高清 | 天天操天天射天天爽 | 久久精品牌麻豆国产大山 | 成人性生爱a∨ | 国产福利中文字幕 | 国产精品综合av一区二区国产馆 | 日韩在线色视频 | 波多野结衣综合网 | 狠狠操综合网 | 99精品视频在线免费观看 | 91av在线国产| 久久婷婷久久 | 亚洲成人网在线 | 国产老太婆免费交性大片 | av中文字幕电影 | 一区三区在线欧 | 在线免费观看羞羞视频 | 色国产精品一区在线观看 | 成人黄色电影在线播放 | 色婷婷国产在线 | 在线观看中文字幕一区二区 | 深爱激情综合 | 黄a网站 | 91探花在线视频 | 99久久久久久久久 | 国产96视频 | 日日夜夜国产 | 久久99视频免费观看 | 久久成人精品电影 | 西西44人体做爰大胆视频 | 成人免费在线观看av | 国产精品中文久久久久久久 | 在线看免费 | 91成人精品在线 | 午夜精品一区二区三区可下载 | 91视频久久久久 | 在线观看黄 | 国产精品不卡在线观看 | 国产黄色免费观看 | 国产高清免费av | 色综合久久五月 | av动态图片 | 91在线观| 国产不卡av在线 | 成年美女黄网站色大片免费看 | 最近中文字幕mv | 欧美极度另类性三渗透 | 一区二区电影在线观看 | 97日日碰人人模人人澡分享吧 | 国产精品成人免费一区久久羞羞 | 国产精品久久久网站 | 欧美韩日在线 | 麻豆视频在线免费观看 | 在线观看深夜视频 | 亚洲综合成人av | 一级做a爱片性色毛片www | 91福利社区在线观看 | 国产精品11 | 国产超碰在线 | 成年人在线看片 | 国产在线精 | 免费观看全黄做爰大片国产 | 久久久国产影视 | 欧美性黑人 | 国外调教视频网站 | 中文字幕欧美三区 | 麻豆视传媒官网免费观看 | 欧美一级久久 | 最近中文字幕完整视频高清1 | 久久好看 | 黄色成人av| 最近最新中文字幕视频 | 欧美在线资源 | 亚洲国产精品一区二区尤物区 | 91女神的呻吟细腰翘臀美女 | 91精品国产自产在线观看永久 | 日韩在线精品一区 | 一区二区三区不卡在线 | 狠狠色丁香婷婷综合最新地址 | a特级毛片| 一级黄色片在线免费观看 | 日日天天 | 日韩精品在线视频免费观看 | 婷婷色综合 | 久久久久久久久久久久久久av | 色婷婷丁香 | 亚洲免费在线观看视频 | 九九在线播放 | 麻豆mv在线观看 | 色www.| 亚洲精品欧美专区 | 精品在线二区 | 伊人小视频 | 亚洲人人av | 五月激情丁香图片 | 国产精品久久久久一区二区 | 国内精品亚洲 | 黄网站大全 | 在线观看免费视频 | 亚洲成年人免费网站 | 亚洲黄色小说网 | 91色一区二区三区 | 96av在线视频 | 最近2019好看的中文字幕免费 | 精品视频免费观看 | freejavvideo日本免费 | 超碰97.com| 亚洲丁香日韩 | 久久国产a | 美女视频一区二区 | 2021av在线 | 国产精品女人网站 | 精品在线不卡 | 日韩理论片在线 | 国产一级久久 | 99久久久国产精品 | 超碰免费公开 | 成年人免费看av | 国产精品久久久久久吹潮天美传媒 | 免费污片 | 粉嫩av一区二区三区免费 | 亚洲精品免费在线 | 中文字幕视频 | 国产精品久久久久一区二区三区共 | 久久久久区 | 亚洲天堂精品 | 91精品视频导航 | 国产精品久久久久久影院 | 91香蕉国产在线观看软件 | 欧美日韩午夜 | 啪啪免费视频网站 | 日韩天天操 | 国产精品欧美久久久久无广告 | 色大片免费看 | 久久99婷婷 | 久久久av免费 | 国产在线一区二区 | 亚洲精品永久免费视频 | 一区二区三区污 | 日本不卡一区二区三区在线观看 | 中文字幕一二 | 久久久久国产一区二区三区四区 | 在线黄网站 | av888.com| 69久久99精品久久久久婷婷 | 亚洲欧美视频在线观看 | 中文字幕亚洲欧美日韩 | 九色视频网址 | 97超碰人人澡| 97热久久免费频精品99 | 亚洲精品高清视频 | 在线观看日韩精品 | 国产精品成人品 | 天天插一插| 亚洲婷婷在线视频 | 国产成人免费观看 | 国产成人61精品免费看片 | 亚洲成人资源在线 | 久久综合婷婷国产二区高清 | 99久视频 | 日本亚洲国产 | 国产精品18久久久久久首页狼 | 五月婷婷在线视频观看 | 色婷婷激婷婷情综天天 | 美女网站久久 | 成人动漫一区二区 | 91在线视频播放 | 久久r精品 | 在线播放 一区 | 在线观看免费视频你懂的 | 精品九九九 | 综合网成人 | 国产精品久久麻豆 | 91av中文| 日韩草比| 一二三区高清 | 国产白浆在线观看 | 精品夜夜嗨av一区二区三区 | 成人免费在线观看电影 | 91人人爽人人爽人人精88v | 日日日日日 | 久久视频6 | 天天操天天怕 | 精品国产乱码久久久久久久 | 看av免费网站 | 欧美日韩视频在线观看免费 | 国产 日韩 中文字幕 | 中文字幕日韩伦理 | 日韩在线视频观看免费 | 又爽又黄在线观看 | 亚洲桃花综合 | 韩国在线一区二区 | 蜜臀av性久久久久av蜜臀妖精 | 一二三区视频在线 | 久久久久久久久电影 | 97视频在线免费观看 | 久久免费的视频 | a黄色一级 | 亚洲精品日韩一区二区电影 | 国产剧情一区二区在线观看 | 欧美一级黄色片 | 国产精品毛片一区二区三区 | 992tv人人网tv亚洲精品 | 精品国产日本 | 久久国产经典 | av在线日韩| 精品久久久久久国产 | 午夜手机电影 | 亚洲久在线 | 欧美激情综合色综合啪啪五月 | 丁香婷婷射| 日韩精品91偷拍在线观看 | 日韩特级黄色片 | 成人网色 | 激情五月在线视频 | 午夜av电影院 | av国产在线观看 | 天堂av在线免费 | 日韩精品久久一区二区三区 | 国产色啪 | 精品国产综合区久久久久久 | 成人一区二区三区在线 | 国产精品一区二区中文字幕 | av电影 一区二区 | 91av免费观看 | 国产品久精国精产拍 | 99久久久国产精品免费观看 | 亚洲精品视频免费看 | 国产一级黄 | 日韩理论片在线观看 | 天天综合成人 | 久久国产精品精品国产色婷婷 | 992tv又爽又黄的免费视频 | 日韩高清精品一区二区 | 国产精品日韩高清 | 一区二区三区福利 | 欧美吞精 | 日韩免费一区 | 成人影片在线播放 | 日韩三级不卡 | 日韩美av在线 | 国色天香在线观看 | 国产精品久久一区二区三区, | 最近日本中文字幕 | 亚洲国产精品电影 | www久久久久 | 国产精品久久久久一区二区 | 黄色大全在线观看 | 中文字幕高清在线播放 | 国产精品精品久久久久久 | 在线国产福利 | 91黄色视屏 | 岛国av在线 | 在线观看成人网 | 精品久久久久久亚洲综合网 | 97超碰人人| 久久图| 色综合久久久久 | 91精品久久久久久久久久入口 | 黄色午夜 | 婷婷色在线资源 | 免费观看日韩av | 日韩精品网址 | 久久这里只有精品视频99 | 美女国内精品自产拍在线播放 | 久久久免费国产 | 日韩二区在线播放 | 在线日韩一区 | 日日噜噜噜噜夜夜爽亚洲精品 | 欧美日韩国产一区二区三区在线观看 | 久久久久久久99精品免费观看 | 国产日女人 | 日韩免费看| 黄av资源| 日韩免费在线观看视频 | 精品国产观看 | 久久黄色小说视频 | 国产精品自在线拍国产 | 中文字幕字幕中文 | 中文字幕视频播放 | 在线激情影院一区 | 狠狠躁夜夜躁人人爽超碰91 | 亚洲成人精品在线观看 | 久久国产精品99久久久久久丝袜 | 国产999在线观看 | 亚洲黄色成人网 | 麻豆91在线看 | 特黄特色特刺激视频免费播放 | 18国产精品福利片久久婷 | 99精品热视频只有精品10 | 亚洲一区 影院 | 亚洲精品免费在线视频 | 久久精品1区 | 三级在线国产 | 99视频精品免费观看, | 玖玖在线播放 | 欧美精选一区二区三区 | av在线播放网址 | 黄网站色 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 天天天操操操 | 日韩最新在线 | 最近中文字幕高清字幕在线视频 | 一区 在线 影院 | 日韩在线观看电影 | www免费网站在线观看 | 亚洲狠狠干 | 激情综合网五月婷婷 | 99在线高清视频在线播放 | 日韩免费一区二区三区 | 国产在线观看你懂的 | 欧美性色xo影院 | 久草观看| 国产色婷婷精品综合在线手机播放 | 91在线九色 | 成人欧美日韩国产 | 日本精品久久久久中文字幕 | 国产中文在线播放 | 国产色综合天天综合网 | 天天爽天天爽天天爽 | 九七视频在线观看 | 91网址在线观看 | 在线黄av| 午夜视频福利 | 色多多在线观看 | 亚洲另类视频 | 天天操天天射天天爽 | 97精品电影院 | 亚洲在线国产 | 欧美日韩在线观看一区 | 久草免费色站 | 97视频免费在线 | av一区二区三区在线播放 | 在线观看色网 | 国产亚洲情侣一区二区无 | 在线你懂 | 人人草人人草 | www日韩高清 | 久久久一本精品99久久精品66 | 日本女人b | 欧美一级免费在线 | 国产综合在线观看视频 | 97热在线观看 | 黄色成人av网址 | 国产精品你懂的在线观看 | 美女精品 | 国产精品嫩草影视久久久 | 欧美激情第八页 | 久久精品综合网 | 久久久久久久久久久免费视频 | 国产一区免费在线 | 亚洲欧美国产日韩在线观看 | 免费污片 | 91一区一区三区 | 亚洲成人午夜在线 | 综合天天色 | 樱空桃av | 激情五月网站 | 精品字幕在线 | 日韩欧美一区二区三区在线观看 | av电影av在线 | 男女视频国产 | 婷婷久久国产 | 色www精品视频在线观看 | 欧美日在线 | 99c视频高清免费观看 | 天堂麻豆 | 亚州欧美视频 | 国色天香永久免费 | 69xxxx欧美| 免费在线观看av网站 | 久久这里只有精品1 | 99色资源| 黄a网 | 久久国产精品影片 | 久久99久久99精品免观看软件 | 国产精品久久久99 | 精品国模一区二区三区 | 国产成人综合精品 | 日韩一区二区三区免费电影 | 小草av在线播放 | 国产又粗又猛又色 | 337p日本欧洲亚洲大胆裸体艺术 | 久久免费视频这里只有精品 | 国产在线黄色 | 成人日批视频 | 中中文字幕av在线 | 久草视频在线看 | 91亚瑟视频| 天天操天天干天天插 | 三级av中文字幕 | 日韩精品一区二区三区视频播放 | 日韩欧美高清一区二区三区 | www.国产高清| www.色com| 操一草| 中文字幕在线视频精品 | 在线视频第一页 | www国产亚洲精品久久网站 | 久久精品国亚洲 | 国产中文字幕一区二区三区 | 97av视频在线| 色噜噜狠狠狠狠色综合久不 | 999热视频| 97免费中文视频在线观看 | 天天操天天射天天爽 | 首页av在线 | 国产一级电影免费观看 | 天天操夜夜逼 | 91精品啪在线观看国产 | 成人一级视频在线观看 | 青青草华人在线视频 | 999久久久免费视频 午夜国产在线观看 | 91视频麻豆视频 | 天天干天天做天天操 | 美女视频黄免费的久久 | 91久久影院 | 国产视频中文字幕 | 一区二区三区在线免费观看视频 | 久久电影色 | 美女网色 | 在线v片| 中文在线www | av电影在线不卡 | 一区二区三区精品久久久 | 91视频午夜 | 天天插视频| 久久永久视频 | 久热电影| 色综合天天综合网国产成人网 | 男女激情麻豆 | 国产在线91精品 | 国产精品毛片久久蜜 | av免费在线观 | 亚洲精品乱码久久久久 | 国产精品ⅴa有声小说 | 国产日产精品一区二区三区四区的观看方式 | 日本女人b| 精品视频9999| 91禁看片 | 久久久久麻豆 | 91人人澡人人爽 | 97国产大学生情侣酒店的特点 | 日本中文字幕在线看 | 国产三级国产精品国产专区50 | 婷婷六月综合网 | 欧美日韩中文国产 | adn—256中文在线观看 | 亚洲成av人片一区二区梦乃 | 亚洲日日射 | 中文字幕专区高清在线观看 | 久久综合爱 | 在线观看中文字幕一区 | 国产精品欧美久久 | 天天干天天射天天爽 | 国产精品自拍在线 | 在线观看黄网 | 综合网久久 | 99综合久久 | 亚洲人成精品久久久久 | 国精产品999国精产品岳 | 91精品播放| 欧美影片 | 亚洲aaa毛片 | 亚洲成人欧美 | 精品国产乱码久久久久久天美 | 精品国产一区二区三区四区vr | 国产视频日韩视频欧美视频 | 欧美一性一交一乱 | 伊人伊成久久人综合网小说 | 91九色在线 | 四虎成人免费观看 | 狠狠网| 免费看国产曰批40分钟 | 欧美在线一 | 国产精品观看视频 | 久久综合色婷婷 | 不卡的av片 | 一区二区三区在线免费观看 | 国产高清黄 | av夜夜操| 一级欧美黄 | 国产精品乱码久久 | 天天爱天天操天天爽 | 精品美女久久 | 丁香九月婷婷综合 | 国内外成人在线 | 精选久久 | 永久免费看av | 日韩精品三区四区 | 91av综合| 国产高清第一页 | 成人av动漫在线 | 丁香激情综合久久伊人久久 | 国产视频中文字幕在线观看 | www.天天草 | 亚洲作爱 | 亚洲国产精品视频在线观看 | 99精品在线视频观看 | 在线 影视 一区 | 欧美不卡视频在线 | 亚洲精品视频在线观看网站 | 日韩av高清在线观看 | 日韩午夜一级片 | 日本超碰在线 | 午夜一级免费电影 | 亚洲人成在线电影 | 日日夜夜中文字幕 | 国产精品一区免费观看 | 久久夜av | 久久草网 | 精品在线视频一区 | 国产成人精品一区二区三区 | 亚洲精品99久久久久久 | 在线观看成人毛片 | 国产精品区二区三区日本 | 国产高清在线一区 | 天天摸天天干天天操天天射 | 韩国精品视频在线观看 | 天天爽人人爽夜夜爽 | 久久婷亚洲五月一区天天躁 | www.黄色 | 午夜国产在线观看 | 中文日韩在线视频 | 丁香综合av | 六月色丁香 | 色国产精品一区在线观看 | 一区在线免费观看 | 精品久久久成人 | 中文字幕不卡在线88 | 911精品美国片911久久久 | 免费观看日韩 | 人人精久| 激情小说网站亚洲综合网 | 久久精品人人做人人综合老师 | 日本性生活免费看 | aa一级片 | 国产一区观看 | 日韩精品一二三 | 伊人色综合久久天天 | 国产亚洲婷婷免费 | 日韩久久精品一区二区 | 日本成址在线观看 | 国产麻豆精品一区 | 在线观看亚洲免费视频 | 欧美aaa视频 | 中文乱幕日产无线码1区 | 菠萝菠萝蜜在线播放 | 国产午夜麻豆影院在线观看 | 欧美视频日韩视频 | 天天添夜夜操 | 欧美精品免费视频 | av超碰免费在线 | www.亚洲视频 | 综合伊人久久 | 亚洲三级毛片 | 久久精品国产免费看久久精品 | 国内99视频 | 色天天久久 | 一区二区三区手机在线观看 | 成人久久免费视频 | 免费高清在线一区 | 丰满少妇对白在线偷拍 | 久久国产欧美日韩精品 | 国产又粗又硬又长又爽的视频 | 亚洲国产成人久久 | 91成年人网站 | 久草视频免费观 | 久久免费大片 | 日韩av资源站 | 免费日p视频 | 免费在线观看a v | 亚洲一区日韩精品 | 操操操日日日干干干 | 亚洲精品在线视频 | 五月开心激情网 | 91在线在线观看 | 色婷婷激婷婷情综天天 | 国产一区免费看 | 成人午夜精品福利免费 | av天天色| 欧美巨大| 国产资源网 | 中国成人一区 | 成年人免费在线观看网站 | 日韩精品久久久免费观看夜色 | 欧美另类sm图片 | 国产成人777777 | 欧美调教网站 | 99色在线视频 | 免费在线一区二区 | 午夜久久影视 | 久章操 | www激情久久 | 久久成人国产精品一区二区 | 国产91对白在线播 | 天天伊人网 | 国产精品毛片一区视频播 | 精品视频免费久久久看 | 亚洲成人欧美 | 久久久久久久久亚洲精品 | 青春草视频在线播放 | 国产精品九九视频 | 国产一卡久久电影永久 | 欧美成人日韩 | 97超碰中文| 中文字幕一区二区三区久久 | 免费看的黄色网 | 日韩黄色在线电影 | 国产精品麻豆视频 | 亚洲激精日韩激精欧美精品 | 国产精品一区在线播放 | av电影中文字幕 | 人人澡超碰碰97碰碰碰软件 | 992tv在线观看网站 | www.午夜色.com | 日韩v在线91成人自拍 | 天天操天天摸天天干 | 欧美成人69av | 日韩欧美在线一区 | 波多野结衣在线视频一区 | 国产欧美中文字幕 | 国产999精品 | 91精品在线麻豆 | 国产一级片播放 | 日韩精品久久久久久久电影竹菊 | 四虎www | 日b视频在线观看网址 | 欧美日韩免费看 | 国产亚洲一区二区在线观看 | 免费在线播放视频 | 99热在线这里只有精品 | 97成人精品区在线播放 | 久久成人综合视频 | 麻豆91精品91久久久 | 欧美日韩国产色综合一二三四 | 国产专区日韩专区 | 日日躁夜夜躁xxxxaaaa | 色婷在线 | 中文字幕观看av | 欧美性色综合网站 | 在线观看电影av | 欧洲不卡av | 我爱av激情网 | 久久久久看片 | 久久一级电影 | 久久精品国产免费看久久精品 | 亚洲乱亚洲乱亚洲 | 欧美国产高清 | 日韩免费一区二区在线观看 | 在线亚洲天堂网 | 亚洲精品动漫在线 | 久久视频在线观看 | 国产最新精品视频 | 亚洲国产日韩一区 | 91精品国产综合久久婷婷香蕉 | 精品美女在线视频 | 日韩成人免费观看 | 亚洲精品91天天久久人人 | 欧美精品在线观看免费 | a黄色片 | 久久不卡日韩美女 | 最近中文字幕完整高清 | 欧美坐爱视频 | 亚洲黄色一级视频 | 东方av在 | 在线不卡中文字幕播放 | 久久一区二区三区日韩 | 久色婷婷 | 久久精品电影 | 一本一本久久aa综合精品 | 91精品国产91热久久久做人人 | 成人免费视频网站在线观看 | 黄免费网站 | 国产成人a亚洲精品 | 天堂在线成人 | 天天色官网 | 免费色视频 | 国产黄a三级三级 | 国产精品毛片网 | 亚洲精品 在线视频 | 97色综合 | 久久视频中文字幕 | 国产999精品久久久 免费a网站 | 深爱婷婷网 | 人人澡超碰碰97碰碰碰软件 | 国产看片 色 | 奇米先锋 | 国产在线va| 婷婷色视频 | 国产精品福利无圣光在线一区 | 国产免费视频一区二区裸体 | 久久999久久 | 黄色小网站在线 | 国产精品 中文字幕 亚洲 欧美 | 91精品一区二区三区久久久久久 | 黄色在线视频网址 | 精品国产一区二区三区久久久蜜臀 | 成年人在线免费视频观看 | 国产又粗又硬又长又爽的视频 | 久久综合久久综合这里只有精品 | 亚洲最大av在线播放 | www.久久免费视频 | 欧美成年人在线观看 | 日韩理论在线播放 | 国产a国产| japanesexxxhd奶水 91在线精品一区二区 | a天堂最新版中文在线地址 久久99久久精品国产 | 美女网站在线免费观看 | 日韩视频免费在线观看 | 六月丁香社区 | 伊色综合久久之综合久久 | 亚洲精品中文字幕在线 | 国产精品区二区三区日本 | 精品一区二区影视 | 欧美日韩另类在线观看 | 国产福利a| 日韩精品不卡在线观看 | 国产精品普通话 | 久久久999免费视频 日韩网站在线 | 伊人婷婷网 | 国内丰满少妇猛烈精品播 | 人人干免费 | 欧美日韩国产一区二区三区 | 天天干夜夜擦 | 精品国产一区二区三区在线 | 日韩视频www | 国产精品四虎 | 中文字幕久久网 | 国产一区在线免费观看视频 | 99热超碰在线 | 久久国产香蕉视频 | 9在线观看免费 | 亚洲精品玖玖玖av在线看 | 精品一区免费 | 欧美性色黄大片在线观看 | 久久桃花网 | 欧美性成人 | 麻豆视屏 | 欧美另类亚洲 | 激情视频网页 | 欧美午夜精品久久久久久浪潮 | 精品 激情| 色黄www小说| 欧美性生活免费 | 99re8这里有精品热视频免费 | 日韩在线观看视频一区二区三区 | 久久久久久久久影院 | 黄色午夜网站 | 日韩视频免费在线观看 | 日韩三级免费观看 | 国产一及片 | 中文成人字幕 | 亚洲免费观看在线视频 | 亚洲伊人av | 国产精品成人在线观看 | 91精品免费在线视频 | 精品欧美一区二区三区久久久 | 久久视频二区 | 国产一区二区中文字幕 | 视频在线一区二区三区 | 免费一级片在线观看 | 欧美极品在线播放 | 中文字幕免费高清在线 | 中文字幕在线国产精品 | 亚洲黄色小说网 | 99色在线观看视频 | 超碰97成人 | 国产专区一 | 国产精品入口麻豆www | 亚洲视频免费视频 | 日日夜夜精品视频 | 成人中心免费视频 | 欧美成年性 | 三级a视频| 免费看一及片 | 人人澡人人添人人爽一区二区 | 国产精品一区在线观看你懂的 | 一 级 黄 色 片免费看的 | 日韩电影中文 | 婷婷丁香在线观看 | 天天干天天操天天搞 | 欧美日韩网址 | 中文字幕亚洲精品在线观看 | 国产精品午夜av | 精品久久精品久久 | 日韩精品资源 | 国产99中文字幕 | 久久久久北条麻妃免费看 | 欧美日韩性视频 | 五月婷婷视频在线 | 超级av在线 | 91av视频免费观看 | 久久99国产精品久久99 | 精品一区二区三区四区在线 | 最新国产中文字幕 | 日本久久91| 久久久久久久久久久电影 | 狠狠狠色丁香综合久久天下网 | 激情综合一区 | 国产精品女同一区二区三区久久夜 | 天天在线操 | 嫩草av影院| 免费视频一级片 | 免费观看福利视频 | 欧美夫妻性生活电影 | 天天操天天色天天 | 天天做夜夜做 | 日本福利视频在线 | 日本午夜在线观看 | 国产黄网站在线观看 | 欧美超碰在线 | 免费在线视频一区二区 | 麻豆影视在线观看 | 午夜av在线 | 69精品视频 | 欧美日韩国产精品一区 | 亚洲一区二区高潮无套美女 | 婷婷亚洲综合五月天小说 | 国产视频亚洲视频 | a级黄色片视频 | 日韩在线观看一区二区三区 | 国产免费观看av | 四虎4hu永久免费 | 国产精品视频地址 | 中文在线亚洲 | 又黄又色又爽 | 天天添夜夜操 |