Add asbestos removal PPE

This commit is contained in:
Agatha Lovelace 2021-04-12 01:09:27 +03:00
parent 1fe24edc96
commit 1f2927358e
No known key found for this signature in database
GPG Key ID: 2DB18BA2E0A80BC3
20 changed files with 210 additions and 5 deletions

View File

@ -2,6 +2,8 @@ package dev.agatharose.asbestos;
import static dev.agatharose.asbestos.AsbestosRegistry.*;
import java.util.Arrays;
import dev.agatharose.asbestos.component.MesotheliomaComponent;
import dev.agatharose.asbestos.component.PlayerMesotheliomaComponent;
import dev.agatharose.asbestos.config.AsbestosConfig;
@ -17,6 +19,9 @@ import net.fabricmc.api.ModInitializer;
import net.minecraft.block.Block;
import net.minecraft.entity.damage.DamageSource;
import net.minecraft.entity.effect.StatusEffect;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
@ -33,6 +38,26 @@ public class Asbestos implements ModInitializer, EntityComponentInitializer {
// blocks that will contribute to mesothelioma levels without being broken
public static Block[] HARMFUL_PASSIVE_BLOCKS = { ASBESTOS_BLOCK };
// any armor that protects the player from asbestos exposure
public static Item[] PPE_ARMOR = { PPE_HELMET, PPE_CHESTPLATE, PPE_LEGGINGS, PPE_BOOTS };
/**
* Check if the player is safe from asbestos exposure
*
* @param player
*/
public static boolean isProtectedFromAsbestos(PlayerEntity player) {
// iterate over the player's armor items
for (ItemStack item : player.getArmorItems()) {
// if they have at least one non-protective piece of armor, they are not immune
if (!Arrays.asList(PPE_ARMOR).contains(item.getItem())) {
return false;
}
}
// otherwise, they're safe
return true;
}
@Override
public void onInitialize() {
AsbestosRegistry.register();

View File

@ -1,5 +1,6 @@
package dev.agatharose.asbestos;
import dev.agatharose.asbestos.item.PpeArmorMaterial;
import dev.agatharose.asbestos.item.ScraperItem;
import dev.agatharose.asbestos.item.ScraperToolMaterial;
import net.fabricmc.fabric.api.biome.v1.BiomeModifications;
@ -8,8 +9,11 @@ import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
import net.minecraft.block.Material;
import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.entity.effect.StatusEffects;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.ArmorMaterial;
import net.minecraft.item.BlockItem;
import net.minecraft.item.FoodComponent;
import net.minecraft.item.Item;
@ -29,7 +33,7 @@ import net.minecraft.world.gen.feature.OreFeatureConfig;
@SuppressWarnings("deprecation")
public class AsbestosRegistry {
// block/item/effect definitions
// block/item definitions
public static final Item ASBESTOS_FIBERS = new Item(new FabricItemSettings().group(ItemGroup.MATERIALS)
.fireproof()
.food(new FoodComponent.Builder().alwaysEdible().statusEffect(
@ -53,6 +57,20 @@ public class AsbestosRegistry {
public static ToolItem IRON_SCRAPER = new ScraperItem(ScraperToolMaterial.INSTANCE, 0.0f, -3.0f,
new Item.Settings().group(ItemGroup.TOOLS));
// asbestos removal ppe
public static final ArmorMaterial PPE_ARMOR_MATERIAL = new PpeArmorMaterial();
public static final Item PPE_HELMET = new ArmorItem(PPE_ARMOR_MATERIAL, EquipmentSlot.HEAD,
new Item.Settings().group(ItemGroup.COMBAT));
public static final Item PPE_CHESTPLATE = new ArmorItem(PPE_ARMOR_MATERIAL, EquipmentSlot.CHEST,
new Item.Settings().group(ItemGroup.COMBAT));
public static final Item PPE_LEGGINGS = new ArmorItem(PPE_ARMOR_MATERIAL, EquipmentSlot.LEGS,
new Item.Settings().group(ItemGroup.COMBAT));
public static final Item PPE_BOOTS = new ArmorItem(PPE_ARMOR_MATERIAL, EquipmentSlot.FEET,
new Item.Settings().group(ItemGroup.COMBAT));
// serpentinite worldgen
private static ConfiguredFeature<?, ?> SERPENTINITE_OVERWORLD = Feature.ORE
.configure(new OreFeatureConfig(OreFeatureConfig.Rules.BASE_STONE_OVERWORLD,
SERPENTINITE_BLOCK.getDefaultState(), 5))
@ -98,5 +116,11 @@ public class AsbestosRegistry {
// scraper tool
Registry.register(Registry.ITEM, new Identifier("asbestos", "iron_scraper"), IRON_SCRAPER);
// asbestos removal ppe
Registry.register(Registry.ITEM, new Identifier("asbestos", "ppe_helmet"), PPE_HELMET);
Registry.register(Registry.ITEM, new Identifier("asbestos", "ppe_chestplate"), PPE_CHESTPLATE);
Registry.register(Registry.ITEM, new Identifier("asbestos", "ppe_leggings"), PPE_LEGGINGS);
Registry.register(Registry.ITEM, new Identifier("asbestos", "ppe_boots"), PPE_BOOTS);
}
}

View File

@ -27,10 +27,13 @@ public class CarcinogenicBlock extends Block {
// call the original method
super.onBreak(world, pos, state, player);
// get the player's initial mesothelioma progress
int exposure = Asbestos.MESOTHELIOMA.get(player).getMesothelioma();
// check if player is capable of safely removing asbestos
if (!Asbestos.isProtectedFromAsbestos(player)) {
// get the player's initial mesothelioma progress
int exposure = Asbestos.MESOTHELIOMA.get(player).getMesothelioma();
// increase it by the block's dangerousness level
Asbestos.MESOTHELIOMA.get(player).setMesothelioma(exposure + dangerousness);
// increase it by the block's dangerousness level
Asbestos.MESOTHELIOMA.get(player).setMesothelioma(exposure + dangerousness);
}
}
}

View File

@ -0,0 +1,53 @@
package dev.agatharose.asbestos.item;
import net.minecraft.entity.EquipmentSlot;
import net.minecraft.item.ArmorMaterial;
import net.minecraft.item.Items;
import net.minecraft.recipe.Ingredient;
import net.minecraft.sound.SoundEvent;
import net.minecraft.sound.SoundEvents;
public class PpeArmorMaterial implements ArmorMaterial {
private static final int[] BASE_DURABILITY = new int[] { 13, 15, 16, 11 };
private static final int[] PROTECTION_VALUES = new int[] { 1, 1, 2, 1 };
@Override
public int getDurability(EquipmentSlot slot) {
return BASE_DURABILITY[slot.getEntitySlotId()] * 4;
}
@Override
public int getProtectionAmount(EquipmentSlot slot) {
return PROTECTION_VALUES[slot.getEntitySlotId()];
}
@Override
public int getEnchantability() {
return 4;
}
@Override
public SoundEvent getEquipSound() {
return SoundEvents.BLOCK_WOOL_HIT;
}
@Override
public Ingredient getRepairIngredient() {
return Ingredient.ofItems(Items.STRING);
}
@Override
public String getName() {
return "asbestos_ppe";
}
@Override
public float getToughness() {
return 0.0F;
}
@Override
public float getKnockbackResistance() {
return 0;
}
}

View File

@ -31,6 +31,11 @@ public class MesotheliomaSched {
player.addStatusEffect(new StatusEffectInstance(Asbestos.MESOTHELIOMA_EFFECT, 32767));
}
// don't have to check for asbestos if the player is safe from it
if (Asbestos.isProtectedFromAsbestos(player)) {
return;
}
int offset = config.mesothelioma.offset;
// iterate over every block in the cuboid

View File

@ -5,6 +5,10 @@
"block.asbestos.asbestos_tile_block": "Asbestos Tiles",
"item.asbestos.asbestos_fibers": "Asbests Fibers",
"item.asbestos.iron_scraper": "Asbestos Scraper",
"item.asbestos.ppe_helmet": "Asbestos Removal PPE Helmet",
"item.asbestos.ppe_chestplate": "Asbestos Removal PPE Chestplate",
"item.asbestos.ppe_leggings": "Asbestos Removal PPE Leggings",
"item.asbestos.ppe_boots": "Asbestos Removal PPE Boots",
"effect.asbestos.mesothelioma": "Mesothelioma",
"death.attack.mesotheliomaDamage": "%1$s was entitled to financial compensation",
"text.autoconfig.asbestos.title": "Asbestos Removal",

View File

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "asbestos:item/ppe_boots"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "asbestos:item/ppe_chestplate"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "asbestos:item/ppe_helmet"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "asbestos:item/ppe_leggings"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 B

View File

@ -0,0 +1,16 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
" ",
"S S",
"S S"
],
"key": {
"S": {
"item": "minecraft:string"
}
},
"result": {
"item": "asbestos:ppe_boots"
}
}

View File

@ -0,0 +1,16 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"S S",
"SSS",
"SSS"
],
"key": {
"S": {
"item": "minecraft:string"
}
},
"result": {
"item": "asbestos:ppe_chestplate"
}
}

View File

@ -0,0 +1,19 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"SSS",
"SGS",
"S S"
],
"key": {
"S": {
"item": "minecraft:string"
},
"G": {
"item": "minecraft:black_stained_glass_pane"
}
},
"result": {
"item": "asbestos:ppe_helmet"
}
}

View File

@ -0,0 +1,16 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"SSS",
"S S",
"S S"
],
"key": {
"S": {
"item": "minecraft:string"
}
},
"result": {
"item": "asbestos:ppe_leggings"
}
}