diff --git a/src/main/generated/assets/acesbs/models/item/bricked_up.json b/src/main/generated/assets/acesbs/models/item/bricked_up.json new file mode 100644 index 0000000..802cfeb --- /dev/null +++ b/src/main/generated/assets/acesbs/models/item/bricked_up.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "acesbs:item/bricked_up" + } +} \ No newline at end of file diff --git a/src/main/generated/data/acesbs/advancement/recipes/food/bricked_up.json b/src/main/generated/data/acesbs/advancement/recipes/food/bricked_up.json new file mode 100644 index 0000000..2f6d904 --- /dev/null +++ b/src/main/generated/data/acesbs/advancement/recipes/food/bricked_up.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_stable_endtropy": { + "conditions": { + "items": [ + { + "items": "acesbs:stable_endtropy" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "acesbs:bricked_up" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_stable_endtropy" + ] + ], + "rewards": { + "recipes": [ + "acesbs:bricked_up" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/acesbs/recipe/bricked_up.json b/src/main/generated/data/acesbs/recipe/bricked_up.json new file mode 100644 index 0000000..6e2a6e0 --- /dev/null +++ b/src/main/generated/data/acesbs/recipe/bricked_up.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "minecraft:brick" + }, + { + "item": "acesbs:stable_endtropy" + } + ], + "result": { + "count": 1, + "id": "acesbs:bricked_up" + } +} \ No newline at end of file diff --git a/src/main/generated/data/minecraft/tags/item/enchantable/bow.json b/src/main/generated/data/minecraft/tags/item/enchantable/bow.json new file mode 100644 index 0000000..65c97b6 --- /dev/null +++ b/src/main/generated/data/minecraft/tags/item/enchantable/bow.json @@ -0,0 +1,5 @@ +{ + "values": [ + "acesbs:kaupen_bow" + ] +} \ No newline at end of file diff --git a/src/main/java/com/acethewildfire/acesbs/AcesBSClient.java b/src/main/java/com/acethewildfire/acesbs/AcesBSClient.java index e2a4595..83d5c97 100644 --- a/src/main/java/com/acethewildfire/acesbs/AcesBSClient.java +++ b/src/main/java/com/acethewildfire/acesbs/AcesBSClient.java @@ -2,6 +2,8 @@ package com.acethewildfire.acesbs; import com.acethewildfire.acesbs.block.ModBlocks; import com.acethewildfire.acesbs.entity.ModEntities; +import com.acethewildfire.acesbs.entity.client.CombustibleLemonModel; +import com.acethewildfire.acesbs.entity.client.CombustibleLemonRenderer; import com.acethewildfire.acesbs.entity.client.FrenModel; import com.acethewildfire.acesbs.entity.client.FrenRenderer; import com.acethewildfire.acesbs.util.ModModelPredicates; @@ -26,5 +28,8 @@ public class AcesBSClient implements ClientModInitializer { EntityModelLayerRegistry.registerModelLayer(FrenModel.FREN, FrenModel::getTexturedModelData); EntityRendererRegistry.register(ModEntities.FREN, FrenRenderer::new); + + EntityModelLayerRegistry.registerModelLayer(CombustibleLemonModel.C_LEMON, CombustibleLemonModel::getTexturedModelData); + EntityRendererRegistry.register(ModEntities.C_LEMON, CombustibleLemonRenderer::new); } } diff --git a/src/main/java/com/acethewildfire/acesbs/TODO.txt b/src/main/java/com/acethewildfire/acesbs/TODO.txt index 2b59921..e47c343 100644 --- a/src/main/java/com/acethewildfire/acesbs/TODO.txt +++ b/src/main/java/com/acethewildfire/acesbs/TODO.txt @@ -16,6 +16,9 @@ O Prisma Steel (Stable Entropy + Iron) (Needs recipe) Food - Aquarium Gravel (CT:Prismarine shards + crystals) - Bricked Up (Brick + End-tropy) + - Holy SFX + slow levitate up + - Stomach grumble + - Fart reverb and shoot into sky - Infernal Beef (Mob/Ashes + Cooked Beef) - Hyper Stimulants (Hyper Sugar) - Narcan (Stimulants + Entropic Eviscerator) @@ -31,6 +34,7 @@ Items Armor X Beserker Pauldron (Special: Skeleton hurt sound) - Wildfire Boots (Special: Rainbow ember) +- Fireskip Boots (Infernal Fire effect on water) - Sov's Plate Carrier - (Headlamp Armors using Everburn Gold) - Eternal Armor (Binding and mending) diff --git a/src/main/java/com/acethewildfire/acesbs/block/custom/CombustibleLemon.java b/src/main/java/com/acethewildfire/acesbs/block/custom/CombustibleLemon.java new file mode 100644 index 0000000..6cbdfe6 --- /dev/null +++ b/src/main/java/com/acethewildfire/acesbs/block/custom/CombustibleLemon.java @@ -0,0 +1,36 @@ +package com.acethewildfire.acesbs.block.custom; + +import com.acethewildfire.acesbs.entity.custom.CombustibleLemonEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +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 CombustibleLemon extends Item { + public CombustibleLemon(Settings settings) { + super(settings); + } + + @Override + public TypedActionResult use(World world, PlayerEntity user, Hand hand) { + ItemStack itemStack = user.getStackInHand(hand); + world.playSound(null, user.getX(), user.getY(), user.getZ(), SoundEvents.ENTITY_SNOWBALL_THROW, SoundCategory.NEUTRAL, 0.5f, 0.4f / (world.getRandom().nextFloat() * 0.4f + 0.8f)); + if (!world.isClient) { + CombustibleLemonEntity c_lemon = new CombustibleLemonEntity(world, user); + c_lemon.setVelocity(user, user.getPitch(), user.getYaw(), 0.0f, 1.5f, 0f); + world.spawnEntity(c_lemon); + } + + user.incrementStat(Stats.USED.getOrCreateStat(this)); + if (!user.getAbilities().creativeMode) { + itemStack.decrement(1); + } + + return TypedActionResult.success(itemStack, world.isClient()); + } +} diff --git a/src/main/java/com/acethewildfire/acesbs/datagen/ModItemTagProvider.java b/src/main/java/com/acethewildfire/acesbs/datagen/ModItemTagProvider.java index b4d621b..d76e93e 100644 --- a/src/main/java/com/acethewildfire/acesbs/datagen/ModItemTagProvider.java +++ b/src/main/java/com/acethewildfire/acesbs/datagen/ModItemTagProvider.java @@ -31,6 +31,8 @@ public class ModItemTagProvider extends FabricTagProvider.ItemTagProvider { .add(Items.LAPIS_LAZULI) .add(Items.EMERALD) .add(Items.DIAMOND); + getOrCreateTagBuilder(ItemTags.BOW_ENCHANTABLE) + .add(ModItems.KAUPEN_BOW); getOrCreateTagBuilder(ItemTags.SWORDS) .add(ModItems.PRISMA_STEEL_SWORD); getOrCreateTagBuilder(ItemTags.AXES) diff --git a/src/main/java/com/acethewildfire/acesbs/datagen/ModModelProvider.java b/src/main/java/com/acethewildfire/acesbs/datagen/ModModelProvider.java index 1b298e7..54b272c 100644 --- a/src/main/java/com/acethewildfire/acesbs/datagen/ModModelProvider.java +++ b/src/main/java/com/acethewildfire/acesbs/datagen/ModModelProvider.java @@ -73,6 +73,7 @@ public class ModModelProvider extends FabricModelProvider { itemModelGenerator.register(ModItems.COOKED_LEMON, Models.GENERATED); itemModelGenerator.register(ModItems.LEMON, Models.GENERATED); itemModelGenerator.register(ModItems.INFERNAL_BEEF, Models.GENERATED); + itemModelGenerator.register(ModItems.BRICKED_UP, Models.GENERATED); itemModelGenerator.register(ModItems.TOBACCO, Models.GENERATED); itemModelGenerator.register(ModItems.RAW_ENTROPY, Models.GENERATED); itemModelGenerator.register(ModItems.STABLE_ENTROPY, Models.GENERATED); diff --git a/src/main/java/com/acethewildfire/acesbs/datagen/ModRecipeProvider.java b/src/main/java/com/acethewildfire/acesbs/datagen/ModRecipeProvider.java index e31b443..6c29ad7 100644 --- a/src/main/java/com/acethewildfire/acesbs/datagen/ModRecipeProvider.java +++ b/src/main/java/com/acethewildfire/acesbs/datagen/ModRecipeProvider.java @@ -54,6 +54,12 @@ public class ModRecipeProvider extends FabricRecipeProvider { .criterion(hasItem(ModItems.LEMON), conditionsFromItem(ModItems.LEMON)) .offerTo(recipeExporter); + ShapelessRecipeJsonBuilder.create(RecipeCategory.FOOD, ModItems.BRICKED_UP, 1) + .input(Items.BRICK, 1) + .input(ModItems.STABLE_ENDTROPY, 1) + .criterion(hasItem(ModItems.STABLE_ENDTROPY), conditionsFromItem(ModItems.STABLE_ENDTROPY)) + .offerTo(recipeExporter); + ShapedRecipeJsonBuilder.create(RecipeCategory.DECORATIONS, ModBlocks.CRYSTAL_ENTROPY, 8) .pattern("###") .pattern("#S#") diff --git a/src/main/java/com/acethewildfire/acesbs/effect/BrickedUpEffect.java b/src/main/java/com/acethewildfire/acesbs/effect/BrickedUpEffect.java new file mode 100644 index 0000000..3060376 --- /dev/null +++ b/src/main/java/com/acethewildfire/acesbs/effect/BrickedUpEffect.java @@ -0,0 +1,75 @@ +package com.acethewildfire.acesbs.effect; + +import com.acethewildfire.acesbs.AcesBS; +import com.acethewildfire.acesbs.sounds.ModSounds; +import net.minecraft.entity.Flutterer; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.effect.StatusEffect; +import net.minecraft.entity.effect.StatusEffectCategory; +import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvents; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +public class BrickedUpEffect extends StatusEffect { + protected BrickedUpEffect(StatusEffectCategory category, int color) { + super(category, color); + } + + @Override + public boolean applyUpdateEffect(LivingEntity entity, int amplifier) { + + int durationLeft = entity.getStatusEffect(ModEffects.BRICKED_UP).getDuration(); + int idealLen = 160; + World world = entity.getWorld(); + + if(durationLeft > idealLen - 1){ + world.playSound(entity, entity.getBlockPos(), ModSounds.BRICKED_UP, SoundCategory.PLAYERS, 2f, 1f); + } + else if(durationLeft > idealLen - 120){ + float p = entity.getWorld().getBlockState(entity.getBlockPos()).getBlock().getSlipperiness(); + float f = entity.isOnGround() ? p * 0.91F : 0.91F; + Vec3d vec3d6 = entity.applyMovementInput(entity.getMovement(), p); + double q = vec3d6.y; + q += (0.05 * 7.75 - vec3d6.y) * 0.2; + + entity.setVelocity(vec3d6.x * (double)f, this instanceof Flutterer ? q * (double)f : q * 0.9800000190734863, vec3d6.z * (double)f); + } +// else if (durationLeft < idealLen - 80 && durationLeft > idealLen - 120) { +// +// // Freeze in place +// entity.setVelocity(0, 0, 0); +// +//// float p = entity.getWorld().getBlockState(entity.getBlockPos()).getBlock().getSlipperiness(); +//// float f = entity.isOnGround() ? p * 0.91F : 0.91F; +//// Vec3d vec3d6 = entity.applyMovementInput(entity.getMovement(), p); +//// double q = vec3d6.y; +//// q += (0.05 * 7 - vec3d6.y) * 0.2; +//// +//// entity.setVelocity(vec3d6.x * (double)f, this instanceof Flutterer ? q * (double)f : q * 0.9800000190734863, vec3d6.z * (double)f); +// } +// else if (durationLeft < idealLen - 120 && durationLeft > idealLen - 122) { +// world.playSound(entity, entity.getBlockPos(), ModSounds.FART, SoundCategory.PLAYERS, 5f, 1f); +// } + else { + float p = entity.getWorld().getBlockState(entity.getBlockPos()).getBlock().getSlipperiness(); + float f = entity.isOnGround() ? p * 0.91F : 0.91F; + Vec3d vec3d6 = entity.applyMovementInput(entity.getMovement(), p); + double q = vec3d6.y; + q += (0.05 * 250 - vec3d6.y) * 0.2; + + entity.setVelocity(vec3d6.x * (double)f, this instanceof Flutterer ? q * (double)f : q * 0.9800000190734863, vec3d6.z * (double)f); + } + + + return true; + + } + + @Override + public boolean canApplyUpdateEffect(int duration, int amplifier) { + return true; + } + +} diff --git a/src/main/java/com/acethewildfire/acesbs/effect/InfernalFireEffect.java b/src/main/java/com/acethewildfire/acesbs/effect/InfernalFireEffect.java index 77375d4..044a0c5 100644 --- a/src/main/java/com/acethewildfire/acesbs/effect/InfernalFireEffect.java +++ b/src/main/java/com/acethewildfire/acesbs/effect/InfernalFireEffect.java @@ -1,8 +1,12 @@ package com.acethewildfire.acesbs.effect; +import com.acethewildfire.acesbs.AcesBS; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffect; import net.minecraft.entity.effect.StatusEffectCategory; +import net.minecraft.particle.ParticleTypes; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.world.World; import java.util.Random; @@ -16,12 +20,28 @@ public class InfernalFireEffect extends StatusEffect { @Override public boolean applyUpdateEffect(LivingEntity entity, int amplifier) { entity.setOnFireFor(1); + World world = entity.getWorld(); if (entity.isTouchingWater()){ - double randomVelocityX = r.nextDouble(-0.5, 0.5); - double randomVelocityY = r.nextDouble(0.5, 1.0); - double randomVelocityZ = r.nextDouble(-0.5, 0.5); - entity.addVelocity(randomVelocityX, randomVelocityY, randomVelocityZ); +// double randomVelocityX = r.nextDouble(-0.5, 0.5); +// double randomVelocityY = r.nextDouble(0.5, 1.0); +// double randomVelocityZ = r.nextDouble(-0.5, 0.5); + + if (!world.isClient) { + ((ServerWorld) world).spawnParticles( + ParticleTypes.CAMPFIRE_COSY_SMOKE, + entity.getX(), + entity.getY() + 0.5f, + entity.getZ(), + 5, // count + 0.02, // dx + 0.2, // dy + 0.02, // dz + 0.01 // speed + ); + } + + entity.addVelocity(0, 0.75f, 0); } return true; diff --git a/src/main/java/com/acethewildfire/acesbs/effect/ModEffects.java b/src/main/java/com/acethewildfire/acesbs/effect/ModEffects.java index f931c12..7fa9823 100644 --- a/src/main/java/com/acethewildfire/acesbs/effect/ModEffects.java +++ b/src/main/java/com/acethewildfire/acesbs/effect/ModEffects.java @@ -20,7 +20,12 @@ public class ModEffects { public static final RegistryEntry INFERNAL_FIRE = registerStatusEffect("infernal_fire", new InfernalFireEffect(StatusEffectCategory.HARMFUL, 0x963830) .addAttributeModifier(EntityAttributes.GENERIC_MOVEMENT_SPEED, Identifier.of(AcesBS.MOD_ID, "infernal_fire"), - 1F, EntityAttributeModifier.Operation.ADD_MULTIPLIED_TOTAL)); + 1F, EntityAttributeModifier.Operation.ADD_MULTIPLIED_TOTAL) + .addAttributeModifier(EntityAttributes.GENERIC_JUMP_STRENGTH, Identifier.of(AcesBS.MOD_ID, "infernal_fire"), + 0.25F, EntityAttributeModifier.Operation.ADD_MULTIPLIED_TOTAL)); + + public static final RegistryEntry BRICKED_UP = registerStatusEffect("bricked_up", + new BrickedUpEffect(StatusEffectCategory.NEUTRAL, 0x8e4631)); private static RegistryEntry registerStatusEffect (String name, StatusEffect effect){ return Registry.registerReference(Registries.STATUS_EFFECT, Identifier.of(AcesBS.MOD_ID, name), effect); diff --git a/src/main/java/com/acethewildfire/acesbs/entity/ModEntities.java b/src/main/java/com/acethewildfire/acesbs/entity/ModEntities.java index fac5d90..0425963 100644 --- a/src/main/java/com/acethewildfire/acesbs/entity/ModEntities.java +++ b/src/main/java/com/acethewildfire/acesbs/entity/ModEntities.java @@ -1,6 +1,7 @@ package com.acethewildfire.acesbs.entity; import com.acethewildfire.acesbs.AcesBS; +import com.acethewildfire.acesbs.entity.custom.CombustibleLemonEntity; import com.acethewildfire.acesbs.entity.custom.FrenEntity; import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnGroup; @@ -15,6 +16,11 @@ public class ModEntities { EntityType.Builder.create(FrenEntity::new, SpawnGroup.MONSTER) .dimensions(0.6F, 1.7F).build()); + public static final EntityType C_LEMON = Registry.register(Registries.ENTITY_TYPE, + Identifier.of(AcesBS.MOD_ID, "combustible_lemon"), + EntityType.Builder.create(CombustibleLemonEntity::new, SpawnGroup.MISC) + .dimensions(0.5F, 0.5F).build()); + public static void registerModEntities() { AcesBS.LOGGER.info("Registering Mod Entities for " + AcesBS.MOD_ID); diff --git a/src/main/java/com/acethewildfire/acesbs/entity/client/CombustibleLemonModel.java b/src/main/java/com/acethewildfire/acesbs/entity/client/CombustibleLemonModel.java new file mode 100644 index 0000000..c8d5067 --- /dev/null +++ b/src/main/java/com/acethewildfire/acesbs/entity/client/CombustibleLemonModel.java @@ -0,0 +1,39 @@ +package com.acethewildfire.acesbs.entity.client; + +import com.acethewildfire.acesbs.AcesBS; +import com.acethewildfire.acesbs.entity.custom.CombustibleLemonEntity; +import net.minecraft.client.model.*; +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.entity.model.EntityModel; +import net.minecraft.client.render.entity.model.EntityModelLayer; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.Identifier; + +public class CombustibleLemonModel extends EntityModel { + public static final EntityModelLayer C_LEMON = new EntityModelLayer(Identifier.of(AcesBS.MOD_ID, "combustible_lemon"), "main"); + private final ModelPart combustible_lemon; + + public CombustibleLemonModel(ModelPart root) { + this.combustible_lemon = root.getChild("combustible_lemon"); + } + + public static TexturedModelData getTexturedModelData() { + ModelData modelData = new ModelData(); + ModelPartData modelPartData = modelData.getRoot(); + ModelPartData combustible_lemon = modelPartData.addChild("combustible_lemon", ModelPartBuilder.create().uv(64, 32).cuboid(-6.0F, -10.0F, -6.0F, 12.0F, 20.0F, 12.0F, new Dilation(-6.0F)) + .uv(0, 32).cuboid(-8.0F, -9.0F, -8.0F, 16.0F, 18.0F, 16.0F, new Dilation(-6.0F)) + .uv(64, 64).cuboid(-5.0F, -10.0F, -5.0F, 10.0F, 20.0F, 10.0F, new Dilation(-6.0F)) + .uv(0, 66).cuboid(-3.0F, -11.0F, -3.0F, 6.0F, 2.0F, 6.0F, new Dilation(-3.0F)) + .uv(24, 66).cuboid(3.0F, -9.0F, -6.0F, 4.0F, 3.0F, 4.0F, new Dilation(-2.0F)) + .uv(40, 66).cuboid(4.0F, -11.0F, -6.0F, 3.0F, 4.0F, 3.0F, new Dilation(-2.0F)), ModelTransform.pivot(0.0F, 9.0F, 0.0F)); + return TexturedModelData.of(modelData, 128, 128); + } + @Override + public void setAngles(CombustibleLemonEntity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { + + } + @Override + public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, int color) { + combustible_lemon.render(matrices, vertexConsumer, light, overlay, color); + } +} diff --git a/src/main/java/com/acethewildfire/acesbs/entity/client/CombustibleLemonRenderer.java b/src/main/java/com/acethewildfire/acesbs/entity/client/CombustibleLemonRenderer.java new file mode 100644 index 0000000..77f861a --- /dev/null +++ b/src/main/java/com/acethewildfire/acesbs/entity/client/CombustibleLemonRenderer.java @@ -0,0 +1,51 @@ +package com.acethewildfire.acesbs.entity.client; + +import com.acethewildfire.acesbs.AcesBS; +import com.acethewildfire.acesbs.entity.custom.CombustibleLemonEntity; +import net.minecraft.client.render.OverlayTexture; +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.render.item.ItemRenderer; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RotationAxis; + +public class CombustibleLemonRenderer extends EntityRenderer { + protected CombustibleLemonModel model; + + public CombustibleLemonRenderer(EntityRendererFactory.Context ctx) { + super(ctx); + this.model = new CombustibleLemonModel(ctx.getPart(CombustibleLemonModel.C_LEMON)); + } + + @Override + public void render(CombustibleLemonEntity entity, float yaw, float tickDelta, MatrixStack matrices, + VertexConsumerProvider vertexConsumers, int light) { + matrices.push(); + + if(!entity.isGrounded()) { + matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(MathHelper.lerp(tickDelta, entity.prevYaw, entity.getYaw()))); + matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(entity.getRenderingRotation() * 5f)); + matrices.translate(0, -1.0f, 0); + } else { +// matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(entity.groundedOffset.getY())); +// matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(entity.groundedOffset.getX())); + matrices.translate(0, -1.0f, 0); + } + + VertexConsumer vertexconsumer = ItemRenderer.getDirectItemGlintConsumer(vertexConsumers, + this.model.getLayer(Identifier.of(AcesBS.MOD_ID, "textures/entity/combustible_lemon/combustible_lemon.png")), false, false); + this.model.render(matrices, vertexconsumer, light, OverlayTexture.DEFAULT_UV); + + matrices.pop(); + super.render(entity, yaw, tickDelta, matrices, vertexConsumers, light); + } + + @Override + public Identifier getTexture(CombustibleLemonEntity entity) { + return Identifier.of(AcesBS.MOD_ID, "textures/entity/combustible_lemon/combustible_lemon.png"); + } +} diff --git a/src/main/java/com/acethewildfire/acesbs/entity/custom/CombustibleLemonEntity.java b/src/main/java/com/acethewildfire/acesbs/entity/custom/CombustibleLemonEntity.java new file mode 100644 index 0000000..6dafa99 --- /dev/null +++ b/src/main/java/com/acethewildfire/acesbs/entity/custom/CombustibleLemonEntity.java @@ -0,0 +1,92 @@ +package com.acethewildfire.acesbs.entity.custom; + +import com.acethewildfire.acesbs.entity.ModEntities; +import com.acethewildfire.acesbs.item.ModItems; +import net.minecraft.block.AbstractFireBlock; +import net.minecraft.client.util.math.Vector2f; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.projectile.PersistentProjectileEntity; +import net.minecraft.entity.projectile.ProjectileEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.hit.EntityHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.World; + +public class CombustibleLemonEntity extends PersistentProjectileEntity { + private float rotation; +// public Vector2f groundedOffset; + + public CombustibleLemonEntity(EntityType entityType, World world) { + super(entityType, world); + } + + public CombustibleLemonEntity(World world, PlayerEntity player) { + super(ModEntities.C_LEMON, player, world, new ItemStack(ModItems.COMBUSTIBLE_LEMON), null); + } + + @Override + protected ItemStack getDefaultItemStack() { + return new ItemStack(ModItems.COMBUSTIBLE_LEMON); + } + + public float getRenderingRotation() { + rotation += 0.5f; + if(rotation >= 360) { + rotation = 0; + } + return rotation; + } + + public boolean isGrounded() { + return inGround; + } + + @Override + protected void onEntityHit(EntityHitResult entityHitResult) { + super.onEntityHit(entityHitResult); + Entity entity = entityHitResult.getEntity(); +// entity.damage(this.getDamageSources().thrown(this, this.getOwner()), 4); + entity.setOnFireFor(20); + + if (!this.getWorld().isClient()) { + this.getWorld().sendEntityStatus(this, (byte)3); + this.discard(); + } + } + + @Override + protected void onBlockHit(BlockHitResult result) { + super.onBlockHit(result); + + BlockPos blockPos = result.getBlockPos().offset(result.getSide()); + if (this.getWorld().isAir(blockPos)) { + this.getWorld().setBlockState(blockPos, AbstractFireBlock.getState(this.getWorld(), blockPos)); + } + + this.discard(); + +// if(result.getSide() == Direction.SOUTH) { +// groundedOffset = new Vector2f(215f,180f); +// } +// if(result.getSide() == Direction.NORTH) { +// groundedOffset = new Vector2f(215f, 0f); +// } +// if(result.getSide() == Direction.EAST) { +// groundedOffset = new Vector2f(215f,-90f); +// } +// if(result.getSide() == Direction.WEST) { +// groundedOffset = new Vector2f(215f,90f); +// } +// +// if(result.getSide() == Direction.DOWN) { +// groundedOffset = new Vector2f(115f,180f); +// } +// if(result.getSide() == Direction.UP) { +// groundedOffset = new Vector2f(285f,180f); +// } + } +} diff --git a/src/main/java/com/acethewildfire/acesbs/item/ModFoodComponent.java b/src/main/java/com/acethewildfire/acesbs/item/ModFoodComponent.java index b5bc8ff..644f1ef 100644 --- a/src/main/java/com/acethewildfire/acesbs/item/ModFoodComponent.java +++ b/src/main/java/com/acethewildfire/acesbs/item/ModFoodComponent.java @@ -23,4 +23,10 @@ public class ModFoodComponent { .statusEffect(new StatusEffectInstance(ModEffects.INFERNAL_FIRE, 200), 0.2f) .alwaysEdible() .build(); + public static final FoodComponent BRICKED_UP = new FoodComponent.Builder() + .nutrition(0) + .saturationModifier(0f) + .statusEffect(new StatusEffectInstance(ModEffects.BRICKED_UP, 160), 1f) + .alwaysEdible() + .build(); } diff --git a/src/main/java/com/acethewildfire/acesbs/item/ModItemGroups.java b/src/main/java/com/acethewildfire/acesbs/item/ModItemGroups.java index 78ac227..1f68192 100644 --- a/src/main/java/com/acethewildfire/acesbs/item/ModItemGroups.java +++ b/src/main/java/com/acethewildfire/acesbs/item/ModItemGroups.java @@ -25,6 +25,7 @@ public class ModItemGroups { entries.add(ModItems.LEMON); entries.add(ModItems.COOKED_LEMON); entries.add(ModItems.INFERNAL_BEEF); + entries.add(ModItems.BRICKED_UP); entries.add(ModItems.ORACLE_LEMON); entries.add(ModItems.GREEN_BRICKS); entries.add(ModItems.CRAB_RAVE_MUSIC_DISC); @@ -89,6 +90,7 @@ public class ModItemGroups { entries.add(ModItems.PRISMA_STEEL_BOOTS); entries.add(ModItems.PRISMA_SMITHING_TEMPLATE); entries.add(ModItems.KAUPEN_BOW); + entries.add(ModItems.COMBUSTIBLE_LEMON); entries.add(ModItems.BERSERKERS_PAULDRON); diff --git a/src/main/java/com/acethewildfire/acesbs/item/ModItems.java b/src/main/java/com/acethewildfire/acesbs/item/ModItems.java index 653a17d..f04f41c 100644 --- a/src/main/java/com/acethewildfire/acesbs/item/ModItems.java +++ b/src/main/java/com/acethewildfire/acesbs/item/ModItems.java @@ -2,7 +2,7 @@ package com.acethewildfire.acesbs.item; import com.acethewildfire.acesbs.AcesBS; import com.acethewildfire.acesbs.block.ModBlocks; -import com.acethewildfire.acesbs.effect.ModEffects; +import com.acethewildfire.acesbs.block.custom.CombustibleLemon; import com.acethewildfire.acesbs.entity.ModEntities; import com.acethewildfire.acesbs.item.custom.HammerItem; import com.acethewildfire.acesbs.item.custom.ModArmorItem; @@ -13,17 +13,12 @@ import com.acethewildfire.acesbs.sounds.ModSounds; import net.minecraft.client.gui.screen.Screen; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.*; -import net.minecraft.entity.attribute.EntityAttribute; import net.minecraft.entity.attribute.EntityAttributeModifier; import net.minecraft.entity.attribute.EntityAttributes; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.entity.effect.StatusEffects; import net.minecraft.item.*; import net.minecraft.item.tooltip.TooltipType; -import net.minecraft.potion.Potion; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; -import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.resource.featuretoggle.FeatureFlags; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -50,6 +45,26 @@ public class ModItems { ) )) )); + public static final Item BRICKED_UP = registerItem("bricked_up", + new Item(new Item.Settings() + .food(ModFoodComponent.BRICKED_UP) + .component(DataComponentTypes.LORE, new LoreComponent( + List.of( + Text.literal("Straight to God").formatted(Formatting.GOLD, Formatting.ITALIC) + ) + )) + )); + + public static final Item COMBUSTIBLE_LEMON = registerItem("combustible_lemon", + new CombustibleLemon(new Item.Settings().maxCount(16)){ + @Override + public void appendTooltip(ItemStack stack, TooltipContext context, List tooltip, TooltipType type) { + tooltip.add(Text.translatable("tooltip.acesbs.combustible_lemon1")); + tooltip.add(Text.translatable("tooltip.acesbs.combustible_lemon2")); + super.appendTooltip(stack, context, tooltip, type); + } + }); + public static final Item LEMON = registerItem("lemon", new Item(new Item.Settings().food(ModFoodComponent.LEMON))); public static final Item COOKED_LEMON = registerItem("cooked_lemon", new Item(new Item.Settings().food(ModFoodComponent.COOKED_LEMON))); public static final Item GREEN_BRICKS = registerItem("green_bricks", new Item(new Item.Settings()) { diff --git a/src/main/java/com/acethewildfire/acesbs/sounds/ModSounds.java b/src/main/java/com/acethewildfire/acesbs/sounds/ModSounds.java index 2998962..e2433b8 100644 --- a/src/main/java/com/acethewildfire/acesbs/sounds/ModSounds.java +++ b/src/main/java/com/acethewildfire/acesbs/sounds/ModSounds.java @@ -13,6 +13,12 @@ import net.minecraft.util.Identifier; public class ModSounds { public static final SoundEvent LIZARD = registerSoundEvent("lizard"); + public static final SoundEvent FART = registerSoundEvent("fart"); + public static final SoundEvent GRUMBLE = registerSoundEvent("grumble"); + public static final SoundEvent HOLY = registerSoundEvent("holy"); + public static final SoundEvent HOLY_S = registerSoundEvent("holy_s"); + public static final SoundEvent BRICKED_UP = registerSoundEvent("bricked_up"); + // public static final BlockSoundGroup LIZARD_SOUNDS = new BlockSoundGroup(1f, 1f, SoundEvents.BLOCK_WOOD_BREAK, SoundEvents.BLOCK_WOOD_STEP, SoundEvents.BLOCK_WOOD_PLACE, SoundEvents.BLOCK_WOOD_HIT, SoundEvents.BLOCK_WOOD_FALL) diff --git a/src/main/resources/assets/acesbs/lang/en_us.json b/src/main/resources/assets/acesbs/lang/en_us.json index 24deeac..79723d9 100644 --- a/src/main/resources/assets/acesbs/lang/en_us.json +++ b/src/main/resources/assets/acesbs/lang/en_us.json @@ -1,5 +1,6 @@ { "item.acesbs.oracle_lemon.effect.lemon": "Oracle of Lemon", + "item.acesbs.combustible_lemon": "Combustible Lemon", "item.acesbs.raw_entropy": "Raw Entropy", "item.acesbs.stable_entropy": "Stabilized Entropy", "item.acesbs.infernal_ashes": "Infernal Ashes", @@ -7,6 +8,7 @@ "item.acesbs.stable_endtropy": "Stabilized Endtropy", "item.acesbs.lemon": "Odd Lemon", "item.acesbs.infernal_beef": "Infernal Beef", + "item.acesbs.bricked_up": "Bricked Up", "item.acesbs.cooked_lemon": "Cooked Odd Lemon", "item.acesbs.green_bricks": "Green Bricks", "item.acesbs.wand": "Entropy Wand", @@ -16,8 +18,6 @@ "item.minecraft.lingering_potion.effect.blindness": "Lingering Potion of Blindness", "item.minecraft.tipped_arrow.effect.blindness": "Arrow of Blindness", - "effect.acesbs.infernal_fire": "Infernal Fire", - "effect.acesbs.lemon": "Puckered", "item.minecraft.potion.effect.lemon": "Potion of Puckered", "item.minecraft.splash_potion.effect.lemon": "Splash Potion of Puckered", "item.minecraft.lingering_potion.effect.lemon": "Lingering Potion of Puckered", @@ -148,10 +148,22 @@ "tooltip.acesbs.berserkers_pauldron_thanks": "§7§oProgrammed with <3 for Tennocraft§r", "tooltip.acesbs.thanks_sov": "§7§oTextures by Sovaeris§r", + "tooltip.acesbs.combustible_lemon1": "§7§oDo you know who I am?§r", + "tooltip.acesbs.combustible_lemon2": "§7§oI’m the man who’s gonna burn your house down!§r", + "sounds.acesbs.lizard": "Lizard!", + "sounds.acesbs.holy": "Angelic Music", + "sounds.acesbs.fart": "Loud Echoing Fart", + "sounds.acesbs.grumble": "Stomach Grumbling", "sounds.acesbs.crab_rave": "Jukebox plays Crab Rave", "enchantment.acesbs.lightning_strike": "Lightning Strike", - "entity.acesbs.fren": "Fren" + "entity.acesbs.fren": "Fren", + "entity.acesbs.combustible_lemon": "Combustible Lemon", + + "effect.acesbs.infernal_fire": "Infernal Fire", + "effect.acesbs.lemon": "Puckered", + "effect.acesbs.bricked_up": "Bricked Up" + } \ No newline at end of file diff --git a/src/main/resources/assets/acesbs/models/item/combustible_lemon.json b/src/main/resources/assets/acesbs/models/item/combustible_lemon.json new file mode 100644 index 0000000..7422453 --- /dev/null +++ b/src/main/resources/assets/acesbs/models/item/combustible_lemon.json @@ -0,0 +1,156 @@ +{ + "format_version": "1.21.6", + "credit": "Made with Blockbench", + "texture_size": [128, 128], + "textures": { + "0": "acesbs:item/combustible_lemon" + }, + "elements": [ + { + "from": [2, 5, 2], + "to": [14, 25, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [9.5, 5.5, 11, 8], "texture": "#0"}, + "east": {"uv": [8, 5.5, 9.5, 8], "texture": "#0"}, + "south": {"uv": [12.5, 5.5, 14, 8], "texture": "#0"}, + "west": {"uv": [11, 5.5, 12.5, 8], "texture": "#0"}, + "up": {"uv": [11, 5.5, 9.5, 4], "texture": "#0"}, + "down": {"uv": [12.5, 4, 11, 5.5], "texture": "#0"} + } + }, + { + "from": [0, 6, 0], + "to": [16, 24, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "north": {"uv": [2, 6, 4, 8.25], "texture": "#0"}, + "east": {"uv": [0, 6, 2, 8.25], "texture": "#0"}, + "south": {"uv": [6, 6, 8, 8.25], "texture": "#0"}, + "west": {"uv": [4, 6, 6, 8.25], "texture": "#0"}, + "up": {"uv": [4, 6, 2, 4], "texture": "#0"}, + "down": {"uv": [6, 4, 4, 6], "texture": "#0"} + } + }, + { + "from": [-2, 9, -2], + "to": [18, 21, 18], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 9, 6]}, + "faces": { + "north": {"uv": [2.5, 2.5, 5, 4], "texture": "#0"}, + "east": {"uv": [0, 2.5, 2.5, 4], "texture": "#0"}, + "south": {"uv": [7.5, 2.5, 10, 4], "texture": "#0"}, + "west": {"uv": [5, 2.5, 7.5, 4], "texture": "#0"}, + "up": {"uv": [5, 2.5, 2.5, 0], "texture": "#0"}, + "down": {"uv": [7.5, 0, 5, 2.5], "texture": "#0"} + } + }, + { + "from": [3, 2, 3], + "to": [13, 27, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [11, 2, 11]}, + "faces": { + "north": {"uv": [9.25, 9.25, 10.5, 12.375], "texture": "#0"}, + "east": {"uv": [8, 9.25, 9.25, 12.375], "texture": "#0"}, + "south": {"uv": [11.75, 9.25, 13, 12.375], "texture": "#0"}, + "west": {"uv": [10.5, 9.25, 11.75, 12.375], "texture": "#0"}, + "up": {"uv": [10.5, 9.25, 9.25, 8], "texture": "#0"}, + "down": {"uv": [11.75, 8, 10.5, 9.25], "texture": "#0"} + } + }, + { + "from": [5, 27, 5], + "to": [11, 29, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 27, 13]}, + "faces": { + "north": {"uv": [0.75, 9, 1.5, 9.25], "texture": "#0"}, + "east": {"uv": [0, 9, 0.75, 9.25], "texture": "#0"}, + "south": {"uv": [2.25, 9, 3, 9.25], "texture": "#0"}, + "west": {"uv": [1.5, 9, 2.25, 9.25], "texture": "#0"}, + "up": {"uv": [1.5, 9, 0.75, 8.25], "texture": "#0"}, + "down": {"uv": [2.25, 8.25, 1.5, 9], "texture": "#0"} + } + }, + { + "from": [-1, 24, -1], + "to": [3, 27, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 24, 7]}, + "faces": { + "north": {"uv": [3.5, 8.75, 4, 9.125], "texture": "#0"}, + "east": {"uv": [3, 8.75, 3.5, 9.125], "texture": "#0"}, + "south": {"uv": [4.5, 8.75, 5, 9.125], "texture": "#0"}, + "west": {"uv": [4, 8.75, 4.5, 9.125], "texture": "#0"}, + "up": {"uv": [4, 8.75, 3.5, 8.25], "texture": "#0"}, + "down": {"uv": [4.5, 8.25, 4, 8.75], "texture": "#0"} + } + }, + { + "from": [-1, 27, -1], + "to": [2, 31, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 27, 7]}, + "faces": { + "north": {"uv": [5.375, 8.625, 5.75, 9.125], "texture": "#0"}, + "east": {"uv": [5, 8.625, 5.375, 9.125], "texture": "#0"}, + "south": {"uv": [6.125, 8.625, 6.5, 9.125], "texture": "#0"}, + "west": {"uv": [5.75, 8.625, 6.125, 9.125], "texture": "#0"}, + "up": {"uv": [5.75, 8.625, 5.375, 8.25], "texture": "#0"}, + "down": {"uv": [6.125, 8.25, 5.75, 8.625], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "translation": [0.25, -0.25, 1], + "scale": [0.25, 0.25, 0.25] + }, + "thirdperson_lefthand": { + "translation": [0.25, -0.5, 1], + "scale": [0.25, 0.25, 0.25] + }, + "firstperson_righthand": { + "rotation": [0, -90, 25], + "translation": [1.13, 3.2, 1.13], + "scale": [0.25, 0.25, 0.25] + }, + "firstperson_lefthand": { + "rotation": [0, -90, 25], + "translation": [1.13, 3.2, 1.13], + "scale": [0.25, 0.25, 0.25] + }, + "ground": { + "rotation": [-180, 0, 0], + "translation": [0, 0.75, 0.5], + "scale": [0.19, 0.19, 0.19] + }, + "gui": { + "rotation": [0, -113, 0], + "translation": [0, -2.25, 0], + "scale": [0.33, 0.33, 0.33] + }, + "head": { + "translation": [0, -4.5, 0.75] + }, + "fixed": { + "translation": [0, -3, 2], + "scale": [0.5, 0.5, 0.5] + }, + "on_shelf": { + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "c_lemon", + "origin": [8, 8, 8], + "color": 0, + "children": [] + }, + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/acesbs/sounds.json b/src/main/resources/assets/acesbs/sounds.json index 84d281e..4c34440 100644 --- a/src/main/resources/assets/acesbs/sounds.json +++ b/src/main/resources/assets/acesbs/sounds.json @@ -5,6 +5,36 @@ "acesbs:lizard" ] }, + "fart": { + "subtitle": "sounds.acesbs.fart", + "sounds": [ + "acesbs:fart" + ] + }, + "grumble": { + "subtitle": "sounds.acesbs.grumble", + "sounds": [ + "acesbs:grumble" + ] + }, + "holy_s": { + "subtitle": "sounds.acesbs.holy", + "sounds": [ + "acesbs:holy_s" + ] + }, + "holy": { + "subtitle": "sounds.acesbs.holy", + "sounds": [ + "acesbs:holy" + ] + }, + "bricked_up": { + "subtitle": "sounds.acesbs.holy", + "sounds": [ + "acesbs:bricked_up" + ] + }, "crab_rave": { "subtitle": "sounds.acesbs.crab_rave", "sounds": [ diff --git a/src/main/resources/assets/acesbs/sounds/bricked_up.ogg b/src/main/resources/assets/acesbs/sounds/bricked_up.ogg new file mode 100644 index 0000000..2b7cbda Binary files /dev/null and b/src/main/resources/assets/acesbs/sounds/bricked_up.ogg differ diff --git a/src/main/resources/assets/acesbs/sounds/fart.ogg b/src/main/resources/assets/acesbs/sounds/fart.ogg new file mode 100644 index 0000000..723eb08 Binary files /dev/null and b/src/main/resources/assets/acesbs/sounds/fart.ogg differ diff --git a/src/main/resources/assets/acesbs/sounds/grumble.ogg b/src/main/resources/assets/acesbs/sounds/grumble.ogg new file mode 100644 index 0000000..233c0d3 Binary files /dev/null and b/src/main/resources/assets/acesbs/sounds/grumble.ogg differ diff --git a/src/main/resources/assets/acesbs/sounds/holy.ogg b/src/main/resources/assets/acesbs/sounds/holy.ogg new file mode 100644 index 0000000..3b7e03c Binary files /dev/null and b/src/main/resources/assets/acesbs/sounds/holy.ogg differ diff --git a/src/main/resources/assets/acesbs/sounds/holy_s.ogg b/src/main/resources/assets/acesbs/sounds/holy_s.ogg new file mode 100644 index 0000000..27605fa Binary files /dev/null and b/src/main/resources/assets/acesbs/sounds/holy_s.ogg differ diff --git a/src/main/resources/assets/acesbs/textures/entity/combustible_lemon/combustible_lemon.png b/src/main/resources/assets/acesbs/textures/entity/combustible_lemon/combustible_lemon.png new file mode 100644 index 0000000..efa6d2c Binary files /dev/null and b/src/main/resources/assets/acesbs/textures/entity/combustible_lemon/combustible_lemon.png differ diff --git a/src/main/resources/assets/acesbs/textures/item/bricked_up.png b/src/main/resources/assets/acesbs/textures/item/bricked_up.png new file mode 100644 index 0000000..73d142b Binary files /dev/null and b/src/main/resources/assets/acesbs/textures/item/bricked_up.png differ diff --git a/src/main/resources/assets/acesbs/textures/item/combustible_lemon.png b/src/main/resources/assets/acesbs/textures/item/combustible_lemon.png new file mode 100644 index 0000000..92c7408 Binary files /dev/null and b/src/main/resources/assets/acesbs/textures/item/combustible_lemon.png differ diff --git a/src/main/resources/assets/acesbs/textures/mob_effect/bricked_up.png b/src/main/resources/assets/acesbs/textures/mob_effect/bricked_up.png new file mode 100644 index 0000000..2fd3af8 Binary files /dev/null and b/src/main/resources/assets/acesbs/textures/mob_effect/bricked_up.png differ diff --git a/src/main/resources/assets/acesbs/textures/mob_effect/infernal_fire.png b/src/main/resources/assets/acesbs/textures/mob_effect/infernal_fire.png index 90a8345..9026ed5 100644 Binary files a/src/main/resources/assets/acesbs/textures/mob_effect/infernal_fire.png and b/src/main/resources/assets/acesbs/textures/mob_effect/infernal_fire.png differ diff --git a/src/main/resources/assets/acesbs/textures/mob_effect/old/infernal_fire.png b/src/main/resources/assets/acesbs/textures/mob_effect/old/infernal_fire.png new file mode 100644 index 0000000..90a8345 Binary files /dev/null and b/src/main/resources/assets/acesbs/textures/mob_effect/old/infernal_fire.png differ