Skip to content

Commit 670a57d

Browse files
authored
Merge pull request #4 from jamesgreen26/1.20
Big Update!!
2 parents ea7af88 + 43f4804 commit 670a57d

File tree

58 files changed

+1431
-339
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+1431
-339
lines changed

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ dependencies {
4040

4141
// Fabric API. This is technically optional, but you probably want it anyway.
4242
modImplementation "maven.modrinth:valkyrien-skies:1.20.1-fabric-2.3.0-beta.5"
43-
modImplementation "maven.modrinth:eureka:1.20.1-fabric-1.3.0-beta.4"
43+
modImplementation "maven.modrinth:eureka:1.20.1-fabric-1.5.1-beta.3"
4444

4545

4646
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ loader_version=0.15.10
1010
fabric_kotlin_version=1.10.19+kotlin.1.9.23
1111

1212
# Mod Properties
13-
mod_version=0.1.1
13+
mod_version=1.0.0
1414
maven_group=ace.actually.pirates
1515
archives_base_name=ValkyrienPirates
1616

src/main/java/ace/actually/pirates/ClientPirates.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package ace.actually.pirates;
22

3+
import ace.actually.pirates.blocks.CannonPrimingBlockEntityRenderer;
34
import ace.actually.pirates.entities.ShotEntityRenderer;
45
import ace.actually.pirates.entities.pirate.PirateEntityRenderer;
56
import net.fabricmc.api.ClientModInitializer;
67
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry;
8+
import net.minecraft.client.render.block.entity.BlockEntityRendererFactories;
79
import net.minecraft.client.render.entity.model.EntityModelLayer;
810
import net.minecraft.util.Identifier;
911

@@ -17,7 +19,7 @@ public void onInitializeClient() {
1719
EntityRendererRegistry.register(Pirates.PIRATE_ENTITY_TYPE, PirateEntityRenderer::new);
1820
EntityRendererRegistry.register(Pirates.SHOT_ENTITY_TYPE, (context) -> new ShotEntityRenderer(context, 1,false));
1921

20-
22+
BlockEntityRendererFactories.register(Pirates.CANNON_PRIMING_BLOCK_ENTITY, CannonPrimingBlockEntityRenderer::new);
2123

2224

2325
}

src/main/java/ace/actually/pirates/Pirates.java

+25-43
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,30 @@
11
package ace.actually.pirates;
22

3-
import ace.actually.pirates.blocks.CannonPrimingBlock;
4-
import ace.actually.pirates.blocks.CannonPrimingBlockEntity;
5-
import ace.actually.pirates.blocks.MotionInvokingBlock;
6-
import ace.actually.pirates.blocks.MotionInvokingBlockEntity;
3+
import ace.actually.pirates.blocks.*;
74
import ace.actually.pirates.entities.ShotEntity;
85
import ace.actually.pirates.entities.pirate.PirateEntity;
96
import ace.actually.pirates.items.RaycastingItem;
107
import ace.actually.pirates.items.TestingStickItem;
8+
import ace.actually.pirates.sound.ModSounds;
119
import net.fabricmc.api.ModInitializer;
10+
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
1211
import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder;
1312
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry;
1413
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder;
1514
import net.minecraft.block.AbstractBlock;
16-
import net.minecraft.block.DispenserBlock;
17-
import net.minecraft.block.dispenser.DispenserBehavior;
18-
import net.minecraft.block.dispenser.ProjectileDispenserBehavior;
15+
import net.minecraft.block.Blocks;
1916
import net.minecraft.block.entity.BlockEntityType;
2017
import net.minecraft.entity.Entity;
2118
import net.minecraft.entity.EntityDimensions;
2219
import net.minecraft.entity.EntityType;
2320
import net.minecraft.entity.SpawnGroup;
24-
import net.minecraft.entity.projectile.ProjectileEntity;
2521
import net.minecraft.item.BlockItem;
2622
import net.minecraft.item.Item;
27-
import net.minecraft.item.ItemStack;
2823
import net.minecraft.registry.Registries;
2924
import net.minecraft.registry.Registry;
25+
import net.minecraft.server.MinecraftServer;
26+
import net.minecraft.sound.BlockSoundGroup;
3027
import net.minecraft.util.Identifier;
31-
import net.minecraft.util.Util;
32-
import net.minecraft.util.math.BlockPointer;
33-
import net.minecraft.util.math.Position;
34-
import net.minecraft.util.math.Vec3d;
35-
import net.minecraft.world.World;
3628
import org.slf4j.Logger;
3729
import org.slf4j.LoggerFactory;
3830

@@ -55,29 +47,36 @@ public void onInitialize() {
5547
registerBlocks();
5648
registerItems();
5749
//block entities do it themselves
58-
registerDispenserThings();
50+
//registerDispenserThings();
5951
PatternProcessor.setupBasicPatterns();
6052
//ConfigUtils.checkConfigs();
53+
ModSounds.registerSounds();
6154
LOGGER.info("Let there be motion!");
6255

56+
6357
//BiomeModifications.addSpawn(BiomeSelectors.categories(Biome.Category.OCEAN), SpawnGroup.WATER_CREATURE, Pirates.SHIP, 3, 1, 1);
6458

6559

6660
}
6761

62+
6863
private void registerEntityThings()
6964
{
7065

7166
FabricDefaultAttributeRegistry.register(PIRATE_ENTITY_TYPE, PirateEntity.attributes());
7267
}
7368

7469

75-
public static final MotionInvokingBlock MOTION_INVOKING_BLOCK = new MotionInvokingBlock(AbstractBlock.Settings.create());
76-
public static final CannonPrimingBlock CANNON_PRIMING_BLOCK = new CannonPrimingBlock(AbstractBlock.Settings.create());
70+
public static final MotionInvokingBlock MOTION_INVOKING_BLOCK = new MotionInvokingBlock(AbstractBlock.Settings.copy(Blocks.BIRCH_WOOD).noBlockBreakParticles().hardness(7));
71+
public static final CannonPrimingBlock CANNON_PRIMING_BLOCK = new CannonPrimingBlock(AbstractBlock.Settings.copy(Blocks.DISPENSER).hardness(5));
72+
public static final DispenserCannonBlock DISPENSER_CANNON_BLOCK = new DispenserCannonBlock(AbstractBlock.Settings.copy(Blocks.DISPENSER).hardness(5));
73+
public static final CrewSpawnerBlock CREW_SPAWNER_BLOCK = new CrewSpawnerBlock(AbstractBlock.Settings.copy(Blocks.BIRCH_WOOD).noBlockBreakParticles().noCollision());
7774
private void registerBlocks()
7875
{
7976
Registry.register(Registries.BLOCK,new Identifier("pirates","cannon_priming_block"),CANNON_PRIMING_BLOCK);
8077
Registry.register(Registries.BLOCK,new Identifier("pirates","motion_invoking_block"),MOTION_INVOKING_BLOCK);
78+
Registry.register(Registries.BLOCK,new Identifier("pirates","dispenser_cannon_block"),DISPENSER_CANNON_BLOCK);
79+
Registry.register(Registries.BLOCK,new Identifier("pirates","crew_spawner_block"),CREW_SPAWNER_BLOCK);
8180

8281
}
8382

@@ -92,34 +91,12 @@ private void registerItems()
9291
Registry.register(Registries.ITEM,new Identifier("pirates","cannonball"),CANNONBALL);
9392

9493
Registry.register(Registries.ITEM,new Identifier("pirates","cannon_priming_block"),new BlockItem(CANNON_PRIMING_BLOCK,new Item.Settings()));
95-
}
96-
94+
// Registry.register(Registries.ITEM,new Identifier("pirates","motion_invoking_block"),new BlockItem(MOTION_INVOKING_BLOCK,new Item.Settings()));
95+
// Registry.register(Registries.ITEM,new Identifier("pirates","crew_spawner_block"),new BlockItem(CREW_SPAWNER_BLOCK,new Item.Settings()));
9796

98-
private void registerDispenserThings()
99-
{
100-
DispenserBlock.registerBehavior(Pirates.CANNONBALL, new DispenserBehavior() {
101-
public ItemStack dispense(BlockPointer blockPointer, ItemStack itemStack) {
102-
return (new ProjectileDispenserBehavior() {
103-
protected ProjectileEntity createProjectile(World world, Position position, ItemStack stack) {
104-
ShotEntity qentity = Util.make(new ShotEntity(Pirates.SHOT_ENTITY_TYPE,world,null,Pirates.CANNONBALL,2,""), (entity) -> {
105-
entity.setItem(stack);
106-
});
107-
qentity.setPosition(new Vec3d(position.getX(),position.getY(),position.getZ()));
108-
return qentity;
109-
}
110-
111-
protected float getVariation() {
112-
return super.getVariation() * 0.5F;
113-
}
114-
115-
protected float getForce() {
116-
return super.getForce() * 1.25F;
117-
}
118-
}).dispense(blockPointer, itemStack);
119-
}
120-
});
12197
}
12298

99+
123100
//block entities
124101
public static final BlockEntityType<MotionInvokingBlockEntity> MOTION_INVOKING_BLOCK_ENTITY = Registry.register(
125102
Registries.BLOCK_ENTITY_TYPE,
@@ -131,12 +108,17 @@ protected float getForce() {
131108
new Identifier("pirates", "cannon_priming_block_entity"),
132109
FabricBlockEntityTypeBuilder.create(CannonPrimingBlockEntity::new, CANNON_PRIMING_BLOCK).build()
133110
);
111+
public static final BlockEntityType<CrewSpawnerBlockEntity> CREW_SPAWNER_BLOCK_ENTITY = Registry.register(
112+
Registries.BLOCK_ENTITY_TYPE,
113+
new Identifier("pirates", "crew_spawner_block_entity"),
114+
FabricBlockEntityTypeBuilder.create(CrewSpawnerBlockEntity::new, CREW_SPAWNER_BLOCK).build()
115+
);
134116

135117

136118
//entities
137119
public static final EntityType<ShotEntity> SHOT_ENTITY_TYPE =registerEntity("shot",SpawnGroup.MISC,EntityDimensions.changing(0.5f,0.5f),((type, world) -> new ShotEntity(world)));
138120

139-
public static final EntityType<PirateEntity> PIRATE_ENTITY_TYPE =registerEntity("pirate",SpawnGroup.MISC,EntityDimensions.changing(0.6f,1.7f),((type, world) -> new PirateEntity(world)));
121+
public static final EntityType<PirateEntity> PIRATE_ENTITY_TYPE =registerEntity("pirate",SpawnGroup.MISC,EntityDimensions.changing(0.6f,1.9f),((type, world) -> new PirateEntity(world)));
140122

141123

142124
public static <T extends Entity> EntityType<T> registerEntity(String name, SpawnGroup category, EntityDimensions size, EntityType.EntityFactory<T> factory) {

src/main/java/ace/actually/pirates/blocks/CannonPrimingBlock.java

+71-58
Original file line numberDiff line numberDiff line change
@@ -5,38 +5,26 @@
55
import net.minecraft.block.entity.BlockEntity;
66
import net.minecraft.block.entity.BlockEntityTicker;
77
import net.minecraft.block.entity.BlockEntityType;
8-
import net.minecraft.block.entity.DispenserBlockEntity;
9-
import net.minecraft.entity.player.PlayerEntity;
108
import net.minecraft.item.ItemPlacementContext;
9+
import net.minecraft.particle.ParticleTypes;
10+
import net.minecraft.sound.SoundCategory;
11+
import net.minecraft.sound.SoundEvents;
1112
import net.minecraft.state.StateManager;
12-
import net.minecraft.text.Text;
13-
import net.minecraft.util.ActionResult;
14-
import net.minecraft.util.Hand;
15-
import net.minecraft.util.hit.BlockHitResult;
13+
import net.minecraft.state.property.BooleanProperty;
14+
import net.minecraft.state.property.Properties;
15+
import net.minecraft.util.BlockMirror;
16+
import net.minecraft.util.BlockRotation;
1617
import net.minecraft.util.math.*;
17-
import net.minecraft.util.shape.VoxelShape;
18-
import net.minecraft.world.BlockStateRaycastContext;
19-
import net.minecraft.world.BlockView;
20-
import net.minecraft.world.RaycastContext;
21-
import net.minecraft.world.World;
18+
import net.minecraft.world.*;
2219
import org.jetbrains.annotations.Nullable;
23-
import org.joml.Vector3d;
24-
import org.valkyrienskies.core.api.ships.LoadedServerShip;
25-
import org.valkyrienskies.core.api.world.ServerShipWorld;
2620
import org.valkyrienskies.mod.common.VSGameUtilsKt;
27-
import org.valkyrienskies.mod.common.ValkyrienSkiesMod;
28-
import org.valkyrienskies.mod.common.util.DimensionIdProvider;
29-
import org.valkyrienskies.mod.common.world.RaycastUtilsKt;
3021

3122
public class CannonPrimingBlock extends BlockWithEntity {
3223
public CannonPrimingBlock(Settings settings) {
3324
super(settings);
3425
}
26+
public static final BooleanProperty DISARMED = Properties.DISARMED;
3527

36-
@Override
37-
public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) {
38-
return Block.createCuboidShape(0,0,0,2,2,2);
39-
}
4028

4129
@Override
4230
public BlockRenderType getRenderType(BlockState state) {
@@ -45,40 +33,37 @@ public BlockRenderType getRenderType(BlockState state) {
4533

4634
@Override
4735
protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
48-
builder.add(RedstoneLampBlock.LIT);
36+
builder.add(RedstoneLampBlock.LIT).add(Properties.FACING).add(DISARMED);
4937
}
5038

5139
@Nullable
5240
@Override
5341
public BlockState getPlacementState(ItemPlacementContext ctx) {
54-
return getDefaultState().with(RedstoneLampBlock.LIT,false);
55-
}
42+
BlockPos pos = ctx.getBlockPos();
43+
World world = ctx.getWorld();
44+
Direction facing;
5645

57-
/**
58-
*
59-
* @param origin a point to "look" from
60-
* @param target a point to "look" at
61-
* @return the vector that can be used to travel between these points
62-
*/
63-
public Vec3d pointLine(Vec3d origin, Vec3d target)
64-
{
65-
double d = target.x - origin.x;
66-
double e = target.y - origin.y;
67-
double f = target.z - origin.z;
68-
double g = Math.sqrt(d * d + f * f);
69-
float pitch = (MathHelper.wrapDegrees((float)(-(MathHelper.atan2(e, g) * 57.2957763671875))));
70-
float yaw = MathHelper.wrapDegrees((float)(MathHelper.atan2(f, d) * 57.2957763671875) - 90.0F);
71-
return getRotationVector(pitch,yaw);
72-
}
46+
if (world.getBlockState(pos.north()).isOf(Blocks.DISPENSER)) {
47+
facing = Direction.NORTH;
48+
} else if (world.getBlockState(pos.east()).isOf(Blocks.DISPENSER)) {
49+
facing = Direction.EAST;
50+
} else if (world.getBlockState(pos.south()).isOf(Blocks.DISPENSER)) {
51+
facing = Direction.SOUTH;
52+
} else if (world.getBlockState(pos.west()).isOf(Blocks.DISPENSER)) {
53+
facing = Direction.WEST;
54+
} else if (world.getBlockState(pos.up()).isOf(Blocks.DISPENSER)) {
55+
facing = Direction.UP;
56+
} else if (world.getBlockState(pos.down()).isOf(Blocks.DISPENSER)) {
57+
facing = Direction.DOWN;
58+
} else {
59+
facing = ctx.getPlayerLookDirection();
7360

74-
protected final Vec3d getRotationVector(float pitch, float yaw) {
75-
float f = pitch * 0.017453292F;
76-
float g = -yaw * 0.017453292F;
77-
float h = MathHelper.cos(g);
78-
float i = MathHelper.sin(g);
79-
float j = MathHelper.cos(f);
80-
float k = MathHelper.sin(f);
81-
return new Vec3d((double)(i * j), (double)(-k), (double)(h * j));
61+
}
62+
63+
if (world.getBlockState(pos.add(facing.getVector())).isOf(Blocks.DISPENSER) && world.getBlockState(pos.add(facing.getVector())).get(Properties.FACING) == facing) {
64+
world.setBlockState(pos.add(facing.getVector()), Pirates.DISPENSER_CANNON_BLOCK.getDefaultState().with(Properties.FACING, facing), 3);
65+
}
66+
return getDefaultState().with(RedstoneLampBlock.LIT,false).with(Properties.FACING, facing).with(DISARMED, true);
8267
}
8368

8469
@Nullable
@@ -91,20 +76,48 @@ public BlockEntity createBlockEntity(BlockPos pos, BlockState state) {
9176
@Nullable
9277
@Override
9378
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state, BlockEntityType<T> type) {
94-
return checkType(type, Pirates.CANNON_PRIMING_BLOCK_ENTITY, CannonPrimingBlockEntity::tick);
79+
return checkType(type, Pirates.CANNON_PRIMING_BLOCK_ENTITY, (world1, pos, state1, be) -> be.tick(world1, pos, state1, be));
9580
}
9681

82+
// @Override
83+
// public boolean emitsRedstonePower(BlockState state) {
84+
// return state.get(RedstoneLampBlock.LIT);
85+
// }
86+
//
87+
// @Override
88+
// public int getWeakRedstonePower(BlockState state, BlockView world, BlockPos pos, Direction direction) {
89+
// if(state.get(RedstoneLampBlock.LIT))
90+
// {
91+
// return 15;
92+
// }
93+
// return 0;
94+
// }
95+
9796
@Override
98-
public boolean emitsRedstonePower(BlockState state) {
99-
return state.get(RedstoneLampBlock.LIT);
97+
public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) {
98+
99+
if (world.getBlockState(pos.add(state.get(Properties.FACING).getVector())).isOf(Blocks.DISPENSER) && world.getBlockState(pos.add(state.get(Properties.FACING).getVector())).get(Properties.FACING) == state.get(Properties.FACING)) {
100+
world.setBlockState(pos.add(state.get(Properties.FACING).getVector()), Pirates.DISPENSER_CANNON_BLOCK.getDefaultState().with(Properties.FACING, state.get(Properties.FACING)), 3);
101+
}
102+
103+
if (world.isReceivingRedstonePower(pos) && !world.isClient()) {((CannonPrimingBlockEntity)world.getBlockEntity(pos)).fire((World) world, pos, state, 19);}
104+
return super.getStateForNeighborUpdate(state, direction, neighborState, world, pos, neighborPos);
100105
}
101106

102-
@Override
103-
public int getWeakRedstonePower(BlockState state, BlockView world, BlockPos pos, Direction direction) {
104-
if(state.get(RedstoneLampBlock.LIT))
105-
{
106-
return 15;
107-
}
108-
return 0;
107+
public BlockState rotate(BlockState state, BlockRotation rotation) {
108+
return (BlockState)state.with(Properties.FACING, rotation.rotate((Direction)state.get(Properties.FACING)));
109+
}
110+
111+
public BlockState mirror(BlockState state, BlockMirror mirror) {
112+
return state.rotate(mirror.getRotation((Direction)state.get(Properties.FACING)));
113+
}
114+
115+
public static void disarm(World world, BlockPos pos) {
116+
if (world.isClient()) return;
117+
BlockState blockState = world.getBlockState(pos);
118+
if (!blockState.get(DISARMED)) {
119+
world.setBlockState(pos, blockState.with(DISARMED, true));
120+
world.playSound(null, pos, SoundEvents.BLOCK_REDSTONE_TORCH_BURNOUT, SoundCategory.BLOCKS, 0.5f, 1.5f);
121+
}
109122
}
110123
}

0 commit comments

Comments
 (0)