feat: implement recovery compass
This commit is contained in:
parent
fc200ca483
commit
cc8959ee1d
|
@ -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;
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue