diff --git a/gradle.properties b/gradle.properties index 3d7789b..6df12c1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,7 +19,7 @@ org.gradle.jvmargs=-Xmx2G archives_base_name = astraladditions # Dependencies - fabric_version=0.76.0+1.18.2 + fabric_version=0.77.0+1.18.2 # Development QOL modmenu_version=3.2.5 diff --git a/src/main/java/com/github/ethanicuss/astraladditions/blocks/BubbleBlock.java b/src/main/java/com/github/ethanicuss/astraladditions/blocks/BubbleBlock.java new file mode 100644 index 0000000..5e87c5c --- /dev/null +++ b/src/main/java/com/github/ethanicuss/astraladditions/blocks/BubbleBlock.java @@ -0,0 +1,29 @@ +package com.github.ethanicuss.astraladditions.blocks; + +import com.github.ethanicuss.astraladditions.util.ModUtils; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.FallingBlockEntity; +import net.minecraft.particle.ParticleTypes; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.tag.BlockTags; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BubbleBlock extends Block { + + public BubbleBlock(Settings settings) { + super(settings); + } + + public void onSteppedOn(World world, BlockPos pos, BlockState state, Entity entity) { + world.setBlockState(pos, Blocks.AIR.getDefaultState()); + ModUtils.spawnForcedParticles((ServerWorld)world, ParticleTypes.BUBBLE, pos.getX(), pos.getY(), pos.getZ(), 10, 0.8, 0.8, 0.8, 0.1); + ModUtils.spawnForcedParticles((ServerWorld)world, ParticleTypes.SPLASH, pos.getX(), pos.getY(), pos.getZ(), 10, 0.8, 0.8, 0.8, 0.1); + + super.onSteppedOn(world, pos, state, entity); + } +} diff --git a/src/main/java/com/github/ethanicuss/astraladditions/blocks/CrackedIceBlock.java b/src/main/java/com/github/ethanicuss/astraladditions/blocks/CrackedIceBlock.java new file mode 100644 index 0000000..9649613 --- /dev/null +++ b/src/main/java/com/github/ethanicuss/astraladditions/blocks/CrackedIceBlock.java @@ -0,0 +1,38 @@ +package com.github.ethanicuss.astraladditions.blocks; + +import com.github.ethanicuss.astraladditions.util.ModUtils; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Material; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.FallingBlockEntity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.damage.DamageSource; +import net.minecraft.particle.ParticleTypes; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.tag.BlockTags; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class CrackedIceBlock extends Block { + + public CrackedIceBlock(Settings settings) { + super(settings); + } + + public void onSteppedOn(World world, BlockPos pos, BlockState state, Entity entity) { + if (canFallThrough(world.getBlockState(pos.down())) && pos.getY() >= world.getBottomY() && !world.isClient()) { + FallingBlockEntity fallingBlockEntity = FallingBlockEntity.spawnFromBlock(world, pos, state); + ModUtils.spawnForcedParticles((ServerWorld)world, ParticleTypes.SNOWFLAKE, pos.getX(), pos.getY(), pos.getZ(), 20, 0.5, 0.5, 0.5, 0.3); + ModUtils.spawnForcedParticles((ServerWorld)world, ParticleTypes.CAMPFIRE_COSY_SMOKE, pos.getX(), pos.getY(), pos.getZ(), 3, 0.5, 0.5, 0.5, 0); + } + + super.onSteppedOn(world, pos, state, entity); + } + + public static boolean canFallThrough(BlockState state) { + Material material = state.getMaterial(); + return state.isAir() || state.isIn(BlockTags.FIRE) || material.isLiquid() || material.isReplaceable(); + } +} diff --git a/src/main/java/com/github/ethanicuss/astraladditions/blocks/GeyserBlock.java b/src/main/java/com/github/ethanicuss/astraladditions/blocks/GeyserBlock.java new file mode 100644 index 0000000..9a198cc --- /dev/null +++ b/src/main/java/com/github/ethanicuss/astraladditions/blocks/GeyserBlock.java @@ -0,0 +1,68 @@ +package com.github.ethanicuss.astraladditions.blocks; + +import com.github.ethanicuss.astraladditions.entities.ModEntities; +import com.github.ethanicuss.astraladditions.entities.prismatic_geyser.PrismaticGeyserEntity; +import com.github.ethanicuss.astraladditions.entities.shimmerblaze.ShimmerBlazeRainEntity; +import com.github.ethanicuss.astraladditions.util.ModUtils; +import io.github.fabricators_of_create.porting_lib.data.SoundDefinition; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.damage.DamageSource; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.particle.ParticleTypes; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvent; +import net.minecraft.sound.SoundEvents; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +import java.util.List; +import java.util.Random; + +public class GeyserBlock extends Block { + + public GeyserBlock(Settings settings) { + super(settings); + } + + public ActionResult onUse(BlockState blockState, World world, BlockPos pos, PlayerEntity placedBy, Hand hand, BlockHitResult blockHitResult) { + if (!world.isClient) { + world.playSound(pos.getX(), pos.getY() + 1, pos.getZ(), SoundEvents.ENTITY_GENERIC_EXPLODE, SoundCategory.BLOCKS, 1, 0.5f, true); + } + + return ActionResult.PASS; + } + + public void onSteppedOn(World world, BlockPos pos, BlockState state, Entity entity) { + Box box = new Box(pos.getX(), pos.getY(), pos.getZ(), pos.getX()+1, pos.getY()+1.5, pos.getZ()+1); + List ls = world.getOtherEntities(entity, box); + for (Entity p : ls) { + if (p instanceof PrismaticGeyserEntity) { + return; + } + } + + PrismaticGeyserEntity geyser = new PrismaticGeyserEntity(ModEntities.PRISMATIC_GEYSER, world); + geyser.setPosition(pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5); + geyser.refreshPositionAndAngles(pos.getX() + 0.5, pos.getY() + 1, pos.getZ() + 0.5, 0.0f, 0.0f); + world.spawnEntity(geyser); + + if (world instanceof ServerWorld) { + ModUtils.spawnForcedParticles((ServerWorld)world, ParticleTypes.CLOUD, pos.getX() + 0.5, pos.getY() + 1.1, pos.getZ() + 0.5, 10, 0.2, 0.2, 0.2, 0.1); + ModUtils.spawnForcedParticles((ServerWorld)world, ParticleTypes.SNOWFLAKE, entity.getX(), (double)(pos.getY() + 1), entity.getZ(), 1, (double)(MathHelper.nextBetween(world.random, -1.0F, 1.0F) * 0.083333336F), 0.05000000074505806D, (double)(MathHelper.nextBetween(world.random, -1.0F, 1.0F) * 0.083333336F), 0); + + } + + + super.onSteppedOn(world, pos, state, entity); + } +} diff --git a/src/main/java/com/github/ethanicuss/astraladditions/effects/frost/FrostEffect.java b/src/main/java/com/github/ethanicuss/astraladditions/effects/frost/FrostEffect.java new file mode 100644 index 0000000..148898d --- /dev/null +++ b/src/main/java/com/github/ethanicuss/astraladditions/effects/frost/FrostEffect.java @@ -0,0 +1,61 @@ +package com.github.ethanicuss.astraladditions.effects.frost; + +import com.github.ethanicuss.astraladditions.AstralAdditions; +import net.minecraft.block.Blocks; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.attribute.AttributeContainer; +import net.minecraft.entity.effect.StatusEffect; +import net.minecraft.entity.effect.StatusEffectCategory; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.particle.ParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Random; + + +public class FrostEffect extends StatusEffect { + + public static final Logger LOGGER = LoggerFactory.getLogger(AstralAdditions.MOD_ID); + + public FrostEffect(StatusEffectCategory statusEffectCategory, int color) { + super(statusEffectCategory, color); + } + + @Override + public void applyUpdateEffect(LivingEntity entity, int amplifier) { + World world = entity.getWorld(); + BlockPos pos = entity.getBlockPos(); + + if (world.isClient) { + Random random = world.getRandom(); + boolean bl = entity.lastRenderX != entity.getX() || entity.lastRenderZ != entity.getZ(); + if (bl && random.nextBoolean()) { + world.addParticle(ParticleTypes.SNOWFLAKE, entity.getX(), (double)(pos.getY() + 1), entity.getZ(), (double)(MathHelper.nextBetween(random, -1.0F, 1.0F) * 0.083333336F), 0.05000000074505806D, (double)(MathHelper.nextBetween(random, -1.0F, 1.0F) * 0.083333336F)); + } + } + + entity.setInPowderSnow(true); + } + + @Override + public void onRemoved(LivingEntity entity, AttributeContainer attributes, int amplifier) { + + } + + + @Override + public boolean canApplyUpdateEffect(int duration, int amplifier) { + return true; + } + + @Override + public boolean isInstant() { + return false; + } + +} \ No newline at end of file diff --git a/src/main/java/com/github/ethanicuss/astraladditions/entities/ModEntities.java b/src/main/java/com/github/ethanicuss/astraladditions/entities/ModEntities.java index 0c39cb8..63e27b1 100644 --- a/src/main/java/com/github/ethanicuss/astraladditions/entities/ModEntities.java +++ b/src/main/java/com/github/ethanicuss/astraladditions/entities/ModEntities.java @@ -25,8 +25,12 @@ import com.github.ethanicuss.astraladditions.entities.moonman.MoonmanEntityRenderer; import com.github.ethanicuss.astraladditions.entities.phast.PhastEntity; import com.github.ethanicuss.astraladditions.entities.phast.PhastEntityRenderer; +import com.github.ethanicuss.astraladditions.entities.prismatic_geyser.PrismaticGeyserEntity; +import com.github.ethanicuss.astraladditions.entities.prismatic_geyser.PrismaticGeyserRenderer; import com.github.ethanicuss.astraladditions.entities.pylon.PylonEntity; import com.github.ethanicuss.astraladditions.entities.pylon.PylonEntityRenderer; +import com.github.ethanicuss.astraladditions.entities.scrap_projectile.ScrapProjectileEntity; +import com.github.ethanicuss.astraladditions.entities.scrap_projectile.ScrapProjectileEntityRenderer; import com.github.ethanicuss.astraladditions.entities.shimmerblaze.*; import com.github.ethanicuss.astraladditions.entities.shimmerfishingrod.ShimmerFishingBobberEntity; import com.github.ethanicuss.astraladditions.entities.shimmerfishingrod.ShimmerFishingBobberRenderer; @@ -93,6 +97,10 @@ public class ModEntities { Registry.ENTITY_TYPE, new Identifier(AstralAdditions.MOD_ID, "cometball"), FabricEntityTypeBuilder.create(SpawnGroup.MISC, CometballEntity::new).dimensions(EntityDimensions.fixed(0.25f, 0.25f)).build() + );public static final EntityType SCRAP_PROJECTILE = Registry.register( + Registry.ENTITY_TYPE, + new Identifier(AstralAdditions.MOD_ID, "scrap_projectile"), + FabricEntityTypeBuilder.create(SpawnGroup.MISC, ScrapProjectileEntity::new).dimensions(EntityDimensions.fixed(0.1f, 0.1f)).build() ); public static final EntityType PYLON = Registry.register( Registry.ENTITY_TYPE, @@ -119,6 +127,11 @@ public class ModEntities { new Identifier(AstralAdditions.MOD_ID, "shimmer_rain"), FabricEntityTypeBuilder.create(SpawnGroup.MISC, ShimmerBlazeRainEntity::new).dimensions(EntityDimensions.fixed(1.0f, 5.0f)).build() ); + public static final EntityType PRISMATIC_GEYSER = Registry.register( + Registry.ENTITY_TYPE, + new Identifier(AstralAdditions.MOD_ID, "prismatic_geyser"), + FabricEntityTypeBuilder.create(SpawnGroup.MISC, PrismaticGeyserEntity::new).dimensions(EntityDimensions.fixed(1.0f, 5.0f)).build() + ); public static final EntityType PHAST = Registry.register( Registry.ENTITY_TYPE, new Identifier(AstralAdditions.MOD_ID, "phast"), @@ -204,6 +217,8 @@ public static void initClient() { EntityRendererRegistry.register(COMETBALL, CometballEntityRenderer::new); + EntityRendererRegistry.register(SCRAP_PROJECTILE, ScrapProjectileEntityRenderer::new); + EntityRendererRegistry.register(PYLON, PylonEntityRenderer::new); EntityRendererRegistry.register(METEOR_FIST, MeteorPunchEntityRenderer::new); @@ -212,6 +227,8 @@ public static void initClient() { EntityRendererRegistry.register(SHIMMER_RAIN, ShimmerBlazeRainEntityRenderer::new); + EntityRendererRegistry.register(PRISMATIC_GEYSER, PrismaticGeyserRenderer::new); + EntityRendererRegistry.register(SHIMMER_FISHING_BOBBER, ShimmerFishingBobberRenderer::new); EntityRendererRegistry.register(BOOMERANG, BoomerangEntityRenderer::new); diff --git a/src/main/java/com/github/ethanicuss/astraladditions/entities/prismatic_geyser/PrismaticGeyserEntity.java b/src/main/java/com/github/ethanicuss/astraladditions/entities/prismatic_geyser/PrismaticGeyserEntity.java new file mode 100644 index 0000000..e876ce3 --- /dev/null +++ b/src/main/java/com/github/ethanicuss/astraladditions/entities/prismatic_geyser/PrismaticGeyserEntity.java @@ -0,0 +1,88 @@ +package com.github.ethanicuss.astraladditions.entities.prismatic_geyser; + +import com.github.ethanicuss.astraladditions.entities.shimmerblaze.ShimmerBlazeEntity; +import com.github.ethanicuss.astraladditions.registry.ModEffects; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.damage.DamageSource; +import net.minecraft.entity.data.DataTracker; +import net.minecraft.entity.data.TrackedData; +import net.minecraft.entity.data.TrackedDataHandlerRegistry; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.network.Packet; +import net.minecraft.network.packet.s2c.play.EntitySpawnS2CPacket; +import net.minecraft.particle.ParticleTypes; +import net.minecraft.util.math.Box; +import net.minecraft.world.World; + +import java.util.List; + +public class PrismaticGeyserEntity extends Entity { + private static final TrackedData AGE = DataTracker.registerData(PrismaticGeyserEntity.class, TrackedDataHandlerRegistry.INTEGER); + + public PrismaticGeyserEntity(EntityType type, World world) { + super(type, world); + } + + public void setAge(int _age){ + this.getDataTracker().set(AGE, _age); + } + + @Override + public void tick() { + this.getDataTracker().set(AGE, this.getDataTracker().get(AGE)+1); + if (this.getDataTracker().get(AGE) == 10){ + for (var i = 0; i < 20; i++) { + this.world.addParticle(ParticleTypes.EFFECT, true, this.getX() - 0.5 + random.nextFloat(), this.getY() + 0.1 + random.nextFloat() * 5, this.getZ() - 0.5 + random.nextFloat(), 0, 2.0, 0); + this.world.addParticle(ParticleTypes.CAMPFIRE_COSY_SMOKE, true, this.getX() - 0.5 + random.nextFloat(), this.getY() + 0.1 + random.nextFloat() * 5, this.getZ() - 0.5 + random.nextFloat(), 0, i/30f, 0); + } + } + if (this.getDataTracker().get(AGE) >= 10){ + this.world.addParticle(ParticleTypes.EFFECT, true, this.getX()-0.5 + random.nextFloat(), this.getY() + 0.1 + random.nextFloat()*5, this.getZ()-0.5 + random.nextFloat(), 0, 1.0, 0); + + if (this.getDataTracker().get(AGE) < 90) { + Box box = new Box(this.getX() - 0.5, this.getY() - 1, this.getZ() - 0.5, this.getX() + 0.5, this.getY() + 6, this.getZ() + 0.5); + List ls = this.world.getOtherEntities(this, box); + for (Entity p : ls) { + if (p instanceof LivingEntity) { + p.damage(DamageSource.FREEZE, 3.0f); + ((LivingEntity) p).addStatusEffect(new StatusEffectInstance(ModEffects.FROST, 600, 0), this); + p.setVelocity(0, 1.5, 0); + } + } + } + } + else{ + this.world.addParticle(ParticleTypes.CLOUD, true, this.getX(), this.getY() + 0.1, this.getZ(), 0, 0.1, 0); + } + if (this.getDataTracker().get(AGE) >= 120){ + this.discard(); + } + } + + @Override + protected void initDataTracker() { + this.dataTracker.startTracking(AGE, 0); + } + + @Override + protected void readCustomDataFromNbt(NbtCompound nbt) { + + } + + @Override + protected void writeCustomDataToNbt(NbtCompound nbt) { + + } + + @Override + public Packet createSpawnPacket() { + return new EntitySpawnS2CPacket(this); + } + + public int getAge(){ + return this.getDataTracker().get(AGE); + } +} diff --git a/src/main/java/com/github/ethanicuss/astraladditions/entities/prismatic_geyser/PrismaticGeyserRenderer.java b/src/main/java/com/github/ethanicuss/astraladditions/entities/prismatic_geyser/PrismaticGeyserRenderer.java new file mode 100644 index 0000000..97c1112 --- /dev/null +++ b/src/main/java/com/github/ethanicuss/astraladditions/entities/prismatic_geyser/PrismaticGeyserRenderer.java @@ -0,0 +1,75 @@ +package com.github.ethanicuss.astraladditions.entities.prismatic_geyser; + +import com.github.ethanicuss.astraladditions.AstralAdditions; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.render.OverlayTexture; +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.entity.EntityRenderer; +import net.minecraft.client.render.entity.EntityRendererFactory; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Matrix3f; +import net.minecraft.util.math.Matrix4f; +import net.minecraft.util.math.Vec3f; + +@Environment(value= EnvType.CLIENT) +public class PrismaticGeyserRenderer + extends EntityRenderer { + private static final Identifier TEXTURE = new Identifier(AstralAdditions.MOD_ID, "textures/entity/prismatic_geyser/prismatic_geyser.png"); + private static final RenderLayer LAYER = RenderLayer.getEntityTranslucent(TEXTURE); + + public PrismaticGeyserRenderer(EntityRendererFactory.Context context) { + super(context); + } + + @Override + protected int getBlockLight(PrismaticGeyserEntity geyser, BlockPos blockPos) { + return 15; + } + + @Override + public void render(PrismaticGeyserEntity geyser, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) { + matrixStack.push(); + if (geyser.getAge() < 10){ + matrixStack.translate(0, 2, 0); + matrixStack.scale(0, 0, 0); + } + else { + if (geyser.getAge() < 90) { + matrixStack.translate(0, Math.min(((float) geyser.getAge()-10)/10*2, 2), 0); + float width = 2.0f - ((float) geyser.getAge() - 10)/80 + (float)Math.sin(geyser.getAge())/20; + matrixStack.scale(width, Math.min((float) geyser.getAge() - 10, 10.0f), width); + } + else{ + matrixStack.translate(0, 2 - Math.min(((float) geyser.getAge()-90)/30*2, 2), 0); + float width = 1.0f - ((float) geyser.getAge() - 90)/30; + matrixStack.scale(width, 10.0f - ((float) geyser.getAge() - 90)/30*10, width); + } + } + matrixStack.multiply(this.dispatcher.getRotation()); + matrixStack.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(180.0f)); + MatrixStack.Entry entry = matrixStack.peek(); + Matrix4f matrix4f = entry.getPositionMatrix(); + Matrix3f matrix3f = entry.getNormalMatrix(); + VertexConsumer vertexConsumer = vertexConsumerProvider.getBuffer(LAYER); + produceVertex(vertexConsumer, matrix4f, matrix3f, i, 0.0f, 0, 0, 1); + produceVertex(vertexConsumer, matrix4f, matrix3f, i, 1.0f, 0, 1, 1); + produceVertex(vertexConsumer, matrix4f, matrix3f, i, 1.0f, 1, 1, 0); + produceVertex(vertexConsumer, matrix4f, matrix3f, i, 0.0f, 1, 0, 0); + matrixStack.pop(); + super.render(geyser, f, g, matrixStack, vertexConsumerProvider, i); + } + + private static void produceVertex(VertexConsumer vertexConsumer, Matrix4f positionMatrix, Matrix3f normalMatrix, int light, float x, int y, int textureU, int textureV) { + vertexConsumer.vertex(positionMatrix, x - 0.5f, (float)y - 0.25f, 0.0f).color(255, 255, 255, 255).texture(textureU, textureV).overlay(OverlayTexture.DEFAULT_UV).light(light).normal(normalMatrix, 0.0f, 1.0f, 0.0f).next(); + } + + @Override + public Identifier getTexture(PrismaticGeyserEntity geyser) { + return TEXTURE; + } +} diff --git a/src/main/java/com/github/ethanicuss/astraladditions/entities/scrap_projectile/ScrapProjectileEntity.java b/src/main/java/com/github/ethanicuss/astraladditions/entities/scrap_projectile/ScrapProjectileEntity.java new file mode 100644 index 0000000..e2f626f --- /dev/null +++ b/src/main/java/com/github/ethanicuss/astraladditions/entities/scrap_projectile/ScrapProjectileEntity.java @@ -0,0 +1,69 @@ +package com.github.ethanicuss.astraladditions.entities.scrap_projectile; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.damage.DamageSource; +import net.minecraft.entity.projectile.thrown.ThrownItemEntity; +import net.minecraft.item.Item; +import net.minecraft.item.Items; +import net.minecraft.particle.ParticleEffect; +import net.minecraft.particle.ParticleTypes; +import net.minecraft.util.hit.EntityHitResult; +import net.minecraft.util.hit.HitResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +public class ScrapProjectileEntity extends ThrownItemEntity { + + public ScrapProjectileEntity(EntityType entityType, World world) { + super((EntityType)entityType, world); + } + + @Override + protected Item getDefaultItem() { + return Items.IRON_HOE; + } + + private ParticleEffect getParticleParameters() { + return ParticleTypes.ASH; + } + + @Override + public void tick() { + super.tick(); + ParticleEffect particleEffect = this.getParticleParameters(); + this.world.addParticle(particleEffect, this.getX(), this.getY(), this.getZ(), 0.0, 0.0, 0.0); + if (this.age > 20){ + this.world.sendEntityStatus(this, (byte)3); + this.discard(); + } + float dampen = 0.95f; + Vec3d v = this.getVelocity(); + this.setVelocity(v.getX()*dampen, v.getY()*dampen, v.getZ()*dampen); + } + + @Override + protected void onEntityHit(EntityHitResult entityHitResult) { + super.onEntityHit(entityHitResult); + Entity entity = entityHitResult.getEntity(); + + float damage = 25 - this.age*2; + + System.out.println(damage); + + entity.damage(DamageSource.thrownProjectile(this, this.getOwner()), damage); + } + + @Override + protected void onCollision(HitResult hitResult) { + super.onCollision(hitResult); + if (!this.world.isClient) { + Vec3d v = this.getVelocity(); + this.setVelocity(v.getX(), -v.getY(), v.getZ()); + if (!this.world.getBlockState(this.getBlockPos().up()).isAir()){ + this.world.sendEntityStatus(this, (byte)3); + this.discard(); + } + } + } +} diff --git a/src/main/java/com/github/ethanicuss/astraladditions/entities/scrap_projectile/ScrapProjectileEntityRenderer.java b/src/main/java/com/github/ethanicuss/astraladditions/entities/scrap_projectile/ScrapProjectileEntityRenderer.java new file mode 100644 index 0000000..eae0040 --- /dev/null +++ b/src/main/java/com/github/ethanicuss/astraladditions/entities/scrap_projectile/ScrapProjectileEntityRenderer.java @@ -0,0 +1,63 @@ +package com.github.ethanicuss.astraladditions.entities.scrap_projectile; + +import com.github.ethanicuss.astraladditions.AstralAdditions; +import com.github.ethanicuss.astraladditions.entities.cometball.CometballEntity; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.render.OverlayTexture; +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.entity.EntityRenderer; +import net.minecraft.client.render.entity.EntityRendererFactory; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Matrix3f; +import net.minecraft.util.math.Matrix4f; +import net.minecraft.util.math.Vec3f; + +@Environment(value= EnvType.CLIENT) +public class ScrapProjectileEntityRenderer + extends EntityRenderer { + private static final Identifier TEXTURE = new Identifier(AstralAdditions.MOD_ID, "textures/entity/scrap_projectile/scrap_projectile.png"); + private static RenderLayer LAYER = RenderLayer.getEntityCutoutNoCull(TEXTURE); + + public ScrapProjectileEntityRenderer(EntityRendererFactory.Context context) { + super(context); + } + + @Override + protected int getBlockLight(ScrapProjectileEntity scrapEntity, BlockPos blockPos) { + return 15; + } + + @Override + public void render(ScrapProjectileEntity scrapEntity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) { + matrixStack.push(); + matrixStack.scale(1.0f, 1.0f, 1.0f); + matrixStack.multiply(this.dispatcher.getRotation()); + matrixStack.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(180.0f)); + MatrixStack.Entry entry = matrixStack.peek(); + Matrix4f matrix4f = entry.getPositionMatrix(); + Matrix3f matrix3f = entry.getNormalMatrix(); + VertexConsumer vertexConsumer = vertexConsumerProvider.getBuffer(RenderLayer.getEntityCutoutNoCull(TEXTURE)); + produceVertex(vertexConsumer, matrix4f, matrix3f, i, 0.0f, 0, 0, 1); + produceVertex(vertexConsumer, matrix4f, matrix3f, i, 1.0f, 0, 1, 1); + produceVertex(vertexConsumer, matrix4f, matrix3f, i, 1.0f, 1, 1, 0); + produceVertex(vertexConsumer, matrix4f, matrix3f, i, 0.0f, 1, 0, 0); + matrixStack.pop(); + super.render(scrapEntity, f, g, matrixStack, vertexConsumerProvider, i); + } + + private static void produceVertex(VertexConsumer vertexConsumer, Matrix4f positionMatrix, Matrix3f normalMatrix, int light, float x, int y, int textureU, int textureV) { + vertexConsumer.vertex(positionMatrix, x - 0.5f, (float)y - 0.25f, 0.0f).color(255, 255, 255, 255).texture(textureU, textureV).overlay(OverlayTexture.DEFAULT_UV).light(light).normal(normalMatrix, 0.0f, 1.0f, 0.0f).next(); + } + + @Override + public Identifier getTexture(ScrapProjectileEntity cometballEntity) { + LAYER = RenderLayer.getEntityCutoutNoCull(TEXTURE); + return TEXTURE; + } + +} \ No newline at end of file diff --git a/src/main/java/com/github/ethanicuss/astraladditions/items/MachinegunItem.java b/src/main/java/com/github/ethanicuss/astraladditions/items/MachinegunItem.java new file mode 100644 index 0000000..eb1af92 --- /dev/null +++ b/src/main/java/com/github/ethanicuss/astraladditions/items/MachinegunItem.java @@ -0,0 +1,91 @@ +package com.github.ethanicuss.astraladditions.items; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.projectile.PersistentProjectileEntity; +import net.minecraft.item.ArrowItem; +import net.minecraft.item.BowItem; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvents; +import net.minecraft.stat.Stats; +import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; +import net.minecraft.world.World; + +public class MachinegunItem extends BowItem { + + public MachinegunItem(Settings settings) { + super(settings); + } + + @Override + public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) { + if (!(user instanceof PlayerEntity playerEntity)) { + return; + } + + playerEntity.incrementStat(Stats.USED.getOrCreateStat(this)); + } + + @Override + public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) { + float f = getPullProgress(this.getMaxUseTime(stack) - remainingUseTicks); + + if (!(user instanceof PlayerEntity playerEntity)) { + return; + } + boolean bl2; + boolean bl = playerEntity.getAbilities().creativeMode; + ItemStack itemStack = playerEntity.getArrowType(stack); + boolean bl3 = bl2 = bl && itemStack.isOf(Items.ARROW); + if ((f*20)%11 == 0 && f > 0) { + if (world.isClient){ + MinecraftClient.getInstance().player.playSound(SoundEvents.UI_BUTTON_CLICK, 0.3f, 0.5f / (world.getRandom().nextFloat() * 0.4f + 1.2f) + 1.0f); + } + + if (!world.isClient && !itemStack.isEmpty()) { + int k; + int j; + ArrowItem arrowItem = (ArrowItem)(itemStack.getItem() instanceof ArrowItem ? itemStack.getItem() : Items.ARROW); + PersistentProjectileEntity persistentProjectileEntity = arrowItem.createArrow(world, itemStack, playerEntity); + persistentProjectileEntity.setVelocity(playerEntity, playerEntity.getPitch(), playerEntity.getYaw(), 1.0f, 4.0f, 0.6f); + persistentProjectileEntity.setDamage(persistentProjectileEntity.getDamage() * 1); + stack.damage(1, playerEntity, p -> p.sendToolBreakStatus(playerEntity.getActiveHand())); + if (bl2 || playerEntity.getAbilities().creativeMode && (itemStack.isOf(Items.SPECTRAL_ARROW) || itemStack.isOf(Items.TIPPED_ARROW))) { + persistentProjectileEntity.pickupType = PersistentProjectileEntity.PickupPermission.CREATIVE_ONLY; + } + world.spawnEntity(persistentProjectileEntity); + } + if (!itemStack.isEmpty() || bl) { + world.playSound(null, playerEntity.getX(), playerEntity.getY(), playerEntity.getZ(), SoundEvents.ENTITY_ARROW_SHOOT, SoundCategory.PLAYERS, 1.0f, 0.5f / (world.getRandom().nextFloat() * 0.4f + 1.2f) + 0.3f); + } + if (!bl2 && !bl) { + itemStack.decrement(1); + if (itemStack.isEmpty()) { + playerEntity.getInventory().removeOne(itemStack); + } + } + } + } + + public static float getPullProgress(int useTicks) { + float f = (float)useTicks / 20.0f; + + return f; + } + + @Override + public TypedActionResult use(World world, PlayerEntity user, Hand hand) { + boolean bl; + ItemStack itemStack = user.getStackInHand(hand); + boolean bl2 = bl = user.getArrowType(itemStack).getCount() > 0; + if (user.getAbilities().creativeMode || bl) { + user.setCurrentHand(hand); + return TypedActionResult.consume(itemStack); + } + return TypedActionResult.fail(itemStack); + } +} diff --git a/src/main/java/com/github/ethanicuss/astraladditions/items/ShotgunItem.java b/src/main/java/com/github/ethanicuss/astraladditions/items/ShotgunItem.java new file mode 100644 index 0000000..a3f31db --- /dev/null +++ b/src/main/java/com/github/ethanicuss/astraladditions/items/ShotgunItem.java @@ -0,0 +1,96 @@ +package com.github.ethanicuss.astraladditions.items; + +import com.github.ethanicuss.astraladditions.entities.ModEntities; +import com.github.ethanicuss.astraladditions.entities.scrap_projectile.ScrapProjectileEntity; +import com.github.ethanicuss.astraladditions.entities.scrap_projectile.ScrapProjectileEntityRenderer; +import net.minecraft.client.MinecraftClient; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ArrowItem; +import net.minecraft.item.BowItem; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvents; +import net.minecraft.stat.Stats; +import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; +import net.minecraft.world.World; + +public class ShotgunItem extends BowItem { + + public ShotgunItem(Settings settings) { + super(settings); + } + + @Override + public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) { + if (!(user instanceof PlayerEntity playerEntity)) { + return; + } + boolean bl2; + boolean bl = playerEntity.getAbilities().creativeMode; + ItemStack itemStack = playerEntity.getArrowType(stack);//change + boolean bl3 = bl2 = bl && itemStack.isOf(Items.ARROW); + float f = getPullProgress(this.getMaxUseTime(stack) - remainingUseTicks); + + if (!world.isClient && !itemStack.isEmpty()) { + int k; + int j; + for (var i = 0; i < 15; i++) { + ScrapProjectileEntity proj = new ScrapProjectileEntity(ModEntities.SCRAP_PROJECTILE, world); + proj.setPos(playerEntity.getX(), playerEntity.getEyeY(), playerEntity.getZ()); + proj.setVelocity(playerEntity, playerEntity.getPitch(), playerEntity.getYaw(), 1.0f, 1.5f + f-1, 12f); + world.spawnEntity(proj); + } + stack.damage(1, playerEntity, p -> p.sendToolBreakStatus(playerEntity.getActiveHand())); + } + if (!itemStack.isEmpty() || bl) { + world.playSound(null, playerEntity.getX(), playerEntity.getY(), playerEntity.getZ(), SoundEvents.ENTITY_GENERIC_EXPLODE, SoundCategory.PLAYERS, 0.8f, 0.5f / (world.getRandom().nextFloat() * 0.4f + 1.2f) + 0.3f); + } + if (!bl2 && !bl) { + itemStack.decrement(1); + if (itemStack.isEmpty()) { + playerEntity.getInventory().removeOne(itemStack); + } + } + + playerEntity.incrementStat(Stats.USED.getOrCreateStat(this)); + } + + @Override + public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) { + float f = getPullProgress(this.getMaxUseTime(stack) - remainingUseTicks); + + if (world.isClient) { + if ((f * 20) % 5 == 0 && f < 1.0f) { + MinecraftClient.getInstance().player.playSound(SoundEvents.BLOCK_STONE_HIT, 0.3f, 0.5f / (world.getRandom().nextFloat() * 0.4f + 1.2f) + 1.0f + f / 2); + } + if (f == 1 || f == 1.9) { + MinecraftClient.getInstance().player.playSound(SoundEvents.BLOCK_STONE_BREAK, 0.8f, 0.5f / (world.getRandom().nextFloat() * 0.4f + 1.2f) + 1.0f + f / 2); + } + } + } + + public static float getPullProgress(int useTicks) { + float f = (float)useTicks / 20.0f; + if (f > 2.0f){ + f = 2.0f; + } + return f; + } + + @Override + public TypedActionResult use(World world, PlayerEntity user, Hand hand) { + boolean bl; + ItemStack itemStack = user.getStackInHand(hand); + boolean bl2 = bl = user.getArrowType(itemStack).getCount() > 0; + if (user.getAbilities().creativeMode || bl) { + user.setCurrentHand(hand); + return TypedActionResult.consume(itemStack); + } + return TypedActionResult.fail(itemStack); + } +} diff --git a/src/main/java/com/github/ethanicuss/astraladditions/registry/ModBlocks.java b/src/main/java/com/github/ethanicuss/astraladditions/registry/ModBlocks.java index 8249a74..7ec0a48 100644 --- a/src/main/java/com/github/ethanicuss/astraladditions/registry/ModBlocks.java +++ b/src/main/java/com/github/ethanicuss/astraladditions/registry/ModBlocks.java @@ -59,6 +59,9 @@ private static ToIntFunction createLightLevelFromLitBlockState(int l public static final Block MISSING_BLOCK = new MissingBlock(FabricBlockSettings.of(Material.LAVA).ticksRandomly().sounds(BlockSoundGroup.CROP).collidable(false).nonOpaque().allowsSpawning(ModBlocks::never).suffocates(ModBlocks::never)); + public static final Block PRISMATIC_GEYSER_BLOCK = new GeyserBlock(FabricBlockSettings.of(Material.STONE).ticksRandomly().sounds(BlockSoundGroup.STONE).allowsSpawning(ModBlocks::never)); + public static final Block CRACKED_ICE_BLOCK = new CrackedIceBlock(FabricBlockSettings.of(Material.ICE).ticksRandomly().sounds(BlockSoundGroup.GLASS).nonOpaque().allowsSpawning(ModBlocks::never).suffocates(ModBlocks::never)); + public static final Block ENDERRACK_BLOCK = new Block(FabricBlockSettings.of(Material.STONE).sounds(BlockSoundGroup.NETHERRACK).strength(2.0f)); public static final BlockItem ENDERRACK_ITEM = new BlockItem(ENDERRACK_BLOCK, new FabricItemSettings().group(ItemGroup.BUILDING_BLOCKS)); public static final Block TWISTED_NYLIUM_BLOCK = new Block(FabricBlockSettings.of(Material.STONE).sounds(BlockSoundGroup.NYLIUM).strength(2.5f)); @@ -120,6 +123,8 @@ public static void registerBlocks() { Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "bramblebone"), BRAMBLEBONE_BLOCK); Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "bramblebone"), BRAMBLEBONE_ITEM); Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "missing_block"), MISSING_BLOCK); + Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "prismatic_geyser"), PRISMATIC_GEYSER_BLOCK); + Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "cracked_ice"), CRACKED_ICE_BLOCK); Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "enderrack"), ENDERRACK_BLOCK); Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "enderrack"), ENDERRACK_ITEM); Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "twisted_nylium"), TWISTED_NYLIUM_BLOCK); @@ -168,6 +173,7 @@ public static void registerClient() { BlockEntityRendererRegistry.register(JAR_BLOCKENTITY, JarBlockEntityRenderer::new); BlockRenderLayerMap.INSTANCE.putBlock(JAR_BLOCK, RenderLayer.getCutout()); BlockRenderLayerMap.INSTANCE.putBlock(JAR_BLOCK, RenderLayer.getTranslucent()); + BlockRenderLayerMap.INSTANCE.putBlock(CRACKED_ICE_BLOCK, RenderLayer.getTranslucent()); BlockRenderLayerMap.INSTANCE.putBlock(ENDER_SPROUT_BLOCK, RenderLayer.getCutout()); BlockRenderLayerMap.INSTANCE.putBlock(ENDER_SPROUT_BLOCK, RenderLayer.getTranslucent()); BlockRenderLayerMap.INSTANCE.putBlock(ENDER_TIP_BLOCK, RenderLayer.getCutout()); diff --git a/src/main/java/com/github/ethanicuss/astraladditions/registry/ModEffects.java b/src/main/java/com/github/ethanicuss/astraladditions/registry/ModEffects.java index 33be6a9..cf1614e 100644 --- a/src/main/java/com/github/ethanicuss/astraladditions/registry/ModEffects.java +++ b/src/main/java/com/github/ethanicuss/astraladditions/registry/ModEffects.java @@ -1,6 +1,7 @@ package com.github.ethanicuss.astraladditions.registry; import com.github.ethanicuss.astraladditions.AstralAdditions; +import com.github.ethanicuss.astraladditions.effects.frost.FrostEffect; import com.github.ethanicuss.astraladditions.effects.sinkeffect.SinkEffect; import net.minecraft.entity.effect.StatusEffect; import net.minecraft.entity.effect.StatusEffectCategory; @@ -11,13 +12,14 @@ public class ModEffects { public static StatusEffect SINK; + public static StatusEffect FROST; - public static StatusEffect registerStatusEffect(String name) { - return Registry.register(Registry.STATUS_EFFECT, new Identifier(AstralAdditions.MOD_ID, name), - new SinkEffect(StatusEffectCategory.NEUTRAL, 3124687)); + public static StatusEffect registerStatusEffect(String name, StatusEffect effect) { + return Registry.register(Registry.STATUS_EFFECT, new Identifier(AstralAdditions.MOD_ID, name), effect); } public static void registerEffects() { - SINK = registerStatusEffect("sink"); + SINK = registerStatusEffect("sink", new SinkEffect(StatusEffectCategory.NEUTRAL, 3124687)); + FROST = registerStatusEffect("frost", new FrostEffect(StatusEffectCategory.NEUTRAL, 2014687)); } } diff --git a/src/main/java/com/github/ethanicuss/astraladditions/registry/ModItems.java b/src/main/java/com/github/ethanicuss/astraladditions/registry/ModItems.java index 10c5c2a..b4435b1 100644 --- a/src/main/java/com/github/ethanicuss/astraladditions/registry/ModItems.java +++ b/src/main/java/com/github/ethanicuss/astraladditions/registry/ModItems.java @@ -49,6 +49,8 @@ public class ModItems { //public static final Item SHIMMER_BOTTLE = new ShimmerBottleItem(new FabricItemSettings().group(ItemGroup.BREWING).maxCount(1)); public static final Item SHIMMER_BOTTLE = new ShimmerBottleItem(StatusEffects.NIGHT_VISION, 3600, 0, new TranslatableText("Multiplies XP gain by 1.5 (3:00)").formatted(Formatting.BLUE), new FabricItemSettings().group(ItemGroup.BREWING).maxCount(1).rarity(Rarity.UNCOMMON)); public static final Item CHROMATIC_VACUUM = new ChromaticVacuumItem(new FabricItemSettings().group(ItemGroup.TOOLS).maxCount(1).maxDamage(512)); + public static final Item SHOTGUN = new ShotgunItem(new FabricItemSettings().group(ItemGroup.TOOLS).maxCount(1).maxDamage(512)); + public static final Item MACHINEGUN = new MachinegunItem(new FabricItemSettings().group(ItemGroup.TOOLS).maxCount(1).maxDamage(1024)); //Ethan Balance the food ;-; public static final Item SHIMMER_FISHING_ROD = new ShimmerFishingRodItem(new Item.Settings().maxCount(1).maxDamage(150).rarity(Rarity.EPIC).group(ItemGroup.TOOLS)); @@ -96,6 +98,8 @@ public static void registerItems() { Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "disc_astral_lakes_remix"), DISC_ASTRAL_LAKES_REMIX); Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "shimmer_bottle"), SHIMMER_BOTTLE); Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "chromatic_vacuum"), CHROMATIC_VACUUM); + Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "machinegun"), MACHINEGUN); + Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "shotgun"), SHOTGUN); Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "astral_hoe"), ASTRAL_HOE); Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "soulsteal_dagger"), SOULSTEAL_DAGGER); Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "diamond_boomer"), DIAMOND_BOOMER); diff --git a/src/main/java/com/github/ethanicuss/astraladditions/util/ModUtils.java b/src/main/java/com/github/ethanicuss/astraladditions/util/ModUtils.java index 8bc9819..8d8504d 100644 --- a/src/main/java/com/github/ethanicuss/astraladditions/util/ModUtils.java +++ b/src/main/java/com/github/ethanicuss/astraladditions/util/ModUtils.java @@ -21,7 +21,7 @@ public static void spawnForcedParticles(ServerWorld w } } - public static void playSound(ServerWorld world, double x, double y, double z, SoundEvent sound, SoundCategory category, float vol, float pitch, boolean falloff) { + public static void playSound(ServerWorld world, double x, double y, double z, SoundEvent sound, SoundCategory category, float vol, float pitch, boolean falloff) { for (ServerPlayerEntity player : world.getPlayers()) { player.world.playSound(x, y, z, sound, category, vol, pitch, falloff); } diff --git a/src/main/resources/assets/astraladditions/blockstates/cracked_ice.json b/src/main/resources/assets/astraladditions/blockstates/cracked_ice.json new file mode 100644 index 0000000..b969fdf --- /dev/null +++ b/src/main/resources/assets/astraladditions/blockstates/cracked_ice.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": {"model": "astraladditions:block/cracked_ice"} + } +} \ No newline at end of file diff --git a/src/main/resources/assets/astraladditions/blockstates/prismatic_geyser.json b/src/main/resources/assets/astraladditions/blockstates/prismatic_geyser.json new file mode 100644 index 0000000..e769377 --- /dev/null +++ b/src/main/resources/assets/astraladditions/blockstates/prismatic_geyser.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": {"model": "astraladditions:block/prismatic_geyser"} + } +} \ No newline at end of file diff --git a/src/main/resources/assets/astraladditions/models/block/cracked_ice.json b/src/main/resources/assets/astraladditions/models/block/cracked_ice.json new file mode 100644 index 0000000..6ba40f1 --- /dev/null +++ b/src/main/resources/assets/astraladditions/models/block/cracked_ice.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "astraladditions:block/cracked_ice" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/astraladditions/models/block/prismatic_geyser.json b/src/main/resources/assets/astraladditions/models/block/prismatic_geyser.json new file mode 100644 index 0000000..84a99b6 --- /dev/null +++ b/src/main/resources/assets/astraladditions/models/block/prismatic_geyser.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "top": "astraladditions:block/prismatic_geyser", + "bottom": "ad_astra:block/glacio_stone", + "side": "ad_astra:block/glacio_stone" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/astraladditions/models/item/machinegun.json b/src/main/resources/assets/astraladditions/models/item/machinegun.json new file mode 100644 index 0000000..379eb3d --- /dev/null +++ b/src/main/resources/assets/astraladditions/models/item/machinegun.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "astraladditions:item/shotgun" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/astraladditions/models/item/shotgun.json b/src/main/resources/assets/astraladditions/models/item/shotgun.json new file mode 100644 index 0000000..379eb3d --- /dev/null +++ b/src/main/resources/assets/astraladditions/models/item/shotgun.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "astraladditions:item/shotgun" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/astraladditions/textures/block/cracked_ice.png b/src/main/resources/assets/astraladditions/textures/block/cracked_ice.png new file mode 100644 index 0000000..1dd4258 Binary files /dev/null and b/src/main/resources/assets/astraladditions/textures/block/cracked_ice.png differ diff --git a/src/main/resources/assets/astraladditions/textures/block/prismatic_geyser.png b/src/main/resources/assets/astraladditions/textures/block/prismatic_geyser.png new file mode 100644 index 0000000..9f2fdba Binary files /dev/null and b/src/main/resources/assets/astraladditions/textures/block/prismatic_geyser.png differ diff --git a/src/main/resources/assets/astraladditions/textures/entity/prismatic_geyser/prismatic_geyser.png b/src/main/resources/assets/astraladditions/textures/entity/prismatic_geyser/prismatic_geyser.png new file mode 100644 index 0000000..2c459ec Binary files /dev/null and b/src/main/resources/assets/astraladditions/textures/entity/prismatic_geyser/prismatic_geyser.png differ diff --git a/src/main/resources/assets/astraladditions/textures/entity/scrap_projectile/scrap_projectile.png b/src/main/resources/assets/astraladditions/textures/entity/scrap_projectile/scrap_projectile.png new file mode 100644 index 0000000..86d1c41 Binary files /dev/null and b/src/main/resources/assets/astraladditions/textures/entity/scrap_projectile/scrap_projectile.png differ diff --git a/src/main/resources/assets/astraladditions/textures/item/machinegun.png b/src/main/resources/assets/astraladditions/textures/item/machinegun.png new file mode 100644 index 0000000..496a3a6 Binary files /dev/null and b/src/main/resources/assets/astraladditions/textures/item/machinegun.png differ diff --git a/src/main/resources/assets/astraladditions/textures/item/scrap.png b/src/main/resources/assets/astraladditions/textures/item/scrap.png new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/assets/astraladditions/textures/item/shotgun.png b/src/main/resources/assets/astraladditions/textures/item/shotgun.png new file mode 100644 index 0000000..496a3a6 Binary files /dev/null and b/src/main/resources/assets/astraladditions/textures/item/shotgun.png differ diff --git a/src/main/resources/assets/astraladditions/textures/mob_effect/frost.png b/src/main/resources/assets/astraladditions/textures/mob_effect/frost.png new file mode 100644 index 0000000..7d0cd71 Binary files /dev/null and b/src/main/resources/assets/astraladditions/textures/mob_effect/frost.png differ