Skip to content

Commit 1f5b5f5

Browse files
committed
Gravity Plate & Rendering
TODO: Movement, mouse input
1 parent a554e73 commit 1f5b5f5

File tree

12 files changed

+211
-206
lines changed

12 files changed

+211
-206
lines changed

gradle.properties

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,18 @@ loader_version_range=[4,)
2828

2929
# The unique mod identifier for the mod. Must be lowercase in English locale. Must fit the regex [a-z][a-z0-9_]{1,63}
3030
# Must match the String constant located in the main mod class annotated with @Mod.
31-
mod_id=examplemod
31+
mod_id=gravity
3232
# The human-readable display name for the mod.
33-
mod_name=Example Mod
33+
mod_name=Gravity
3434
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
35-
mod_license=All Rights Reserved
35+
mod_license=MIT
3636
# The mod version. See https://semver.org/
37-
mod_version=1.0.0
37+
mod_version=0.8.3
3838
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
3939
# This should match the base package used for the mod sources.
4040
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
41-
mod_group_id=com.example.examplemod
41+
mod_group_id=uk.gemwire.curlsed.gravity
4242
# The authors of the mod. This is a simple text string that is used for display purposes in the mod list.
43-
mod_authors=YourNameHere, OtherNameHere
43+
mod_authors=Curle
4444
# The description of the mod. This is a simple multiline text string that is used for display purposes in the mod list.
45-
mod_description=Example mod description.\nNewline characters can be used and will be replaced properly.
45+
mod_description=Gravitational effects and manipulation. Walk on walls, upside down, whatever floats your player.

src/main/java/com/example/examplemod/Config.java

Lines changed: 0 additions & 63 deletions
This file was deleted.

src/main/java/com/example/examplemod/ExampleMod.java

Lines changed: 0 additions & 136 deletions
This file was deleted.
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package uk.gemwire.curlsed.gravity;
2+
3+
import net.minecraft.world.effect.MobEffect;
4+
import net.minecraft.world.effect.MobEffectCategory;
5+
import org.slf4j.Logger;
6+
7+
import com.mojang.logging.LogUtils;
8+
9+
import net.minecraft.core.registries.Registries;
10+
import net.minecraft.network.chat.Component;
11+
import net.minecraft.world.item.BlockItem;
12+
import net.minecraft.world.item.CreativeModeTab;
13+
import net.minecraft.world.item.CreativeModeTabs;
14+
import net.minecraft.world.level.block.Block;
15+
import net.neoforged.bus.api.IEventBus;
16+
import net.neoforged.fml.common.Mod;
17+
import net.neoforged.neoforge.registries.DeferredBlock;
18+
import net.neoforged.neoforge.registries.DeferredHolder;
19+
import net.neoforged.neoforge.registries.DeferredItem;
20+
import net.neoforged.neoforge.registries.DeferredRegister;
21+
22+
@Mod(Gravity.MODID)
23+
public class Gravity
24+
{
25+
public static final String MODID = "gravity";
26+
private static final Logger LOGGER = LogUtils.getLogger();
27+
public static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(MODID);
28+
public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(MODID);
29+
public static final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MODID);
30+
public static final DeferredRegister<MobEffect> EFFECTS = DeferredRegister.create(Registries.MOB_EFFECT, MODID);
31+
32+
public static final DeferredBlock<Block> GRAVITY_PLATE = BLOCKS.register("gravity_plate", GravityPlate::new);
33+
public static final DeferredItem<BlockItem> GRAVITY_PLATE_ITEM = ITEMS.registerSimpleBlockItem("gravity_plate", GRAVITY_PLATE);
34+
35+
public static final DeferredHolder<MobEffect, GravityEffect> GRAVITY_EFFECT = EFFECTS.register("gravity_change", GravityEffect::new);
36+
37+
public static final DeferredHolder<CreativeModeTab, CreativeModeTab> GRAVITY_TAB = CREATIVE_MODE_TABS.register("gravity_items", () -> CreativeModeTab.builder()
38+
.title(Component.translatable("itemGroup.gravityItems"))
39+
.withTabsBefore(CreativeModeTabs.COMBAT)
40+
.icon(() -> GRAVITY_PLATE_ITEM.get().getDefaultInstance())
41+
.displayItems((parameters, output) -> {
42+
output.accept(GRAVITY_PLATE_ITEM.get());
43+
}).build());
44+
45+
public Gravity(IEventBus modEventBus) {
46+
BLOCKS.register(modEventBus);
47+
ITEMS.register(modEventBus);
48+
CREATIVE_MODE_TABS.register(modEventBus);
49+
EFFECTS.register(modEventBus);
50+
51+
}
52+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package uk.gemwire.curlsed.gravity;
2+
3+
import net.minecraft.world.effect.MobEffect;
4+
import net.minecraft.world.effect.MobEffectCategory;
5+
import net.minecraft.world.entity.EntityDimensions;
6+
import net.minecraft.world.entity.LivingEntity;
7+
import net.neoforged.bus.api.SubscribeEvent;
8+
import net.neoforged.fml.common.EventBusSubscriber;
9+
import net.neoforged.neoforge.event.entity.living.MobEffectEvent;
10+
11+
@EventBusSubscriber(modid = Gravity.MODID)
12+
public class GravityEffect extends MobEffect {
13+
public GravityEffect() {
14+
super(MobEffectCategory.NEUTRAL, 0xFFFF00FF);
15+
}
16+
17+
@Override
18+
public boolean applyEffectTick(LivingEntity livingEntity, int amplifier) {
19+
return true;
20+
}
21+
22+
@Override
23+
public void onEffectAdded(LivingEntity livingEntity, int amplifier) {
24+
EntityDimensions dim = livingEntity.getDimensions(livingEntity.getPose());
25+
var diff = dim.height() - dim.eyeHeight();
26+
livingEntity.eyeHeight = 0 + diff;
27+
}
28+
29+
@SubscribeEvent
30+
public static void effectExpired(MobEffectEvent.Expired event) {
31+
if (event.getEffectInstance().is(Gravity.GRAVITY_EFFECT)) {
32+
LivingEntity livingEntity = event.getEntity();
33+
EntityDimensions dim = livingEntity.getDimensions(livingEntity.getPose());
34+
livingEntity.eyeHeight = dim.eyeHeight();
35+
}
36+
}
37+
@SubscribeEvent
38+
public static void effectRemoved(MobEffectEvent.Remove event) {
39+
if (event.getEffectInstance().is(Gravity.GRAVITY_EFFECT)) {
40+
event.setCanceled(true);
41+
}
42+
}
43+
44+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package uk.gemwire.curlsed.gravity;
2+
3+
import net.minecraft.core.BlockPos;
4+
import net.minecraft.world.effect.MobEffectInstance;
5+
import net.minecraft.world.entity.Entity;
6+
import net.minecraft.world.entity.LivingEntity;
7+
import net.minecraft.world.level.BlockGetter;
8+
import net.minecraft.world.level.Level;
9+
import net.minecraft.world.level.block.Block;
10+
import net.minecraft.world.level.block.state.BlockState;
11+
import net.minecraft.world.phys.shapes.CollisionContext;
12+
import net.minecraft.world.phys.shapes.VoxelShape;
13+
14+
public class GravityPlate extends Block {
15+
protected static final VoxelShape BOTTOM_AABB = Block.box(0.0, 0.0, 0.0, 0, 0, 0);
16+
public GravityPlate() {
17+
super(Properties.of());
18+
}
19+
20+
@Override
21+
protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) {
22+
if (entity instanceof LivingEntity livingEntity) {
23+
MobEffectInstance gravity = new MobEffectInstance(Gravity.GRAVITY_EFFECT, 2, 0, true, false);
24+
livingEntity.addEffect(gravity);
25+
}
26+
}
27+
28+
protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) {
29+
return BOTTOM_AABB;
30+
}
31+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package uk.gemwire.curlsed.gravity.client;
2+
3+
public class GravityMovement {
4+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package uk.gemwire.curlsed.gravity.client;
2+
3+
import net.minecraft.client.Minecraft;
4+
import net.minecraft.core.BlockPos;
5+
import net.minecraft.world.entity.player.Player;
6+
import net.neoforged.api.distmarker.Dist;
7+
import net.neoforged.bus.api.SubscribeEvent;
8+
import net.neoforged.fml.common.EventBusSubscriber;
9+
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
10+
import net.neoforged.neoforge.client.event.ViewportEvent;
11+
import uk.gemwire.curlsed.gravity.Gravity;
12+
13+
@EventBusSubscriber(modid = Gravity.MODID, value = Dist.CLIENT)
14+
public class GravityPlayer {
15+
16+
@SubscribeEvent
17+
public static final void viewportEvent(ViewportEvent.ComputeCameraAngles event) {
18+
Player player = Minecraft.getInstance().player;
19+
if (!player.hasEffect(Gravity.GRAVITY_EFFECT)) return;
20+
21+
event.setRoll(180);
22+
}
23+
24+
@SubscribeEvent
25+
public static final void frameEvent(RenderLevelStageEvent event) {
26+
}
27+
}

0 commit comments

Comments
 (0)