Core/Redux split to get out the non-essential features

This commit is contained in:
Sollace 2020-01-27 18:37:22 +02:00
parent 995c332814
commit 85b9ddb706
313 changed files with 2251 additions and 2180 deletions

View file

@ -1,51 +0,0 @@
package com.minelittlepony.unicopia;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import com.minelittlepony.unicopia.client.ClientInteractionManager;
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
import com.mojang.authlib.GameProfile;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
public interface InteractionManager {
static InteractionManager instance() {
if (Unicopia.interactionManager == null) {
if (ServerInteractionManager.isClientSide()) {
Unicopia.interactionManager = new ClientInteractionManager();
} else {
Unicopia.interactionManager = new ServerInteractionManager();
}
}
return Unicopia.interactionManager;
}
@Nullable
PlayerEntity getClientPlayer();
@Nullable
default IPlayer getIPlayer() {
return SpeciesList.instance().getPlayer(getClientPlayer());
}
boolean isClientPlayer(@Nullable PlayerEntity player);
int getViewMode();
/**
* Side-independent method to create a new player.
*
* Returns an implementation of PlayerEntity appropriate to the side being called on.
*/
@Nonnull
PlayerEntity createPlayer(Entity observer, GameProfile profile);
void postRenderEntity(Entity entity);
boolean renderEntity(Entity entity, float renderPartialTicks);
}

View file

@ -1,15 +0,0 @@
package com.minelittlepony.unicopia;
import com.minelittlepony.unicopia.inventory.gui.ContainerOfHolding;
import net.fabricmc.fabric.api.container.ContainerProviderRegistry;
import net.minecraft.util.Identifier;
public class UContainers {
public static final Identifier BAG_OF_HOLDING = new Identifier(Unicopia.MODID, "bag_of_holding");
static void bootstrap() {
ContainerProviderRegistry.INSTANCE.registerFactory(BAG_OF_HOLDING, ContainerOfHolding::new);
}
}

View file

@ -1,74 +0,0 @@
package com.minelittlepony.unicopia;
import net.fabricmc.api.ModInitializer;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
import java.util.Map;
import java.util.function.Function;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.google.gson.JsonObject;
import com.minelittlepony.unicopia.ability.PowersRegistry;
import com.minelittlepony.unicopia.command.Commands;
import com.minelittlepony.unicopia.enchanting.Pages;
import com.minelittlepony.unicopia.enchanting.recipe.AffineIngredients;
import com.minelittlepony.unicopia.enchanting.recipe.SpecialRecipe;
import com.minelittlepony.unicopia.enchanting.recipe.SpellRecipe;
import com.minelittlepony.unicopia.inventory.gui.SpellBookContainer;
import com.minelittlepony.unicopia.item.UItems;
import com.minelittlepony.unicopia.inventory.gui.GuiSpellBook;
import com.minelittlepony.unicopia.network.MsgPlayerAbility;
import com.minelittlepony.unicopia.network.MsgPlayerCapabilities;
import com.minelittlepony.unicopia.network.MsgRequestCapabilities;
import com.minelittlepony.unicopia.world.UWorld;
public class Unicopia implements ModInitializer {
public static final String MODID = "unicopia";
public static final String NAME = "@NAME@";
public static final String VERSION = "@VERSION@";
public static final Logger LOGGER = LogManager.getLogger();
static InteractionManager interactionManager;
private static IChannel channel;
public static IChannel getConnection() {
return channel;
}
@Override
public void onInitialize() {
Config.init(event.getModConfigurationDirectory());
channel = JumpingCastle.subscribeTo(MODID, () -> {})
.listenFor(MsgRequestCapabilities.class)
.listenFor(MsgPlayerCapabilities.class)
.listenFor(MsgPlayerAbility.class);
PowersRegistry.instance().init();
UAdvancements.init();
craftingManager.load();
Pages.instance().load();
UBlocks.bootstrap();
UItems.bootstrap();
Commands.bootstrap();
UContainers.bootstrap();
UWorld.instance().init();
InteractionManager.instance().preInit();
InteractionManager.instance().init();
InteractionManager.instance().postInit();
UItems.fixRecipes();
}
}

View file

@ -1,5 +0,0 @@
package com.minelittlepony.unicopia.ability;
public class Hit implements IData {
}

View file

@ -1,5 +0,0 @@
package com.minelittlepony.unicopia.ability;
public interface IData {
}

View file

@ -1,93 +0,0 @@
package com.minelittlepony.unicopia.client;
import com.minelittlepony.unicopia.InteractionManager;
import com.minelittlepony.unicopia.SpeciesList;
import com.minelittlepony.unicopia.UBlocks;
import com.minelittlepony.unicopia.client.gui.UHud;
import com.minelittlepony.unicopia.entity.capabilities.ICamera;
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
import com.minelittlepony.unicopia.item.UItems;
import com.mojang.blaze3d.platform.GlStateManager;
import net.minecraft.client.MinecraftClient;
class ClientHooks {
// This fixes lighting errors on the armour slots.
// #MahjongPls
public static void postEntityRender() {
GlStateManager.enableAlphaTest();
InteractionManager.instance().postRenderEntity(event.getEntity());
}
public static void preEntityRender() {
if (InteractionManager.instance().renderEntity(event.getEntity(), event.getPartialRenderTick())) {
event.setCanceled(true);
}
}
public static void onDisplayGui(GuiScreenEvent.InitGuiEvent.Post event) {
if (event.getGui() instanceof GuiOptions || event.getGui() instanceof GuiShareToLan) {
ClientInteractionManager.addUniButton(event.getButtonList());
}
}
public static void onGameTick(TickEvent.ClientTickEvent event) {
if (event.phase == Phase.END) {
InteractionManager.instance().tick();
}
}
public static void beforePreRenderHud(RenderGameOverlayEvent.Pre event) {
GlStateManager.pushMatrix();
if (event.getType() != ElementType.ALL) {
IPlayer player = InteractionManager.instance().getIPlayer();
if (player != null && MinecraftClient.getInstance().world != null) {
UHud.instance.repositionElements(player, event.getResolution(), event.getType(), true);
}
}
}
public static void afterPreRenderHud(RenderGameOverlayEvent.Pre event) {
if (event.isCanceled()) {
GlStateManager.popMatrix();
}
}
public static void postRenderHud(RenderGameOverlayEvent.Post event) {
if (event.getType() == ElementType.ALL) {
IPlayer player = InteractionManager.instance().getIPlayer();
if (player != null && MinecraftClient.getInstance().world != null) {
UHud.instance.renderHud(player, event.getResolution());
}
}
GlStateManager.popMatrix();
}
public static void registerItemColours(ColorHandlerEvent.Item event) {
UItems.registerColors(event.getItemColors());
UBlocks.registerColors(event.getItemColors(), event.getBlockColors());
}
public static void modifyFOV(FOVUpdateEvent event) {
event.setNewfov(SpeciesList.instance().getPlayer(event.getEntity()).getCamera().calculateFieldOfView(event.getFov()));
}
public static void setupPlayerCamera(EntityViewRenderEvent.CameraSetup event) {
IPlayer player = InteractionManager.instance().getIPlayer();
if (player != null) {
ICamera view = player.getCamera();
event.setRoll(view.calculateRoll());
event.setPitch(view.calculatePitch(event.getPitch()));
event.setYaw(view.calculateYaw(event.getYaw()));
}
}
}

View file

@ -1,20 +0,0 @@
package com.minelittlepony.unicopia.client.input;
import com.minelittlepony.unicopia.ServerInteractionManager;
public final class Keyboard {
private static IKeyBindingHandler keyHandler;
public static IKeyBindingHandler getKeyHandler() {
if (keyHandler == null) {
if (ServerInteractionManager.isClientSide()) {
keyHandler = new KeyBindingsHandler();
} else {
keyHandler = bind -> {};
}
}
return keyHandler;
}
}

View file

@ -1,41 +0,0 @@
package com.minelittlepony.unicopia.client.particle;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.entity.Entity;
import net.minecraft.particle.ParticleEffect;
import net.minecraft.world.World;
import com.minelittlepony.unicopia.client.render.model.DiskModel;
import com.mojang.blaze3d.platform.GlStateManager;
public class ParticleDisk extends ParticleSphere {
private static final DiskModel model = new DiskModel();
protected float rotX;
protected float rotY;
protected float rotZ;
public ParticleDisk(ParticleEffect type, World w, double x, double y, double z, double rX, double rY, double rZ) {
super(w, x, y, z, radius, tint, alpha);
rotX = rX;
rotY = rY;
rotZ = rZ;
}
@Override
public void renderParticle(BufferBuilder buffer, Entity viewer, float partialTicks, float x, float z, float yz, float xy, float xz) {
if (alpha <= 0) {
return;
}
Color.glColor(tint, alpha);
model.setPosition(this.x, this.y, this.z);
model.render(radius);
GlStateManager.color(1, 1, 1, 1);
}
}

View file

@ -1,25 +0,0 @@
package com.minelittlepony.unicopia.client.particle;
import net.minecraft.client.particle.RainSplashParticle;
import net.minecraft.particle.ParticleEffect;
import net.minecraft.world.World;
public class ParticleRaindrops extends RainSplashParticle {
public ParticleRaindrops(ParticleEffect type, World world, double x, double y, double z, double dx, double dy, double dz) {
super(world, x, y, z);
velocityY = -0.1;
maxAge += 19;
}
@Override
public void tick() {
super.tick();
if (onGround) {
velocityX *= 0.30000001192092896D;
velocityY = Math.random() * 0.20000000298023224D + 0.10000000149011612D;
velocityZ *= 0.30000001192092896D;
}
}
}

View file

@ -1,11 +1,8 @@
package com.minelittlepony.unicopia;
package com.minelittlepony.unicopia.core;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import com.google.common.collect.Lists;
@ -28,12 +25,12 @@ public class Config {
return instance;
}
static void init(File directory) {
File file = new File(directory, "unicopia.json");
public static void init(Path directory) {
Path file = directory.resolve("unicopia.json");
try {
if (file.exists()) {
try(JsonReader reader = new JsonReader(new InputStreamReader(new FileInputStream(file)));) {
if (Files.exists(file)) {
try(JsonReader reader = new JsonReader(Files.newBufferedReader(file))) {
instance = gson.fromJson(reader, Config.class);
}
}
@ -49,7 +46,7 @@ public class Config {
instance.save();
}
private File file;
private Path file;
@Expose(deserialize = false)
private final String speciesWhiteListComment =
@ -105,11 +102,13 @@ public class Config {
}
public void save() {
if (file.exists()) {
file.delete();
try {
Files.deleteIfExists(file);
} catch (IOException e1) {
e1.printStackTrace();
}
try (JsonWriter writer = new JsonWriter(new OutputStreamWriter(new FileOutputStream(file)))) {
try (JsonWriter writer = new JsonWriter(Files.newBufferedWriter(file))) {
writer.setIndent(" ");
gson.toJson(this, Config.class, writer);

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia;
package com.minelittlepony.unicopia.core;
import com.google.common.base.Predicate;
@ -6,36 +6,36 @@ import net.minecraft.entity.Entity;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.player.PlayerEntity;
public final class EquinePredicates {
public static final Predicate<PlayerEntity> INTERACT_WITH_CLOUDS = player -> {
public interface EquinePredicates {
Predicate<PlayerEntity> INTERACT_WITH_CLOUDS = player -> {
return player != null && SpeciesList.instance().getPlayer(player).getSpecies().canInteractWithClouds();
};
public static final Predicate<Entity> MAGI = entity -> {
Predicate<Entity> MAGI = entity -> {
return entity instanceof PlayerEntity && SpeciesList.instance().getPlayer((PlayerEntity)entity).getSpecies().canCast();
};
public static final Predicate<Entity> ITEMS = entity -> {
Predicate<Entity> ITEMS = entity -> {
return entity instanceof ItemEntity && entity.isAlive() && entity.age > 1;
};
public static final Predicate<ItemEntity> ITEM_INTERACT_WITH_CLOUDS = item -> {
Predicate<ItemEntity> ITEM_INTERACT_WITH_CLOUDS = item -> {
return ITEMS.test(item) && SpeciesList.instance().getEntity(item).getSpecies().canInteractWithClouds();
};
public static final Predicate<Entity> ENTITY_INTERACT_WITH_CLOUDS = entity -> {
Predicate<Entity> ENTITY_INTERACT_WITH_CLOUDS = entity -> {
return entity != null && (
(entity instanceof PlayerEntity && INTERACT_WITH_CLOUDS.test((PlayerEntity)entity))
|| (entity instanceof ItemEntity && ITEM_INTERACT_WITH_CLOUDS.test((ItemEntity)entity))
);
};
public static final Predicate<Entity> BUGGY = entity -> {
Predicate<Entity> BUGGY = entity -> {
return entity instanceof PlayerEntity
&& SpeciesList.instance().getPlayer((PlayerEntity)entity).getSpecies() == Race.CHANGELING;
};
public static PlayerEntity getPlayerFromEntity(Entity entity) {
static PlayerEntity getPlayerFromEntity(Entity entity) {
if (entity instanceof PlayerEntity) {
return (PlayerEntity) entity;
}

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.client.input;
package com.minelittlepony.unicopia.core;
public interface IKeyBindingHandler {
@ -9,12 +9,10 @@ public interface IKeyBindingHandler {
}
public interface IKeyBinding {
String getKeyCategory();
String getKeyName();
int getKeyCode();
}
}

View file

@ -1,35 +1,26 @@
package com.minelittlepony.unicopia;
package com.minelittlepony.unicopia.core;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import com.minelittlepony.util.dummy.DummyPlayerEntity;
import com.minelittlepony.util.dummy.DummyServerPlayerEntity;
import com.minelittlepony.unicopia.core.util.dummy.DummyPlayerEntity;
import com.minelittlepony.unicopia.core.util.dummy.DummyServerPlayerEntity;
import com.mojang.authlib.GameProfile;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.server.world.ServerWorld;
public class ServerInteractionManager implements InteractionManager {
public class InteractionManager {
@Deprecated
public static boolean isClientSide() {
return false;
public static InteractionManager instance() {
return UnicopiaCore.interactionManager;
}
@Override
@Nullable
public PlayerEntity getClientPlayer() {
return null;
}
@Override
public boolean isClientPlayer(@Nullable PlayerEntity player) {
return false;
}
@Override
public int getViewMode() {
return 0;
}
@ -39,7 +30,6 @@ public class ServerInteractionManager implements InteractionManager {
*
* Returns an implementation of PlayerEntity appropriate to the side being called on.
*/
@Override
@Nonnull
public PlayerEntity createPlayer(Entity observer, GameProfile profile) {
if (observer.world instanceof ServerWorld) {
@ -47,15 +37,4 @@ public class ServerInteractionManager implements InteractionManager {
}
return new DummyPlayerEntity(observer.world, profile);
}
@Override
public void postRenderEntity(Entity entity) {
}
@Override
public boolean renderEntity(Entity entity, float renderPartialTicks) {
return false;
}
}

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia;
package com.minelittlepony.unicopia.core;
import java.util.HashMap;
import java.util.Map;

View file

@ -0,0 +1,9 @@
package com.minelittlepony.unicopia.core;
public class ServerInteractionManager {
@Deprecated
public static boolean isClientSide() {
return false;
}
}

View file

@ -1,12 +1,12 @@
package com.minelittlepony.unicopia;
package com.minelittlepony.unicopia.core;
import java.util.Optional;
import javax.annotation.Nullable;
import com.minelittlepony.unicopia.Config;
import com.minelittlepony.unicopia.ducks.IRaceContainerHolder;
import com.minelittlepony.unicopia.entity.IEntity;
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
import com.minelittlepony.unicopia.core.Config;
import com.minelittlepony.unicopia.core.ducks.IRaceContainerHolder;
import com.minelittlepony.unicopia.core.entity.IEntity;
import com.minelittlepony.unicopia.core.entity.player.IPlayer;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;

View file

@ -1,7 +1,7 @@
package com.minelittlepony.unicopia;
package com.minelittlepony.unicopia.core;
import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.util.MagicalDamageSource;
import com.minelittlepony.unicopia.core.util.CustomStatusEffect;
import com.minelittlepony.unicopia.core.util.MagicalDamageSource;
import net.minecraft.entity.effect.StatusEffect;
import net.minecraft.entity.effect.StatusEffectInstance;
@ -11,7 +11,7 @@ import net.minecraft.util.Identifier;
public class UEffects {
public static final StatusEffect FOOD_POISONING = new CustomStatusEffect(new Identifier(Unicopia.MODID, "food_poisoning"), StatusEffectType.BENEFICIAL, 3484199)
public static final StatusEffect FOOD_POISONING = new CustomStatusEffect(new Identifier(UnicopiaCore.MODID, "food_poisoning"), StatusEffectType.BENEFICIAL, 3484199)
.setSilent()
.direct((p, e, i) -> {
StatusEffectInstance nausea = e.getStatusEffect(StatusEffects.NAUSEA);

View file

@ -1,17 +1,14 @@
package com.minelittlepony.unicopia;
package com.minelittlepony.unicopia.core;
import com.minelittlepony.unicopia.client.particle.ParticleChangelingMagic;
import com.minelittlepony.unicopia.client.particle.ParticleDisk;
import com.minelittlepony.unicopia.client.particle.ParticleRaindrops;
import com.minelittlepony.unicopia.client.particle.ParticleSphere;
import com.minelittlepony.unicopia.client.particle.ParticleUnicornMagic;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.particle.DefaultParticleType;
import net.minecraft.util.Identifier;
public class UParticles {
// TODO:
interface ParticleTypeRegistry {
static ParticleTypeRegistry getTnstance() {return null;}
DefaultParticleType register(Identifier id);
}
public static final DefaultParticleType UNICORN_MAGIC = ParticleTypeRegistry.getTnstance().register(new Identifier("unicopia", "unicorn_magic"));
public static final DefaultParticleType CHANGELING_MAGIC = ParticleTypeRegistry.getTnstance().register(new Identifier("unicopia", "changeling_magic"));

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia;
package com.minelittlepony.unicopia.core;
import net.minecraft.sound.SoundEvent;
import net.minecraft.util.Identifier;
@ -21,7 +21,7 @@ public class USounds {
public static final SoundEvent RECORD_FUNK = register("record.funk");
private static SoundEvent register(String name) {
Identifier id = new Identifier(Unicopia.MODID, name);
Identifier id = new Identifier(UnicopiaCore.MODID, name);
return Registry.register(Registry.SOUND_EVENT, id, new SoundEvent(id));
}

View file

@ -0,0 +1,13 @@
package com.minelittlepony.unicopia.core;
import net.fabricmc.fabric.api.tag.TagRegistry;
import net.minecraft.item.Item;
import net.minecraft.tag.Tag;
import net.minecraft.util.Identifier;
public class UTags {
// TODO: includes unicopia:alicorn_amulet
public static final Tag<Item> CURSED_ARTEFACTS = TagRegistry.item(new Identifier(UnicopiaCore.MODID, "cursed_artefacts"));
static void bootstrap() {}
}

View file

@ -0,0 +1,44 @@
package com.minelittlepony.unicopia.core;
import net.fabricmc.api.ModInitializer;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.minelittlepony.common.util.GamePaths;
import com.minelittlepony.jumpingcastle.api.Channel;
import com.minelittlepony.jumpingcastle.api.JumpingCastle;
import com.minelittlepony.unicopia.core.ability.PowersRegistry;
import com.minelittlepony.unicopia.core.command.Commands;
import com.minelittlepony.unicopia.core.network.MsgPlayerAbility;
import com.minelittlepony.unicopia.core.network.MsgPlayerCapabilities;
import com.minelittlepony.unicopia.core.network.MsgRequestCapabilities;
public class UnicopiaCore implements ModInitializer {
public static final String MODID = "unicopia";
public static final String NAME = "@NAME@";
public static final String VERSION = "@VERSION@";
public static final Logger LOGGER = LogManager.getLogger();
public static InteractionManager interactionManager = new InteractionManager();
private static Channel channel;
public static Channel getConnection() {
return channel;
}
@Override
public void onInitialize() {
Config.init(GamePaths.getConfigDirectory());
channel = JumpingCastle.subscribeTo(MODID, () -> {})
.listenFor(MsgRequestCapabilities.class)
.listenFor(MsgPlayerCapabilities.class)
.listenFor(MsgPlayerAbility.class);
UTags.bootstrap();
Commands.bootstrap();
PowersRegistry.instance().init();
}
}

View file

@ -0,0 +1,5 @@
package com.minelittlepony.unicopia.core.ability;
public class Hit implements IPower.IData {
}

View file

@ -1,6 +1,6 @@
package com.minelittlepony.unicopia.ability;
package com.minelittlepony.unicopia.core.ability;
import com.minelittlepony.unicopia.ability.IPower;
import com.minelittlepony.unicopia.core.ability.IPower;
public interface IAbilityReceiver {

View file

@ -1,6 +1,6 @@
package com.minelittlepony.unicopia.ability;
package com.minelittlepony.unicopia.core.ability;
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
import com.minelittlepony.unicopia.core.entity.player.IPlayer;
/**
* Predicate for abilities to control whether a player can fly.

View file

@ -1,6 +1,6 @@
package com.minelittlepony.unicopia.ability;
package com.minelittlepony.unicopia.core.ability;
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
import com.minelittlepony.unicopia.core.entity.player.IPlayer;
/**
* Predicate for abilities to control what the player's physical height is.

View file

@ -1,14 +1,14 @@
package com.minelittlepony.unicopia.ability;
package com.minelittlepony.unicopia.core.ability;
import javax.annotation.Nullable;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.client.input.IKeyBindingHandler;
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
import com.minelittlepony.unicopia.core.IKeyBindingHandler;
import com.minelittlepony.unicopia.core.Race;
import com.minelittlepony.unicopia.core.entity.player.IPlayer;
import net.minecraft.world.World;
public interface IPower<T extends IData> extends IKeyBindingHandler.IKeyBinding {
public interface IPower<T extends IPower.IData> extends IKeyBindingHandler.IKeyBinding {
@Override
default String getKeyCategory() {
@ -75,4 +75,7 @@ public interface IPower<T extends IData> extends IKeyBindingHandler.IKeyBinding
*/
void postApply(IPlayer player);
public interface IData {
}
}

View file

@ -1,10 +1,10 @@
package com.minelittlepony.unicopia.ability;
package com.minelittlepony.unicopia.core.ability;
import com.google.gson.annotations.Expose;
import net.minecraft.util.math.BlockPos;
public class Location implements IData {
public class Location implements IPower.IData {
@Expose
public int x;

View file

@ -1,8 +1,8 @@
package com.minelittlepony.unicopia.ability;
package com.minelittlepony.unicopia.core.ability;
import com.google.gson.annotations.Expose;
public class Numeric implements IData {
public class Numeric implements IPower.IData {
@Expose
public int type;

View file

@ -1,10 +1,10 @@
package com.minelittlepony.unicopia.ability;
package com.minelittlepony.unicopia.core.ability;
import org.lwjgl.glfw.GLFW;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
import com.minelittlepony.util.VecHelper;
import com.minelittlepony.unicopia.core.Race;
import com.minelittlepony.unicopia.core.entity.player.IPlayer;
import com.minelittlepony.unicopia.core.util.VecHelper;
import net.minecraft.client.network.packet.EntityPassengersSetS2CPacket;
import net.minecraft.entity.Entity;
@ -13,6 +13,9 @@ import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.world.World;
/**
* Pegasi ability to pick up and carry other players
*/
public class PowerCarry implements IPower<Hit> {
@Override

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.ability;
package com.minelittlepony.unicopia.core.ability;
import java.util.List;
import java.util.stream.Collectors;
@ -7,10 +7,10 @@ import javax.annotation.Nullable;
import org.lwjgl.glfw.GLFW;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
import com.minelittlepony.util.MagicalDamageSource;
import com.minelittlepony.util.VecHelper;
import com.minelittlepony.unicopia.core.Race;
import com.minelittlepony.unicopia.core.entity.player.IPlayer;
import com.minelittlepony.unicopia.core.util.MagicalDamageSource;
import com.minelittlepony.unicopia.core.util.VecHelper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
@ -25,6 +25,9 @@ import net.minecraft.entity.passive.SheepEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.particle.ParticleTypes;
/**
* Changeling ability to restore health from mobs
*/
public class PowerFeed implements IPower<Hit> {
@Override

View file

@ -1,11 +1,11 @@
package com.minelittlepony.unicopia.ability;
package com.minelittlepony.unicopia.core.ability;
import org.lwjgl.glfw.GLFW;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
import com.minelittlepony.util.VecHelper;
import com.minelittlepony.unicopia.core.Race;
import com.minelittlepony.unicopia.core.UParticles;
import com.minelittlepony.unicopia.core.entity.player.IPlayer;
import com.minelittlepony.unicopia.core.util.VecHelper;
import net.minecraft.block.BlockState;
import net.minecraft.item.BoneMealItem;
@ -17,6 +17,9 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
/**
* Earth Pony ability to grow crops
*/
public class PowerGrow implements IPower<Location> {
@Override

View file

@ -1,11 +1,16 @@
package com.minelittlepony.unicopia.ability;
package com.minelittlepony.unicopia.core.ability;
import org.lwjgl.glfw.GLFW;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
import com.minelittlepony.unicopia.magic.spells.SpellShield;
import com.minelittlepony.unicopia.core.Race;
import com.minelittlepony.unicopia.core.UParticles;
import com.minelittlepony.unicopia.core.entity.player.IPlayer;
import com.minelittlepony.unicopia.core.magic.spell.ShieldSpell;
/**
* A magic casting ability for unicorns.
* (only shields for now)
*/
public class PowerMagic implements IPower<Hit> {
@Override
@ -45,10 +50,11 @@ public class PowerMagic implements IPower<Hit> {
@Override
public void apply(IPlayer player, Hit data) {
if (player.getEffect() instanceof SpellShield) {
// TODO: A way to pick the active effect
if (player.getEffect() instanceof ShieldSpell) {
player.setEffect(null);
} else {
player.setEffect(new SpellShield());
player.setEffect(new ShieldSpell());
}
}

View file

@ -1,10 +1,11 @@
package com.minelittlepony.unicopia.ability;
package com.minelittlepony.unicopia.core.ability;
import org.lwjgl.glfw.GLFW;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
import com.minelittlepony.util.VecHelper;
import com.minelittlepony.unicopia.core.Race;
import com.minelittlepony.unicopia.core.UParticles;
import com.minelittlepony.unicopia.core.entity.player.IPlayer;
import com.minelittlepony.unicopia.core.util.VecHelper;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
@ -23,6 +24,9 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
/**
* Unicorn teleport ability
*/
public class PowerTeleport implements IPower<Location> {
@Override

View file

@ -1,13 +1,13 @@
package com.minelittlepony.unicopia.ability;
package com.minelittlepony.unicopia.core.ability;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.client.input.Keyboard;
import com.minelittlepony.unicopia.core.Race;
public class PowersRegistry {
@ -17,9 +17,9 @@ public class PowersRegistry {
return INSTANCE;
}
private final Map<Integer, List<IPower<? extends IData>>> keyToPowerMap = new HashMap<>();
private final Map<Integer, List<IPower<? extends IPower.IData>>> keyToPowerMap = new HashMap<>();
private final Map<String, IPower<? extends IData>> powerNamesMap = new HashMap<>();
private final Map<String, IPower<? extends IPower.IData>> powerNamesMap = new HashMap<>();
private PowersRegistry() {
}
@ -27,36 +27,35 @@ public class PowersRegistry {
public void init() {
registerPower(new PowerTeleport());
registerPower(new PowerMagic());
registerPower(new PowerStomp());
registerPower(new PowerGrow());
registerPower(new PowerFeed());
registerPower(new PowerCarry());
registerPower(new PowerDisguise());
registerPower(new PowerCloudBase());
registerPower(new PowerEngulf());
}
public boolean hasRegisteredPower(int keyCode) {
return keyToPowerMap.containsKey(keyCode);
}
public Optional<IPower<? extends IData>> getCapablePowerFromKey(int keyCode, Race race) {
public Optional<IPower<? extends IPower.IData>> getCapablePowerFromKey(int keyCode, Race race) {
return getKeyCodePool(keyCode).stream()
.filter(power -> power.canUse(race))
.findFirst();
}
public Optional<IPower<? extends IData>> getPowerFromName(String name) {
public Optional<IPower<? extends IPower.IData>> getPowerFromName(String name) {
return Optional.ofNullable(powerNamesMap.get(name));
}
private List<IPower<? extends IData>> getKeyCodePool(int keyCode) {
private List<IPower<? extends IPower.IData>> getKeyCodePool(int keyCode) {
return keyToPowerMap.computeIfAbsent(keyCode, ArrayList::new);
}
public void registerPower(IPower<? extends IData> power) {
public void registerPower(IPower<? extends IPower.IData> power) {
getKeyCodePool(power.getKeyCode()).add(power);
powerNamesMap.put(power.getKeyName(), power);
Keyboard.getKeyHandler().addKeybind(power);
}
public Collection<IPower<? extends IPower.IData>> getValues() {
return powerNamesMap.values();
}
}

View file

@ -1,7 +1,7 @@
package com.minelittlepony.unicopia.client.input;
package com.minelittlepony.unicopia.core.client;
import com.minelittlepony.unicopia.InteractionManager;
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
import com.minelittlepony.unicopia.core.SpeciesList;
import com.minelittlepony.unicopia.core.entity.player.IPlayer;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.input.Input;
@ -40,7 +40,7 @@ public class InversionAwareKeyboardInput extends KeyboardInput {
this.movementSideways = proxy.movementSideways;
this.movementForward = proxy.movementForward;
IPlayer player = InteractionManager.instance().getIPlayer();
IPlayer player = SpeciesList.instance().getPlayer(MinecraftClient.getInstance().player);
if (player.getGravity().getGravitationConstant() < 0) {
boolean tmp = pressingLeft;

View file

@ -1,12 +1,13 @@
package com.minelittlepony.unicopia.client.input;
package com.minelittlepony.unicopia.core.client;
import java.util.ArrayList;
import java.util.List;
import com.minelittlepony.unicopia.SpeciesList;
import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.ability.PowersRegistry;
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
import com.minelittlepony.unicopia.core.IKeyBindingHandler;
import com.minelittlepony.unicopia.core.SpeciesList;
import com.minelittlepony.unicopia.core.UnicopiaCore;
import com.minelittlepony.unicopia.core.ability.PowersRegistry;
import com.minelittlepony.unicopia.core.entity.player.IPlayer;
import net.fabricmc.fabric.api.client.keybinding.FabricKeyBinding;
import net.fabricmc.fabric.api.client.keybinding.KeyBindingRegistry;
@ -16,7 +17,7 @@ import net.minecraft.client.util.InputUtil;
import net.minecraft.util.Identifier;
class KeyBindingsHandler implements IKeyBindingHandler {
public class KeyBindingsHandler implements IKeyBindingHandler {
private final MinecraftClient client = MinecraftClient.getInstance();
private final List<KeyBinding> bindings = new ArrayList<>();
@ -28,7 +29,7 @@ class KeyBindingsHandler implements IKeyBindingHandler {
public void addKeybind(IKeyBinding p) {
KeyBindingRegistry.INSTANCE.addCategory(p.getKeyCategory());
FabricKeyBinding b = FabricKeyBinding.Builder.create(new Identifier(Unicopia.MODID, p.getKeyName()), InputUtil.Type.KEYSYM, p.getKeyCode(), p.getKeyCategory()).build();
FabricKeyBinding b = FabricKeyBinding.Builder.create(new Identifier(UnicopiaCore.MODID, p.getKeyName()), InputUtil.Type.KEYSYM, p.getKeyCode(), p.getKeyCategory()).build();
KeyBindingRegistry.INSTANCE.register(b);
bindings.add(b);

View file

@ -1,6 +1,6 @@
package com.minelittlepony.unicopia.client.input;
package com.minelittlepony.unicopia.core.client;
import com.minelittlepony.unicopia.InteractionManager;
import com.minelittlepony.unicopia.core.SpeciesList;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.Mouse;
@ -13,7 +13,7 @@ public class MouseControl extends Mouse {
@Override
public void updateMouse() {
if (InteractionManager.instance().getIPlayer().getGravity().getGravitationConstant() < 0) {
if (SpeciesList.instance().getPlayer(MinecraftClient.getInstance().player).getGravity().getGravitationConstant() < 0) {
//cursorDeltaX = -cursorDeltaX;
//cursorDeltaY = -cursorDeltaY;
}

View file

@ -1,41 +1,37 @@
package com.minelittlepony.unicopia.client;
import java.util.List;
import java.util.UUID;
package com.minelittlepony.unicopia.core.client;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import com.minelittlepony.unicopia.MineLP;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.SpeciesList;
import com.minelittlepony.unicopia.ServerInteractionManager;
import com.minelittlepony.unicopia.Config;
import com.minelittlepony.unicopia.InteractionManager;
import com.minelittlepony.unicopia.UEntities;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.client.ability.render.DisguiseRenderer;
import com.minelittlepony.unicopia.client.gui.SettingsScreen;
import com.minelittlepony.unicopia.client.input.Keyboard;
import com.minelittlepony.unicopia.client.input.MouseControl;
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
import com.minelittlepony.unicopia.inventory.gui.GuiOfHolding;
import com.minelittlepony.unicopia.client.input.InversionAwareKeyboardInput;
import com.minelittlepony.unicopia.network.MsgRequestCapabilities;
import com.minelittlepony.util.dummy.DummyClientPlayerEntity;
import com.minelittlepony.common.event.ClientReadyCallback;
import com.minelittlepony.jumpingcastle.api.Target;
import com.minelittlepony.unicopia.core.Config;
import com.minelittlepony.unicopia.core.IKeyBindingHandler;
import com.minelittlepony.unicopia.core.InteractionManager;
import com.minelittlepony.unicopia.core.Race;
import com.minelittlepony.unicopia.core.SpeciesList;
import com.minelittlepony.unicopia.core.UnicopiaCore;
import com.minelittlepony.unicopia.core.ability.PowersRegistry;
import com.minelittlepony.unicopia.core.entity.player.IPlayer;
import com.minelittlepony.unicopia.core.network.MsgRequestCapabilities;
import com.minelittlepony.unicopia.core.util.MineLPConnector;
import com.minelittlepony.unicopia.core.util.dummy.DummyClientPlayerEntity;
import com.minelittlepony.unicopia.redux.client.render.DisguiseRenderer;
import com.mojang.authlib.GameProfile;
import com.mojang.blaze3d.platform.GlStateManager;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.event.client.ClientTickCallback;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.input.Input;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.container.ContainerType;
import net.minecraft.container.NameableContainerProvider;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
public class ClientInteractionManager extends ServerInteractionManager {
public class UnicopiaCoreClient extends InteractionManager implements ClientModInitializer {
private final IKeyBindingHandler keyboard = new KeyBindingsHandler();
/**
* The race preferred by the client - as determined by mine little pony.
@ -50,7 +46,7 @@ public class ClientInteractionManager extends ServerInteractionManager {
private static Race getclientPlayerRace() {
if (!Config.instance().ignoresMineLittlePony()
&& MinecraftClient.getInstance().player != null) {
Race race = MineLP.getPlayerPonyRace();
Race race = MineLPConnector.getPlayerPonyRace();
if (!race.isDefault()) {
return race;
@ -61,55 +57,39 @@ public class ClientInteractionManager extends ServerInteractionManager {
return Config.instance().getPrefferedRace();
}
@Override
@Nullable
public PlayerEntity getClientPlayer() {
return MinecraftClient.getInstance().player;
}
@Override
@Nullable
public PlayerEntity getPlayerByUUID(UUID playerId) {
MinecraftClient mc = MinecraftClient.getInstance();
if (mc.player.getUuid().equals(playerId)) {
return mc.player;
}
return mc.world.getPlayerByUuid(playerId);
}
@Override
@Nonnull
public PlayerEntity createPlayer(Entity observer, GameProfile profile) {
return new DummyClientPlayerEntity(observer.world, profile);
if (observer.world instanceof ClientWorld) {
return new DummyClientPlayerEntity((ClientWorld)observer.world, profile);
}
return super.createPlayer(observer, profile);
}
@Override
public boolean isClientPlayer(@Nullable PlayerEntity player) {
if (getClientPlayer() == player) {
if (MinecraftClient.getInstance().player == player) {
return true;
}
if (getClientPlayer() == null || player == null) {
if (MinecraftClient.getInstance().player == null || player == null) {
return false;
}
return IPlayer.equal(getClientPlayer(), player);
return IPlayer.equal(MinecraftClient.getInstance().player, player);
}
@Override
public int getViewMode() {
return MinecraftClient.getInstance().gameSettings.thirdPersonView;
return MinecraftClient.getInstance().options.perspective;
}
@Override
public void postRenderEntity(Entity entity) {
if (entity instanceof PlayerEntity) {
IPlayer iplayer = SpeciesList.instance().getPlayer((PlayerEntity)entity);
if (iplayer.getGravity().getGravitationConstant() < 0) {
GlStateManager.translate(0, entity.height, 0);
GlStateManager.translated(0, entity.getDimensions(entity.getPose()).height, 0);
GlStateManager.scalef(1, -1, 1);
entity.prevPitch *= -1;
entity.pitch *= -1;
@ -117,7 +97,6 @@ public class ClientInteractionManager extends ServerInteractionManager {
}
}
@Override
public boolean renderEntity(Entity entity, float renderPartialTicks) {
if (DisguiseRenderer.getInstance().renderDisguise(entity, renderPartialTicks)) {
@ -129,7 +108,7 @@ public class ClientInteractionManager extends ServerInteractionManager {
if (iplayer.getGravity().getGravitationConstant() < 0) {
GlStateManager.scalef(1, -1, 1);
GlStateManager.translate(0, -entity.height, 0);
GlStateManager.translated(0, -entity.getDimensions(entity.getPose()).height, 0);
entity.prevPitch *= -1;
entity.pitch *= -1;
}
@ -147,19 +126,18 @@ public class ClientInteractionManager extends ServerInteractionManager {
}
@Override
public void preInit() {
UEntities.preInit();
UParticles.init();
}
@Override
public void init() {
public void onInitializeClient() {
clientPlayerRace = getclientPlayerRace();
UnicopiaCore.interactionManager = this;
ClientTickCallback.EVENT.register(this::tick);
ClientReadyCallback.EVENT.register(client -> {
PowersRegistry.instance().getValues().forEach(keyboard::addKeybind);
});
}
@Override
public void tick() {
PlayerEntity player = InteractionManager.instance().getClientPlayer();
private void tick(MinecraftClient client) {
PlayerEntity player = client.player;
if (player != null && !player.removed) {
Race newRace = getclientPlayerRace();
@ -167,13 +145,11 @@ public class ClientInteractionManager extends ServerInteractionManager {
if (newRace != clientPlayerRace) {
clientPlayerRace = newRace;
Unicopia.getConnection().send(new MsgRequestCapabilities(player, clientPlayerRace), Target.SERVER);
UnicopiaCore.getConnection().send(new MsgRequestCapabilities(player, clientPlayerRace), Target.SERVER);
}
}
Keyboard.getKeyHandler().onKeyInput();
MinecraftClient client = MinecraftClient.getInstance();
keyboard.onKeyInput();
if (player instanceof ClientPlayerEntity) {
ClientPlayerEntity sp = (ClientPlayerEntity)player;

View file

@ -0,0 +1,30 @@
package com.minelittlepony.unicopia.core.client.gui;
import com.minelittlepony.unicopia.core.SpeciesList;
import com.minelittlepony.unicopia.core.client.gui.UHud;
import com.mojang.blaze3d.platform.GlStateManager;
import net.minecraft.client.MinecraftClient;
class ClientHooks {
public static void beforePreRenderHud() {
GlStateManager.pushMatrix();
MinecraftClient client = MinecraftClient.getInstance();
if (client.player != null && client.world != null) {
UHud.instance.repositionElements(SpeciesList.instance().getPlayer(client.player), client.window, true);
}
}
public static void postRenderHud() {
MinecraftClient client = MinecraftClient.getInstance();
if (client.player != null && client.world != null) {
UHud.instance.renderHud(SpeciesList.instance().getPlayer(client.player), client.window);
}
GlStateManager.popMatrix();
}
}

View file

@ -1,6 +1,6 @@
package com.minelittlepony.unicopia.client.gui;
package com.minelittlepony.unicopia.core.client.gui;
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
import com.minelittlepony.unicopia.core.entity.player.IPlayer;
import com.mojang.blaze3d.platform.GlStateManager;
import net.minecraft.client.gui.DrawableHelper;

View file

@ -1,6 +1,6 @@
package com.minelittlepony.unicopia.client.gui;
package com.minelittlepony.unicopia.core.client.gui;
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
import com.minelittlepony.unicopia.core.entity.player.IPlayer;
public interface IHudElement {

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.client.gui;
package com.minelittlepony.unicopia.core.client.gui;
import com.minelittlepony.common.client.gui.GameGui;
import com.minelittlepony.common.client.gui.element.Button;

View file

@ -1,16 +1,16 @@
package com.minelittlepony.unicopia.client.gui;
package com.minelittlepony.unicopia.core.client.gui;
import java.util.ArrayList;
import java.util.List;
import org.lwjgl.opengl.GL11;
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
import com.minelittlepony.unicopia.core.entity.player.IPlayer;
import com.mojang.blaze3d.platform.GlStateManager;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.util.Window;
public class UHud {
@ -34,7 +34,7 @@ public class UHud {
elements.add(new FlightExperienceBar());
}
public void renderHud(IPlayer player, ScaledResolution resolution) {
public void renderHud(IPlayer player, Window resolution) {
this.width = resolution.getScaledWidth();
this.height = resolution.getScaledHeight();
this.player = player;
@ -43,29 +43,13 @@ public class UHud {
elements.forEach(this::renderElement);
}
public void repositionElements(IPlayer player, ScaledResolution resolution, ElementType type, boolean begin) {
this.width = resolution.getScaledWidth();
this.height = resolution.getScaledHeight();
public void repositionElements(IPlayer player, Window window, boolean begin) {
this.width = window.getScaledWidth();
this.height = window.getScaledHeight();
this.player = player;
this.begin = begin;
if (isSurvivalElement(type)) {
elements.forEach(this::positionElement);
}
}
protected boolean isSurvivalElement(ElementType type) {
switch (type) {
case ARMOR:
case HEALTH:
case FOOD:
case AIR:
case EXPERIENCE:
case HEALTHMOUNT:
case JUMPBAR:
return true;
default: return false;
}
elements.forEach(this::positionElement);
}
private void positionElement(IHudElement element) {

View file

@ -0,0 +1,47 @@
package com.minelittlepony.unicopia.core.client.particle;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.Camera;
import net.minecraft.particle.ParticleEffect;
import net.minecraft.world.World;
import org.lwjgl.opengl.GL14;
import com.minelittlepony.unicopia.core.client.render.DiskModel;
import com.mojang.blaze3d.platform.GlStateManager;
public class DiskParticle extends SphereParticle {
private static final DiskModel model = new DiskModel();
protected double rotX;
protected double rotY;
protected double rotZ;
public DiskParticle(ParticleEffect type, World w,
double x, double y, double z,
float radius,
int red, int green, int blue, float alpha,
double rX, double rY, double rZ) {
super(w, x, y, z, radius, red, green, blue, alpha);
rotX = rX;
rotY = rY;
rotZ = rZ;
}
@Override
public void buildGeometry(BufferBuilder buffer, Camera viewer, float partialTicks, float x, float z, float yz, float xy, float xz) {
if (alpha <= 0) {
return;
}
GL14.glBlendColor(red, green, blue, alpha);
model.setPosition(this.x, this.y, this.z);
model.render(radius);
GlStateManager.color4f(1, 1, 1, 1);
}
}

View file

@ -1,5 +1,7 @@
package com.minelittlepony.unicopia.client.particle;
package com.minelittlepony.unicopia.core.client.particle;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.particle.Particle;
import net.minecraft.client.particle.ParticleFactory;
import net.minecraft.client.particle.PortalParticle;
@ -15,7 +17,7 @@ public class ParticleChangelingMagic extends PortalParticle {
public ParticleChangelingMagic(World world, double x, double y, double z, double dx, double dy, double dz) {
super(world, x, y, z, dx, dy, dz);
float intensity = rand.nextFloat() * 0.6F + 0.4F;
float intensity = random.nextFloat() * 0.6F + 0.4F;
colorRed = intensity * 0.5F;
colorGreen = intensity;

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.client.particle;
package com.minelittlepony.unicopia.core.client.particle;
import net.minecraft.client.particle.Particle;

View file

@ -0,0 +1,43 @@
package com.minelittlepony.unicopia.core.client.particle;
import net.minecraft.client.particle.Particle;
import net.minecraft.client.particle.ParticleFactory;
import net.minecraft.client.particle.RainSplashParticle;
import net.minecraft.client.particle.SpriteProvider;
import net.minecraft.particle.DefaultParticleType;
import net.minecraft.world.World;
public class RaindropsParticle extends RainSplashParticle {
public RaindropsParticle(World world, double x, double y, double z, double dx, double dy, double dz) {
super(world, x, y, z);
velocityY = -0.1;
maxAge += 19;
}
@Override
public void tick() {
super.tick();
if (onGround) {
velocityX *= 0.30000001192092896D;
velocityY = Math.random() * 0.20000000298023224D + 0.10000000149011612D;
velocityZ *= 0.30000001192092896D;
}
}
public static class Factory implements ParticleFactory<DefaultParticleType> {
private final SpriteProvider provider;
public Factory(SpriteProvider provider) {
this.provider = provider;
}
@Override
public Particle createParticle(DefaultParticleType defaultParticleType_1, World world, double x, double y, double z, double dx, double dy, double dz) {
RaindropsParticle particle = new RaindropsParticle(world, x, y, z, dx, dy, dz);
particle.setSprite(provider);
return particle;
}
}
}

View file

@ -1,25 +1,30 @@
package com.minelittlepony.unicopia.client.particle;
package com.minelittlepony.unicopia.core.client.particle;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.particle.Particle;
import net.minecraft.client.particle.ParticleFactory;
import net.minecraft.client.particle.ParticleTextureSheet;
import net.minecraft.client.particle.SpriteProvider;
import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.render.Camera;
import net.minecraft.entity.Entity;
import net.minecraft.particle.DefaultParticleType;
import net.minecraft.particle.ParticleEffect;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.world.World;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL14;
import com.minelittlepony.unicopia.client.render.model.SphereModel;
import com.minelittlepony.unicopia.magic.ICaster;
import com.minelittlepony.unicopia.particles.ParticleConnection.IAttachableParticle;
import com.minelittlepony.unicopia.core.client.render.SphereModel;
import com.minelittlepony.unicopia.core.magic.ICaster;
import com.minelittlepony.unicopia.core.util.particles.ParticleConnection.IAttachableParticle;
import com.mojang.blaze3d.platform.GlStateManager;
public class ParticleSphere extends Particle implements IAttachableParticle {
public class SphereParticle extends Particle implements IAttachableParticle {
protected int tint;
protected float red;
protected float green;
protected float blue;
protected float alpha;
protected float radius;
@ -28,19 +33,25 @@ public class ParticleSphere extends Particle implements IAttachableParticle {
private static final SphereModel model = new SphereModel();
public ParticleSphere(ParticleEffect type, World w, double x, double y, double z, double vX, double vY, double vZ) {
this(w, x, y, z, args[0] / 1000F, args[1], args[2]/100F);
public SphereParticle(ParticleEffect type, World w,
double x, double y, double z,
float radius,
int red, int green, int blue, float alpha,
double vX, double vY, double vZ) {
this(w, x, y, z, radius, red, green, blue, alpha);
this.velocityX = vX;
this.velocityY = vY;
this.velocityZ = vZ;
}
public ParticleSphere(World w, double x, double y, double z, float radius, int tint, float alpha) {
public SphereParticle(World w, double x, double y, double z, float radius, int red, int green, int blue, float alpha) {
super(w, x, y, z);
this.radius = radius;
this.tint = tint;
this.red = red/255F;
this.green = green/255F;
this.blue = blue/255F;
this.alpha = alpha;
setMaxAge(10);
@ -57,13 +68,6 @@ public class ParticleSphere extends Particle implements IAttachableParticle {
this.caster = caster;
}
@Override
public void buildGeometry(BufferBuilder var1, Camera var2, float var3, float var4, float var5, float var6,
float var7, float var8) {
// TODO Auto-generated method stub
}
@Override
public ParticleTextureSheet getType() {
// TODO Auto-generated method stub
@ -91,7 +95,8 @@ public class ParticleSphere extends Particle implements IAttachableParticle {
}
}
public void renderParticle(BufferBuilder buffer, Entity viewer, float partialTicks, float x, float z, float yz, float xy, float xz) {
@Override
public void buildGeometry(BufferBuilder buffer, Camera viewer, float partialTicks, float x, float z, float yz, float xy, float xz) {
if (alpha <= 0 || radius <= 0) {
return;
}
@ -105,7 +110,7 @@ public class ParticleSphere extends Particle implements IAttachableParticle {
MinecraftClient.getInstance().gameRenderer.disableLightmap();
GlStateManager.enableLighting();
Color.glColor(tint, alpha);
GL14.glBlendColor(red, green, blue, alpha);
GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_COLOR, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
GlStateManager.disableTexture();
@ -129,11 +134,32 @@ public class ParticleSphere extends Particle implements IAttachableParticle {
radius = (float)value;
}
if (key == 1) {
tint = (int)value;
red = (int)value/255F;
}
if (key == 2) {
green = (int)value/255F;
}
if (key == 3) {
blue = (int)value/255F;
}
if (key == 4) {
alpha = (float)value;
}
}
public static class Factory implements ParticleFactory<DefaultParticleType> {
private final SpriteProvider provider;
public Factory(SpriteProvider provider) {
this.provider = provider;
}
@Override
public Particle createParticle(DefaultParticleType defaultParticleType_1, World world, double x, double y, double z, double dx, double dy, double dz) {
RaindropsParticle particle = new RaindropsParticle(world, x, y, z, dx, dy, dz);
particle.setSprite(provider);
return particle;
}
}
}

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.client.render.model;
package com.minelittlepony.unicopia.core.client.render;
public class DiskModel extends SphereModel {

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.client.render.model;
package com.minelittlepony.unicopia.core.client.render;
import java.util.ArrayList;
import java.util.List;

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.client.render.model;
package com.minelittlepony.unicopia.core.client.render;
import org.lwjgl.opengl.GL11;
@ -6,7 +6,6 @@ import com.mojang.blaze3d.platform.GlStateManager;
import net.minecraft.client.util.GlAllocationUtils;
public class SphereModel {
private int displayList;
@ -52,7 +51,7 @@ public class SphereModel {
glRotate(rotY, 0, 1, 0);
glRotate(rotZ, 0, 0, 1);
GlStateManager.scale(scale, scale, scale);
GlStateManager.scalef(scale, scale, scale);
GlStateManager.callList(displayList);
@ -60,7 +59,7 @@ public class SphereModel {
}
private void bake() {
displayList = GlAllocationUtils.generateDisplayLists(1);
displayList = GlAllocationUtils.genLists(1);
GlStateManager.newList(displayList, GL11.GL_COMPILE);
drawShape();

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.client.render.model;
package com.minelittlepony.unicopia.core.client.render;
import net.minecraft.client.model.Quad;
import net.minecraft.client.model.Vertex;

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.command;
package com.minelittlepony.unicopia.core.command;
import net.fabricmc.fabric.api.registry.CommandRegistry;
@ -6,7 +6,6 @@ public class Commands {
public static void bootstrap() {
CommandRegistry.INSTANCE.register(false, SpeciesCommand::register);
CommandRegistry.INSTANCE.register(false, RacelistCommand::register);
CommandRegistry.INSTANCE.register(false, DisguiseCommand::register);
CommandRegistry.INSTANCE.register(false, GravityCommand::register);
// TODO:

View file

@ -1,7 +1,7 @@
package com.minelittlepony.unicopia.command;
package com.minelittlepony.unicopia.core.command;
import com.minelittlepony.unicopia.SpeciesList;
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
import com.minelittlepony.unicopia.core.SpeciesList;
import com.minelittlepony.unicopia.core.entity.player.IPlayer;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.arguments.FloatArgumentType;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;

View file

@ -1,10 +1,10 @@
package com.minelittlepony.unicopia.command;
package com.minelittlepony.unicopia.core.command;
import java.util.Arrays;
import java.util.Collection;
import java.util.stream.Collectors;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.core.Race;
import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.arguments.ArgumentType;
import com.mojang.brigadier.exceptions.CommandSyntaxException;

View file

@ -1,9 +1,9 @@
package com.minelittlepony.unicopia.command;
package com.minelittlepony.unicopia.core.command;
import java.util.function.BiFunction;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.SpeciesList;
import com.minelittlepony.unicopia.core.Race;
import com.minelittlepony.unicopia.core.SpeciesList;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;

View file

@ -1,7 +1,7 @@
package com.minelittlepony.unicopia.command;
package com.minelittlepony.unicopia.core.command;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.SpeciesList;
import com.minelittlepony.unicopia.core.Race;
import com.minelittlepony.unicopia.core.SpeciesList;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;

View file

@ -1,6 +1,6 @@
package com.minelittlepony.unicopia.ducks;
package com.minelittlepony.unicopia.core.ducks;
import com.minelittlepony.unicopia.entity.capabilities.ItemEntityCapabilities;
import com.minelittlepony.unicopia.core.entity.ItemEntityCapabilities;
public interface IItemEntity extends IRaceContainerHolder<ItemEntityCapabilities> {

View file

@ -1,9 +1,9 @@
package com.minelittlepony.unicopia.ducks;
package com.minelittlepony.unicopia.core.ducks;
import javax.annotation.Nullable;
import com.minelittlepony.unicopia.entity.IEntity;
import com.minelittlepony.unicopia.magic.ICaster;
import com.minelittlepony.unicopia.core.entity.IEntity;
import com.minelittlepony.unicopia.core.magic.ICaster;
import net.minecraft.entity.LivingEntity;

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.enchanting;
package com.minelittlepony.unicopia.core.enchanting;
import net.minecraft.util.Identifier;

View file

@ -1,11 +1,10 @@
package com.minelittlepony.unicopia.enchanting;
package com.minelittlepony.unicopia.core.enchanting;
import java.util.Map;
import javax.annotation.Nonnull;
import com.minelittlepony.unicopia.network.ITransmittable;
import com.minelittlepony.unicopia.core.network.ITransmittable;
import net.minecraft.util.Identifier;
/**
@ -26,21 +25,6 @@ public interface IPageOwner extends ITransmittable {
sendCapabilities(true);
}
default boolean hasPageStateRelative(IPage start, PageState state, int direction) {
int pos = start.getIndex();
do {
if (getPageState(Pages.instance().getByIndex(pos)) == state) {
return true;
}
pos += direction;
} while (pos >= 0 && pos < Pages.instance().getTotalPages());
return false;
}
default PageState getPageState(IPage page) {
return getPageStates().getOrDefault(page.getName(), page.getDefaultState());
}

View file

@ -0,0 +1,5 @@
package com.minelittlepony.unicopia.core.enchanting;
public interface IUnlockEvent {
}

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.enchanting;
package com.minelittlepony.unicopia.core.enchanting;
public enum PageState {
LOCKED,

View file

@ -1,9 +1,9 @@
package com.minelittlepony.unicopia.entity;
package com.minelittlepony.unicopia.core.entity;
/**
* Interface for controlling flight.
*/
public interface IFlight {
public interface FlightControl {
/**
* True is we're currently flying.
*/
@ -14,5 +14,4 @@ public interface IFlight {
float getFlightDuration();
boolean isExperienceCritical();
}

View file

@ -1,12 +1,12 @@
package com.minelittlepony.unicopia.entity;
package com.minelittlepony.unicopia.core.entity;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.util.InbtSerialisable;
import com.minelittlepony.unicopia.core.Race;
import com.minelittlepony.unicopia.core.util.InbtSerialisable;
import net.minecraft.entity.projectile.ProjectileEntity;
import net.minecraft.item.ItemStack;
public interface IEntity extends InbtSerialisable, IUpdatable {
public interface IEntity extends InbtSerialisable, Updatable {
Race getSpecies();
void setSpecies(Race race);
@ -31,7 +31,9 @@ public interface IEntity extends InbtSerialisable, IUpdatable {
/**
* Called at the beginning of an update cycle.
*/
boolean beforeUpdate();
default boolean beforeUpdate() {
return false;
}
/**

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.entity;
package com.minelittlepony.unicopia.core.entity;
/**
* Any entities with magical abilities.

View file

@ -1,6 +1,6 @@
package com.minelittlepony.unicopia.entity;
package com.minelittlepony.unicopia.core.entity;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.core.Race;
/**
* This interface is for any entities that are categorised as inanimated,
@ -9,6 +9,6 @@ import com.minelittlepony.unicopia.Race;
* These typically can't be interacted with by players unless under certain cirumstances.
*
*/
public interface IInAnimate {
public interface InAnimate {
boolean canInteract(Race race);
}

View file

@ -1,16 +1,14 @@
package com.minelittlepony.unicopia.entity.capabilities;
package com.minelittlepony.unicopia.core.entity;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.ducks.IItemEntity;
import com.minelittlepony.unicopia.entity.IOwned;
import com.minelittlepony.unicopia.entity.IRaceContainer;
import com.minelittlepony.unicopia.core.Race;
import com.minelittlepony.unicopia.core.ducks.IItemEntity;
import net.minecraft.entity.ItemEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.util.ActionResult;
public class ItemEntityCapabilities implements IRaceContainer<ItemEntity>, IOwned<ItemEntity> {
public class ItemEntityCapabilities implements RaceContainer<ItemEntity>, Owned<ItemEntity> {
private Race race = Race.HUMAN;

View file

@ -1,14 +1,13 @@
package com.minelittlepony.unicopia.entity.capabilities;
package com.minelittlepony.unicopia.core.entity;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.entity.IRaceContainer;
import com.minelittlepony.unicopia.magic.Affinity;
import com.minelittlepony.unicopia.magic.IAffine;
import com.minelittlepony.unicopia.magic.IAttachedEffect;
import com.minelittlepony.unicopia.magic.ICaster;
import com.minelittlepony.unicopia.magic.IMagicEffect;
import com.minelittlepony.unicopia.magic.spells.SpellRegistry;
import com.minelittlepony.unicopia.network.EffectSync;
import com.minelittlepony.unicopia.core.Race;
import com.minelittlepony.unicopia.core.magic.Affinity;
import com.minelittlepony.unicopia.core.magic.IAffine;
import com.minelittlepony.unicopia.core.magic.IAttachedEffect;
import com.minelittlepony.unicopia.core.magic.ICaster;
import com.minelittlepony.unicopia.core.magic.IMagicEffect;
import com.minelittlepony.unicopia.core.magic.spell.SpellRegistry;
import com.minelittlepony.unicopia.core.network.EffectSync;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.data.DataTracker;
@ -16,7 +15,7 @@ import net.minecraft.entity.data.TrackedData;
import net.minecraft.entity.data.TrackedDataHandlerRegistry;
import net.minecraft.nbt.CompoundTag;
public class LivingEntityCapabilities implements IRaceContainer<LivingEntity>, ICaster<LivingEntity> {
public class LivingEntityCapabilities implements RaceContainer<LivingEntity>, ICaster<LivingEntity> {
private static final TrackedData<CompoundTag> EFFECT = DataTracker.registerData(LivingEntity.class, TrackedDataHandlerRegistry.TAG_COMPOUND);
@ -56,11 +55,6 @@ public class LivingEntityCapabilities implements IRaceContainer<LivingEntity>, I
return effectDelegate.has();
}
@Override
public void beforeUpdate() {
}
@Override
public void onUpdate() {
if (hasEffect()) {

View file

@ -1,11 +1,11 @@
package com.minelittlepony.unicopia.entity;
package com.minelittlepony.unicopia.core.entity;
/**
* Interface for things that can be owned.
*
* @param <E> The type of object that owns us.
*/
public interface IOwned<E> {
public interface Owned<E> {
/**
* Updates the owner of this object.
@ -19,7 +19,7 @@ public interface IOwned<E> {
@SuppressWarnings("unchecked")
static <T> IOwned<T> cast(Object o) {
return (IOwned<T>)o;
static <T> Owned<T> cast(Object o) {
return (Owned<T>)o;
}
}

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.entity;
package com.minelittlepony.unicopia.core.entity;
import net.minecraft.entity.Entity;
@ -7,6 +7,6 @@ import net.minecraft.entity.Entity;
*
* @param <T> The type of owner
*/
public interface IRaceContainer<T extends Entity> extends IEntity {
public interface RaceContainer<T extends Entity> extends IEntity {
}

View file

@ -1,7 +1,7 @@
package com.minelittlepony.unicopia.entity;
package com.minelittlepony.unicopia.core.entity;
import net.minecraft.entity.Entity;
public interface ITrap {
public interface Trap {
boolean attemptDismount(Entity passenger);
}

View file

@ -1,10 +1,10 @@
package com.minelittlepony.unicopia.entity;
package com.minelittlepony.unicopia.core.entity;
/**
* Interface for objects that receive regular updates.
*/
@FunctionalInterface
public interface IUpdatable {
public interface Updatable {
/**
* Called to update the internal logic.
*/

View file

@ -1,20 +1,20 @@
package com.minelittlepony.unicopia.entity.capabilities;
package com.minelittlepony.unicopia.core.entity.player;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.ability.IAbilityReceiver;
import com.minelittlepony.unicopia.ability.IData;
import com.minelittlepony.unicopia.ability.IPower;
import com.minelittlepony.unicopia.ability.PowersRegistry;
import com.minelittlepony.unicopia.entity.IUpdatable;
import com.minelittlepony.unicopia.network.MsgPlayerAbility;
import com.minelittlepony.util.InbtSerialisable;
import com.minelittlepony.jumpingcastle.api.Target;
import com.minelittlepony.unicopia.core.UnicopiaCore;
import com.minelittlepony.unicopia.core.ability.IAbilityReceiver;
import com.minelittlepony.unicopia.core.ability.IPower;
import com.minelittlepony.unicopia.core.ability.PowersRegistry;
import com.minelittlepony.unicopia.core.entity.Updatable;
import com.minelittlepony.unicopia.core.network.MsgPlayerAbility;
import com.minelittlepony.unicopia.core.util.InbtSerialisable;
import net.minecraft.nbt.CompoundTag;
class AbilityDelegate implements IAbilityReceiver, IUpdatable, InbtSerialisable {
class AbilityDelegate implements IAbilityReceiver, Updatable, InbtSerialisable {
private final IPlayer player;
@ -156,10 +156,10 @@ class AbilityDelegate implements IAbilityReceiver, IUpdatable, InbtSerialisable
* Returns true if the ability suceeded, otherwise false.
*/
protected boolean activateAbility(@Nonnull IPower<?> ability) {
IData data = ability.tryActivate(player);
IPower.IData data = ability.tryActivate(player);
if (data != null) {
Unicopia.getConnection().send(new MsgPlayerAbility(player.getOwner(), ability, data), Target.SERVER);
UnicopiaCore.getConnection().send(new MsgPlayerAbility(player.getOwner(), ability, data), Target.SERVER);
}
return data != null;

View file

@ -1,29 +1,22 @@
package com.minelittlepony.unicopia.entity.capabilities;
package com.minelittlepony.unicopia.core.entity.player;
import java.util.Random;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.USounds;
import com.minelittlepony.unicopia.ability.IFlyingPredicate;
import com.minelittlepony.unicopia.ability.IHeightPredicate;
import com.minelittlepony.unicopia.entity.IFlight;
import com.minelittlepony.unicopia.entity.IGravity;
import com.minelittlepony.unicopia.entity.IUpdatable;
import com.minelittlepony.unicopia.magic.IMagicEffect;
import com.minelittlepony.unicopia.mixin.MixinEntity;
import com.minelittlepony.util.InbtSerialisable;
import com.minelittlepony.unicopia.core.Race;
import com.minelittlepony.unicopia.core.UParticles;
import com.minelittlepony.unicopia.core.USounds;
import com.minelittlepony.unicopia.core.ability.IFlyingPredicate;
import com.minelittlepony.unicopia.core.ability.IHeightPredicate;
import com.minelittlepony.unicopia.core.entity.FlightControl;
import com.minelittlepony.unicopia.core.entity.Updatable;
import com.minelittlepony.unicopia.core.magic.IMagicEffect;
import com.minelittlepony.unicopia.core.mixin.MixinEntity;
import com.minelittlepony.unicopia.core.util.InbtSerialisable;
import com.minelittlepony.unicopia.core.util.MutableVector;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Material;
import net.minecraft.entity.Entity;
import net.minecraft.entity.damage.DamageSource;
import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.entity.effect.StatusEffects;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.sound.SoundCategory;
import net.minecraft.sound.SoundEvent;
import net.minecraft.sound.SoundEvents;
@ -31,7 +24,7 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
class GravityDelegate implements IUpdatable, IGravity, IFlight, InbtSerialisable, IFlyingPredicate, IHeightPredicate {
public class GravityDelegate implements Updatable, FlightControl, InbtSerialisable, IFlyingPredicate, IHeightPredicate {
private final IPlayer player;
@ -112,12 +105,10 @@ class GravityDelegate implements IUpdatable, IGravity, IFlight, InbtSerialisable
return player.getOwner().getHeight();
}
@Override
public void setGraviationConstant(float constant) {
gravity = constant;
}
@Override
public float getGravitationConstant() {
return gravity;
}
@ -131,7 +122,7 @@ class GravityDelegate implements IUpdatable, IGravity, IFlight, InbtSerialisable
public void onUpdate() {
PlayerEntity entity = player.getOwner();
Vec3d velocity = entity.getVelocity();
MutableVector velocity = new MutableVector(entity.getVelocity());
if (isExperienceCritical() && player.isClient()) {
Random rnd = player.getWorld().random;
@ -143,7 +134,7 @@ class GravityDelegate implements IUpdatable, IGravity, IFlight, InbtSerialisable
rnd.nextGaussian() * entity.getWidth()
);
ParticleTypeRegistry.getTnstance().getSpawner().spawnParticle(entity.world, UParticles.UNICORN_MAGIC, pos, velocity);
player.addParticle(UParticles.UNICORN_MAGIC, pos, velocity.toImmutable());
}
}
@ -185,11 +176,12 @@ class GravityDelegate implements IUpdatable, IGravity, IFlight, InbtSerialisable
((MixinEntity)entity).setSize(entity.getWidth(), bodyHeight);
entity.eyeHeight = eyeHeight;
// TODO: Change eye height
//entity.eyeHeight = eyeHeight;
if (gravity < 0) {
if (entity.isSneaking()) {
entity.eyeHeight += 0.2F;
//entity.eyeHeight += 0.2F;
}
}
@ -274,14 +266,14 @@ class GravityDelegate implements IUpdatable, IGravity, IFlight, InbtSerialisable
lastTickPosX = entity.x;
lastTickPosZ = entity.z;
entity.setVelocity(velocity);
entity.setVelocity(velocity.toImmutable());
}
public SoundEvent getWingSound() {
return player.getSpecies() == Race.CHANGELING ? USounds.CHANGELING_BUZZ : USounds.WING_FLAP;
}
protected void moveFlying(Entity player, Vec3d velocity) {
protected void moveFlying(Entity player, MutableVector velocity) {
float forward = 0.000015F * flightExperience * (float)Math.sqrt(getHorizontalMotion(player));
int factor = gravity < 0 ? -1 : 1;
@ -319,7 +311,7 @@ class GravityDelegate implements IUpdatable, IGravity, IFlight, InbtSerialisable
}
if (forward >= 1) {
player.world.playSound(null, player.getPos(), USounds.WIND_RUSH, SoundCategory.AMBIENT, 3, 1);
player.world.playSound(null, player.getBlockPos(), USounds.WIND_RUSH, SoundCategory.AMBIENT, 3, 1);
}
if (forward > 4) {

View file

@ -1,27 +1,20 @@
package com.minelittlepony.unicopia.entity.capabilities;
import java.util.UUID;
package com.minelittlepony.unicopia.core.entity.player;
import javax.annotation.Nullable;
import com.minelittlepony.unicopia.InteractionManager;
import com.minelittlepony.unicopia.ability.IAbilityReceiver;
import com.minelittlepony.unicopia.enchanting.IPageOwner;
import com.minelittlepony.unicopia.entity.IFlight;
import com.minelittlepony.unicopia.entity.IFood;
import com.minelittlepony.unicopia.entity.IGravity;
import com.minelittlepony.unicopia.entity.IInventory;
import com.minelittlepony.unicopia.entity.IRaceContainer;
import com.minelittlepony.unicopia.magic.ICaster;
import com.minelittlepony.unicopia.magic.IHeldEffect;
import com.minelittlepony.unicopia.network.ITransmittable;
import com.minelittlepony.unicopia.core.InteractionManager;
import com.minelittlepony.unicopia.core.ability.IAbilityReceiver;
import com.minelittlepony.unicopia.core.entity.FlightControl;
import com.minelittlepony.unicopia.core.entity.RaceContainer;
import com.minelittlepony.unicopia.core.magic.ICaster;
import com.minelittlepony.unicopia.core.magic.IHeldEffect;
import com.minelittlepony.unicopia.core.network.ITransmittable;
import com.minelittlepony.util.IInterpolator;
import com.mojang.authlib.GameProfile;
import com.mojang.datafixers.util.Either;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.Unit;
import net.minecraft.util.math.BlockPos;
@ -30,7 +23,7 @@ import net.minecraft.util.math.BlockPos;
*
* This is the core of unicopia.
*/
public interface IPlayer extends ICaster<PlayerEntity>, IRaceContainer<PlayerEntity>, ITransmittable, IPageOwner {
public interface IPlayer extends ICaster<PlayerEntity>, RaceContainer<PlayerEntity>, ITransmittable {
/**
* Gets the player's magical abilities delegate responsible for all spell casting and persisting/updating.
@ -40,22 +33,22 @@ public interface IPlayer extends ICaster<PlayerEntity>, IRaceContainer<PlayerEnt
/**
* Gets the gravity delegate responsible for updating flight states
*/
IGravity getGravity();
GravityDelegate getGravity();
/**
* Gets the flight delegate.
*/
IFlight getFlight();
FlightControl getFlight();
/**
* Gets the player's viewport.
*/
ICamera getCamera();
PlayerCamera getCamera();
/**
* Gets the inventory delegate for this player.
*/
IInventory getInventory();
PlayerInventory getInventory();
/**
* Gets an animation interpolator.

View file

@ -1,11 +1,10 @@
package com.minelittlepony.unicopia.entity.capabilities;
package com.minelittlepony.unicopia.core.entity.player;
import java.util.UUID;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.inventory.gui.InventoryOfHolding;
import com.minelittlepony.unicopia.mixin.IWalker;
import com.minelittlepony.unicopia.core.Race;
import com.minelittlepony.unicopia.core.mixin.IWalker;
import com.minelittlepony.unicopia.core.util.HeavyInventoryUtils;
import net.minecraft.entity.attribute.EntityAttribute;
import net.minecraft.entity.attribute.EntityAttributeInstance;
import net.minecraft.entity.attribute.EntityAttributeModifier;
@ -25,7 +24,7 @@ public class PlayerAttributes {
private double loadStrength = 0;
public void applyAttributes(PlayerEntity entity, Race race) {
loadStrength = InventoryOfHolding.getContentsTotalWorth(entity.inventory, false);
loadStrength = HeavyInventoryUtils.getContentsTotalWorth(entity.inventory, false);
((IWalker)entity.abilities).setWalkSpeed(0.1F - (float)(loadStrength / 100000));

View file

@ -1,6 +1,10 @@
package com.minelittlepony.unicopia.entity.capabilities;
package com.minelittlepony.unicopia.core.entity.player;
class PlayerCamera extends MotionCompositor implements ICamera {
import com.minelittlepony.util.MotionCompositor;
import net.minecraft.util.math.Vec3d;
public class PlayerCamera extends MotionCompositor {
private final IPlayer player;
@ -10,13 +14,14 @@ class PlayerCamera extends MotionCompositor implements ICamera {
this.player = player;
}
@Override
public float calculateRoll() {
double roll = baseRoll;
if (player.getFlight().isFlying()) {
roll -= super.calculateRoll(player.getOwner(), player.getOwner().getVelocity().motionX, player.getOwner().motionY, player.getOwner().motionZ);
Vec3d vel = player.getOwner().getVelocity();
roll -= super.calculateRoll(player.getOwner(), vel.x, vel.y, vel.z);
}
if (player.getGravity().getGravitationConstant() < 0) {
@ -31,18 +36,15 @@ class PlayerCamera extends MotionCompositor implements ICamera {
return (float)roll;
}
@Override
public float calculatePitch(float pitch) {
return pitch + getEnergyAddition();
}
@Override
public float calculateYaw(float yaw) {
return yaw + getEnergyAddition();
}
@Override
public float calculateFieldOfView(float fov) {
public double calculateFieldOfView(double fov) {
fov += player.getExertion() / 5;
fov += getEnergyAddition();
@ -65,12 +67,10 @@ class PlayerCamera extends MotionCompositor implements ICamera {
return energyAddition;
}
@Override
public double getBaseRoll() {
return baseRoll;
}
@Override
public void setBaseRoll(double roll) {
baseRoll = roll;
}

View file

@ -1,33 +1,29 @@
package com.minelittlepony.unicopia.entity.capabilities;
package com.minelittlepony.unicopia.core.entity.player;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Nullable;
import com.google.common.collect.Maps;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.SpeciesList;
import com.minelittlepony.unicopia.UEffects;
import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.ability.IAbilityReceiver;
import com.minelittlepony.unicopia.enchanting.PageState;
import com.minelittlepony.unicopia.entity.CuccoonEntity;
import com.minelittlepony.unicopia.entity.IFlight;
import com.minelittlepony.unicopia.entity.IFood;
import com.minelittlepony.unicopia.entity.IGravity;
import com.minelittlepony.unicopia.entity.IInventory;
import com.minelittlepony.unicopia.entity.ITrap;
import com.minelittlepony.unicopia.item.UItems;
import com.minelittlepony.unicopia.magic.Affinity;
import com.minelittlepony.unicopia.magic.IAttachedEffect;
import com.minelittlepony.unicopia.magic.IHeldEffect;
import com.minelittlepony.unicopia.magic.IMagicEffect;
import com.minelittlepony.unicopia.magic.items.ICastable;
import com.minelittlepony.unicopia.magic.spells.SpellDisguise;
import com.minelittlepony.unicopia.magic.spells.SpellRegistry;
import com.minelittlepony.unicopia.network.EffectSync;
import com.minelittlepony.unicopia.network.MsgPlayerCapabilities;
import com.minelittlepony.unicopia.core.Race;
import com.minelittlepony.unicopia.core.SpeciesList;
import com.minelittlepony.unicopia.core.UEffects;
import com.minelittlepony.unicopia.core.UTags;
import com.minelittlepony.unicopia.core.UnicopiaCore;
import com.minelittlepony.unicopia.core.ability.IAbilityReceiver;
import com.minelittlepony.unicopia.core.enchanting.IPageOwner;
import com.minelittlepony.unicopia.core.enchanting.PageState;
import com.minelittlepony.unicopia.core.entity.FlightControl;
import com.minelittlepony.unicopia.core.entity.Trap;
import com.minelittlepony.unicopia.core.magic.Affinity;
import com.minelittlepony.unicopia.core.magic.IAttachedEffect;
import com.minelittlepony.unicopia.core.magic.IHeldEffect;
import com.minelittlepony.unicopia.core.magic.IMagicEffect;
import com.minelittlepony.unicopia.core.magic.IMagicalItem;
import com.minelittlepony.unicopia.core.magic.spell.SpellRegistry;
import com.minelittlepony.unicopia.core.network.EffectSync;
import com.minelittlepony.unicopia.core.network.MsgPlayerCapabilities;
import com.minelittlepony.util.BasicEasingInterpolator;
import com.minelittlepony.util.IInterpolator;
import com.mojang.datafixers.util.Either;
import net.minecraft.client.network.packet.EntityPassengersSetS2CPacket;
@ -44,9 +40,7 @@ import net.minecraft.entity.projectile.ProjectileEntity;
import net.minecraft.item.FoodComponent;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.Packet;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.stat.Stats;
import net.minecraft.text.TranslatableText;
import net.minecraft.util.Hand;
import net.minecraft.util.Identifier;
@ -55,7 +49,7 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.Difficulty;
public class PlayerCapabilities implements IPlayer {
public class PlayerCapabilities implements IPlayer, IPageOwner {
private static final TrackedData<Integer> PLAYER_RACE = DataTracker.registerData(PlayerEntity.class, TrackedDataHandlerRegistry.INTEGER);
private static final TrackedData<Float> ENERGY = DataTracker.registerData(PlayerEntity.class, TrackedDataHandlerRegistry.FLOAT);
@ -63,7 +57,7 @@ public class PlayerCapabilities implements IPlayer {
private static final TrackedData<CompoundTag> EFFECT = DataTracker.registerData(PlayerEntity.class, TrackedDataHandlerRegistry.TAG_COMPOUND);
private static final TrackedData<CompoundTag> HELD_EFFECT = DataTracker.registerData(PlayerEntity.class, TrackedDataHandlerRegistry.TAG_COMPOUND);
private final Map<Identifier, PageState> pageStates = new HashMap<>();
private final PlayerPageStats pageStates = new PlayerPageStats();
private final AbilityDelegate powers = new AbilityDelegate(this);
@ -181,9 +175,9 @@ public class PlayerCapabilities implements IPlayer {
if (!getWorld().isClient()) {
if (full) {
Unicopia.getConnection().broadcast(new MsgPlayerCapabilities(this));
UnicopiaCore.getConnection().broadcast(new MsgPlayerCapabilities(this));
} else {
Unicopia.getConnection().broadcast(new MsgPlayerCapabilities(getSpecies(), getOwner()));
UnicopiaCore.getConnection().broadcast(new MsgPlayerCapabilities(getSpecies(), getOwner()));
}
}
}
@ -201,17 +195,17 @@ public class PlayerCapabilities implements IPlayer {
}
@Override
public IGravity getGravity() {
public GravityDelegate getGravity() {
return gravity;
}
@Override
public IFlight getFlight() {
public FlightControl getFlight() {
return gravity;
}
@Override
public ICamera getCamera() {
public PlayerCamera getCamera() {
return view;
}
@ -221,14 +215,14 @@ public class PlayerCapabilities implements IPlayer {
}
@Override
public void beforeUpdate() {
public boolean beforeUpdate() {
if (entity.world.isClient()) {
if (entity.hasVehicle() && entity.isSneaking()) {
Entity ridee = entity.getVehicle();
if (ridee instanceof ITrap) {
if (((ITrap)ridee).attemptDismount(entity)) {
if (ridee instanceof Trap) {
if (((Trap)ridee).attemptDismount(entity)) {
entity.stopRiding();
} else {
entity.setSneaking(false);
@ -245,6 +239,8 @@ public class PlayerCapabilities implements IPlayer {
powers.onUpdate();
inventory.onUpdate();
return false;
}
@Override
@ -270,7 +266,7 @@ public class PlayerCapabilities implements IPlayer {
IHeldEffect effect = getHeldEffect(stack);
if (effect != null) {
Affinity affinity = stack.getItem() instanceof ICastable ? ((ICastable)stack.getItem()).getAffinity(stack) : Affinity.NEUTRAL;
Affinity affinity = stack.getItem() instanceof IMagicalItem ? ((IMagicalItem)stack.getItem()).getAffinity(stack) : Affinity.NEUTRAL;
effect.updateInHand(this, affinity);
}
@ -297,8 +293,7 @@ public class PlayerCapabilities implements IPlayer {
public void onJump() {
if (gravity.getGravitationConstant() < 0) {
Vec3d velocity = entity.getVelocity();
velocity.y *= -1;
entity.setVelocity(velocity);
entity.setVelocity(velocity.x, velocity.y * -1, velocity.z);
}
}
@ -306,10 +301,8 @@ public class PlayerCapabilities implements IPlayer {
public boolean onProjectileImpact(ProjectileEntity projectile) {
if (hasEffect()) {
IMagicEffect effect = getEffect();
if (effect instanceof SpellDisguise && !effect.isDead()) {
if (((SpellDisguise)effect).getDisguise() == projectile) {
return true;
}
if (!effect.isDead() && effect.handleProjectileImpact(projectile)) {
return true;
}
}
@ -347,14 +340,14 @@ public class PlayerCapabilities implements IPlayer {
@Override
public Either<SleepFailureReason, Unit> trySleep(BlockPos pos) {
if (getInventory().isWearing(UItems.alicorn_amulet)) {
if (getInventory().matches(UTags.CURSED_ARTEFACTS)) {
if (!isClient()) {
entity.addChatMessage(new TranslatableText("tile.bed.youAreAMonster"), true);
}
return Either.left(SleepFailureReason.OTHER_PROBLEM);
}
if (findAllSpellsInRange(10).anyMatch(c -> c instanceof IPlayer && ((IPlayer)c).getInventory().isWearing(UItems.alicorn_amulet))) {
if (findAllSpellsInRange(10).anyMatch(c -> c instanceof IPlayer && ((IPlayer)c).getInventory().matches(UTags.CURSED_ARTEFACTS))) {
return Either.left(SleepFailureReason.NOT_SAFE);
}
@ -362,7 +355,7 @@ public class PlayerCapabilities implements IPlayer {
}
@Override
public IInventory getInventory() {
public PlayerInventory getInventory() {
return inventory;
}
@ -379,16 +372,16 @@ public class PlayerCapabilities implements IPlayer {
player.getHungerManager().add(-health/2, -saturation/2);
player.addStatusEffectInstance(new StatusEffectInstance(StatusEffects.NAUSEA, 100, 3, true, true));
player.addPotionEffect(new StatusEffectInstance(StatusEffects.NAUSEA, 100, 3, true, true));
} else {
player.addStatusEffectInstance(new StatusEffectInstance(StatusEffects.NAUSEA, 200, 3, true, true));
player.addPotionEffect(new StatusEffectInstance(StatusEffects.NAUSEA, 200, 3, true, true));
}
if (player.world.getDifficulty() != Difficulty.PEACEFUL && player.world.random.nextInt(20) == 0) {
player.addStatusEffectInstance(new StatusEffectInstance(UEffects.FOOD_POISONING, 3, 2, true, true));
player.addPotionEffect(new StatusEffectInstance(UEffects.FOOD_POISONING, 3, 2, true, true));
}
player.addStatusEffectInstance(new StatusEffectInstance(StatusEffects.WEAKNESS, 2000, 2, true, true));
player.addPotionEffect(new StatusEffectInstance(StatusEffects.WEAKNESS, 2000, 2, true, true));
}
}
@ -405,21 +398,7 @@ public class PlayerCapabilities implements IPlayer {
compound.put("effect", SpellRegistry.instance().serializeEffectToNBT(effect));
}
if (!pageStates.isEmpty()) {
CompoundTag pages = new CompoundTag();
boolean written = false;
for (Map.Entry<Identifier, PageState> entry : pageStates.entrySet()) {
if (entry.getValue() != PageState.LOCKED) {
pages.putString(entry.getKey().toString(), entry.getValue().name());
written = true;
}
}
if (written) {
compound.put("pageStates", pages);
}
}
pageStates.toNBT(compound);
}
@Override
@ -433,18 +412,7 @@ public class PlayerCapabilities implements IPlayer {
setEffect(SpellRegistry.instance().createEffectFromNBT(compound.getCompound("effect")));
}
pageStates.clear();
if (compound.containsKey("pageStates")) {
CompoundTag pages = compound.getCompound("pageStates");
pages.getKeys().forEach(key -> {
PageState state = PageState.of(pages.getString(key));
if (state != PageState.LOCKED) {
pageStates.put(new Identifier(key), state);
}
});
}
pageStates.fromNBT(compound);
}
@Override
@ -473,7 +441,6 @@ public class PlayerCapabilities implements IPlayer {
@Override
public void setOwner(PlayerEntity owner) {
entity = owner;
}
@Override
@ -492,6 +459,7 @@ public class PlayerCapabilities implements IPlayer {
@Override
public Map<Identifier, PageState> getPageStates() {
return pageStates;
return pageStates.getPageStates();
}
}

View file

@ -1,23 +1,23 @@
package com.minelittlepony.unicopia.entity.capabilities;
package com.minelittlepony.unicopia.core.entity.player;
import java.util.Iterator;
import java.util.Map;
import com.google.common.collect.Maps;
import com.minelittlepony.unicopia.entity.IInventory;
import com.minelittlepony.unicopia.entity.IUpdatable;
import com.minelittlepony.unicopia.magic.items.IDependable;
import com.minelittlepony.unicopia.magic.items.IMagicalItem;
import com.minelittlepony.util.InbtSerialisable;
import com.minelittlepony.unicopia.core.entity.Updatable;
import com.minelittlepony.unicopia.core.magic.IDependable;
import com.minelittlepony.unicopia.core.magic.IMagicalItem;
import com.minelittlepony.unicopia.core.util.InbtSerialisable;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.tag.Tag;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
public class PlayerInventory implements IInventory, IUpdatable, InbtSerialisable {
public class PlayerInventory implements Updatable, InbtSerialisable {
private final Map<IDependable, Entry> dependencies = Maps.newHashMap();
private final IPlayer player;
@ -26,7 +26,12 @@ public class PlayerInventory implements IInventory, IUpdatable, InbtSerialisable
this.player = player;
}
@Override
/**
* Reinforces a players dependency on a certain magical artifact.
* A dependency will slowly drop over time if not reinforced
*
* Bad things might happen when it's removed.
*/
public synchronized void enforceDependency(IDependable item) {
if (dependencies.containsKey(item)) {
dependencies.get(item).reinforce();
@ -35,7 +40,9 @@ public class PlayerInventory implements IInventory, IUpdatable, InbtSerialisable
}
}
@Override
/**
* Returns how long the player has been wearing the given item.
*/
public synchronized int getTicksAttached(IDependable item) {
if (dependencies.containsKey(item)) {
return dependencies.get(item).ticksAttached;
@ -44,7 +51,11 @@ public class PlayerInventory implements IInventory, IUpdatable, InbtSerialisable
return 0;
}
@Override
/**
* Returns how dependent the player has become on the given item.
*
* Zero means not dependent at all / not wearing.
*/
public synchronized float getNeedfulness(IDependable item) {
if (dependencies.containsKey(item)) {
return dependencies.get(item).needfulness;
@ -71,7 +82,9 @@ public class PlayerInventory implements IInventory, IUpdatable, InbtSerialisable
}
}
@Override
/**
* Checks if the player is wearing the specified magical artifact.
*/
public boolean isWearing(IMagicalItem item) {
for (ItemStack i : player.getOwner().getArmorItems()) {
if (!i.isEmpty() && i.getItem() == item) {
@ -82,6 +95,16 @@ public class PlayerInventory implements IInventory, IUpdatable, InbtSerialisable
return item instanceof Item;
}
public boolean matches(Tag<Item> tag) {
for (ItemStack i : player.getOwner().getArmorItems()) {
if (!i.isEmpty() && i.getItem().isIn(tag)) {
return true;
}
}
return false;
}
@Override
public void toNBT(CompoundTag compound) {
ListTag items = new ListTag();
@ -108,7 +131,7 @@ public class PlayerInventory implements IInventory, IUpdatable, InbtSerialisable
});
}
class Entry implements IUpdatable, InbtSerialisable {
class Entry implements Updatable, InbtSerialisable {
int ticksAttached = 0;
float needfulness = 1;

View file

@ -0,0 +1,62 @@
package com.minelittlepony.unicopia.core.entity.player;
import java.util.HashMap;
import java.util.Map;
import com.minelittlepony.unicopia.core.enchanting.IPageOwner;
import com.minelittlepony.unicopia.core.enchanting.PageState;
import com.minelittlepony.unicopia.core.util.InbtSerialisable;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.util.Identifier;
public class PlayerPageStats implements InbtSerialisable, IPageOwner {
private final Map<Identifier, PageState> pageStates = new HashMap<>();
@Override
public Map<Identifier, PageState> getPageStates() {
return pageStates;
}
@Override
public void sendCapabilities(boolean full) {
}
@Override
public void toNBT(CompoundTag compound) {
if (!pageStates.isEmpty()) {
CompoundTag pages = new CompoundTag();
boolean written = false;
for (Map.Entry<Identifier, PageState> entry : pageStates.entrySet()) {
if (entry.getValue() != PageState.LOCKED) {
pages.putString(entry.getKey().toString(), entry.getValue().name());
written = true;
}
}
if (written) {
compound.put("pageStates", pages);
}
}
}
@Override
public void fromNBT(CompoundTag compound) {
pageStates.clear();
if (compound.containsKey("pageStates")) {
CompoundTag pages = compound.getCompound("pageStates");
pages.getKeys().forEach(key -> {
PageState state = PageState.of(pages.getString(key));
if (state != PageState.LOCKED) {
pageStates.put(new Identifier(key), state);
}
});
}
}
}

View file

@ -1,7 +1,4 @@
package com.minelittlepony.unicopia.magic.spells;
import com.minelittlepony.unicopia.magic.ICaster;
import com.minelittlepony.unicopia.magic.IMagicEffect;
package com.minelittlepony.unicopia.core.magic;
import net.minecraft.nbt.CompoundTag;

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.magic;
package com.minelittlepony.unicopia.core.magic;
import net.minecraft.text.Text;
import net.minecraft.text.TranslatableText;

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.magic.spells;
package com.minelittlepony.unicopia.core.magic;
/**
* A type of action to perform after a spell has completed its handling.

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.magic;
package com.minelittlepony.unicopia.core.magic;
import java.util.Optional;
import java.util.stream.Stream;
@ -6,11 +6,11 @@ import java.util.stream.Stream;
import javax.annotation.Nullable;
import com.google.common.collect.Streams;
import com.minelittlepony.unicopia.EquinePredicates;
import com.minelittlepony.unicopia.SpeciesList;
import com.minelittlepony.unicopia.ducks.IRaceContainerHolder;
import com.minelittlepony.unicopia.entity.IMagicals;
import com.minelittlepony.unicopia.magic.spells.SpellRegistry;
import com.minelittlepony.unicopia.core.EquinePredicates;
import com.minelittlepony.unicopia.core.SpeciesList;
import com.minelittlepony.unicopia.core.ducks.IRaceContainerHolder;
import com.minelittlepony.unicopia.core.entity.IMagicals;
import com.minelittlepony.unicopia.core.magic.spell.SpellRegistry;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;

View file

@ -1,11 +1,7 @@
package com.minelittlepony.unicopia.magic.spells;
package com.minelittlepony.unicopia.core.magic;
import java.util.function.Supplier;
import com.minelittlepony.unicopia.magic.Affinity;
import com.minelittlepony.unicopia.magic.ICaster;
import com.minelittlepony.unicopia.magic.IMagicEffect;
public class GenericSpell extends AbstractSpell {
private final String name;

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.magic;
package com.minelittlepony.unicopia.core.magic;
/**
* Interface for things that have an affine alignment.

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.magic;
package com.minelittlepony.unicopia.core.magic;
public interface IAttachedEffect extends IMagicEffect {
/**

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.magic;
package com.minelittlepony.unicopia.core.magic;
import java.util.Optional;
import java.util.UUID;
@ -6,8 +6,9 @@ import java.util.stream.Stream;
import javax.annotation.Nullable;
import com.minelittlepony.unicopia.entity.IOwned;
import com.minelittlepony.util.VecHelper;
import com.minelittlepony.unicopia.core.entity.Owned;
import com.minelittlepony.unicopia.core.util.VecHelper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.damage.DamageSource;
@ -19,7 +20,7 @@ import net.minecraft.world.World;
/**
* Interface for any magically capable entities that can cast and persist spells.
*/
public interface ICaster<E extends LivingEntity> extends IOwned<E>, ILevelled, IAffine, IMagicals, IParticleSource {
public interface ICaster<E extends LivingEntity> extends Owned<E>, ILevelled, IAffine, IMagicals, IParticleSource {
void setEffect(@Nullable IMagicEffect effect);

View file

@ -0,0 +1,7 @@
package com.minelittlepony.unicopia.core.magic;
import com.minelittlepony.unicopia.core.entity.player.IPlayer;
public interface IDependable extends IMagicalItem {
void onRemoved(IPlayer player, float needfulness);
}

View file

@ -1,10 +1,8 @@
package com.minelittlepony.unicopia.magic;
import com.minelittlepony.unicopia.magic.spells.CastResult;
package com.minelittlepony.unicopia.core.magic;
import net.minecraft.util.math.BlockPointer;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Position;
/**
* Represents an object with an action to perform when dispensed from a dispenser.
@ -20,5 +18,5 @@ public interface IDispenceable extends IMagicEffect {
* @param affinity The affinity of the casting artifact
* @return an ActionResult for the type of action to perform.
*/
CastResult onDispenced(BlockPos pos, Direction facing, Position source, Affinity affinity);
CastResult onDispenced(BlockPos pos, Direction facing, BlockPointer source, Affinity affinity);
}

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.magic.items;
package com.minelittlepony.unicopia.core.magic;
import net.minecraft.block.Block;
import net.minecraft.block.DispenserBlock;

View file

@ -1,6 +1,6 @@
package com.minelittlepony.unicopia.magic;
package com.minelittlepony.unicopia.core.magic;
import com.minelittlepony.unicopia.entity.capabilities.IPlayer;
import com.minelittlepony.unicopia.core.entity.player.IPlayer;
/**
* Represents a passive spell that does something when held in the player's hand.

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.magic;
package com.minelittlepony.unicopia.core.magic;
/**
* Object with levelling capabilities.

View file

@ -1,7 +1,9 @@
package com.minelittlepony.unicopia.magic;
package com.minelittlepony.unicopia.core.magic;
import com.minelittlepony.unicopia.magic.spells.SpellRegistry;
import com.minelittlepony.util.InbtSerialisable;
import com.minelittlepony.unicopia.core.magic.spell.SpellRegistry;
import com.minelittlepony.unicopia.core.util.InbtSerialisable;
import net.minecraft.entity.projectile.ProjectileEntity;
/**
* Interface for a magic spells
@ -63,6 +65,10 @@ public interface IMagicEffect extends InbtSerialisable, IAffine {
}
default boolean handleProjectileImpact(ProjectileEntity projectile) {
return false;
}
/**
* Called every tick when attached to an entity.
* Called on both sides.

View file

@ -1,7 +1,4 @@
package com.minelittlepony.unicopia.magic.items;
import com.minelittlepony.unicopia.magic.Affinity;
import com.minelittlepony.unicopia.magic.IAffine;
package com.minelittlepony.unicopia.core.magic;
import net.minecraft.item.ItemStack;

View file

@ -0,0 +1,5 @@
package com.minelittlepony.unicopia.core.magic;
public interface IMagicals {
}

View file

@ -1,8 +1,8 @@
package com.minelittlepony.unicopia.magic;
package com.minelittlepony.unicopia.core.magic;
import java.util.function.Consumer;
import com.minelittlepony.util.shape.IShape;
import com.minelittlepony.unicopia.core.util.shape.IShape;
import net.minecraft.particle.ParticleEffect;
import net.minecraft.util.math.Vec3d;

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia.magic;
package com.minelittlepony.unicopia.core.magic;
/**
* Magic effects that can be suppressed by other nearby effects.

View file

@ -1,9 +1,7 @@
package com.minelittlepony.unicopia.magic;
package com.minelittlepony.unicopia.core.magic;
import javax.annotation.Nullable;
import com.minelittlepony.unicopia.magic.spells.CastResult;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;

Some files were not shown because too many files have changed in this diff Show more