Skip to content

Commit

Permalink
Explosion events.
Browse files Browse the repository at this point in the history
  • Loading branch information
noobanidus committed Mar 7, 2020
1 parent dba7af5 commit 46a5bc7
Show file tree
Hide file tree
Showing 9 changed files with 231 additions and 0 deletions.
@@ -0,0 +1,23 @@
package crafttweaker.api.event;

import crafttweaker.annotations.ZenRegister;
import crafttweaker.api.entity.IEntity;
import crafttweaker.api.world.IBlockPos;
import stanhebben.zenscript.annotations.ZenClass;
import stanhebben.zenscript.annotations.ZenGetter;
import stanhebben.zenscript.annotations.ZenMethod;

/**
* @author Noob
*/
@ZenClass("crafttweaker.event.ExplosionDetonateEvent")
@ZenRegister
public interface ExplosionDetonateEvent extends IExplosionEvent {
@ZenGetter("affectedEntities")
@ZenMethod
IEntity[] getAffectedEntities();

@ZenGetter("affectedPositions")
@ZenMethod
IBlockPos[] getAffectedPositions();
}
@@ -0,0 +1,17 @@
package crafttweaker.api.event;

import crafttweaker.annotations.ZenRegister;
import crafttweaker.api.entity.IEntity;
import crafttweaker.api.world.IBlockPos;
import crafttweaker.api.world.IWorld;
import stanhebben.zenscript.annotations.ZenClass;
import stanhebben.zenscript.annotations.ZenGetter;
import stanhebben.zenscript.annotations.ZenMethod;

/**
* @author Noob
*/
@ZenClass("crafttweaker.event.ExplosionStartEvent")
@ZenRegister
public interface ExplosionStartEvent extends IExplosionEvent {
}
Expand Up @@ -173,6 +173,13 @@ public interface IEventManager {

@ZenMethod
IEventHandle onEntityMount(IEventHandler<EntityMountEvent> ev);

@ZenMethod
IEventHandle onExplosionStart(IEventHandler<ExplosionStartEvent> ev);

@ZenMethod
IEventHandle onExplosionDetonate(IEventHandler<ExplosionDetonateEvent> ev);

/*
*
* IEventHandle onPlayerChat(IPlayerChatEventHandler ev);
Expand Down
@@ -0,0 +1,29 @@
package crafttweaker.api.event;

import crafttweaker.annotations.ZenRegister;
import crafttweaker.api.world.IBlockPos;
import crafttweaker.api.world.IWorld;
import stanhebben.zenscript.annotations.ZenClass;
import stanhebben.zenscript.annotations.ZenGetter;

/**
* @author Noob
*/
@ZenClass("crafttweaker.event.IExplosionEvent")
@ZenRegister
public interface IExplosionEvent extends IEventCancelable {
@ZenGetter("world")
IWorld getWorld();

@ZenGetter("position")
IBlockPos getPosition();

@ZenGetter("x")
double getX();

@ZenGetter("y")
double getY();

@ZenGetter("z")
double getZ();
}
Expand Up @@ -103,6 +103,8 @@ public void clear() {
elFarmlandTrample.clear();
elEnchantmentLevelSet.clear();
elEntityMountEvent.clear();
elExplosionStartEvent.clear();
elExplosionDetonateEvent.clear();
}

// ##########################
Expand Down Expand Up @@ -1039,4 +1041,42 @@ public boolean hasEntityMount() {
public void publishEntityMount(EntityMountEvent event) {
elEntityMountEvent.publish(event);
}

// #############################
// ### ExplosionStartEvent ###
// #############################

private final EventList<ExplosionStartEvent> elExplosionStartEvent = new EventList<>();

@Override
public IEventHandle onExplosionStart(IEventHandler<ExplosionStartEvent> ev) {
return elExplosionStartEvent.add(ev);
}

public boolean hasExplosionStart() {
return elExplosionStartEvent.hasHandlers();
}

public void publishExplosionStart(ExplosionStartEvent event) {
elExplosionStartEvent.publish(event);
}

// ################################
// ### ExplosionDetonateEvent ###
// ################################

private final EventList<ExplosionDetonateEvent> elExplosionDetonateEvent = new EventList<>();

@Override
public IEventHandle onExplosionDetonate(IEventHandler<ExplosionDetonateEvent> ev) {
return elExplosionDetonateEvent.add(ev);
}

public boolean hasExplosionDetonate() {
return elExplosionDetonateEvent.hasHandlers();
}

public void publishExplosionDetonate(ExplosionDetonateEvent event) {
elExplosionDetonateEvent.publish(event);
}
}
Expand Up @@ -43,6 +43,7 @@
import net.minecraftforge.event.entity.player.*;
import net.minecraftforge.event.furnace.FurnaceFuelBurnTimeEvent;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.event.world.ExplosionEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.PlayerEvent;
Expand Down Expand Up @@ -472,6 +473,17 @@ public void onEnchantmentLevelSet(EnchantmentLevelSetEvent ev) {
public void onEntityMount(EntityMountEvent ev) {
if (CrafttweakerImplementationAPI.events.hasEntityMount())
CrafttweakerImplementationAPI.events.publishEntityMount(new MCEntityMountEvent(ev));
}

@SubscribeEvent
public void onExplosionDetonate(ExplosionEvent.Detonate ev) {
if (CrafttweakerImplementationAPI.events.hasExplosionDetonate())
CrafttweakerImplementationAPI.events.publishExplosionDetonate(new MCExplosionDetonateEvent(ev));
}

@SubscribeEvent
public void onExplosionStart(ExplosionEvent.Start ev) {
if (CrafttweakerImplementationAPI.events.hasExplosionStart())
CrafttweakerImplementationAPI.events.publishExplosionStart(new MCExplosionStartEvent(ev));
}
}
@@ -0,0 +1,34 @@
package crafttweaker.mc1120.events.handling;

import crafttweaker.api.entity.IEntity;
import crafttweaker.api.event.ExplosionDetonateEvent;
import crafttweaker.api.minecraft.CraftTweakerMC;
import crafttweaker.api.world.IBlockPos;
import net.minecraftforge.event.world.ExplosionEvent;

public class MCExplosionDetonateEvent extends MCExplosionEvent implements ExplosionDetonateEvent {
private ExplosionEvent.Detonate event;
private IEntity[] entities = null;
private IBlockPos[] blocks = null;

public MCExplosionDetonateEvent(ExplosionEvent.Detonate event) {
super(event);
this.event = event;
}

@Override
public IEntity[] getAffectedEntities() {
if (entities == null) {
entities = event.getAffectedEntities().stream().map(CraftTweakerMC::getIEntity).toArray(IEntity[]::new);
}
return entities;
}

@Override
public IBlockPos[] getAffectedPositions() {
if (blocks == null) {
blocks = event.getAffectedBlocks().stream().map(CraftTweakerMC::getIBlockPos).toArray(IBlockPos[]::new);
}
return blocks;
}
}
@@ -0,0 +1,56 @@
package crafttweaker.mc1120.events.handling;

import crafttweaker.api.event.IExplosionEvent;
import crafttweaker.api.minecraft.CraftTweakerMC;
import crafttweaker.api.world.IBlockPos;
import crafttweaker.api.world.IWorld;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraftforge.event.world.ExplosionEvent;

public class MCExplosionEvent implements IExplosionEvent {
private ExplosionEvent event;
private Vec3d pos;
private IBlockPos blockPos;

public MCExplosionEvent(ExplosionEvent event) {
this.event = event;
this.pos = event.getExplosion().getPosition();
this.blockPos = CraftTweakerMC.getIBlockPos(new BlockPos(pos));
}

@Override
public IWorld getWorld() {
return CraftTweakerMC.getIWorld(event.getWorld());
}

@Override
public IBlockPos getPosition() {
return blockPos;
}

@Override
public double getX() {
return pos.x;
}

@Override
public double getY() {
return pos.y;
}

@Override
public double getZ() {
return pos.z;
}

@Override
public boolean isCanceled() {
return event.isCanceled();
}

@Override
public void setCanceled(boolean canceled) {
event.setCanceled(canceled);
}
}
@@ -0,0 +1,13 @@
package crafttweaker.mc1120.events.handling;

import crafttweaker.api.event.ExplosionStartEvent;
import net.minecraftforge.event.world.ExplosionEvent;

public class MCExplosionStartEvent extends MCExplosionEvent implements ExplosionStartEvent {
private ExplosionEvent.Start event;

public MCExplosionStartEvent(ExplosionEvent.Start event) {
super(event);
this.event = event;
}
}

0 comments on commit 46a5bc7

Please sign in to comment.