Advertisement
Guest User

Untitled

a guest
Dec 8th, 2021
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.85 KB | None | 0 0
  1. public class TankEntity extends Pig implements IAnimatable {
  2. private final AnimationFactory factory = new AnimationFactory(this);
  3.  
  4. private final int cooldown = 75;
  5.  
  6. private int time = cooldown;
  7.  
  8.  
  9. public TankEntity(EntityType<?> entityType, Level world) {
  10. super((EntityType<? extends Pig>) entityType, world);
  11. }
  12.  
  13. public static AttributeSupplier.Builder createAttributes() {
  14. return Pig.createLivingAttributes()
  15. .add(Attributes.MAX_HEALTH, 90.0D)
  16. .add(Attributes.MOVEMENT_SPEED, 0.14f)
  17. .add(Attributes.KNOCKBACK_RESISTANCE, 10.0D)
  18. .add(Attributes.FOLLOW_RANGE, 0.0D);
  19. }
  20.  
  21.  
  22. private <E extends IAnimatable> PlayState predicate(AnimationEvent<E> event) {
  23. if (event.isMoving()) {
  24. event.getController().setAnimation(new AnimationBuilder().addAnimation("animation.tank.walking", true));
  25. return PlayState.CONTINUE;
  26. }
  27. return PlayState.STOP;
  28. }
  29.  
  30. @Override
  31. public boolean canStandOnFluid(Fluid fluid) {
  32. return false;
  33. }
  34.  
  35.  
  36.  
  37. @Override
  38. public boolean rideableUnderWater() {
  39. return false;
  40. }
  41.  
  42. @Override
  43. protected int calculateFallDamage(float fallDistance, float damageMultiplier) {
  44. return 0;
  45. }
  46.  
  47. @Override
  48. public int getMaxFallDistance() {
  49. return 30;
  50. }
  51.  
  52. @Override
  53. public boolean canBeControlledByRider() {
  54. if (!FMLEnvironment.dist.isClient()) {
  55. return true;
  56. }
  57. if (TankModClient.STARTMOVING.isDown()) {
  58. return true;
  59. }
  60. return false;
  61. }
  62.  
  63.  
  64. @Override
  65. protected void removePassenger(Entity entity) {
  66. super.removePassenger(entity);
  67. }
  68.  
  69. @Override
  70. public boolean requiresCustomPersistence() {
  71. return true;
  72. }
  73.  
  74. @Override
  75. public void registerControllers(AnimationData animationData) {
  76. animationData.addAnimationController(new AnimationController<>(this, "controller", 0, this::predicate));
  77.  
  78. }
  79.  
  80.  
  81. @Override
  82. public AnimationFactory getFactory() {
  83. return this.factory;
  84. }
  85.  
  86. @Override
  87. public ItemStack getItemBySlot(EquipmentSlot slot) {
  88. return ItemStack.EMPTY;
  89. }
  90.  
  91. @Override
  92. protected void registerGoals() {
  93. }
  94. //Movement Related
  95.  
  96.  
  97. @Override
  98. protected boolean shouldPassengersInheritMalus() {
  99. return true;
  100. }
  101.  
  102. @Override
  103. public boolean isEffectiveAi() {
  104. return true;
  105. }
  106.  
  107. //Movement Related ^
  108.  
  109.  
  110. @Override
  111. public float getSteeringSpeed() {
  112. return 0.15f;
  113. }
  114.  
  115. @Override
  116. public void stopRiding() {
  117. super.stopRiding();
  118. }
  119.  
  120.  
  121. @Override
  122. public boolean isBaby() {
  123. return false;
  124. }
  125.  
  126. @Override
  127. public Pig getBreedOffspring(ServerLevel p_149001_, AgeableMob p_149002_) {
  128. return null;
  129. }
  130.  
  131.  
  132. @Override
  133. protected boolean isImmobile() {
  134. return false;
  135. }
  136.  
  137. @Override
  138. protected SoundEvent getAmbientSound() {
  139. return SoundEvents.MINECART_RIDING;
  140. }
  141.  
  142. @Override
  143. protected SoundEvent getDeathSound() {
  144. return SoundEvents.GENERIC_EXPLODE;
  145. }
  146.  
  147. @Override
  148. protected SoundEvent getHurtSound(DamageSource source) {
  149. return SoundEvents.ARMOR_EQUIP_IRON;
  150. }
  151.  
  152. @Override
  153. protected SoundEvent getSwimSplashSound() {
  154. return SoundEvents.PLAYER_SPLASH;
  155. }
  156.  
  157. @Override
  158. protected SoundEvent getSwimSound() {
  159. return SoundEvents.GENERIC_SWIM;
  160. }
  161.  
  162. @Override
  163. public InteractionResult interactAt(Player player, Vec3 hitPos, InteractionHand hand) {
  164. player.startRiding(this, true);
  165. return InteractionResult.SUCCESS;
  166. }
  167.  
  168. static int shellsUsed = 1;
  169.  
  170. public void tick() {
  171. if (level.getServer() != null) {
  172. super.tick();
  173.  
  174. if (time < cooldown) time++;
  175. }
  176. }
  177. public boolean shoot(Player player, Level world) {
  178. ItemStack itemStack = ItemStack.EMPTY;
  179. Player playerEntity = (Player) player;
  180. for (int i = 0; i < playerEntity.getInventory().getContainerSize(); ++i) {
  181. ItemStack stack = playerEntity.getInventory().getItem(i);
  182. if (stack.getItem() == TankModItems.SHELL_ITEM.get() && stack.getCount() >= shellsUsed) {
  183. itemStack = stack;
  184. break;
  185. }
  186. }
  187.  
  188. if (time < cooldown) {
  189. player.sendMessage(new TextComponent("Please wait " + (cooldown - time) / 20 + " s !").withStyle(ChatFormatting.AQUA), Util.NIL_UUID);
  190. world.playSound(null, player.blockPosition(), SoundEvents.DISPENSER_FAIL, SoundSource.BLOCKS, 1.0f, 1.0f);
  191. return false;
  192. }
  193. if (itemStack.isEmpty()) {
  194. player.sendMessage(new TextComponent("You don't have any ammo!" ).withStyle(ChatFormatting.RED), Util.NIL_UUID);
  195. world.playSound(null, player.blockPosition(), SoundEvents.DISPENSER_FAIL, SoundSource.BLOCKS, 1.0f, 1.0f);
  196. return false;
  197. }
  198. if (!itemStack.isEmpty()) {
  199. ShellEntity shellEntity = new ShellEntity(player, world);
  200. shellEntity.shootFromRotation(player, player.getXRot(), player.getYRot(), 0.0F, 1.5F, 0F);
  201.  
  202. double distance = 1.0D;
  203.  
  204. double x = -Mth.sin((float) (player.getEyeY() / 180.0F * (float) Math.PI)) * distance;
  205. double z = -Mth.cos((float) (player.getEyeY() / 180.0F * (float) Math.PI)) * distance;
  206.  
  207.  
  208. // shellEntity.setPos(player.getX() + x, player.getY() - 1.0D, player.getZ() + z);
  209. shellEntity.setPos(player.getEyePosition());
  210. world.addFreshEntity(shellEntity);
  211.  
  212. itemStack.shrink(shellsUsed);
  213. }
  214. time = 0;
  215. return true;
  216. }
  217. }
  218.  
  219.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement