Skip to content

Commit

Permalink
Started port to 1.20.5+
Browse files Browse the repository at this point in the history
Rewrote the networking to use payloads
  • Loading branch information
Emafire003 committed May 22, 2024
1 parent 8bba6ee commit 709eb77
Show file tree
Hide file tree
Showing 51 changed files with 519 additions and 249 deletions.
5 changes: 0 additions & 5 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,6 @@ repositories {
maven {
name = 'Ladysnake Mods'
url = 'https://maven.ladysnake.org/releases'
content {
includeGroup 'io.github.ladysnake'
includeGroup 'org.ladysnake'
includeGroupByRegex 'dev\\.onyxstudios.*'
}
}

maven { url 'https://maven.terraformersmc.com/' }
Expand Down
33 changes: 21 additions & 12 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,33 +3,42 @@ org.gradle.jvmargs=-Xmx1G

# Fabric Properties
# check these on https://fabricmc.net/develop
minecraft_version=1.20.1
yarn_mappings=1.20.1+build.10
minecraft_version=1.20.6
yarn_mappings=1.20.6+build.1
loader_version=0.15.6


# Mod Properties
mod_version = 1.1.0+1.20.1+beta
mod_version = 1.1.0+1.20.6
maven_group = me.emafire003.dev
archives_base_name = lightwithin
# Dependencies
fabric_version=0.92.0+1.20.1
fabric_version=0.98.0+1.20.6
#Included depdencencies
coloredglowlib_version = 3.0.0+fabric_1.20+nocca

structureplacerapi_version = 1.1.4
custombrewrecipes_version = 1.2.0
pal_version=0.0.1
cardinal_components_version = 5.2.2
pal_version=0.0.2+1.20
cardinal_components_version = 6.0.0-pre2
# Optional Dependencies
factions_version=2.5.1
#TODO not available
coloredglowlib_version = 3.0.0+fabric_1.20+nocca

factions_version=2.6.1
#TODO not available
argonauts_version=1.0.4
resourcefullib_version=2.1.23
opac_version=fabric-1.20.1-0.19.3

opac_version=fabric-1.20.6-0.22.2
fabricperms_version=0.2-SNAPSHOT
#TODO not available
replaymod_version=1.20.1-2.6.14
flan_version=1.20.1-1.10.0
yacl_version=3.2.2+1.20-fabric
modmenu_version=7.2.2

flan_version=1.20.5-1.10.2
yacl_version=3.4.2+1.20.5-fabric
modmenu_version=10.0.0-beta.1
#This uses cursemaven which uses the file id
#TODO not available
ftbteams_version=4623115
#TODO not available
yawp_version=4702332
63 changes: 40 additions & 23 deletions src/main/java/me/emafire003/dev/lightwithin/LightWithin.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package me.emafire003.dev.lightwithin;

import dev.onyxstudios.cca.api.v3.component.ComponentKey;
import dev.onyxstudios.cca.api.v3.component.ComponentRegistry;
import dev.onyxstudios.cca.api.v3.entity.EntityComponentFactoryRegistry;
import dev.onyxstudios.cca.api.v3.entity.EntityComponentInitializer;
import dev.onyxstudios.cca.api.v3.entity.RespawnCopyStrategy;
import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry;
import org.ladysnake.cca.api.v3.component.ComponentKey;
import org.ladysnake.cca.api.v3.component.ComponentRegistry;
import org.ladysnake.cca.api.v3.entity.EntityComponentFactoryRegistry;
import org.ladysnake.cca.api.v3.entity.EntityComponentInitializer;
import org.ladysnake.cca.api.v3.entity.RespawnCopyStrategy;
import me.emafire003.dev.lightwithin.blocks.LightBlocks;
import me.emafire003.dev.lightwithin.commands.LightCommands;
import me.emafire003.dev.lightwithin.compat.coloredglowlib.CGLCompat;
Expand Down Expand Up @@ -100,7 +101,7 @@ public class LightWithin implements ModInitializer, EntityComponentInitializer {

@Override
public void onInitialize() {
// This code runs as soon as Minecraft is in a mod-load-ready state.
// This code runs as soon as Minecraft is in a mod-load-used state.
// However, some things (like resources) may still be uninitialized.
// Proceed with mild caution.

Expand Down Expand Up @@ -167,21 +168,28 @@ private static void registerSyncOptionsOnJoin(){
public static void syncCustomConfigOptions(ServerPlayerEntity player){
Map<String, Boolean> booleanMap = new HashMap<>();
booleanMap.put(ConfigPacketConstants.AUTO_LIGHT_ACTIVATION, Config.AUTO_LIGHT_ACTIVATION);
//TODO if needed i'll add other settings ecct
ConfigOptionsSyncPacketS2C optionsPacket = new ConfigOptionsSyncPacketS2C(booleanMap);
ServerPlayNetworking.send(player, ConfigOptionsSyncPacketS2C.ID, optionsPacket);
//TODO if needed i'll add other settings
ConfigOptionSyncPayloadS2C payload = new ConfigOptionSyncPayloadS2C(booleanMap);
ServerPlayNetworking.send(player, payload);
}

private static void registerLightUsedPacket(){
ServerPlayNetworking.registerGlobalReceiver(LightUsedPacketC2S.ID, (((server, player, handler, buf, responseSender) -> {
PayloadTypeRegistry.playC2S().register(LightUsedPayloadC2S.ID, LightUsedPayloadC2S.PACKET_CODEC);

ServerPlayNetworking.registerGlobalReceiver(LightUsedPayloadC2S.ID, ((payload, context) -> {
ServerPlayerEntity player = context.player();
if(player.getWorld().isClient){
return;
}
var results = LightUsedPacketC2S.read(buf);
server.execute(() -> {
addToReadyList(player);
if(player.getServer() == null){
LOGGER.error("Error while reciving LightChargeConsumedPacket, server is null!");
return;
}
player.getServer().execute( () -> {
try{
//Handles the LightCharge being used. If it used, results will be true.
if(results){
if(payload.used()){

if(!CheckUtils.canActivateHere(player)){
player.sendMessage(Text.literal(LightWithin.PREFIX_MSG).formatted(Formatting.AQUA).append(Text.translatableWithFallback("light.charge.cant_use_here", "You are not allowed to use you InnerLight here!").formatted(Formatting.RED)));
Expand All @@ -191,7 +199,7 @@ private static void registerLightUsedPacket(){
//This could be laggy? Maybe?
List<ServerPlayerEntity> players = player.getServerWorld().getPlayers();
for(ServerPlayerEntity p : players){
ServerPlayNetworking.send(p, PlayRenderEffectPacketS2C.ID, new PlayRenderEffectPacketS2C(RenderEffect.LIGHT_RAYS, player));
ServerPlayNetworking.send(p, new PlayRenderEffectPayloadS2C(RenderEffect.LIGHT_RAYS, player.getId()));
}

//TODO maybe also increase the max cooldown light-stat?
Expand All @@ -212,17 +220,24 @@ private static void registerLightUsedPacket(){
e.printStackTrace();
}
});
})));

//var results = LightUsedPacketC2S.read(buf);
}));
}

private static void registerLightChargeConsumedPacket(){
ServerPlayNetworking.registerGlobalReceiver(LightChargeConsumedPacketC2S.ID, (((server, player, handler, buf, responseSender) -> {
PayloadTypeRegistry.playC2S().register(LightChargeConsumedPayloadC2S.ID, LightChargeConsumedPayloadC2S.PACKET_CODEC);
ServerPlayNetworking.registerGlobalReceiver(LightChargeConsumedPayloadC2S.ID, ((payload, context) -> {
ServerPlayerEntity player = context.player();
if(player.getWorld().isClient){
return;
}
addToReadyList(player);
//var results = LightUsedPacketC2S.read(buf);
server.execute(() -> {
if(player.getServer() == null){
LOGGER.error("Error while reciving LightChargeConsumedPacket, server is null!");
return;
}
player.getServer().execute( () -> {
try{

///particle lightwithin:shine_particle ~ ~1 ~ 0.1 0.1 0.1 0.15 25 force
Expand All @@ -232,7 +247,7 @@ private static void registerLightChargeConsumedPacket(){
player.sendMessage(Text.translatable("light.charge.used").formatted(Formatting.YELLOW), true);

((ServerWorld) player.getWorld()).spawnParticles(
LightParticles.SHINE_PARTICLE, player.getX(), player.getY()+player.getDimensions(player.getPose()).height/2, player.getZ(),
LightParticles.SHINE_PARTICLE, player.getX(), player.getY()+player.getDimensions(player.getPose()).height()/2, player.getZ(),
50, 0.1, 0.1, 0.1, 0.15
);

Expand All @@ -244,7 +259,9 @@ private static void registerLightChargeConsumedPacket(){
e.printStackTrace();
}
});
})));

//var results = LightUsedPacketC2S.read(buf);
}));
}

public static boolean isPlayerInCooldown(PlayerEntity user){
Expand Down Expand Up @@ -593,18 +610,18 @@ public static void activateFrog(LightComponent component, PlayerEntity player){

public static void sendRenderRunePacket(ServerPlayerEntity player){
try{
ServerPlayNetworking.send(player, PlayRenderEffectPacketS2C.ID, new PlayRenderEffectPacketS2C(RenderEffect.RUNES));
ServerPlayNetworking.send(player, new PlayRenderEffectPayloadS2C(RenderEffect.RUNES, -1));
}catch(Exception e){
LOGGER.error("FAILED to send data packets to the client!");
e.printStackTrace();
}
}

/**Adds the player to the list of players that are currently ready to
/**Adds the player to the list of players that are currently used to
* trigger a light. Automatically removes them after 10 seconds.
* */
public static void addToReadyList(PlayerEntity player){
//TODO if changig the ready seconds becomes a thing, modify it here too.
//TODO if changig the used seconds becomes a thing, modify it here too.
CURRENTLY_READY_LIGHT_PLAYER_CACHE.put(player.getUuid(), 20*10);
}

Expand Down
26 changes: 15 additions & 11 deletions src/main/java/me/emafire003/dev/lightwithin/blocks/LightBlocks.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package me.emafire003.dev.lightwithin.blocks;

import me.emafire003.dev.lightwithin.LightWithin;
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.*;
import net.minecraft.item.*;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.WallBlock;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemGroups;
import net.minecraft.item.Items;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
Expand All @@ -15,26 +19,26 @@
public class LightBlocks {

public static final Block CLEAR_ICE = registerBlock("clear_ice",
new ClearIce(FabricBlockSettings.create().ticksRandomly().dynamicBounds().strength(0.1f).nonOpaque().notSolid().slipperiness(0.9f).sounds(BlockSoundGroup.GLASS)), ItemGroups.NATURAL, Items.BLUE_ICE);
new ClearIce(AbstractBlock.Settings.create().ticksRandomly().dynamicBounds().strength(0.1f).nonOpaque().notSolid().slipperiness(0.9f).sounds(BlockSoundGroup.GLASS)), ItemGroups.NATURAL, Items.BLUE_ICE);

public static final Block FROZEN_PLAYER_TOP_BLOCK = registerBlock("frozen_player_top",
new FrozenPlayerTopBlock(FabricBlockSettings.create().strength(0.1f).collidable(true).slipperiness(0.9f).luminance(2).sounds(BlockSoundGroup.GLASS)), ItemGroups.NATURAL, Items.ICE);
new FrozenPlayerTopBlock(AbstractBlock.Settings.create().strength(0.1f).slipperiness(0.9f).luminance(value -> 2).sounds(BlockSoundGroup.GLASS)), ItemGroups.NATURAL, Items.ICE);

public static final Block FROZEN_PLAYER_BOTTOM_BLOCK = registerBlock("frozen_player_bottom",
new FrozenPlayerBottomBlock(FabricBlockSettings.create().strength(0.1f).collidable(true).slipperiness(0.9f).luminance(2).sounds(BlockSoundGroup.GLASS)), ItemGroups.NATURAL, Items.ICE);
new FrozenPlayerBottomBlock(AbstractBlock.Settings.create().strength(0.1f).slipperiness(0.9f).luminance(value -> 2).sounds(BlockSoundGroup.GLASS)), ItemGroups.NATURAL, Items.ICE);

public static final Block FROZEN_MOB_TOP_BLOCK = registerBlock("frozen_mob_top",
new FrozenMobTopBlock(FabricBlockSettings.create().strength(0.1f).collidable(true).slipperiness(0.9f).luminance(2).sounds(BlockSoundGroup.GLASS)), ItemGroups.NATURAL, Items.ICE);
new FrozenMobTopBlock(AbstractBlock.Settings.create().strength(0.1f).slipperiness(0.9f).luminance(value -> 2).sounds(BlockSoundGroup.GLASS)), ItemGroups.NATURAL, Items.ICE);

public static final Block FROZEN_MOB_BOTTOM_BLOCK = registerBlock("frozen_mob_bottom",
new FrozenMobBottomBlock(FabricBlockSettings.create().strength(0.1f).collidable(true).slipperiness(0.9f).luminance(2).sounds(BlockSoundGroup.GLASS)), ItemGroups.NATURAL, Items.ICE);
new FrozenMobBottomBlock(AbstractBlock.Settings.create().strength(0.1f).slipperiness(0.9f).luminance(value -> 2).sounds(BlockSoundGroup.GLASS)), ItemGroups.NATURAL, Items.ICE);

public static final Block ICE_WALL = registerBlock("ice_wall",
new WallBlock(FabricBlockSettings.create().sounds(BlockSoundGroup.GLASS).strength(0.05f).collidable(true).slipperiness(0.9f).sounds(BlockSoundGroup.GLASS).nonOpaque()), ItemGroups.NATURAL, Items.ICE);
new WallBlock(AbstractBlock.Settings.create().sounds(BlockSoundGroup.GLASS).strength(0.05f).slipperiness(0.9f).sounds(BlockSoundGroup.GLASS).nonOpaque()), ItemGroups.NATURAL, Items.ICE);

private static Block registerBlock(String name, Block block, RegistryKey<ItemGroup> tab, Item add_after) {
Block the_block = Registry.register(Registries.BLOCK, new Identifier(LightWithin.MOD_ID, name), block);
Item the_item = Registry.register(Registries.ITEM, new Identifier(LightWithin.MOD_ID, name), new BlockItem(block, new FabricItemSettings()));
Item the_item = Registry.register(Registries.ITEM, new Identifier(LightWithin.MOD_ID, name), new BlockItem(block, new Item.Settings()));
ItemGroupEvents.modifyEntriesEvent(tab).register(content -> {
content.addAfter(add_after, the_item);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import me.emafire003.dev.lightwithin.LightWithin;
import me.emafire003.dev.lightwithin.component.LightComponent;
import me.emafire003.dev.lightwithin.config.ClientConfig;
import me.emafire003.dev.lightwithin.networking.LightChargeConsumedPacketC2S;
import me.emafire003.dev.lightwithin.networking.LightUsedPacketC2S;
import me.emafire003.dev.lightwithin.networking.LightChargeConsumedPayloadC2S;
import me.emafire003.dev.lightwithin.networking.LightUsedPayloadC2S;
import me.emafire003.dev.lightwithin.sounds.LightSounds;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
Expand Down Expand Up @@ -34,7 +34,7 @@ public static void update(MinecraftClient client) {
if (client.player != null) {
if(LightWithinClient.isLightReady()){
if(lightActivationKey.wasPressed() || (LightWithinClient.isAutoActivationAllowed() && ClientConfig.AUTO_LIGHT_ACTIVATION)){
ClientPlayNetworking.send(LightUsedPacketC2S.ID, new LightUsedPacketC2S(LightWithinClient.hasUsedCharge()));
ClientPlayNetworking.send(new LightUsedPayloadC2S(LightWithinClient.hasUsedCharge()));
LightWithinClient.setLightReady(false);
LightWithinClient.setWaitForNext(true);
//Reverts back the status of the used charge
Expand All @@ -45,7 +45,7 @@ public static void update(MinecraftClient client) {
LightComponent component = LIGHT_COMPONENT.get(client.player);
if (lightActivationKey.wasPressed() && component.hasTriggeredNaturally()) {
if(!LightWithin.isPlayerInCooldown(client.player) && component.getCurrentLightCharges() != 0){
ClientPlayNetworking.send(LightChargeConsumedPacketC2S.ID, new LightChargeConsumedPacketC2S(true));
ClientPlayNetworking.send(new LightChargeConsumedPayloadC2S(true));

//TODO improvement Maybe I should also wait for the server to see if i can actually trigger a light here. Like only send the packet and wait for the response. But meh.
client.player.playSound(LightSounds.LIGHT_READY, 1f, 0.63f);
Expand Down
Loading

0 comments on commit 709eb77

Please sign in to comment.