Dice, please fix
This commit is contained in:
parent
ab7293e855
commit
3c3b802ab9
16 changed files with 256 additions and 5 deletions
|
@ -22,6 +22,9 @@ import net.minecraft.recipe.book.RecipeCategory;
|
|||
import net.minecraft.registry.RegistryWrapper;
|
||||
import net.minecraft.registry.tag.BlockTags;
|
||||
import net.minecraft.util.Util;
|
||||
import su.a71.new_soviet.registration.NSE_Blocks;
|
||||
import su.a71.new_soviet.registration.NSE_Custom;
|
||||
import su.a71.new_soviet.registration.NSE_Items;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
|
|
@ -4,18 +4,25 @@ import com.google.gson.Gson;
|
|||
import com.google.gson.GsonBuilder;
|
||||
import net.fabricmc.api.ModInitializer;
|
||||
|
||||
import net.minecraft.util.math.random.Random;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import su.a71.new_soviet.registration.NSE_Blocks;
|
||||
import su.a71.new_soviet.registration.NSE_Combat;
|
||||
import su.a71.new_soviet.registration.NSE_Custom;
|
||||
import su.a71.new_soviet.registration.NSE_Items;
|
||||
|
||||
public class NewSoviet implements ModInitializer {
|
||||
public static final String MOD_ID = "new_soviet";
|
||||
public static final String MOD_NAME = "New Soviet Era";
|
||||
public static final Logger LOG;
|
||||
public static final Gson GSON;
|
||||
public static final Random RANDOM;
|
||||
|
||||
static {
|
||||
LOG = LoggerFactory.getLogger(MOD_NAME);
|
||||
GSON = (new GsonBuilder()).setPrettyPrinting().create();
|
||||
RANDOM = Random.create();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -24,5 +31,6 @@ public class NewSoviet implements ModInitializer {
|
|||
NSE_Blocks.initFlame();
|
||||
NSE_Items.init();
|
||||
NSE_Custom.init();
|
||||
NSE_Combat.init();
|
||||
}
|
||||
}
|
60
src/main/java/su/a71/new_soviet/blocks/WindowBlock.java
Normal file
60
src/main/java/su/a71/new_soviet/blocks/WindowBlock.java
Normal file
|
@ -0,0 +1,60 @@
|
|||
package su.a71.new_soviet.blocks;
|
||||
|
||||
import net.minecraft.block.*;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.projectile.ProjectileEntity;
|
||||
import net.minecraft.item.ItemPlacementContext;
|
||||
import net.minecraft.state.StateManager;
|
||||
import net.minecraft.state.property.BooleanProperty;
|
||||
import net.minecraft.state.property.IntProperty;
|
||||
import net.minecraft.state.property.Properties;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.util.shape.VoxelShape;
|
||||
import net.minecraft.util.shape.VoxelShapes;
|
||||
import net.minecraft.world.BlockView;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class WindowBlock extends HorizontalFacingBlock {
|
||||
public static final IntProperty WIN_TYPE = IntProperty.of("window_type", 0, 2);
|
||||
public static final BooleanProperty BROKEN = Properties.CRACKED;
|
||||
|
||||
public WindowBlock(Settings settings) {
|
||||
super(settings);
|
||||
setDefaultState(getDefaultState()
|
||||
.with(Properties.HORIZONTAL_FACING, Direction.NORTH)
|
||||
.with(BROKEN, false)
|
||||
.with(WIN_TYPE, 0));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
|
||||
builder.add(Properties.HORIZONTAL_FACING, WIN_TYPE, Properties.CRACKED);
|
||||
}
|
||||
|
||||
public void onEntityCollision(World world, BlockPos pos, Entity entity) {
|
||||
if (entity instanceof ProjectileEntity) {
|
||||
world.getBlockState(pos);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext ctx) {
|
||||
Direction dir = state.get(FACING);
|
||||
return switch (dir) {
|
||||
case NORTH, SOUTH -> VoxelShapes.cuboid(0.0625f, 0.0f, 0.3125f, 0.9375f, 0.5625f, 0.6875f);
|
||||
case EAST, WEST -> VoxelShapes.cuboid(0.3125f, 0.0f, 0.0625f, 0.6875f, 0.5625f, 0.9375f);
|
||||
default -> VoxelShapes.fullCube();
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getPlacementState(ItemPlacementContext ctx) {
|
||||
BlockState above = ctx.getWorld().getBlockState(ctx.getBlockPos().up());
|
||||
BlockState below = ctx.getWorld().getBlockState(ctx.getBlockPos().down());
|
||||
// if ((above.getBlock() instanceof Window && ((Window) above.getBlock()).getStateManager().getProperty("broken") == true) || (below.getBlock() instanceof Window)) {
|
||||
//
|
||||
// }
|
||||
return super.getPlacementState(ctx).with(Properties.HORIZONTAL_FACING, ctx.getHorizontalPlayerFacing().getOpposite());
|
||||
}
|
||||
}
|
35
src/main/java/su/a71/new_soviet/items/DiceItem.java
Normal file
35
src/main/java/su/a71/new_soviet/items/DiceItem.java
Normal file
|
@ -0,0 +1,35 @@
|
|||
package su.a71.new_soviet.items;
|
||||
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.sound.SoundCategory;
|
||||
import net.minecraft.stat.Stats;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.util.TypedActionResult;
|
||||
import net.minecraft.world.World;
|
||||
import su.a71.new_soviet.NewSoviet;
|
||||
import su.a71.new_soviet.registration.NSE_Items;
|
||||
|
||||
public class DiceItem extends Item {
|
||||
public DiceItem(Settings settings) {
|
||||
super(settings);
|
||||
}
|
||||
|
||||
public TypedActionResult<ItemStack> use(World world, PlayerEntity user, Hand hand) {
|
||||
ItemStack itemStack = user.getStackInHand(hand);
|
||||
user.getItemCooldownManager().set(this, 20 * itemStack.getCount());
|
||||
if (!world.isClient) {
|
||||
StringBuilder output = new StringBuilder();
|
||||
for (var i = 0; i < itemStack.getCount(); i++) {
|
||||
world.playSound((PlayerEntity)null, user.getX(), user.getY(), user.getZ(), NSE_Items.DICE_SOUND, SoundCategory.NEUTRAL, 0.5F, 0.4F / (world.getRandom().nextFloat() * 0.4F + 0.8F));
|
||||
output.append(NewSoviet.RANDOM.nextBetween(1, 6) + ", ");
|
||||
}
|
||||
user.sendMessage(Text.translatable("item.new_soviet.dice.thrown").append(" " + output.subSequence(0, output.length() - 2)));
|
||||
}
|
||||
|
||||
user.incrementStat(Stats.USED.getOrCreateStat(this));
|
||||
return TypedActionResult.success(itemStack, world.isClient());
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package su.a71.new_soviet;
|
||||
package su.a71.new_soviet.registration;
|
||||
|
||||
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
|
||||
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
|
||||
|
@ -18,6 +18,7 @@ import net.minecraft.registry.RegistryKey;
|
|||
import net.minecraft.sound.BlockSoundGroup;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import su.a71.new_soviet.NewSoviet;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.function.Supplier;
|
48
src/main/java/su/a71/new_soviet/registration/NSE_Combat.java
Normal file
48
src/main/java/su/a71/new_soviet/registration/NSE_Combat.java
Normal file
|
@ -0,0 +1,48 @@
|
|||
package su.a71.new_soviet.registration;
|
||||
|
||||
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
|
||||
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
|
||||
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
|
||||
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.MapColor;
|
||||
import net.minecraft.item.*;
|
||||
import net.minecraft.registry.Registries;
|
||||
import net.minecraft.registry.Registry;
|
||||
import net.minecraft.registry.RegistryKey;
|
||||
import net.minecraft.sound.BlockSoundGroup;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import su.a71.new_soviet.NewSoviet;
|
||||
import su.a71.new_soviet.blocks.*;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class NSE_Combat {
|
||||
|
||||
public static final LandMineBlock LANDMINE = new LandMineBlock(FabricBlockSettings.create().mapColor(MapColor.LIGHT_GRAY));
|
||||
|
||||
private static final ItemGroup NSE_COMBAT_TAB = FabricItemGroup.builder()
|
||||
.icon(() -> new ItemStack(LANDMINE))
|
||||
.displayName(Text.translatable("itemGroup.new_soviet.combat"))
|
||||
.build();
|
||||
|
||||
|
||||
private static void register(String name, Supplier<? extends Block> supplier, ItemGroup tab) {
|
||||
Registry.register(Registries.BLOCK, new Identifier(NewSoviet.MOD_ID, name), supplier.get());
|
||||
BlockItem blockItem = new BlockItem(supplier.get(), new FabricItemSettings());
|
||||
Registry.register(Registries.ITEM, new Identifier(NewSoviet.MOD_ID, name), blockItem);
|
||||
|
||||
Optional<RegistryKey<ItemGroup>> key = Registries.ITEM_GROUP.getKey(tab);
|
||||
key.ifPresent(itemGroupRegistryKey -> ItemGroupEvents.modifyEntriesEvent(itemGroupRegistryKey).register(content -> {
|
||||
content.add(blockItem);
|
||||
}));
|
||||
}
|
||||
|
||||
public static void init() {
|
||||
Registry.register(Registries.ITEM_GROUP, new Identifier("new_soviet", "combat"), NSE_COMBAT_TAB);
|
||||
register("landmine", () -> LANDMINE, NSE_COMBAT_TAB);
|
||||
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package su.a71.new_soviet;
|
||||
package su.a71.new_soviet.registration;
|
||||
|
||||
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
|
||||
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
|
||||
|
@ -15,6 +15,7 @@ import net.minecraft.registry.RegistryKey;
|
|||
import net.minecraft.sound.BlockSoundGroup;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import su.a71.new_soviet.NewSoviet;
|
||||
import su.a71.new_soviet.blocks.*;
|
||||
|
||||
import java.util.Optional;
|
|
@ -1,4 +1,4 @@
|
|||
package su.a71.new_soviet;
|
||||
package su.a71.new_soviet.registration;
|
||||
|
||||
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
|
||||
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
|
||||
|
@ -12,12 +12,15 @@ import net.minecraft.registry.Registries;
|
|||
import net.minecraft.registry.Registry;
|
||||
import net.minecraft.registry.RegistryKey;
|
||||
import net.minecraft.sound.BlockSoundGroup;
|
||||
import net.minecraft.sound.SoundEvent;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.function.Supplier;
|
||||
import net.minecraft.util.Rarity;
|
||||
import su.a71.new_soviet.NewSoviet;
|
||||
import su.a71.new_soviet.items.DiceItem;
|
||||
|
||||
public class NSE_Items {
|
||||
// Like an iron axe but a hoe and slightly faster (-2.8f vs -3.1f) and a bit weaker (6 vs 6.5 damage)
|
||||
|
@ -27,6 +30,9 @@ public class NSE_Items {
|
|||
public static final FoodComponent COCONUT_FC = (new FoodComponent.Builder()).hunger(4).saturationModifier(1.2F).statusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 100, 1), 1.0F).statusEffect(new StatusEffectInstance(StatusEffects.ABSORPTION, 2400, 0), 1.0F).alwaysEdible().build();
|
||||
public static final Item COCONUT = new Item(new Item.Settings().food(COCONUT_FC).rarity(Rarity.EPIC));
|
||||
|
||||
public static final DiceItem DICE = new DiceItem(new Item.Settings().maxCount(6));
|
||||
public static final SoundEvent DICE_SOUND = SoundEvent.of(new Identifier("new_soviet", "dice_sound"));
|
||||
|
||||
private static final ItemGroup NSE_ITEMS_TAB = FabricItemGroup.builder()
|
||||
.icon(() -> new ItemStack(SICKLE))
|
||||
.displayName(Text.translatable("itemGroup.new_soviet.items"))
|
||||
|
@ -46,5 +52,8 @@ public class NSE_Items {
|
|||
Registry.register(Registries.ITEM_GROUP, new Identifier("new_soviet", "items"), NSE_ITEMS_TAB);
|
||||
register("sickle", () -> SICKLE, NSE_ITEMS_TAB);
|
||||
register("coconut", () -> COCONUT, NSE_ITEMS_TAB);
|
||||
register("dice", () -> DICE, NSE_ITEMS_TAB);
|
||||
|
||||
Registry.register(Registries.SOUND_EVENT, new Identifier("new_soviet", "dice_sound"), DICE_SOUND);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue