Veil of Evil & Ward of Sacrosanctity (#1578)

* Veil of Evil class creation

Signed-off-by: tobias <angryaeon@icloud.com>

* Transplanted legacy code.

* VeilOfEvil and WardOfSacrosanctity base finished.
Added isActive() to IMasterRitualStone

* Renaming, commented out arimethric error

* make it static to make it work

* removed sout & renamed rituals

* Finished up base Veil of Evil & Ward of Sacrosanctity.

Temporarily removed Gaia's Transformation.
This commit is contained in:
Tobias 2019-05-19 15:35:38 +00:00 committed by Nick Ignoffo
parent bf35baac77
commit 7f5a5a24ff
7 changed files with 304 additions and 4 deletions

View file

@ -131,6 +131,8 @@ public class CategoryRitual
addRitualPagesToEntries("condor", entries);
addRitualPagesToEntries("featheredEarth", entries);
addRitualPagesToEntries("grounding", entries);
addRitualPagesToEntries("veilOfEvil", entries);
addRitualPagesToEntries("wardOfSacrosanctity", entries);
for (Entry<ResourceLocation, EntryAbstract> entry : entries.entrySet())
{

View file

@ -33,6 +33,8 @@ public interface IMasterRitualStone {
void setCooldown(int cooldown);
boolean isActive();
void setActive(boolean active);
EnumFacing getDirection();

View file

@ -0,0 +1,102 @@
package WayofTime.bloodmagic.ritual.types;
import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler;
import WayofTime.bloodmagic.ritual.*;
import WayofTime.bloodmagic.soul.DemonWillHolder;
import WayofTime.bloodmagic.soul.EnumDemonWillType;
import WayofTime.bloodmagic.util.handler.event.GenericHandler;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
@RitualRegister("veil_of_evil")
public class RitualVeilOfEvil extends Ritual {
public static final String VEIL_RANGE = "veilRange";
public RitualVeilOfEvil() {
super("ritualVeilOfEvil", 0, 40000, "ritual." + BloodMagic.MODID + ".veilOfEvilRitual");
addBlockRange(VEIL_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-16, 0, -16), 33));
setMaximumVolumeAndDistanceOfRange(VEIL_RANGE, 0, 256, 256);
}
@Override
public void performRitual(IMasterRitualStone masterRitualStone) {
/* Default Ritual Stuff */
World world = masterRitualStone.getWorldObj();
int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence();
BlockPos pos = masterRitualStone.getBlockPos();
if (currentEssence < getRefreshCost()) {
masterRitualStone.getOwnerNetwork().causeNausea();
return;
}
// int maxEffects = currentEssence / getRefreshCost();
// int totalEffects = 0;
/* Default will augment stuff */
List<EnumDemonWillType> willConfig = masterRitualStone.getActiveWillConfig();
DemonWillHolder holder = WorldDemonWillHandler.getWillHolder(world, pos);
double rawWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DEFAULT, willConfig);
double corrosiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.CORROSIVE, willConfig);
double destructiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DESTRUCTIVE, willConfig);
double steadfastWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.STEADFAST, willConfig);
double vengefulWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.VENGEFUL, willConfig);
double rawDrained = 0;
double corrosiveDrained = 0;
double destructiveDrained = 0;
double steadfastDrained = 0;
double vengefulDrained = 0;
/* Actual ritual stuff begins here */
if (GenericHandler.forceSpawnMap.containsKey(world)) {
Map<IMasterRitualStone, AreaDescriptor> forceSpawnMap = GenericHandler.forceSpawnMap.get(world);
if (forceSpawnMap != null) {
forceSpawnMap.put(masterRitualStone, masterRitualStone.getBlockRange(VEIL_RANGE));
} else {
forceSpawnMap = new HashMap<>();
forceSpawnMap.put(masterRitualStone, masterRitualStone.getBlockRange(VEIL_RANGE));
GenericHandler.forceSpawnMap.put(world, forceSpawnMap);
}
} else {
HashMap<IMasterRitualStone, AreaDescriptor> forceSpawnMap = new HashMap<>();
forceSpawnMap.put(masterRitualStone, masterRitualStone.getBlockRange(VEIL_RANGE));
GenericHandler.forceSpawnMap.put(world, forceSpawnMap);
}
masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost()));
}
@Override
public int getRefreshCost() {
return 0;
}
@Override
public void gatherComponents(Consumer<RitualComponent> components) {
addOffsetRunes(components, 1, 0, 2, EnumRuneType.DUSK);
addCornerRunes(components, 3, 0, EnumRuneType.FIRE);
for (int i = 0; i <= 1; i++) {
addParallelRunes(components, (4 + i), i, EnumRuneType.DUSK);
addOffsetRunes(components, (4 + i), i, -1, EnumRuneType.BLANK);
addOffsetRunes(components, 4, 5, i, EnumRuneType.EARTH);
}
addCornerRunes(components, 5, 1, EnumRuneType.BLANK);
}
@Override
public Ritual getNewCopy() {
return new RitualVeilOfEvil();
}
}

View file

@ -0,0 +1,105 @@
package WayofTime.bloodmagic.ritual.types;
import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.demonAura.WorldDemonWillHandler;
import WayofTime.bloodmagic.ritual.*;
import WayofTime.bloodmagic.soul.DemonWillHolder;
import WayofTime.bloodmagic.soul.EnumDemonWillType;
import WayofTime.bloodmagic.util.handler.event.GenericHandler;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
@RitualRegister("ward_of_sacrosanctity")
public class RitualWardOfSacrosanctity extends Ritual {
public static final String SPAWN_WARD = "spawnWard";
public RitualWardOfSacrosanctity() {
super("ritualWardOfSacrosanctity", 0, 40000, "ritual." + BloodMagic.MODID + ".wardOfSacrosanctityRitual");
addBlockRange(SPAWN_WARD, new AreaDescriptor.Rectangle(new BlockPos(-16, -10, -16), 33));
setMaximumVolumeAndDistanceOfRange(SPAWN_WARD, 0, 256, 256);
}
@Override
public void performRitual(IMasterRitualStone masterRitualStone) {
/* Default Ritual Stuff */
World world = masterRitualStone.getWorldObj();
int currentEssence = masterRitualStone.getOwnerNetwork().getCurrentEssence();
BlockPos pos = masterRitualStone.getBlockPos();
if (currentEssence < getRefreshCost()) {
masterRitualStone.getOwnerNetwork().causeNausea();
return;
}
// int maxEffects = currentEssence / getRefreshCost();
// int totalEffects = 0;
/* Default will augment stuff */
List<EnumDemonWillType> willConfig = masterRitualStone.getActiveWillConfig();
DemonWillHolder holder = WorldDemonWillHandler.getWillHolder(world, pos);
double rawWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DEFAULT, willConfig);
double corrosiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.CORROSIVE, willConfig);
double destructiveWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.DESTRUCTIVE, willConfig);
double steadfastWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.STEADFAST, willConfig);
double vengefulWill = this.getWillRespectingConfig(world, pos, EnumDemonWillType.VENGEFUL, willConfig);
double rawDrained = 0;
double corrosiveDrained = 0;
double destructiveDrained = 0;
double steadfastDrained = 0;
double vengefulDrained = 0;
/* Actual ritual stuff begins here */
if (GenericHandler.preventSpawnMap.containsKey(world)) {
Map<IMasterRitualStone, AreaDescriptor> preventSpawnMap = GenericHandler.preventSpawnMap.get(world);
if (preventSpawnMap != null) {
preventSpawnMap.put(masterRitualStone, masterRitualStone.getBlockRange(SPAWN_WARD));
} else {
preventSpawnMap = new HashMap<>();
preventSpawnMap.put(masterRitualStone, masterRitualStone.getBlockRange(SPAWN_WARD));
GenericHandler.preventSpawnMap.put(world, preventSpawnMap);
}
} else {
HashMap<IMasterRitualStone, AreaDescriptor> preventSpawnMap = new HashMap<>();
preventSpawnMap.put(masterRitualStone, masterRitualStone.getBlockRange(SPAWN_WARD));
GenericHandler.preventSpawnMap.put(world, preventSpawnMap);
}
masterRitualStone.getOwnerNetwork().syphon(masterRitualStone.ticket(getRefreshCost()));
}
@Override
public int getRefreshTime() {
return 25;
}
@Override
public int getRefreshCost() {
return 2;
}
@Override
public void gatherComponents(Consumer<RitualComponent> components) {
for (int i = 2; i < 5; i++) {
if (i < 4) {
addParallelRunes(components, 1, 0, EnumRuneType.AIR);
}
addCornerRunes(components, i, 0, EnumRuneType.FIRE);
}
addParallelRunes(components, 5, 0, EnumRuneType.DUSK);
addOffsetRunes(components, 5, 6, 0, EnumRuneType.WATER);
}
@Override
public Ritual getNewCopy() {
return new RitualWardOfSacrosanctity();
}
}

View file

@ -30,8 +30,11 @@ import WayofTime.bloodmagic.orb.BloodOrb;
import WayofTime.bloodmagic.orb.IBloodOrb;
import WayofTime.bloodmagic.potion.BMPotionUtils;
import WayofTime.bloodmagic.potion.PotionEventHandlers;
import WayofTime.bloodmagic.ritual.AreaDescriptor;
import WayofTime.bloodmagic.ritual.IMasterRitualStone;
import WayofTime.bloodmagic.ritual.RitualManager;
import WayofTime.bloodmagic.ritual.types.RitualVeilOfEvil;
import WayofTime.bloodmagic.ritual.types.RitualWardOfSacrosanctity;
import WayofTime.bloodmagic.soul.DemonWillHolder;
import WayofTime.bloodmagic.util.Constants;
import WayofTime.bloodmagic.util.Utils;
@ -73,6 +76,7 @@ import net.minecraftforge.event.entity.living.LivingDropsEvent;
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
import net.minecraftforge.event.entity.living.LivingFallEvent;
import net.minecraftforge.event.entity.living.LivingHurtEvent;
import net.minecraftforge.event.entity.living.LivingSpawnEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.entity.player.PlayerPickupXpEvent;
@ -80,6 +84,7 @@ import net.minecraftforge.event.world.ExplosionEvent;
import net.minecraftforge.event.world.WorldEvent;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.Event.Result;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
@ -94,6 +99,8 @@ public class GenericHandler {
public static Map<World, Map<EntityPlayer, Integer>> filledHandMapMap = new HashMap<>();
private static Map<World, Map<EntityAnimal, EntityAITarget>> targetTaskMapMap = new HashMap<>();
private static Map<World, Map<EntityAnimal, EntityAIBase>> attackTaskMapMap = new HashMap<>();
public static Map<World, Map<IMasterRitualStone, AreaDescriptor>> preventSpawnMap = new HashMap<>();
public static Map<World, Map<IMasterRitualStone, AreaDescriptor>> forceSpawnMap = new HashMap<>();
public static Set<IMasterRitualStone> featherRitualSet;
@SubscribeEvent
@ -461,6 +468,80 @@ public class GenericHandler {
return durability / 2;
}
// VeilOfEvil, WardOfSacrosanctity
@SubscribeEvent
public static void onLivingSpawnEvent(LivingSpawnEvent.CheckSpawn event) {
World world = event.getWorld();
if (!(event.getEntityLiving() instanceof EntityMob)) {
return;
}
/* WardOfSacrosanctity */
if (preventSpawnMap.containsKey(world)) {
Map<IMasterRitualStone, AreaDescriptor> pMap = preventSpawnMap.get(world);
if (pMap != null) {
for (Map.Entry<IMasterRitualStone, AreaDescriptor> entry : pMap.entrySet()) {
IMasterRitualStone masterRitualStone = entry.getKey();
AreaDescriptor blockRange = entry.getValue();
if (masterRitualStone != null && masterRitualStone.isActive() && masterRitualStone.getCurrentRitual() instanceof RitualWardOfSacrosanctity) {
if (blockRange.offset(masterRitualStone.getBlockPos()).isWithinArea(new BlockPos(event.getX(), event.getY(), event.getZ()))) {
switch (event.getResult()) {
case ALLOW:
event.setResult(Result.DEFAULT);
break;
case DEFAULT:
event.setResult(Result.DENY);
break;
default:
break;
}
break;
}
} else {
pMap.remove(masterRitualStone);
}
}
}
}
/* VeilOfEvil */
if (forceSpawnMap.containsKey(world)) {
Map<IMasterRitualStone, AreaDescriptor> fMap = forceSpawnMap.get(world);
if (fMap != null) {
for (Map.Entry<IMasterRitualStone, AreaDescriptor> entry : fMap.entrySet()) {
IMasterRitualStone masterRitualStone = entry.getKey();
AreaDescriptor blockRange = entry.getValue();
System.out.println("found a map");
if (masterRitualStone != null && masterRitualStone.isActive() && masterRitualStone.getCurrentRitual() instanceof RitualVeilOfEvil) {
System.out.println("is active");
if (blockRange.offset(masterRitualStone.getBlockPos()).isWithinArea(new BlockPos(event.getX(), event.getY(), event.getZ()))) {
System.out.println("is in");
switch (event.getResult()) {
case DEFAULT:
event.setResult(Result.ALLOW);
break;
case DENY:
event.setResult(Result.DEFAULT);
default:
break;
}
break;
}
} else {
fMap.remove(masterRitualStone);
}
}
}
}
}
@SubscribeEvent
public static void onWorldLoad(WorldEvent.Load event) {
World world = event.getWorld();
@ -468,6 +549,8 @@ public class GenericHandler {
filledHandMapMap.computeIfAbsent(world, k -> new HashMap<>());
attackTaskMapMap.computeIfAbsent(world, k -> new HashMap<>());
targetTaskMapMap.computeIfAbsent(world, k -> new HashMap<>());
forceSpawnMap.computeIfAbsent(world, k -> new HashMap<>());
preventSpawnMap.computeIfAbsent(world, k -> new HashMap<>());
PotionEventHandlers.flightListMap.computeIfAbsent(world, k -> new ArrayList<>());
PotionEventHandlers.noGravityListMap.computeIfAbsent(world, k -> new ArrayList<>());
}