Skip to content

Commit

Permalink
Fix Acceleration spell not working on blocks (Closes #81)
Browse files Browse the repository at this point in the history
Specify the one who casted the spell during spells that can harm mobs (Hopefully fixing #69)
Improve component code
  • Loading branch information
Mrbysco committed Sep 14, 2022
1 parent 1441570 commit 149c13e
Show file tree
Hide file tree
Showing 32 changed files with 455 additions and 422 deletions.
6 changes: 3 additions & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ dist_folder=c:/temp

# Base info
mc_version=1.19.2
forge_version=43.1.1
forge_version=43.1.25
mcp_channel=official
mcp_mappings=1.19.2

# Version
version=1.1.29
version=1.1.30

# Dependencies
jei_version=11.2.0.254
jei_version=11.3.0.262
crafttweaker_version=9.1.153
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// 1.19 2022-07-11T16:44:38.0033609 Tags for minecraft:item
// 1.19.2 2022-09-14T19:54:21.5547426 Tags for minecraft:item
35eac428592b750d11c1cf1de4a1bd3514bc10f6 data/rootsclassic/tags/items/barks.json
9dba0a2956e1c0e115cc8079755a0ee102f301ab data/rootsclassic/tags/items/barks/acacia.json
a745da3593566a775d84f3d68de5334d9cf85cc3 data/rootsclassic/tags/items/barks/birch.json
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// 1.19 2022-07-11T16:44:38.0038604 LootTables
// 1.19.2 2022-09-14T19:54:21.5537404 LootTables
feaea696733861680ddd6a8c13bc39181f5c38e6 data/rootsclassic/loot_tables/blocks/accelerator_standing_stone.json
b88da4a6f1385f9855e3360bf95a78f7962b081b data/rootsclassic/loot_tables/blocks/aesthetic_standing_stone.json
07f4ac0225fa88692f19d233c4b7a5da3baed0e7 data/rootsclassic/loot_tables/blocks/altar.json
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
// 1.19 2022-07-11T16:44:38.0048621 Tags for minecraft:block
// 1.19.2 2022-09-14T19:54:21.5542413 Tags for minecraft:block
35133e95f1c8fdd7a1c21afcc231fc0bffefb9a8 data/rootsclassic/tags/blocks/needs_engraved_tool.json
35133e95f1c8fdd7a1c21afcc231fc0bffefb9a8 data/rootsclassic/tags/blocks/needs_living_tool.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// 1.19 2022-07-11T16:44:38.0053616 Recipes
// 1.19.2 2022-09-14T19:54:21.5527402 Recipes
7858dcd5835f12c77145d994f8c9481a05aeb4f0 data/rootsclassic/advancements/recipes/misc/ender_pearl.json
5954dc5339c9189cc68a6d19446c0aefa1a327b3 data/rootsclassic/advancements/recipes/rootsclassic/altar.json
772fd3189ed43afc51d0eb37946ed7336868d741 data/rootsclassic/advancements/recipes/rootsclassic/attuned_standing_stone.json
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
// 1.19 2022-07-11T16:44:38.0018596 Global Loot Modifiers : rootsclassic
// 1.19.2 2022-09-14T19:54:21.5512384 Global Loot Modifiers : rootsclassic
9bb4046fdf6a64fd12d95106257955ca152c2607 data/forge/loot_modifiers/global_loot_modifiers.json
53dc65d8312b4587cc5fbb24ed94db2d56434521 data/rootsclassic/loot_modifiers/rootsclassic_drops.json
Original file line number Diff line number Diff line change
Expand Up @@ -140,10 +140,8 @@ public void setChestRotation() {
this.body.y = body.y - 1;
this.rightArm.x = rightArm.x + 5;
this.rightArm.y = rightArm.y - 1;
this.rightArm.z = rightArm.z;
this.leftArm.x = leftArm.x - 5;
this.leftArm.y = leftArm.y - 1;
this.leftArm.z = leftArm.z;
setRotation(body, body.xRot, body.yRot, body.zRot);
setRotation(rightArm, rightArm.xRot, rightArm.yRot, rightArm.zRot);
setRotation(leftArm, leftArm.xRot, leftArm.yRot, leftArm.zRot);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package elucent.rootsclassic.component.components;

import elucent.rootsclassic.Const;
import elucent.rootsclassic.component.ComponentBase;
import elucent.rootsclassic.component.EnumCastType;
import elucent.rootsclassic.config.RootsConfig;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.damagesource.EntityDamageSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
Expand All @@ -20,22 +22,26 @@ public ComponentAllium() {
}

@Override
public void doEffect(Level level, Entity caster, EnumCastType type, double x, double y, double z, double potency, double duration, double size) {
if (type == EnumCastType.SPELL) {
public void doEffect(Level level, Entity casterEntity, EnumCastType type, double x, double y, double z, double potency, double duration, double size) {
if (type == EnumCastType.SPELL && casterEntity instanceof LivingEntity caster) {
// int damageDealt = 0;
ArrayList<LivingEntity> targets = (ArrayList<LivingEntity>) level.getEntitiesOfClass(LivingEntity.class, new AABB(x - size, y - size, z - size, x + size, y + size, z + size));
targets.removeIf(target -> target.getUUID() == casterEntity.getUUID());
for (LivingEntity target : targets) {
if (target.getUUID() != caster.getUUID()) {
if (target instanceof Player && RootsConfig.COMMON.disablePVP.get()) {
} else {
// damageDealt += (int) (4 + 2 * potency);
target.hurt(DamageSource.GENERIC, (int) (5 + 2 * potency));
target.setLastHurtMob(caster);
target.setLastHurtByMob((LivingEntity) caster);
target.getPersistentData().putDouble("RMOD_vuln", 1.0 + 0.5 * potency);
}
if (target instanceof Player && RootsConfig.COMMON.disablePVP.get()) {
//no pvp allowed
} else {
// damageDealt += (int) (4 + 2 * potency);
target.hurt(spellAttack(caster), (int) (5 + 2 * potency));
target.setLastHurtMob(caster);
target.setLastHurtByMob((LivingEntity) caster);
target.getPersistentData().putDouble("RMOD_vuln", 1.0 + 0.5 * potency);
}
}
}
}

public static DamageSource spellAttack(LivingEntity attacker) {
return new EntityDamageSource(Const.MODID + ".generic", attacker).bypassArmor();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,38 +19,36 @@ public ComponentApple() {

@Override
public void doEffect(Level level, Entity caster, EnumCastType type, double x, double y, double z, double potency, double duration, double size) {
if (type == EnumCastType.SPELL) {
if (caster instanceof Player player) {
ArrayList<MobEffectInstance> effects = new ArrayList<>(player.getActiveEffects());
player.removeAllEffects();
for (MobEffectInstance effect : effects) {
if (effect.getEffect().getDescriptionId().equals("Soul Fray")) { //TODO: Check if Blood magic uses this name still
player.addEffect(effect);
}
if (effect.getEffect() == MobEffects.MOVEMENT_SLOWDOWN) {
player.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, effect.getDuration(), effect.getAmplifier() + (int) potency));
}
if (effect.getEffect() == MobEffects.DIG_SLOWDOWN) {
player.addEffect(new MobEffectInstance(MobEffects.DIG_SPEED, effect.getDuration(), effect.getAmplifier() + (int) potency));
}
if (effect.getEffect() == MobEffects.POISON) {
player.addEffect(new MobEffectInstance(MobEffects.REGENERATION, effect.getDuration(), effect.getAmplifier() + (int) potency));
}
if (effect.getEffect() == MobEffects.WITHER) {
player.addEffect(new MobEffectInstance(MobEffects.REGENERATION, effect.getDuration(), effect.getAmplifier() + (int) potency));
}
if (effect.getEffect() == MobEffects.BLINDNESS) {
player.addEffect(new MobEffectInstance(MobEffects.NIGHT_VISION, effect.getDuration(), effect.getAmplifier() + (int) potency));
}
if (effect.getEffect() == MobEffects.CONFUSION) {
player.addEffect(new MobEffectInstance(MobEffects.NIGHT_VISION, effect.getDuration(), effect.getAmplifier() + (int) potency));
}
if (effect.getEffect() == MobEffects.HUNGER) {
player.addEffect(new MobEffectInstance(MobEffects.SATURATION, effect.getDuration(), effect.getAmplifier() + (int) potency));
}
if (effect.getEffect() == MobEffects.WEAKNESS) {
player.addEffect(new MobEffectInstance(MobEffects.DAMAGE_BOOST, effect.getDuration(), effect.getAmplifier() + (int) potency));
}
if (type == EnumCastType.SPELL && caster instanceof Player player) {
ArrayList<MobEffectInstance> effects = new ArrayList<>(player.getActiveEffects());
player.removeAllEffects();
for (MobEffectInstance effect : effects) {
if (effect.getEffect().getDescriptionId().equals("Soul Fray")) { //TODO: Check if Blood magic uses this name still
player.addEffect(effect);
}
if (effect.getEffect() == MobEffects.MOVEMENT_SLOWDOWN) {
player.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, effect.getDuration(), effect.getAmplifier() + (int) potency));
}
if (effect.getEffect() == MobEffects.DIG_SLOWDOWN) {
player.addEffect(new MobEffectInstance(MobEffects.DIG_SPEED, effect.getDuration(), effect.getAmplifier() + (int) potency));
}
if (effect.getEffect() == MobEffects.POISON) {
player.addEffect(new MobEffectInstance(MobEffects.REGENERATION, effect.getDuration(), effect.getAmplifier() + (int) potency));
}
if (effect.getEffect() == MobEffects.WITHER) {
player.addEffect(new MobEffectInstance(MobEffects.REGENERATION, effect.getDuration(), effect.getAmplifier() + (int) potency));
}
if (effect.getEffect() == MobEffects.BLINDNESS) {
player.addEffect(new MobEffectInstance(MobEffects.NIGHT_VISION, effect.getDuration(), effect.getAmplifier() + (int) potency));
}
if (effect.getEffect() == MobEffects.CONFUSION) {
player.addEffect(new MobEffectInstance(MobEffects.NIGHT_VISION, effect.getDuration(), effect.getAmplifier() + (int) potency));
}
if (effect.getEffect() == MobEffects.HUNGER) {
player.addEffect(new MobEffectInstance(MobEffects.SATURATION, effect.getDuration(), effect.getAmplifier() + (int) potency));
}
if (effect.getEffect() == MobEffects.WEAKNESS) {
player.addEffect(new MobEffectInstance(MobEffects.DAMAGE_BOOST, effect.getDuration(), effect.getAmplifier() + (int) potency));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import elucent.rootsclassic.util.RootsUtil;
import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.Tier;
import net.minecraft.world.item.Tiers;
import net.minecraft.world.level.Level;
Expand Down Expand Up @@ -37,29 +37,27 @@ public void destroyBlockSafe(Level levelAccessor, BlockPos pos, int potency) {
}

@Override
public void doEffect(Level level, Entity caster, EnumCastType type, double x, double y, double z, double potency, double duration, double size) {
if (type == EnumCastType.SPELL) {
if (caster instanceof Player && !level.isClientSide) {
BlockPos pos = RootsUtil.getRayTrace(level, (Player) caster, 4 + 2 * (int) size);
destroyBlockSafe(level, pos, (int) potency);
if (level.random.nextBoolean()) {
destroyBlockSafe(level, pos.above(), (int) potency);
}
if (level.random.nextBoolean()) {
destroyBlockSafe(level, pos.below(), (int) potency);
}
if (level.random.nextBoolean()) {
destroyBlockSafe(level, pos.east(), (int) potency);
}
if (level.random.nextBoolean()) {
destroyBlockSafe(level, pos.west(), (int) potency);
}
if (level.random.nextBoolean()) {
destroyBlockSafe(level, pos.north(), (int) potency);
}
if (level.random.nextBoolean()) {
destroyBlockSafe(level, pos.south(), (int) potency);
}
public void doEffect(Level level, Entity casterEntity, EnumCastType type, double x, double y, double z, double potency, double duration, double size) {
if (type == EnumCastType.SPELL && casterEntity instanceof LivingEntity caster && !level.isClientSide) {
BlockPos pos = RootsUtil.getRayTrace(level, caster, 4 + 2 * (int) size);
destroyBlockSafe(level, pos, (int) potency);
if (level.random.nextBoolean()) {
destroyBlockSafe(level, pos.above(), (int) potency);
}
if (level.random.nextBoolean()) {
destroyBlockSafe(level, pos.below(), (int) potency);
}
if (level.random.nextBoolean()) {
destroyBlockSafe(level, pos.east(), (int) potency);
}
if (level.random.nextBoolean()) {
destroyBlockSafe(level, pos.west(), (int) potency);
}
if (level.random.nextBoolean()) {
destroyBlockSafe(level, pos.north(), (int) potency);
}
if (level.random.nextBoolean()) {
destroyBlockSafe(level, pos.south(), (int) potency);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,67 +23,65 @@ public ComponentBlueOrchid() {
}

@Override
public void doEffect(Level level, Entity caster, EnumCastType type, double x, double y, double z, double potency, double duration, double size) {
if (type == EnumCastType.SPELL) {
if (caster instanceof Player && !level.isClientSide) {
BlockPos pos = RootsUtil.getRayTrace(level, (Player) caster, 4 + 2 * (int) size);
BlockState state = level.getBlockState(pos);
if (state.is(BlockTags.BASE_STONE_OVERWORLD) || state.is(BlockTags.DIRT) || state.is(Blocks.GRASS_BLOCK) || state.is(BlockTags.SAND) || state.is(Blocks.GRAVEL)) {
if (state.is(Blocks.GRASS_BLOCK)) {
state = Blocks.DIRT.defaultBlockState();
level.setBlockAndUpdate(pos, state);
}
level.setBlockAndUpdate(pos.above(), state);
ArrayList<LivingEntity> targets = (ArrayList<LivingEntity>) level.getEntitiesOfClass(LivingEntity.class, new AABB(pos.getX() - size, pos.getY() - size, pos.getZ() - size, pos.getX() + size, pos.getY() + size, pos.getZ() + size));
for (LivingEntity target : targets) {
if (target.getUUID() != caster.getUUID()) {
target.push(0, 3, 0);
Vec3 motion = target.getDeltaMovement();
target.setDeltaMovement(motion.x, 0.65 + level.random.nextDouble() + 0.25 * potency, motion.z);
if (target instanceof Player) {
((Player) target).hurtMarked = true;
}
}
}
if (level.random.nextInt(3) == 0) {
level.setBlockAndUpdate(pos.above().west().north(), state);
}
if (level.random.nextInt(3) == 0) {
level.setBlockAndUpdate(pos.above().east().south(), state);
}
if (level.random.nextInt(3) == 0) {
level.setBlockAndUpdate(pos.above().north().east(), state);
}
if (level.random.nextInt(3) == 0) {
level.setBlockAndUpdate(pos.above().south().west(), state);
}
if (level.random.nextInt(1) == 0) {
level.setBlockAndUpdate(pos.above().west(), state);
}
if (level.random.nextInt(1) == 0) {
level.setBlockAndUpdate(pos.above().east(), state);
}
if (level.random.nextInt(1) == 0) {
level.setBlockAndUpdate(pos.above().north(), state);
}
if (level.random.nextInt(1) == 0) {
level.setBlockAndUpdate(pos.above().south(), state);
}
level.setBlockAndUpdate(pos.above().above(), state);
if (level.random.nextInt(3) == 0) {
level.setBlockAndUpdate(pos.above().above().west(), state);
}
if (level.random.nextInt(3) == 0) {
level.setBlockAndUpdate(pos.above().above().east(), state);
}
if (level.random.nextInt(3) == 0) {
level.setBlockAndUpdate(pos.above().above().north(), state);
}
if (level.random.nextInt(3) == 0) {
level.setBlockAndUpdate(pos.above().above().south(), state);
public void doEffect(Level level, Entity casterEntity, EnumCastType type, double x, double y, double z, double potency, double duration, double size) {
if (type == EnumCastType.SPELL && casterEntity instanceof LivingEntity caster && !level.isClientSide) {
BlockPos pos = RootsUtil.getRayTrace(level, caster, 4 + 2 * (int) size);
BlockState state = level.getBlockState(pos);
if (state.is(BlockTags.BASE_STONE_OVERWORLD) || state.is(BlockTags.DIRT) || state.is(Blocks.GRASS_BLOCK) || state.is(BlockTags.SAND) || state.is(Blocks.GRAVEL)) {
if (state.is(Blocks.GRASS_BLOCK)) {
state = Blocks.DIRT.defaultBlockState();
level.setBlockAndUpdate(pos, state);
}
level.setBlockAndUpdate(pos.above(), state);
ArrayList<LivingEntity> targets = (ArrayList<LivingEntity>) level.getEntitiesOfClass(LivingEntity.class, new AABB(pos.getX() - size, pos.getY() - size, pos.getZ() - size, pos.getX() + size, pos.getY() + size, pos.getZ() + size));
targets.removeIf(target -> target.getUUID() == casterEntity.getUUID());

for (LivingEntity target : targets) {
target.push(0, 3, 0);
Vec3 motion = target.getDeltaMovement();
target.setDeltaMovement(motion.x, 0.65 + level.random.nextDouble() + 0.25 * potency, motion.z);
if (target instanceof Player targetPlayer) {
targetPlayer.hurtMarked = true;
}
level.setBlockAndUpdate(pos.above().above().above(), state);
}
if (level.random.nextInt(3) == 0) {
level.setBlockAndUpdate(pos.above().west().north(), state);
}
if (level.random.nextInt(3) == 0) {
level.setBlockAndUpdate(pos.above().east().south(), state);
}
if (level.random.nextInt(3) == 0) {
level.setBlockAndUpdate(pos.above().north().east(), state);
}
if (level.random.nextInt(3) == 0) {
level.setBlockAndUpdate(pos.above().south().west(), state);
}
if (level.random.nextInt(1) == 0) {
level.setBlockAndUpdate(pos.above().west(), state);
}
if (level.random.nextInt(1) == 0) {
level.setBlockAndUpdate(pos.above().east(), state);
}
if (level.random.nextInt(1) == 0) {
level.setBlockAndUpdate(pos.above().north(), state);
}
if (level.random.nextInt(1) == 0) {
level.setBlockAndUpdate(pos.above().south(), state);
}
level.setBlockAndUpdate(pos.above().above(), state);
if (level.random.nextInt(3) == 0) {
level.setBlockAndUpdate(pos.above().above().west(), state);
}
if (level.random.nextInt(3) == 0) {
level.setBlockAndUpdate(pos.above().above().east(), state);
}
if (level.random.nextInt(3) == 0) {
level.setBlockAndUpdate(pos.above().above().north(), state);
}
if (level.random.nextInt(3) == 0) {
level.setBlockAndUpdate(pos.above().above().south(), state);
}
level.setBlockAndUpdate(pos.above().above().above(), state);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,9 @@ public ComponentChorus() {

@Override
public void doEffect(Level level, Entity caster, EnumCastType type, double x, double y, double z, double potency, double duration, double size) {
if (type == EnumCastType.SPELL) {
if (caster instanceof Player player) {
player.setPos(player.getX() + player.getLookAngle().x * (8.0 + 8.0 * potency), player.getY() + player.getLookAngle().y * (8.0 + 8.0 * potency),
player.getZ() + player.getLookAngle().z * (8.0 + 8.0 * potency));
}
if (type == EnumCastType.SPELL && caster instanceof Player player) {
player.setPos(player.getX() + player.getLookAngle().x * (8.0 + 8.0 * potency), player.getY() + player.getLookAngle().y * (8.0 + 8.0 * potency),
player.getZ() + player.getLookAngle().z * (8.0 + 8.0 * potency));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,11 @@ public ComponentDandelion() {
public void doEffect(Level level, Entity caster, EnumCastType type, double x, double y, double z, double potency, double duration, double size) {
if (type == EnumCastType.SPELL) {
ArrayList<LivingEntity> targets = (ArrayList<LivingEntity>) level.getEntitiesOfClass(LivingEntity.class, new AABB(x - size, y - size, z - size, x + size, y + size, z + size));
targets.removeIf(target -> target.getUUID() == caster.getUUID());
for (LivingEntity target : targets) {
if (target.getUUID() != caster.getUUID()) {
target.setDeltaMovement(new Vec3(caster.getLookAngle().x, (float) (potency == 0 ? 1.0 : 1.0 + 0.5 * potency), caster.getLookAngle().z));
if (target instanceof Player) {
((Player) target).hurtMarked = true;
}
target.setDeltaMovement(new Vec3(caster.getLookAngle().x, (float) (potency == 0 ? 1.0 : 1.0 + 0.5 * potency), caster.getLookAngle().z));
if (target instanceof Player targetPlayer) {
targetPlayer.hurtMarked = true;
}
}
}
Expand Down
Loading

0 comments on commit 149c13e

Please sign in to comment.