diff --git a/src/main/java/de/jottyfan/quickiemod/QuickieMod.java b/src/main/java/de/jottyfan/quickiemod/QuickieMod.java index d53c7dd..a9f6fc5 100644 --- a/src/main/java/de/jottyfan/quickiemod/QuickieMod.java +++ b/src/main/java/de/jottyfan/quickiemod/QuickieMod.java @@ -19,6 +19,7 @@ public class QuickieMod implements ModInitializer { @Override public void onInitialize() { LOGGER.info("loading {}", MODID); + RegistryManager.registerBlockEntityTypes(); RegistryManager.registerItems(); RegistryManager.registerBlocks(); RegistryManager.registerFeatures(); diff --git a/src/main/java/de/jottyfan/quickiemod/blockentity/BlockEntityTypes.java b/src/main/java/de/jottyfan/quickiemod/blockentity/BlockEntityTypes.java new file mode 100644 index 0000000..f6339bc --- /dev/null +++ b/src/main/java/de/jottyfan/quickiemod/blockentity/BlockEntityTypes.java @@ -0,0 +1,22 @@ +package de.jottyfan.quickiemod.blockentity; + +import de.jottyfan.quickiemod.blocks.QuickieBlocks; +import de.jottyfan.quickiemod.init.BlockEntityIdentity; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; + +/** + * + * @author jotty + * + */ +public class BlockEntityTypes { + public static final BlockEntityType EMPTYLAVAHOARDER = Registry.register(Registries.BLOCK_ENTITY_TYPE, + BlockEntityIdentity.EMPTYLAVALHOARDER, BlockEntityType.Builder + .create(EmptyLavaHoarderBlockEntity::new, QuickieBlocks.EMPTYLAVAHOARDER.getBlock(), QuickieBlocks.LAVAHOARDER.getBlock()).build(null)); + public static final BlockEntityType ITEMHOARDER = Registry.register(Registries.BLOCK_ENTITY_TYPE, BlockEntityIdentity.ITEMHOARDER, + BlockEntityType.Builder.create(ItemHoarderBlockEntity::new, QuickieBlocks.ITEMHOARDER.getBlock()).build(null)); + public static final BlockEntityType MONSTERHOARDER = Registry.register(Registries.BLOCK_ENTITY_TYPE, + BlockEntityIdentity.MONSTERHOARDER, BlockEntityType.Builder.create(MonsterHoarderBlockEntity::new, QuickieBlocks.MONSTERHOARDER.getBlock()).build(null)); +} diff --git a/src/main/java/de/jottyfan/quickiemod/blockentity/BlockMonsterhoarder.java b/src/main/java/de/jottyfan/quickiemod/blockentity/BlockMonsterhoarder.java new file mode 100644 index 0000000..0c6572a --- /dev/null +++ b/src/main/java/de/jottyfan/quickiemod/blockentity/BlockMonsterhoarder.java @@ -0,0 +1,64 @@ +package de.jottyfan.quickiemod.blockentity; + +import java.util.ArrayList; +import java.util.List; + +import de.jottyfan.quickiemod.blocks.QuickieBlocks; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockEntityProvider; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityTicker; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContextParameterSet.Builder; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvents; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public class BlockMonsterhoarder extends Block implements BlockEntityProvider { + + + public BlockMonsterhoarder() { + super(AbstractBlock.Settings.create().hardness(2.5f).luminance(state -> 15)); + } + + @Override + public BlockEntity createBlockEntity(BlockPos pos, BlockState blockState) { + return new MonsterHoarderBlockEntity(pos, blockState); + } + + @Override + public BlockRenderType getRenderType(BlockState state) { + return BlockRenderType.MODEL; + } + + @Override + public BlockEntityTicker getTicker(World world, BlockState state, BlockEntityType type){ + return (world1, pos, state1, be) -> MonsterHoarderBlockEntity.tick(world1, pos, state1, be); + } + + @Override + public List getDroppedStacks(BlockState state, Builder builder) { + List list = new ArrayList<>(); + list.add(new ItemStack(QuickieBlocks.MONSTERHOARDER.getBlock())); + return list; + } + + @Override + public void onPlaced(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack itemStack) { + if (!world.isClient) { + world.playSound(null, pos, SoundEvents.UI_TOAST_CHALLENGE_COMPLETE, SoundCategory.PLAYERS, 1f, 1f); + } + super.onPlaced(world, pos, state, placer, itemStack); + } +} diff --git a/src/main/java/de/jottyfan/quickiemod/blockentity/EmptyLavaHoarderBlockEntity.java b/src/main/java/de/jottyfan/quickiemod/blockentity/EmptyLavaHoarderBlockEntity.java index 0ba7d89..468889c 100644 --- a/src/main/java/de/jottyfan/quickiemod/blockentity/EmptyLavaHoarderBlockEntity.java +++ b/src/main/java/de/jottyfan/quickiemod/blockentity/EmptyLavaHoarderBlockEntity.java @@ -3,7 +3,6 @@ package de.jottyfan.quickiemod.blockentity; import java.util.Random; import de.jottyfan.quickiemod.blocks.QuickieBlocks; -import de.jottyfan.quickiemod.init.RegistryManager; import de.jottyfan.quickiemod.items.QuickieItems; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; @@ -22,7 +21,7 @@ import net.minecraft.world.World; public class EmptyLavaHoarderBlockEntity extends BlockEntity { public EmptyLavaHoarderBlockEntity(BlockPos pos, BlockState state) { - super(RegistryManager.EMPTYLAVAHOARDER, pos, state); + super(BlockEntityTypes.EMPTYLAVAHOARDER, pos, state); } public static final void spawnRandomItems(World world, BlockPos pos, Integer count) { diff --git a/src/main/java/de/jottyfan/quickiemod/blockentity/ItemHoarderBlockEntity.java b/src/main/java/de/jottyfan/quickiemod/blockentity/ItemHoarderBlockEntity.java index 9a83ffc..a14665c 100644 --- a/src/main/java/de/jottyfan/quickiemod/blockentity/ItemHoarderBlockEntity.java +++ b/src/main/java/de/jottyfan/quickiemod/blockentity/ItemHoarderBlockEntity.java @@ -3,7 +3,6 @@ package de.jottyfan.quickiemod.blockentity; import java.util.ArrayList; import java.util.List; -import de.jottyfan.quickiemod.init.RegistryManager; import de.jottyfan.quickiemod.text.PrefixedText; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; @@ -35,7 +34,7 @@ public class ItemHoarderBlockEntity extends LootableContainerBlockEntity { private float suckradius; public ItemHoarderBlockEntity(BlockPos pos, BlockState state) { - super(RegistryManager.ITEMHOARDER, pos, state); + super(BlockEntityTypes.ITEMHOARDER, pos, state); stacks = DefaultedList.ofSize(54, ItemStack.EMPTY); setSuckradius(4f); // TODO: make it level up - able and start with 2 } diff --git a/src/main/java/de/jottyfan/quickiemod/blockentity/MonsterHoarderBlockEntity.java b/src/main/java/de/jottyfan/quickiemod/blockentity/MonsterHoarderBlockEntity.java new file mode 100644 index 0000000..9cf34b6 --- /dev/null +++ b/src/main/java/de/jottyfan/quickiemod/blockentity/MonsterHoarderBlockEntity.java @@ -0,0 +1,51 @@ +package de.jottyfan.quickiemod.blockentity; + +import java.util.List; + +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.entity.Entity; +import net.minecraft.entity.mob.HostileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public class MonsterHoarderBlockEntity extends BlockEntity { + + private float suckradius; + + public MonsterHoarderBlockEntity(BlockPos pos, BlockState state) { + super(BlockEntityTypes.MONSTERHOARDER, pos, state); + setSuckradius(8f); // TODO: make it level up - able and start with 2 + } + + public static void tick(World world, BlockPos pos, BlockState state, BlockEntity be) { + if (be instanceof MonsterHoarderBlockEntity) { + MonsterHoarderBlockEntity mhbe = (MonsterHoarderBlockEntity) be; + Box box = new Box(pos).expand(mhbe.getSuckradius()); + List entities = world.getOtherEntities(null, box); + for (Entity entity : entities) { + if (entity instanceof HostileEntity) { + if (entity.isFireImmune()) { + entity.kill(); + } else { + entity.setOnFireFor(90); + } + } + } + } + } + + public float getSuckradius() { + return suckradius; + } + + public void setSuckradius(float suckradius) { + this.suckradius = suckradius; + } +} diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/BlockMonsterhoarder.java b/src/main/java/de/jottyfan/quickiemod/blocks/BlockMonsterhoarder.java new file mode 100644 index 0000000..f635838 --- /dev/null +++ b/src/main/java/de/jottyfan/quickiemod/blocks/BlockMonsterhoarder.java @@ -0,0 +1,64 @@ +package de.jottyfan.quickiemod.blocks; + +import java.util.ArrayList; +import java.util.List; + +import de.jottyfan.quickiemod.blockentity.MonsterHoarderBlockEntity; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockEntityProvider; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityTicker; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContextParameterSet.Builder; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvents; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public class BlockMonsterhoarder extends Block implements BlockEntityProvider { + + + public BlockMonsterhoarder() { + super(AbstractBlock.Settings.create().hardness(2.5f).luminance(state -> 15)); + } + + @Override + public BlockEntity createBlockEntity(BlockPos pos, BlockState blockState) { + return new MonsterHoarderBlockEntity(pos, blockState); + } + + @Override + public BlockRenderType getRenderType(BlockState state) { + return BlockRenderType.MODEL; + } + + @Override + public BlockEntityTicker getTicker(World world, BlockState state, BlockEntityType type){ + return (world1, pos, state1, be) -> MonsterHoarderBlockEntity.tick(world1, pos, state1, be); + } + + @Override + public List getDroppedStacks(BlockState state, Builder builder) { + List list = new ArrayList<>(); + list.add(new ItemStack(QuickieBlocks.MONSTERHOARDER.getBlock())); + return list; + } + + @Override + public void onPlaced(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack itemStack) { + if (!world.isClient) { + world.playSound(null, pos, SoundEvents.UI_TOAST_CHALLENGE_COMPLETE, SoundCategory.PLAYERS, 1f, 1f); + } + super.onPlaced(world, pos, state, placer, itemStack); + } +} diff --git a/src/main/java/de/jottyfan/quickiemod/blocks/QuickieBlocks.java b/src/main/java/de/jottyfan/quickiemod/blocks/QuickieBlocks.java index bacfb0f..746e2bd 100644 --- a/src/main/java/de/jottyfan/quickiemod/blocks/QuickieBlocks.java +++ b/src/main/java/de/jottyfan/quickiemod/blocks/QuickieBlocks.java @@ -9,6 +9,7 @@ import net.minecraft.block.Block; */ public enum QuickieBlocks { // @formatter:off + MONSTERHOARDER(new BlockMonsterhoarder(), "monsterhoarder"), ITEMHOARDER(new BlockItemhoarder(), "itemhoarder"), LAVAHOARDER(new BlockLavahoarder(), "lavahoarder", false), EMPTYLAVAHOARDER(new BlockEmptyLavahoarder(), "emptylavahoarder"), diff --git a/src/main/java/de/jottyfan/quickiemod/init/RegistryManager.java b/src/main/java/de/jottyfan/quickiemod/init/RegistryManager.java index 9fb44ab..3d06d22 100644 --- a/src/main/java/de/jottyfan/quickiemod/init/RegistryManager.java +++ b/src/main/java/de/jottyfan/quickiemod/init/RegistryManager.java @@ -4,8 +4,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import de.jottyfan.quickiemod.QuickieMod; -import de.jottyfan.quickiemod.blockentity.EmptyLavaHoarderBlockEntity; -import de.jottyfan.quickiemod.blockentity.ItemHoarderBlockEntity; +import de.jottyfan.quickiemod.blockentity.BlockEntityTypes; import de.jottyfan.quickiemod.blocks.QuickieBlocks; import de.jottyfan.quickiemod.items.QuickieItems; import net.fabricmc.fabric.api.biome.v1.BiomeModifications; @@ -14,7 +13,6 @@ import net.fabricmc.fabric.api.biome.v1.ModificationPhase; import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup; import net.fabricmc.fabric.api.registry.FuelRegistry; import net.minecraft.block.ComposterBlock; -import net.minecraft.block.entity.BlockEntityType; import net.minecraft.item.BlockItem; import net.minecraft.item.Item.Settings; import net.minecraft.item.ItemStack; @@ -33,9 +31,6 @@ import net.minecraft.util.Identifier; public class RegistryManager { private static final Logger LOGGER = LoggerFactory.getLogger(QuickieMod.MODID); - public static final BlockEntityType EMPTYLAVAHOARDER = Registry.register(Registries.BLOCK_ENTITY_TYPE, BlockEntityIdentity.EMPTYLAVALHOARDER, BlockEntityType.Builder.create(EmptyLavaHoarderBlockEntity::new, QuickieBlocks.EMPTYLAVAHOARDER.getBlock(), QuickieBlocks.LAVAHOARDER.getBlock()).build(null)); - public static final BlockEntityType ITEMHOARDER = Registry.register(Registries.BLOCK_ENTITY_TYPE, BlockEntityIdentity.ITEMHOARDER, BlockEntityType.Builder.create(ItemHoarderBlockEntity::new, QuickieBlocks.ITEMHOARDER.getBlock()).build(null)); - public static final void registerItemGroup() { Registry.register(Registries.ITEM_GROUP, RegistryKey.of(RegistryKeys.ITEM_GROUP, new Identifier(QuickieMod.MODID, "itemgroups")), FabricItemGroup.builder().icon(() -> new ItemStack(QuickieItems.ROTTEN_FLESH_STRIPES.getItem())).displayName(Text.literal(QuickieMod.MODID)) @@ -81,4 +76,8 @@ public class RegistryManager { BiomeModifications.create(new Identifier(QuickieMod.MODID, "nether_features")).add(ModificationPhase.ADDITIONS, BiomeSelectors.foundInTheNether(), FeaturesManager.netherOres()); } + + public static final void registerBlockEntityTypes() { + new BlockEntityTypes(); + } } diff --git a/src/main/resources/assets/quickiemod/blockstates/monsterhoarder.json b/src/main/resources/assets/quickiemod/blockstates/monsterhoarder.json new file mode 100644 index 0000000..659e2e0 --- /dev/null +++ b/src/main/resources/assets/quickiemod/blockstates/monsterhoarder.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "quickiemod:block/monsterhoarder" + } + } +} diff --git a/src/main/resources/assets/quickiemod/models/block/monsterhoarder.json b/src/main/resources/assets/quickiemod/models/block/monsterhoarder.json new file mode 100644 index 0000000..331985d --- /dev/null +++ b/src/main/resources/assets/quickiemod/models/block/monsterhoarder.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "quickiemod:block/monsterhoarder" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickiemod/models/item/monsterhoarder.json b/src/main/resources/assets/quickiemod/models/item/monsterhoarder.json new file mode 100644 index 0000000..5ef4898 --- /dev/null +++ b/src/main/resources/assets/quickiemod/models/item/monsterhoarder.json @@ -0,0 +1,10 @@ +{ + "parent": "quickiemod:block/monsterhoarder", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickiemod/textures/block/monsterhoarder.png b/src/main/resources/assets/quickiemod/textures/block/monsterhoarder.png new file mode 100644 index 0000000..aba9272 Binary files /dev/null and b/src/main/resources/assets/quickiemod/textures/block/monsterhoarder.png differ diff --git a/src/main/resources/data/quickiemod/recipes/shaped_monsterhoarder.json b/src/main/resources/data/quickiemod/recipes/shaped_monsterhoarder.json new file mode 100644 index 0000000..4360b7d --- /dev/null +++ b/src/main/resources/data/quickiemod/recipes/shaped_monsterhoarder.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "qqq", + "qtq", + "qqq" + ], + "key": { + "q": { + "item": "quickiemod:quickieingot" + }, + "t": { + "item": "minecraft:torch" + } + }, + "result": { + "id": "quickiemod:monsterhoarder", + "count": 1 + } +} \ No newline at end of file