custom missile external compat

This commit is contained in:
Boblet 2024-11-20 09:30:02 +01:00
parent 98ed3fad91
commit ff405e5aeb
3 changed files with 42 additions and 3 deletions

View File

@ -30,8 +30,8 @@ import net.minecraft.world.World;
public class EntityMissileCustom extends EntityMissileBaseNT implements IChunkLoader { public class EntityMissileCustom extends EntityMissileBaseNT implements IChunkLoader {
protected float fuel; public float fuel;
protected float consumption; public float consumption;
public EntityMissileCustom(World world) { public EntityMissileCustom(World world) {
super(world); super(world);
@ -81,6 +81,12 @@ public class EntityMissileCustom extends EntityMissileBaseNT implements IChunkLo
@Override @Override
public void onUpdate() { public void onUpdate() {
ItemCustomMissilePart part = (ItemCustomMissilePart) Item.getItemById(this.dataWatcher.getWatchableObjectInt(9));
WarheadType type = (WarheadType) part.attributes[0];
if(type != null && type.updateCustom != null) {
type.updateCustom.accept(this);
}
if(!worldObj.isRemote) { if(!worldObj.isRemote) {
if(this.hasPropulsion()) this.fuel -= this.consumption; if(this.hasPropulsion()) this.fuel -= this.consumption;
@ -152,6 +158,11 @@ public class EntityMissileCustom extends EntityMissileBaseNT implements IChunkLo
WarheadType type = (WarheadType) part.attributes[0]; WarheadType type = (WarheadType) part.attributes[0];
float strength = (Float) part.attributes[1]; float strength = (Float) part.attributes[1];
if(type.impactCustom != null) {
type.impactCustom.accept(this);
return;
}
switch(type) { switch(type) {
case HE: case HE:

View File

@ -2,7 +2,9 @@ package com.hbm.items.weapon;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.function.Consumer;
import com.hbm.entity.missile.EntityMissileCustom;
import com.hbm.items.special.ItemLootCrate; import com.hbm.items.special.ItemLootCrate;
import com.hbm.lib.RefStrings; import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry; import com.hbm.main.MainRegistry;
@ -86,7 +88,17 @@ public class ItemCustomMissilePart extends Item {
SCHRAB, SCHRAB,
TAINT, TAINT,
CLOUD, CLOUD,
TURBINE TURBINE,
//shit solution but it works. this allows traits to be attached to these empty dummy types, allowing for custom warheads
CUSTOM0, CUSTOM1, CUSTOM2, CUSTOM3, CUSTOM4, CUSTOM5, CUSTOM6, CUSTOM7, CUSTOM8, CUSTOM9;
/** Overrides that type's impact effect. Only runs serverside */
public Consumer<EntityMissileCustom> impactCustom = null;
/** Runs at the beginning of the missile's update cycle, both client and serverside. */
public Consumer<EntityMissileCustom> updateCustom = null;
/** Override for the warhead's name in the missile description */
public String labelCustom = null;
} }
public enum FuelType { public enum FuelType {
@ -246,6 +258,8 @@ public class ItemCustomMissilePart extends Item {
public String getWarhead(WarheadType type) { public String getWarhead(WarheadType type) {
if(type.labelCustom != null) return type.labelCustom;
switch(type) { switch(type) {
case HE: case HE:
return EnumChatFormatting.YELLOW + "HE"; return EnumChatFormatting.YELLOW + "HE";

View File

@ -5,10 +5,14 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.function.Consumer;
import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.BlockDummyable;
import com.hbm.entity.missile.EntityMissileCustom;
import com.hbm.explosion.ExplosionNukeSmall;
import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.FluidType;
import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.fluid.tank.FluidTank;
import com.hbm.items.weapon.ItemCustomMissilePart.WarheadType;
import com.hbm.tileentity.machine.TileEntityDummy; import com.hbm.tileentity.machine.TileEntityDummy;
import com.hbm.tileentity.turret.TileEntityTurretSentry; import com.hbm.tileentity.turret.TileEntityTurretSentry;
@ -21,6 +25,7 @@ import net.minecraft.entity.passive.EntityChicken;
import net.minecraft.entity.passive.EntityCow; import net.minecraft.entity.passive.EntityCow;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World; import net.minecraft.world.World;
/** /**
@ -178,6 +183,10 @@ public class CompatExternal {
public static void registerTurretTargetingCondition(Class clazz, BiFunction<Entity, Object, Integer> bi) { public static void registerTurretTargetingCondition(Class clazz, BiFunction<Entity, Object, Integer> bi) {
turretTargetBlacklist.add(clazz); turretTargetBlacklist.add(clazz);
} }
public static void setWarheadLabel(WarheadType type, String label) { type.labelCustom = label; }
public static void setWarheadImpact(WarheadType type, Consumer<EntityMissileCustom> impact) { type.impactCustom = impact; }
public static void setWarheadUpdate(WarheadType type, Consumer<EntityMissileCustom> update) { type.updateCustom = update; }
public static void compatExamples() { public static void compatExamples() {
// Makes all cows be targeted by turrets if player mode is active in addition to the existing rules. Applies to all entities that inherit EntityCow. // Makes all cows be targeted by turrets if player mode is active in addition to the existing rules. Applies to all entities that inherit EntityCow.
@ -190,5 +199,10 @@ public class CompatExternal {
if(turret instanceof TileEntityTurretSentry) return -1; if(turret instanceof TileEntityTurretSentry) return -1;
return 0; return 0;
}); });
//configures CUSTOM0 to have a custom label and impact effect
CompatExternal.setWarheadLabel(WarheadType.CUSTOM0, EnumChatFormatting.YELLOW + "Micro Nuke");
CompatExternal.setWarheadImpact(WarheadType.CUSTOM0, (missile) -> {
ExplosionNukeSmall.explode(missile.worldObj, missile.posX, missile.posY + 0.5, missile.posZ, ExplosionNukeSmall.PARAMS_MEDIUM);
});
} }
} }