feat: implement recovery compass

This commit is contained in:
LordMZTE 2023-11-16 16:51:07 +01:00
parent fc200ca483
commit cc8959ee1d
Signed by: LordMZTE
GPG key ID: B64802DC33A64FF6
5 changed files with 70 additions and 24 deletions

View file

@ -1,11 +1,15 @@
package com.cursedcauldron.wildbackport;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import org.slf4j.Logger;
import com.cursedcauldron.wildbackport.client.registry.WBParticleTypes;
import com.cursedcauldron.wildbackport.client.registry.WBSoundEvents;
import com.cursedcauldron.wildbackport.common.entities.access.Recovery;
import com.cursedcauldron.wildbackport.common.items.CompassItemPropertyFunction;
import com.cursedcauldron.wildbackport.common.items.RecoveryCompassTarget;
import com.cursedcauldron.wildbackport.common.registry.Instruments;
import com.cursedcauldron.wildbackport.common.registry.WBBiomes;
import com.cursedcauldron.wildbackport.common.registry.WBBlockEntities;
@ -35,12 +39,12 @@ import com.cursedcauldron.wildbackport.common.tag.WBGameEventTags;
import com.cursedcauldron.wildbackport.common.tag.WBItemTags;
import com.mojang.logging.LogUtils;
import net.minecraft.client.renderer.item.ClampedItemPropertyFunction;
import net.minecraft.client.renderer.item.ItemProperties;
import net.minecraft.core.BlockPos;
import net.minecraft.core.GlobalPos;
import net.minecraft.client.renderer.item.ItemPropertyFunction;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.item.Item;
//<>
@ -87,19 +91,5 @@ public class WildBackport {
WBGameEventTags.TAGS.bootstrap();
WBItemTags.TAGS.bootstrap();
InstrumentTags.TAGS.bootstrap();
ItemProperties.register(
WBItems.RECOVERY_COMPASS.get(),
new ResourceLocation("angle"),
new CompassItemPropertyFunction((level, stack, entity) -> {
//if (entity instanceof Player player)
// System.out.println(
// "ALEC: " + Recovery.of(player).getLastDeathLocation()
// );
return entity instanceof Player player
? Recovery.of(player).getLastDeathLocation().orElse(null)
: null;
})
);
}
}

View file

@ -1,5 +1,8 @@
package com.cursedcauldron.wildbackport.client;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import com.cursedcauldron.wildbackport.client.particle.SculkChargeParticle;
import com.cursedcauldron.wildbackport.client.particle.SculkChargePopParticle;
import com.cursedcauldron.wildbackport.client.particle.SculkSoulParticle;
@ -16,22 +19,25 @@ import com.cursedcauldron.wildbackport.client.render.model.ChestBoatModel;
import com.cursedcauldron.wildbackport.client.render.model.FrogModel;
import com.cursedcauldron.wildbackport.client.render.model.TadpoleModel;
import com.cursedcauldron.wildbackport.client.render.model.WardenModel;
import com.cursedcauldron.wildbackport.common.entities.access.Recovery;
import com.cursedcauldron.wildbackport.common.items.CompassItemPropertyFunction;
import com.cursedcauldron.wildbackport.common.items.RecoveryCompassTarget;
import com.cursedcauldron.wildbackport.common.registry.WBBlocks;
import com.cursedcauldron.wildbackport.common.registry.WBItems;
import com.cursedcauldron.wildbackport.common.registry.entity.WBEntityTypes;
import com.cursedcauldron.wildbackport.core.api.ColorRegistry;
import com.cursedcauldron.wildbackport.core.api.ParticleRegistry;
import com.cursedcauldron.wildbackport.core.api.RenderRegistry;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.renderer.BiomeColors;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.item.ClampedItemPropertyFunction;
import net.minecraft.client.renderer.item.ItemProperties;
import net.minecraft.client.renderer.item.ItemPropertyFunction;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.vehicle.Boat;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.FoliageColor;
@Environment(EnvType.CLIENT)
@ -110,5 +116,35 @@ public class ClientSetup {
WBBlocks.MANGROVE_PROPAGULE.get(),
WBBlocks.POTTED_MANGROVE_PROPAGULE.get()
);
var isForge = false;
try {
// TODO: wonk
Class.forName("net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext");
isForge = true;
} catch (ClassNotFoundException alec) {}
try {
var registerItemPropertyFunc = ItemProperties.class.getDeclaredMethod(
isForge ? "register" : "method_27879",
Item.class,
ResourceLocation.class,
// Thanks for patching, forge!
isForge ? ItemPropertyFunction.class : ClampedItemPropertyFunction.class
);
registerItemPropertyFunc.setAccessible(true);
registerItemPropertyFunc.invoke(
null,
WBItems.RECOVERY_COMPASS.get(),
new ResourceLocation("angle"),
new CompassItemPropertyFunction(RecoveryCompassTarget.INSTANCE)
);
} catch (
InvocationTargetException | IllegalAccessException | NoSuchMethodException e
) {
throw new RuntimeException(e);
}
}
}
}

View file

@ -0,0 +1,21 @@
package com.cursedcauldron.wildbackport.common.items;
import com.cursedcauldron.wildbackport.common.entities.access.Recovery;
import com.cursedcauldron.wildbackport.common.items.CompassItemPropertyFunction.CompassTarget;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.core.GlobalPos;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
public class RecoveryCompassTarget implements CompassTarget {
public static final RecoveryCompassTarget INSTANCE = new RecoveryCompassTarget();
@Override
public GlobalPos getPos(ClientLevel level, ItemStack stack, Entity entity) {
return entity instanceof Player player
? Recovery.of(player).getLastDeathLocation().orElse(null)
: null;
}
}

View file

@ -25,4 +25,3 @@ transitive-accessible method net/minecraft/client/particle/HugeExplosionParticle
transitive-accessible method net/minecraft/world/level/block/MultifaceBlock hasFace (Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/Direction;)Z
transitive-accessible method net/minecraft/core/Registry registerSimple (Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/core/Registry$RegistryBootstrap;)Lnet/minecraft/core/Registry;
transitive-accessible method net/minecraft/client/renderer/item/ItemProperties register (Lnet/minecraft/world/item/Item;Lnet/minecraft/resources/ResourceLocation;Lnet/minecraft/client/renderer/item/ClampedItemPropertyFunction;)V

View file

@ -4,12 +4,12 @@
"package": "com.cursedcauldron.wildbackport.core.mixin.fabric",
"compatibilityLevel": "JAVA_17",
"mixins": [
"access.BiomeAccessor"
"access.BiomeAccessor",
"common.BeardifierMixin"
],
"client": [
"client.FogRendererMixin",
"client.SheetsMixin",
"common.BeardifierMixin"
"client.SheetsMixin"
],
"injectors": {
"defaultRequire": 1