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:
parent
bf35baac77
commit
7f5a5a24ff
7 changed files with 304 additions and 4 deletions
|
@ -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())
|
||||
{
|
||||
|
|
|
@ -33,6 +33,8 @@ public interface IMasterRitualStone {
|
|||
|
||||
void setCooldown(int cooldown);
|
||||
|
||||
boolean isActive();
|
||||
|
||||
void setActive(boolean active);
|
||||
|
||||
EnumFacing getDirection();
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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<>());
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue