From 5a57e8341acfed768580ec4392637171b5d37876 Mon Sep 17 00:00:00 2001 From: Electroblob77 <35599699+Electroblob77@users.noreply.github.com> Date: Fri, 22 May 2020 12:49:45 +0100 Subject: [PATCH] Add icarus medallion and void opal --- .../client/WizardryClientEventHandler.java | 9 +++ .../wizardry/client/model/WizardryModels.java | 2 + .../entity/construct/EntityBlackHole.java | 66 +++++++++++++++--- .../wizardry/registry/WizardryItems.java | 4 ++ .../wizardry/registry/WizardrySounds.java | 2 + .../assets/ebwizardry/lang/en_gb.lang | 4 ++ .../assets/ebwizardry/lang/en_us.lang | 4 ++ .../models/item/charm_black_hole.json | 6 ++ .../models/item/charm_move_speed.json | 6 ++ .../resources/assets/ebwizardry/sounds.json | 1 + .../textures/items/charm_black_hole.png | Bin 0 -> 352 bytes .../textures/items/charm_move_speed.png | Bin 0 -> 6393 bytes 12 files changed, 95 insertions(+), 9 deletions(-) create mode 100644 src/main/resources/assets/ebwizardry/models/item/charm_black_hole.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/charm_move_speed.json create mode 100644 src/main/resources/assets/ebwizardry/textures/items/charm_black_hole.png create mode 100644 src/main/resources/assets/ebwizardry/textures/items/charm_move_speed.png diff --git a/src/main/java/electroblob/wizardry/client/WizardryClientEventHandler.java b/src/main/java/electroblob/wizardry/client/WizardryClientEventHandler.java index 6bc23ec7..2320336b 100644 --- a/src/main/java/electroblob/wizardry/client/WizardryClientEventHandler.java +++ b/src/main/java/electroblob/wizardry/client/WizardryClientEventHandler.java @@ -9,6 +9,7 @@ import electroblob.wizardry.data.WizardData; import electroblob.wizardry.item.ISpellCastingItem; import electroblob.wizardry.item.ItemArtefact; import electroblob.wizardry.item.ItemSpectralBow; +import electroblob.wizardry.item.ItemWand; import electroblob.wizardry.potion.PotionSlowTime; import electroblob.wizardry.registry.Spells; import electroblob.wizardry.registry.WizardryItems; @@ -173,6 +174,14 @@ public final class WizardryClientEventHandler { event.getMovementInput().jump = false; event.getMovementInput().sneak = false; } + + if(ItemArtefact.isArtefactActive(event.getEntityPlayer(), WizardryItems.charm_move_speed) + && event.getEntityPlayer().isHandActive() + && event.getEntityPlayer().getActiveItemStack().getItem() instanceof ItemWand){ + // Normally speed is set to 20% when using items, this makes it 80% + event.getMovementInput().moveStrafe *= 4; + event.getMovementInput().moveForward *= 4; + } } @SubscribeEvent diff --git a/src/main/java/electroblob/wizardry/client/model/WizardryModels.java b/src/main/java/electroblob/wizardry/client/model/WizardryModels.java index 84a3aa9f..f89c73d5 100644 --- a/src/main/java/electroblob/wizardry/client/model/WizardryModels.java +++ b/src/main/java/electroblob/wizardry/client/model/WizardryModels.java @@ -279,6 +279,7 @@ public final class WizardryModels { registerItemModel(WizardryItems.charm_haggler); registerItemModel(WizardryItems.charm_experience_tome); + registerItemModel(WizardryItems.charm_move_speed); registerItemModel(WizardryItems.charm_auto_smelt); registerItemModel(WizardryItems.charm_lava_walking); registerItemModel(WizardryItems.charm_storm); @@ -291,6 +292,7 @@ public final class WizardryModels { registerItemModel(WizardryItems.charm_stop_time); registerItemModel(WizardryItems.charm_light); registerItemModel(WizardryItems.charm_transportation); + registerItemModel(WizardryItems.charm_black_hole); registerItemModel(WizardryItems.charm_feeding); } diff --git a/src/main/java/electroblob/wizardry/entity/construct/EntityBlackHole.java b/src/main/java/electroblob/wizardry/entity/construct/EntityBlackHole.java index 378c9066..8f7075f0 100644 --- a/src/main/java/electroblob/wizardry/entity/construct/EntityBlackHole.java +++ b/src/main/java/electroblob/wizardry/entity/construct/EntityBlackHole.java @@ -1,19 +1,25 @@ package electroblob.wizardry.entity.construct; import electroblob.wizardry.Wizardry; +import electroblob.wizardry.entity.EntityLevitatingBlock; import electroblob.wizardry.item.ItemArtefact; import electroblob.wizardry.registry.WizardryItems; import electroblob.wizardry.registry.WizardrySounds; import electroblob.wizardry.util.MagicDamage; import electroblob.wizardry.util.MagicDamage.DamageType; import electroblob.wizardry.util.WizardryUtilities; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityFallingBlock; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.play.server.SPacketEntityVelocity; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -82,10 +88,42 @@ public class EntityBlackHole extends EntityMagicConstruct { if(!this.world.isRemote){ - List targets = WizardryUtilities.getEntitiesWithinRadius(6.0d, this.posX, this.posY, - this.posZ, this.world); + double radius = 6; // TODO: Support for spell properties and modifiers - for(EntityLivingBase target : targets){ + boolean suckInBlocks = getCaster() instanceof EntityPlayer && WizardryUtilities.canDamageBlocks(getCaster(), world) + && ItemArtefact.isArtefactActive((EntityPlayer)getCaster(), WizardryItems.charm_black_hole); + + if(suckInBlocks){ + + List sphere = WizardryUtilities.getBlockSphere(new BlockPos(this), radius); + + for(BlockPos pos : sphere){ + + if(rand.nextInt(Math.max(1, (int)this.getDistanceSq(pos) * 3)) == 0){ + + if(!WizardryUtilities.isBlockUnbreakable(world, pos) && !world.isAirBlock(pos) + && world.isBlockNormalCube(pos, false)){ + // Checks that the block above is not solid, since this causes the falling block to vanish. +// && !world.isBlockNormalCube(pos.up(), false)){ + + EntityFallingBlock fallingBlock = new EntityLevitatingBlock(world, pos.getX() + 0.5, + pos.getY() + 0.5, pos.getZ() + 0.5, world.getBlockState(pos)); +// fallingBlock.noClip = true; + fallingBlock.fallTime = 1; // Prevent it from trying to delete the block itself + world.spawnEntity(fallingBlock); + world.setBlockToAir(pos); + } + } + } + + } + + List targets = WizardryUtilities.getEntitiesWithinRadius(radius, this.posX, this.posY, + this.posZ, this.world, Entity.class); + + targets.removeIf(t -> !(t instanceof EntityLivingBase || (suckInBlocks && t instanceof EntityFallingBlock))); + + for(Entity target : targets){ if(this.isValidTarget(target)){ @@ -94,6 +132,7 @@ public class EntityBlackHole extends EntityMagicConstruct { || ItemArtefact.isArtefactActive((EntityPlayer)target, WizardryItems.amulet_anchoring)))){ WizardryUtilities.undoGravity(target); + if(target instanceof EntityLevitatingBlock) ((EntityLevitatingBlock)target).suspend(); // Sucks the target in if(this.posX > target.posX && target.motionX < 1){ @@ -121,13 +160,22 @@ public class EntityBlackHole extends EntityMagicConstruct { } if(this.getDistance(target) <= 2){ - // Damages the target if it is close enough - if(this.getCaster() != null){ - target.attackEntityFrom( - MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.MAGIC), - 2 * damageMultiplier); + // Damages the target if it is close enough, or destroys it if it's a block + if(target instanceof EntityFallingBlock){ + target.playSound(WizardrySounds.ENTITY_BLACK_HOLE_BREAK_BLOCK, 0.5f, + (rand.nextFloat() - rand.nextFloat()) * 0.2f + 1); + IBlockState state = ((EntityFallingBlock)target).getBlock(); + if(state != null) world.playEvent(2001, new BlockPos(target), Block.getStateId(state)); + target.setDead(); + }else{ - target.attackEntityFrom(DamageSource.MAGIC, 2 * damageMultiplier); + if(this.getCaster() != null){ + target.attackEntityFrom( + MagicDamage.causeIndirectMagicDamage(this, getCaster(), DamageType.MAGIC), + 2 * damageMultiplier); + }else{ + target.attackEntityFrom(DamageSource.MAGIC, 2 * damageMultiplier); + } } } } diff --git a/src/main/java/electroblob/wizardry/registry/WizardryItems.java b/src/main/java/electroblob/wizardry/registry/WizardryItems.java index b33d4577..9754c6df 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardryItems.java +++ b/src/main/java/electroblob/wizardry/registry/WizardryItems.java @@ -262,6 +262,7 @@ public final class WizardryItems { public static final Item charm_haggler = placeholder(); public static final Item charm_experience_tome = placeholder(); + public static final Item charm_move_speed = placeholder(); public static final Item charm_auto_smelt = placeholder(); public static final Item charm_lava_walking = placeholder(); public static final Item charm_storm = placeholder(); @@ -274,6 +275,7 @@ public final class WizardryItems { public static final Item charm_stop_time = placeholder(); public static final Item charm_light = placeholder(); public static final Item charm_transportation = placeholder(); + public static final Item charm_black_hole = placeholder(); public static final Item charm_feeding = placeholder(); private static final Map, Item> WAND_MAP = new HashMap<>(); @@ -612,6 +614,7 @@ public final class WizardryItems { registerItem(registry, "charm_haggler", new ItemArtefact(EnumRarity.RARE, ItemArtefact.Type.CHARM)); registerItem(registry, "charm_experience_tome", new ItemArtefact(EnumRarity.EPIC, ItemArtefact.Type.CHARM)); + registerItem(registry, "charm_move_speed", new ItemArtefact(EnumRarity.RARE, ItemArtefact.Type.CHARM)); registerItem(registry, "charm_auto_smelt", new ItemArtefact(EnumRarity.RARE, ItemArtefact.Type.CHARM)); registerItem(registry, "charm_lava_walking", new ItemArtefact(EnumRarity.EPIC, ItemArtefact.Type.CHARM)); registerItem(registry, "charm_storm", new ItemArtefact(EnumRarity.RARE, ItemArtefact.Type.CHARM)); @@ -624,6 +627,7 @@ public final class WizardryItems { registerItem(registry, "charm_stop_time", new ItemArtefact(EnumRarity.EPIC, ItemArtefact.Type.CHARM)); registerItem(registry, "charm_light", new ItemArtefact(EnumRarity.RARE, ItemArtefact.Type.CHARM)); registerItem(registry, "charm_transportation", new ItemArtefact(EnumRarity.RARE, ItemArtefact.Type.CHARM)); + registerItem(registry, "charm_black_hole", new ItemArtefact(EnumRarity.EPIC, ItemArtefact.Type.CHARM)); registerItem(registry, "charm_feeding", new ItemArtefact(EnumRarity.UNCOMMON, ItemArtefact.Type.CHARM)); } diff --git a/src/main/java/electroblob/wizardry/registry/WizardrySounds.java b/src/main/java/electroblob/wizardry/registry/WizardrySounds.java index adf6eba4..240343dd 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardrySounds.java +++ b/src/main/java/electroblob/wizardry/registry/WizardrySounds.java @@ -41,6 +41,7 @@ public final class WizardrySounds { public static final SoundEvent ENTITY_BLACK_HOLE_AMBIENT = createSound("entity.black_hole.ambient"); public static final SoundEvent ENTITY_BLACK_HOLE_VANISH = createSound("entity.black_hole.vanish"); + public static final SoundEvent ENTITY_BLACK_HOLE_BREAK_BLOCK = createSound("entity.black_hole.break_block"); public static final SoundEvent ENTITY_BUBBLE_POP = createSound("entity.bubble.pop"); public static final SoundEvent ENTITY_BLIZZARD_AMBIENT = createSound("entity.blizzard.ambient"); public static final SoundEvent ENTITY_DECAY_AMBIENT = createSound("entity.decay.ambient"); @@ -176,6 +177,7 @@ public final class WizardrySounds { event.getRegistry().register(ENTITY_BLACK_HOLE_AMBIENT); event.getRegistry().register(ENTITY_BLACK_HOLE_VANISH); + event.getRegistry().register(ENTITY_BLACK_HOLE_BREAK_BLOCK); event.getRegistry().register(ENTITY_BUBBLE_POP); event.getRegistry().register(ENTITY_BLIZZARD_AMBIENT); event.getRegistry().register(ENTITY_DECAY_AMBIENT); diff --git a/src/main/resources/assets/ebwizardry/lang/en_gb.lang b/src/main/resources/assets/ebwizardry/lang/en_gb.lang index d8982789..27b89588 100644 --- a/src/main/resources/assets/ebwizardry/lang/en_gb.lang +++ b/src/main/resources/assets/ebwizardry/lang/en_gb.lang @@ -362,6 +362,8 @@ item.ebwizardry\:charm_haggler.name=Haggler's Sign item.ebwizardry\:charm_haggler.desc=Wizards are guaranteed to offer a new trade every time you trade with them item.ebwizardry\:charm_experience_tome.name=Tome of the Diligent item.ebwizardry\:charm_experience_tome.desc=Increases the rate at which wands gain progression by 50%% +item.ebwizardry\:charm_move_speed.name=Icarus Medallion +item.ebwizardry\:charm_move_speed.desc=Move at near-full speed when casting spells item.ebwizardry\:charm_auto_smelt.name=Metallurgist's Mark item.ebwizardry\:charm_auto_smelt.desc=Pocket furnace triggers automatically when bound to a wand on your hotbar item.ebwizardry\:charm_lava_walking.name=Nether Ice Core @@ -386,6 +388,8 @@ item.ebwizardry\:charm_light.name=Elevinia's Everburning Lantern item.ebwizardry\:charm_light.desc=Conjured light sources last forever and may be dispelled by right-clicking with a wand item.ebwizardry\:charm_transportation.name=Ancient Compass item.ebwizardry\:charm_transportation.desc=Up to four stone circles may be remembered and selected from when using transportation +item.ebwizardry\:charm_black_hole.name=Void Opal +item.ebwizardry\:charm_black_hole.desc=Black hole sucks in and destroys blocks item.ebwizardry\:charm_feeding.name=Bottomless Provisions item.ebwizardry\:charm_feeding.desc=Replenish hunger and satiety trigger automatically when bound to a wand on your hotbar diff --git a/src/main/resources/assets/ebwizardry/lang/en_us.lang b/src/main/resources/assets/ebwizardry/lang/en_us.lang index 5c21e185..c50099d1 100644 --- a/src/main/resources/assets/ebwizardry/lang/en_us.lang +++ b/src/main/resources/assets/ebwizardry/lang/en_us.lang @@ -362,6 +362,8 @@ item.ebwizardry\:charm_haggler.name=Haggler's Sign item.ebwizardry\:charm_haggler.desc=Wizards are guaranteed to offer a new trade every time you trade with them item.ebwizardry\:charm_experience_tome.name=Tome of the Diligent item.ebwizardry\:charm_experience_tome.desc=Increases the rate at which wands gain progression by 50%% +item.ebwizardry\:charm_move_speed.name=Icarus Medallion +item.ebwizardry\:charm_move_speed.desc=Move at near-full speed when casting spells item.ebwizardry\:charm_auto_smelt.name=Metallurgist's Mark item.ebwizardry\:charm_auto_smelt.desc=Pocket furnace triggers automatically when bound to a wand on your hotbar item.ebwizardry\:charm_lava_walking.name=Nether Ice Core @@ -386,6 +388,8 @@ item.ebwizardry\:charm_light.name=Elevinia's Everburning Lantern item.ebwizardry\:charm_light.desc=Conjured light sources last forever and may be dispelled by right-clicking with a wand item.ebwizardry\:charm_transportation.name=Ancient Compass item.ebwizardry\:charm_transportation.desc=Up to four stone circles may be remembered and selected from when using transportation +item.ebwizardry\:charm_black_hole.name=Void Opal +item.ebwizardry\:charm_black_hole.desc=Black hole sucks in and destroys blocks item.ebwizardry\:charm_feeding.name=Bottomless Provisions item.ebwizardry\:charm_feeding.desc=Replenish hunger and satiety trigger automatically when bound to a wand on your hotbar diff --git a/src/main/resources/assets/ebwizardry/models/item/charm_black_hole.json b/src/main/resources/assets/ebwizardry/models/item/charm_black_hole.json new file mode 100644 index 00000000..f416b151 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/charm_black_hole.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "ebwizardry:items/charm_black_hole" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/item/charm_move_speed.json b/src/main/resources/assets/ebwizardry/models/item/charm_move_speed.json new file mode 100644 index 00000000..71f461b1 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/charm_move_speed.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "ebwizardry:items/charm_move_speed" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/sounds.json b/src/main/resources/assets/ebwizardry/sounds.json index 16307596..e03d769d 100644 --- a/src/main/resources/assets/ebwizardry/sounds.json +++ b/src/main/resources/assets/ebwizardry/sounds.json @@ -15,6 +15,7 @@ "entity.black_hole.ambient": {"category": "spells", "sounds": ["portal/portal"]}, "entity.black_hole.vanish": {"category": "spells", "sounds": ["portal/trigger"]}, + "entity.black_hole.break_block": {"category": "spells", "sounds": ["mob/zombie/woodbreak"]}, "entity.bubble.pop": {"category": "spells", "sounds": ["random/pop"]}, "entity.blizzard.ambient": {"category": "spells", "sounds": ["ebwizardry:wind"]}, "entity.decay.ambient": {"category": "spells", "sounds": ["liquid/lava"]}, diff --git a/src/main/resources/assets/ebwizardry/textures/items/charm_black_hole.png b/src/main/resources/assets/ebwizardry/textures/items/charm_black_hole.png new file mode 100644 index 0000000000000000000000000000000000000000..ee7193cceaa3022a0802b4565281aad68fdd45b6 GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rl|Tw+*}s=lq9 zfq{Xuz$3Dlfk96hgc&QA+LtjfFtC?+`ns||VHFi;6Fj~2Wd;KSgJg+oM2T~LZfa;qq?2ZkN$rrjiN;kcHa6O81N~x<`qk{XQ4GZJs&EIQlH%`YF{f5&cMLH;OXk;vd$@?2>>u5 BfDixx literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/items/charm_move_speed.png b/src/main/resources/assets/ebwizardry/textures/items/charm_move_speed.png new file mode 100644 index 0000000000000000000000000000000000000000..2c746930b950e6e56b71fe6dbc062b8c2f676d63 GIT binary patch literal 6393 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 literal 0 HcmV?d00001