custom throwable projectile

This commit is contained in:
Kaupenjoe
2023-11-03 14:06:00 +01:00
parent 1953584c1d
commit c8c818e3a6
26 changed files with 256 additions and 5 deletions

View File

@@ -1,8 +1,9 @@
// 1.20.1 2023-10-27T15:30:02.3167041 Item Models: tutorialmod // 1.20.1 2023-11-03T14:02:05.8529024 Item Models: tutorialmod
f746b64540daf2ab6302b3ec01a78490c48fc10b assets/tutorialmod/models/item/bar_brawl_music_disc.json f746b64540daf2ab6302b3ec01a78490c48fc10b assets/tutorialmod/models/item/bar_brawl_music_disc.json
d3e9cad00ae44c9319dfbb411667eb4a09a63e57 assets/tutorialmod/models/item/catmint.json d3e9cad00ae44c9319dfbb411667eb4a09a63e57 assets/tutorialmod/models/item/catmint.json
6126e26da373f9113d9e9be875b14a0d13857444 assets/tutorialmod/models/item/corn.json 6126e26da373f9113d9e9be875b14a0d13857444 assets/tutorialmod/models/item/corn.json
4c5c277fa6360b149d6c3ab20584fcc4450cda27 assets/tutorialmod/models/item/corn_seeds.json 4c5c277fa6360b149d6c3ab20584fcc4450cda27 assets/tutorialmod/models/item/corn_seeds.json
798aa8856a8439e5ead445b62c2c79a11612c545 assets/tutorialmod/models/item/dice.json
93719e53df04c62d91023fe733206eb93b7aac86 assets/tutorialmod/models/item/metal_detector.json 93719e53df04c62d91023fe733206eb93b7aac86 assets/tutorialmod/models/item/metal_detector.json
d07710d2ac53c1f602f0c1f40f9a7d42bdb1092b assets/tutorialmod/models/item/pine_boat.json d07710d2ac53c1f602f0c1f40f9a7d42bdb1092b assets/tutorialmod/models/item/pine_boat.json
0e6c1cfbeb70a4ffd5b097ec1a6562763b8aa577 assets/tutorialmod/models/item/pine_chest_boat.json 0e6c1cfbeb70a4ffd5b097ec1a6562763b8aa577 assets/tutorialmod/models/item/pine_chest_boat.json

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "tutorialmod:item/dice"
}
}

View File

@@ -19,6 +19,7 @@ import net.minecraft.client.gui.screens.MenuScreens;
import net.minecraft.client.renderer.Sheets; import net.minecraft.client.renderer.Sheets;
import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.EntityRenderers; import net.minecraft.client.renderer.entity.EntityRenderers;
import net.minecraft.client.renderer.entity.ThrownItemRenderer;
import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EntityType;
import net.minecraft.world.item.CreativeModeTabs; import net.minecraft.world.item.CreativeModeTabs;
import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Blocks;
@@ -96,6 +97,8 @@ public class TutorialMod {
EntityRenderers.register(ModEntities.MOD_BOAT.get(), pContext -> new ModBoatRenderer(pContext, false)); EntityRenderers.register(ModEntities.MOD_BOAT.get(), pContext -> new ModBoatRenderer(pContext, false));
EntityRenderers.register(ModEntities.MOD_CHEST_BOAT.get(), pContext -> new ModBoatRenderer(pContext, true)); EntityRenderers.register(ModEntities.MOD_CHEST_BOAT.get(), pContext -> new ModBoatRenderer(pContext, true));
EntityRenderers.register(ModEntities.DICE_PROJECTILE.get(), ThrownItemRenderer::new);
MenuScreens.register(ModMenuTypes.GEM_POLISHING_MENU.get(), GemPolishingStationScreen::new); MenuScreens.register(ModMenuTypes.GEM_POLISHING_MENU.get(), GemPolishingStationScreen::new);
} }
} }

View File

@@ -149,6 +149,9 @@ public class ModBlocks {
() -> new ModWallHangingSignBlock(BlockBehaviour.Properties.copy(Blocks.OAK_WALL_HANGING_SIGN), ModWoodTypes.PINE)); () -> new ModWallHangingSignBlock(BlockBehaviour.Properties.copy(Blocks.OAK_WALL_HANGING_SIGN), ModWoodTypes.PINE));
public static final RegistryObject<Block> DICE_BLOCK = BLOCKS.register("dice_block",
() -> new DiceBlock(BlockBehaviour.Properties.copy(Blocks.STONE).noLootTable()));
private static <T extends Block> RegistryObject<T> registerBlock(String name, Supplier<T> block) { private static <T extends Block> RegistryObject<T> registerBlock(String name, Supplier<T> block) {
RegistryObject<T> toReturn = BLOCKS.register(name, block); RegistryObject<T> toReturn = BLOCKS.register(name, block);

View File

@@ -0,0 +1,52 @@
package net.kaupenjoe.tutorialmod.block.custom;
import net.minecraft.core.Direction;
import net.minecraft.util.RandomSource;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.DirectionProperty;
import org.jetbrains.annotations.Nullable;
public class DiceBlock extends Block {
public static DirectionProperty FACING = DirectionProperty.create("number",
Direction.UP,
Direction.NORTH,
Direction.EAST,
Direction.SOUTH,
Direction.WEST,
Direction.DOWN);
public DiceBlock(Properties properties) {
super(properties);
}
@Nullable
@Override
public BlockState getStateForPlacement(BlockPlaceContext placeContext) {
return this.defaultBlockState().setValue(FACING, getRandomDirection());
}
public BlockState getRandomBlockState() {
return this.defaultBlockState().setValue(FACING, getRandomDirection());
}
@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
builder.add(FACING);
}
private Direction getRandomDirection() {
Direction[] dirs = new Direction[] {
Direction.UP,
Direction.NORTH,
Direction.EAST,
Direction.SOUTH,
Direction.WEST,
Direction.DOWN
};
return dirs[RandomSource.create().nextIntBetweenInclusive(0, dirs.length-1)];
}
}

View File

@@ -88,6 +88,8 @@ public class ModItemModelProvider extends ItemModelProvider {
simpleItem(ModItems.PINE_BOAT); simpleItem(ModItems.PINE_BOAT);
simpleItem(ModItems.PINE_CHEST_BOAT); simpleItem(ModItems.PINE_CHEST_BOAT);
simpleItem(ModItems.DICE);
} }
// Shoutout to El_Redstoniano for making this // Shoutout to El_Redstoniano for making this

View File

@@ -1,6 +1,7 @@
package net.kaupenjoe.tutorialmod.entity; package net.kaupenjoe.tutorialmod.entity;
import net.kaupenjoe.tutorialmod.TutorialMod; import net.kaupenjoe.tutorialmod.TutorialMod;
import net.kaupenjoe.tutorialmod.entity.custom.DiceProjectileEntity;
import net.kaupenjoe.tutorialmod.entity.custom.ModBoatEntity; import net.kaupenjoe.tutorialmod.entity.custom.ModBoatEntity;
import net.kaupenjoe.tutorialmod.entity.custom.ModChestBoatEntity; import net.kaupenjoe.tutorialmod.entity.custom.ModChestBoatEntity;
import net.kaupenjoe.tutorialmod.entity.custom.RhinoEntity; import net.kaupenjoe.tutorialmod.entity.custom.RhinoEntity;
@@ -28,6 +29,12 @@ public class ModEntities {
.sized(1.375f, 0.5625f).build("mod_chest_boat")); .sized(1.375f, 0.5625f).build("mod_chest_boat"));
public static final RegistryObject<EntityType<DiceProjectileEntity>> DICE_PROJECTILE =
ENTITY_TYPES.register("dice_projectile", () -> EntityType.Builder.<DiceProjectileEntity>of(DiceProjectileEntity::new, MobCategory.MISC)
.sized(0.5f, 0.5f).build("dice_projectile"));
public static void register(IEventBus eventBus) { public static void register(IEventBus eventBus) {
ENTITY_TYPES.register(eventBus); ENTITY_TYPES.register(eventBus);

View File

@@ -0,0 +1,42 @@
package net.kaupenjoe.tutorialmod.entity.custom;
import net.kaupenjoe.tutorialmod.block.ModBlocks;
import net.kaupenjoe.tutorialmod.block.custom.DiceBlock;
import net.kaupenjoe.tutorialmod.entity.ModEntities;
import net.kaupenjoe.tutorialmod.item.ModItems;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.projectile.ThrowableItemProjectile;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.BlockHitResult;
public class DiceProjectileEntity extends ThrowableItemProjectile {
public DiceProjectileEntity(EntityType<? extends ThrowableItemProjectile> pEntityType, Level pLevel) {
super(pEntityType, pLevel);
}
public DiceProjectileEntity(Level pLevel) {
super(ModEntities.DICE_PROJECTILE.get(), pLevel);
}
public DiceProjectileEntity(Level pLevel, LivingEntity livingEntity) {
super(ModEntities.DICE_PROJECTILE.get(), livingEntity, pLevel);
}
@Override
protected Item getDefaultItem() {
return ModItems.DICE.get();
}
@Override
protected void onHitBlock(BlockHitResult pResult) {
if(!this.level().isClientSide()) {
this.level().broadcastEntityEvent(this, ((byte) 3));
this.level().setBlock(blockPosition(), ((DiceBlock) ModBlocks.DICE_BLOCK.get()).getRandomBlockState(), 3);
}
this.discard();
super.onHitBlock(pResult);
}
}

View File

@@ -55,6 +55,8 @@ public class ModCreativeModTabs {
pOutput.accept(ModItems.PINE_BOAT.get()); pOutput.accept(ModItems.PINE_BOAT.get());
pOutput.accept(ModItems.PINE_CHEST_BOAT.get()); pOutput.accept(ModItems.PINE_CHEST_BOAT.get());
pOutput.accept(ModItems.DICE.get());
pOutput.accept(ModBlocks.SAPPHIRE_BLOCK.get()); pOutput.accept(ModBlocks.SAPPHIRE_BLOCK.get());
pOutput.accept(ModBlocks.RAW_SAPPHIRE_BLOCK.get()); pOutput.accept(ModBlocks.RAW_SAPPHIRE_BLOCK.get());

View File

@@ -4,10 +4,7 @@ import net.kaupenjoe.tutorialmod.TutorialMod;
import net.kaupenjoe.tutorialmod.block.ModBlocks; import net.kaupenjoe.tutorialmod.block.ModBlocks;
import net.kaupenjoe.tutorialmod.entity.ModEntities; import net.kaupenjoe.tutorialmod.entity.ModEntities;
import net.kaupenjoe.tutorialmod.entity.custom.ModBoatEntity; import net.kaupenjoe.tutorialmod.entity.custom.ModBoatEntity;
import net.kaupenjoe.tutorialmod.item.custom.FuelItem; import net.kaupenjoe.tutorialmod.item.custom.*;
import net.kaupenjoe.tutorialmod.item.custom.MetalDetectorItem;
import net.kaupenjoe.tutorialmod.item.custom.ModArmorItem;
import net.kaupenjoe.tutorialmod.item.custom.ModBoatItem;
import net.kaupenjoe.tutorialmod.sound.ModSounds; import net.kaupenjoe.tutorialmod.sound.ModSounds;
import net.minecraft.world.item.*; import net.minecraft.world.item.*;
import net.minecraftforge.common.ForgeSpawnEggItem; import net.minecraftforge.common.ForgeSpawnEggItem;
@@ -82,6 +79,9 @@ public class ModItems {
public static final RegistryObject<Item> PINE_CHEST_BOAT = ITEMS.register("pine_chest_boat", public static final RegistryObject<Item> PINE_CHEST_BOAT = ITEMS.register("pine_chest_boat",
() -> new ModBoatItem(true, ModBoatEntity.Type.PINE, new Item.Properties())); () -> new ModBoatItem(true, ModBoatEntity.Type.PINE, new Item.Properties()));
public static final RegistryObject<Item> DICE = ITEMS.register("dice",
() -> new DiceItem(new Item.Properties()));
public static void register(IEventBus eventBus) { public static void register(IEventBus eventBus) {
ITEMS.register(eventBus); ITEMS.register(eventBus);
} }

View File

@@ -0,0 +1,38 @@
package net.kaupenjoe.tutorialmod.item.custom;
import net.kaupenjoe.tutorialmod.entity.custom.DiceProjectileEntity;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.stats.Stats;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
public class DiceItem extends Item {
public DiceItem(Properties pProperties) {
super(pProperties);
}
public InteractionResultHolder<ItemStack> use(Level pLevel, Player pPlayer, InteractionHand pHand) {
ItemStack itemstack = pPlayer.getItemInHand(pHand);
pLevel.playSound((Player)null, pPlayer.getX(), pPlayer.getY(), pPlayer.getZ(),
SoundEvents.SNOWBALL_THROW, SoundSource.NEUTRAL, 0.5F, 0.4F / (pLevel.getRandom().nextFloat() * 0.4F + 0.8F));
if (!pLevel.isClientSide) {
DiceProjectileEntity dice = new DiceProjectileEntity(pLevel, pPlayer);
dice.setItem(itemstack);
dice.shootFromRotation(pPlayer, pPlayer.getXRot(), pPlayer.getYRot(), 0.0F, 1.5F, 1.0F);
pLevel.addFreshEntity(dice);
}
pPlayer.awardStat(Stats.ITEM_USED.get(this));
if (!pPlayer.getAbilities().instabuild) {
itemstack.shrink(1);
}
return InteractionResultHolder.sidedSuccess(itemstack, pLevel.isClientSide());
}
}

View File

@@ -0,0 +1,22 @@
{
"variants": {
"number=up": {
"model": "tutorialmod:block/dice_1"
},
"number=north": {
"model": "tutorialmod:block/dice_2"
},
"number=east": {
"model": "tutorialmod:block/dice_3"
},
"number=south": {
"model": "tutorialmod:block/dice_5"
},
"number=west": {
"model": "tutorialmod:block/dice_4"
},
"number=down": {
"model": "tutorialmod:block/dice_6"
}
}
}

View File

@@ -29,6 +29,7 @@
"item.tutorialmod.pine_boat": "Pine Boat", "item.tutorialmod.pine_boat": "Pine Boat",
"item.tutorialmod.pine_chest_boat": "Pine Chest Boat", "item.tutorialmod.pine_chest_boat": "Pine Chest Boat",
"item.tutorialmod.dice": "Dice",
"block.tutorialmod.sapphire_block": "Block of Sapphire", "block.tutorialmod.sapphire_block": "Block of Sapphire",
"block.tutorialmod.raw_sapphire_block": "Block of Raw Sapphire", "block.tutorialmod.raw_sapphire_block": "Block of Raw Sapphire",

View File

@@ -0,0 +1,12 @@
{
"parent": "minecraft:block/cube",
"textures": {
"up": "tutorialmod:block/dice_1",
"down": "tutorialmod:block/dice_6",
"north": "tutorialmod:block/dice_2",
"east": "tutorialmod:block/dice_3",
"south": "tutorialmod:block/dice_5",
"west": "tutorialmod:block/dice_4",
"particle": "tutorialmod:block/dice_1"
}
}

View File

@@ -0,0 +1,12 @@
{
"parent": "minecraft:block/cube",
"textures": {
"up": "tutorialmod:block/dice_2",
"down": "tutorialmod:block/dice_5",
"north": "tutorialmod:block/dice_6",
"east": "tutorialmod:block/dice_3",
"south": "tutorialmod:block/dice_1",
"west": "tutorialmod:block/dice_4",
"particle": "tutorialmod:block/dice_2"
}
}

View File

@@ -0,0 +1,12 @@
{
"parent": "minecraft:block/cube",
"textures": {
"up": "tutorialmod:block/dice_3",
"down": "tutorialmod:block/dice_4",
"north": "tutorialmod:block/dice_6",
"east": "tutorialmod:block/dice_2",
"south": "tutorialmod:block/dice_1",
"west": "tutorialmod:block/dice_5",
"particle": "tutorialmod:block/dice_3"
}
}

View File

@@ -0,0 +1,12 @@
{
"parent": "minecraft:block/cube",
"textures": {
"up": "tutorialmod:block/dice_4",
"down": "tutorialmod:block/dice_3",
"north": "tutorialmod:block/dice_1",
"east": "tutorialmod:block/dice_5",
"south": "tutorialmod:block/dice_6",
"west": "tutorialmod:block/dice_2",
"particle": "tutorialmod:block/dice_4"
}
}

View File

@@ -0,0 +1,12 @@
{
"parent": "minecraft:block/cube",
"textures": {
"up": "tutorialmod:block/dice_5",
"down": "tutorialmod:block/dice_2",
"north": "tutorialmod:block/dice_1",
"east": "tutorialmod:block/dice_4",
"south": "tutorialmod:block/dice_6",
"west": "tutorialmod:block/dice_3",
"particle": "tutorialmod:block/dice_5"
}
}

View File

@@ -0,0 +1,12 @@
{
"parent": "minecraft:block/cube",
"textures": {
"up": "tutorialmod:block/dice_6",
"down": "tutorialmod:block/dice_1",
"north": "tutorialmod:block/dice_2",
"east": "tutorialmod:block/dice_4",
"south": "tutorialmod:block/dice_5",
"west": "tutorialmod:block/dice_3",
"particle": "tutorialmod:block/dice_6"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 B