From 7d23cafc77713c42d7fb9093b0d845b197bd7c5e Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 16 Feb 2023 16:24:47 +0100 Subject: [PATCH] added bottled vacuum --- .../models/item/vacuum_bottle.json | 6 ++ .../minecraft/tags/blocks/mineable/axe.json | 12 ++-- .../tags/blocks/mineable/pickaxe.json | 66 ++++++++--------- .../chunk/effect/SpreadEffect.java | 2 +- .../naturesaura/items/ItemAuraBottle.java | 68 ++++++++++-------- .../ellpeck/naturesaura/items/ModItems.java | 1 + .../ellpeck/naturesaura/reg/ModRegistry.java | 3 +- .../assets/naturesaura/lang/en_us.json | 1 + .../textures/item/vacuum_bottle.png | Bin 0 -> 270 bytes 9 files changed, 87 insertions(+), 72 deletions(-) create mode 100644 src/generated/resources/assets/naturesaura/models/item/vacuum_bottle.json create mode 100644 src/main/resources/assets/naturesaura/textures/item/vacuum_bottle.png diff --git a/src/generated/resources/assets/naturesaura/models/item/vacuum_bottle.json b/src/generated/resources/assets/naturesaura/models/item/vacuum_bottle.json new file mode 100644 index 00000000..42590ed5 --- /dev/null +++ b/src/generated/resources/assets/naturesaura/models/item/vacuum_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "naturesaura:item/vacuum_bottle" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json b/src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json index 7768f8ff..4b01fbfa 100644 --- a/src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json +++ b/src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json @@ -1,15 +1,15 @@ { "values": [ - "naturesaura:flower_generator", - "naturesaura:ancient_log", - "naturesaura:offering_table", - "naturesaura:ancient_planks", + "naturesaura:ancient_slab", "naturesaura:ancient_stairs", "naturesaura:oak_generator", + "naturesaura:auto_crafter", + "naturesaura:flower_generator", "naturesaura:wood_stand", "naturesaura:ancient_bark", - "naturesaura:ancient_slab", + "naturesaura:ancient_planks", "naturesaura:nether_wart_mushroom", - "naturesaura:auto_crafter" + "naturesaura:offering_table", + "naturesaura:ancient_log" ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json index 3d984636..b1b4f07d 100644 --- a/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -1,46 +1,46 @@ { "values": [ - "naturesaura:spring", - "naturesaura:aura_detector", + "naturesaura:nature_altar", + "naturesaura:animal_spawner", + "naturesaura:chorus_generator", + "naturesaura:animal_container", "naturesaura:infused_slab", - "naturesaura:tainted_gold_block", + "naturesaura:potion_generator", "naturesaura:grated_chute", - "naturesaura:snow_creator", - "naturesaura:infused_brick", - "naturesaura:weather_changer", + "naturesaura:ender_crate", + "naturesaura:generator_limit_remover", + "naturesaura:infused_stairs", + "naturesaura:aura_detector", + "naturesaura:spawn_lamp", + "naturesaura:hopper_upgrade", + "naturesaura:pickup_stopper", "naturesaura:infused_brick_slab", "naturesaura:field_creator", - "naturesaura:infused_stone", - "naturesaura:time_changer", - "naturesaura:nature_altar", - "naturesaura:placer", - "naturesaura:firework_generator", - "naturesaura:infused_stairs", - "naturesaura:projectile_generator", "naturesaura:item_distributor", + "naturesaura:moss_generator", + "naturesaura:spring", + "naturesaura:conversion_catalyst", + "naturesaura:firework_generator", + "naturesaura:aura_timer", + "naturesaura:powder_placer", + "naturesaura:infused_iron_block", + "naturesaura:weather_changer", + "naturesaura:gold_nether_brick", + "naturesaura:snow_creator", + "naturesaura:infused_stone", + "naturesaura:furnace_heater", + "naturesaura:nether_grass", + "naturesaura:projectile_generator", + "naturesaura:animal_generator", + "naturesaura:infused_brick_stairs", + "naturesaura:crushing_catalyst", + "naturesaura:infused_brick", "naturesaura:chunk_loader", "naturesaura:rf_converter", - "naturesaura:spawn_lamp", "naturesaura:blast_furnace_booster", - "naturesaura:nether_grass", - "naturesaura:animal_container", - "naturesaura:moss_generator", - "naturesaura:generator_limit_remover", - "naturesaura:pickup_stopper", - "naturesaura:aura_timer", - "naturesaura:animal_spawner", - "naturesaura:ender_crate", - "naturesaura:animal_generator", - "naturesaura:chorus_generator", - "naturesaura:hopper_upgrade", - "naturesaura:furnace_heater", - "naturesaura:potion_generator", - "naturesaura:infused_brick_stairs", - "naturesaura:infused_iron_block", - "naturesaura:powder_placer", - "naturesaura:crushing_catalyst", - "naturesaura:conversion_catalyst", - "naturesaura:gold_nether_brick", + "naturesaura:placer", + "naturesaura:time_changer", + "naturesaura:tainted_gold_block", "naturesaura:gold_brick" ] } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/naturesaura/chunk/effect/SpreadEffect.java b/src/main/java/de/ellpeck/naturesaura/chunk/effect/SpreadEffect.java index cf3ec505..35c2e1cf 100644 --- a/src/main/java/de/ellpeck/naturesaura/chunk/effect/SpreadEffect.java +++ b/src/main/java/de/ellpeck/naturesaura/chunk/effect/SpreadEffect.java @@ -17,7 +17,7 @@ public class SpreadEffect implements IDrainSpotEffect { @Override public void update(Level level, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { - if (Math.abs(spot) < 500000 || Math.abs(IAuraChunk.getAuraInArea(level, pos, 25)) < 2000000) + if (Math.abs(spot) < 500000 || Math.abs(IAuraChunk.getAuraInArea(level, pos, 25) - IAuraChunk.DEFAULT_AURA) < 1000000) return; var drain = spot > 0; var toMove = Mth.ceil(Math.abs(spot) * 0.72F); diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemAuraBottle.java b/src/main/java/de/ellpeck/naturesaura/items/ItemAuraBottle.java index f78eb6f3..7c28323b 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemAuraBottle.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemAuraBottle.java @@ -7,6 +7,7 @@ import de.ellpeck.naturesaura.data.ItemModelGenerator; import de.ellpeck.naturesaura.reg.IColorProvidingItem; import de.ellpeck.naturesaura.reg.ICustomItemModel; import net.minecraft.client.color.item.ItemColor; +import net.minecraft.core.BlockPos; import net.minecraft.core.NonNullList; import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; import net.minecraft.network.chat.Component; @@ -42,33 +43,15 @@ public class ItemAuraBottle extends ItemImpl implements IColorProvidingItem, ICu var dispense = stack.split(1); if (offsetState.isAir()) { - if (IAuraChunk.getAuraInArea(level, offset, 30) >= 100000) { - dispense = ItemAuraBottle.setType(new ItemStack(ItemAuraBottle.this), IAuraType.forLevel(level)); - - var spot = IAuraChunk.getHighestSpot(level, offset, 30, offset); - IAuraChunk.getAuraChunk(level, spot).drainAura(spot, 20000); - } + var bottle = ItemAuraBottle.create(level, offset); + if (!bottle.isEmpty()) + dispense = bottle; } - DefaultDispenseItemBehavior.spawnItem(level, dispense, 6, facing, DispenserBlock.getDispensePosition(source)); return stack; }); } - public static IAuraType getType(ItemStack stack) { - if (!stack.hasTag()) - return NaturesAuraAPI.TYPE_OTHER; - var type = stack.getTag().getString("stored_type"); - if (type.isEmpty()) - return NaturesAuraAPI.TYPE_OTHER; - return NaturesAuraAPI.AURA_TYPES.get(new ResourceLocation(type)); - } - - public static ItemStack setType(ItemStack stack, IAuraType type) { - stack.getOrCreateTag().putString("stored_type", type.getName().toString()); - return stack; - } - @Override public void fillItemCategory(CreativeModeTab tab, NonNullList items) { if (this.allowedIn(tab)) { @@ -98,7 +81,34 @@ public class ItemAuraBottle extends ItemImpl implements IColorProvidingItem, ICu .texture("layer1", "item/" + this.getBaseName() + "_overlay"); } - private class EventHandler { + public static IAuraType getType(ItemStack stack) { + if (!stack.hasTag()) + return NaturesAuraAPI.TYPE_OTHER; + var type = stack.getTag().getString("stored_type"); + if (type.isEmpty()) + return NaturesAuraAPI.TYPE_OTHER; + return NaturesAuraAPI.AURA_TYPES.get(new ResourceLocation(type)); + } + + public static ItemStack setType(ItemStack stack, IAuraType type) { + stack.getOrCreateTag().putString("stored_type", type.getName().toString()); + return stack; + } + + private static ItemStack create(Level level, BlockPos pos) { + var aura = IAuraChunk.getAuraInArea(level, pos, 30); + if (aura <= -100000) { + return new ItemStack(ModItems.VACUUM_BOTTLE); + } else if (aura >= 100000) { + var spot = IAuraChunk.getHighestSpot(level, pos, 30, pos); + IAuraChunk.getAuraChunk(level, spot).drainAura(spot, 20000); + return ItemAuraBottle.setType(new ItemStack(ModItems.AURA_BOTTLE), IAuraType.forLevel(level)); + } else { + return ItemStack.EMPTY; + } + } + + private static class EventHandler { @SubscribeEvent public void onRightClick(PlayerInteractEvent.RightClickItem event) { @@ -109,23 +119,19 @@ public class ItemAuraBottle extends ItemImpl implements IColorProvidingItem, ICu HitResult ray = Item.getPlayerPOVHitResult(player.level, player, ClipContext.Fluid.NONE); if (ray.getType() == HitResult.Type.BLOCK) return; - var pos = player.blockPosition(); - if (IAuraChunk.getAuraInArea(player.level, pos, 30) < 100000) + var bottle = ItemAuraBottle.create(player.level, player.blockPosition()); + if (bottle.isEmpty()) return; if (!player.level.isClientSide) { held.shrink(1); - - var stack = ItemAuraBottle.setType(new ItemStack(ItemAuraBottle.this), IAuraType.forLevel(player.level)); - if (!player.addItem(stack)) - player.level.addFreshEntity(new ItemEntity(player.level, player.getX(), player.getY(), player.getZ(), stack)); - - var spot = IAuraChunk.getHighestSpot(player.level, pos, 30, pos); - IAuraChunk.getAuraChunk(player.level, spot).drainAura(spot, 20000); + if (!player.addItem(bottle)) + player.level.addFreshEntity(new ItemEntity(player.level, player.getX(), player.getY(), player.getZ(), bottle)); player.level.playSound(null, player.getX(), player.getY(), player.getZ(), SoundEvents.BOTTLE_FILL_DRAGONBREATH, SoundSource.PLAYERS, 1F, 1F); } + player.swing(event.getHand()); } diff --git a/src/main/java/de/ellpeck/naturesaura/items/ModItems.java b/src/main/java/de/ellpeck/naturesaura/items/ModItems.java index 0b0d1468..52d7a1a4 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ModItems.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ModItems.java @@ -64,4 +64,5 @@ public final class ModItems { public static Item BREAK_PREVENTION; public static Item PET_REVIVER; public static Item NETHERITE_FINDER; + public static Item VACUUM_BOTTLE; } diff --git a/src/main/java/de/ellpeck/naturesaura/reg/ModRegistry.java b/src/main/java/de/ellpeck/naturesaura/reg/ModRegistry.java index ee4e038a..bc22414e 100644 --- a/src/main/java/de/ellpeck/naturesaura/reg/ModRegistry.java +++ b/src/main/java/de/ellpeck/naturesaura/reg/ModRegistry.java @@ -206,7 +206,8 @@ public final class ModRegistry { new ItemStructureFinder("outpost_finder", BuiltinStructures.PILLAGER_OUTPOST, 0xab9f98, 2048), new ItemBreakPrevention(), new ItemPetReviver(), - new ItemNetheriteFinder() + new ItemNetheriteFinder(), + new ItemImpl("vacuum_bottle") ); Helper.populateObjectHolders(ModItems.class, event.getForgeRegistry()); }); diff --git a/src/main/resources/assets/naturesaura/lang/en_us.json b/src/main/resources/assets/naturesaura/lang/en_us.json index 6e5b8de4..329675ed 100644 --- a/src/main/resources/assets/naturesaura/lang/en_us.json +++ b/src/main/resources/assets/naturesaura/lang/en_us.json @@ -94,6 +94,7 @@ "item.naturesaura.book.name": "Book of Natural Aura", "item.naturesaura.shockwave_creator": "Amulet of Wrath", "item.naturesaura.multiblock_maker": "Multiblock Maker", + "item.naturesaura.vacuum_bottle": "Bottled Vacuum", "item.naturesaura.aura_bottle.naturesaura:overworld": "Bottled Sunlight", "item.naturesaura.aura_bottle.naturesaura:nether": "Bottled Ghosts", "item.naturesaura.aura_bottle.naturesaura:end": "Bottled Darkness", diff --git a/src/main/resources/assets/naturesaura/textures/item/vacuum_bottle.png b/src/main/resources/assets/naturesaura/textures/item/vacuum_bottle.png new file mode 100644 index 0000000000000000000000000000000000000000..c7d897a3d0f672335088dddf210787913df83bee GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|PI$UFhFJ6_ zCrEs15S;&HYRvinJU|ehe>aiiex>y4s5xvocK@I4f6_d+;9oIoIa|E5;2yE0T@PM< z|F3;F^#Ad1^1u4Md4(07h4^d_YWH7m(DvW|-#lD6@xkNA$|>x5%pxKp|MG!G*sH6n z`{h6Qdg%N6`w!n77Je-8p_R4m?W0GJ3T_`gdh~yBadC1fYnXV+I;*oEUS3vjGtiD? zD=aKz1A;bDcR8U{OPM1;+w}GH{>8_{{Hf3Ruec|$^SZz$lS`ru4D)=$Zp@t!2l6q4 Mr>mdKI;Vst08Th=#{d8T literal 0 HcmV?d00001