Restructure! Remove all the subscribe events and shove them _waaaaaay_ in the back there.

This commit is contained in:
Sollace 2019-02-17 01:08:19 +02:00
parent 6a7c3131cc
commit afdec48090
56 changed files with 544 additions and 454 deletions

View file

@ -0,0 +1,83 @@
package com.minelittlepony.unicopia;
import com.minelittlepony.unicopia.forgebullshit.FUF;
import com.minelittlepony.unicopia.hud.UHud;
import com.minelittlepony.unicopia.player.IPlayer;
import com.minelittlepony.unicopia.player.IView;
import com.minelittlepony.unicopia.player.PlayerSpeciesList;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiOptions;
import net.minecraft.client.gui.GuiShareToLan;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraftforge.client.event.EntityViewRenderEvent;
import net.minecraftforge.client.event.FOVUpdateEvent;
import net.minecraftforge.client.event.GuiScreenEvent;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.client.event.RenderLivingEvent;
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent.Phase;
import net.minecraftforge.fml.relauncher.Side;
@EventBusSubscriber(Side.CLIENT)
class ClientHooks {
// This fixes lighting errors on the armour slots.
// #MahjongPls
@FUF(reason = "Forge should fix this. Cancelling their event skips neccessary state resetting at the end of the render method")
@SubscribeEvent
public static void postEntityRender(RenderLivingEvent.Post<?> event) {
GlStateManager.enableAlpha();
}
@SubscribeEvent
public static void preEntityRender(RenderLivingEvent.Pre<?> event) {
UClient.instance().renderEntity(event.getEntity(), event.getPartialRenderTick());
}
@SubscribeEvent
public static void onDisplayGui(GuiScreenEvent.InitGuiEvent.Post event) {
if (event.getGui() instanceof GuiOptions || event.getGui() instanceof GuiShareToLan) {
UnicopiaClient.addUniButton(event.getButtonList());
}
}
@SubscribeEvent
public static void onGameTick(TickEvent.ClientTickEvent event) {
if (event.phase == Phase.END) {
UClient.instance().tick();
}
}
@SubscribeEvent
public static void onRenderHud(RenderGameOverlayEvent.Post event) {
if (event.getType() != ElementType.ALL) {
return;
}
IPlayer player = UClient.instance().getIPlayer();
if (player != null && Minecraft.getMinecraft().world != null) {
UHud.instance.renderHud(player, event.getResolution());
}
}
@SubscribeEvent
public static void modifyFOV(FOVUpdateEvent event) {
event.setNewfov(PlayerSpeciesList.instance().getPlayer(event.getEntity()).getCamera().calculateFieldOfView(event.getFov()));
}
@SubscribeEvent
public static void setupPlayerCamera(EntityViewRenderEvent.CameraSetup event) {
IPlayer player = UClient.instance().getIPlayer();
if (player != null) {
IView view = player.getCamera();
event.setRoll(view.calculateRoll());
event.setPitch(view.calculatePitch(event.getPitch()));
event.setYaw(view.calculateYaw(event.getYaw()));
}
}
}

View file

@ -7,23 +7,21 @@ import javax.annotation.Nullable;
import com.minelittlepony.unicopia.entity.EntityFakeServerPlayer;
import com.minelittlepony.unicopia.forgebullshit.FUF;
import com.minelittlepony.unicopia.player.IPlayer;
import com.minelittlepony.unicopia.player.PlayerSpeciesList;
import com.mojang.authlib.GameProfile;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.IInteractionObject;
import net.minecraft.world.WorldServer;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
public class UClient {
private static UClient instance;
public static boolean isClientSide() {
return FMLCommonHandler.instance().getSide().isClient();
return net.minecraftforge.fml.common.FMLCommonHandler.instance().getSide().isClient();
}
@FUF(reason = "Forced client Separation")
@ -50,6 +48,11 @@ public class UClient {
return null;
}
@Nullable
public IPlayer getIPlayer() {
return PlayerSpeciesList.instance().getPlayer(getPlayer());
}
@FUF(reason = "Forced client Separation")
@Nullable
public EntityPlayer getPlayerByUUID(UUID playerId) {
@ -75,9 +78,15 @@ public class UClient {
return new EntityFakeServerPlayer((WorldServer)observer.world, profile);
}
public void preInit(FMLPreInitializationEvent event) {}
public void init(FMLInitializationEvent event) {}
public void posInit(FMLPostInitializationEvent event) {}
public boolean renderEntity(Entity entity, float renderPartialTicks) {
return false;
}
public void tick() {}
public void preInit() {}
public void init() {}
public void posInit() {}
}

View file

@ -24,7 +24,7 @@ public class UConfig {
.setPrettyPrinting()
.create();
public static UConfig getInstance() {
public static UConfig instance() {
return instance;
}

View file

@ -1,46 +1,19 @@
package com.minelittlepony.unicopia;
import net.minecraft.block.Block;
import net.minecraft.block.BlockTallGrass;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.potion.Potion;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.gen.structure.MapGenStructureIO;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.event.entity.ProjectileImpactEvent;
import net.minecraftforge.event.entity.item.ItemTossEvent;
import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent;
import net.minecraftforge.event.entity.player.PlayerDropsEvent;
import net.minecraftforge.event.entity.player.PlayerFlyableFallEvent;
import net.minecraftforge.event.entity.player.UseHoeEvent;
import net.minecraftforge.event.terraingen.PopulateChunkEvent;
import net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
import net.minecraftforge.fml.common.eventhandler.Event.Result;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent.Phase;
import net.minecraftforge.fml.common.network.IGuiHandler;
import net.minecraftforge.fml.common.network.NetworkRegistry;
import net.minecraftforge.fml.common.registry.EntityEntry;
import java.util.Map;
import java.util.function.Function;
@ -51,25 +24,19 @@ import com.google.gson.JsonObject;
import com.minelittlepony.jumpingcastle.api.IChannel;
import com.minelittlepony.jumpingcastle.api.JumpingCastle;
import com.minelittlepony.unicopia.advancements.UAdvancements;
import com.minelittlepony.unicopia.block.ITillable;
import com.minelittlepony.unicopia.command.Commands;
import com.minelittlepony.unicopia.enchanting.Pages;
import com.minelittlepony.unicopia.enchanting.SpellRecipe;
import com.minelittlepony.unicopia.forgebullshit.FBS;
import com.minelittlepony.unicopia.forgebullshit.FUF;
import com.minelittlepony.unicopia.init.UEntities;
import com.minelittlepony.unicopia.init.UItems;
import com.minelittlepony.unicopia.inventory.gui.ContainerSpellBook;
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.player.PlayerSpeciesList;
import com.minelittlepony.unicopia.power.PowersRegistry;
import com.minelittlepony.unicopia.spell.SpellRegistry;
import com.minelittlepony.unicopia.structure.CloudDungeon;
import com.minelittlepony.unicopia.structure.GroundDungeon;
import com.minelittlepony.unicopia.util.crafting.CraftingManager;
import com.minelittlepony.unicopia.world.CloudGen;
import com.minelittlepony.unicopia.world.StructuresGen;
import com.minelittlepony.unicopia.world.UWorld;
@Mod(
@ -78,36 +45,37 @@ import com.minelittlepony.unicopia.world.UWorld;
version = Unicopia.VERSION,
dependencies = "required-after:jumpingcastle"
)
@EventBusSubscriber
public class Unicopia implements IGuiHandler {
public static final String MODID = "unicopia";
public static final String NAME = "@NAME@";
public static final String VERSION = "@VERSION@";
public static final Logger log = LogManager.getLogger();
public static IChannel channel;
private static IChannel channel;
private static CraftingManager craftingManager;
public static CraftingManager getCraftingManager() {
return craftingManager;
}
public static IChannel getConnection() {
return channel;
}
@EventHandler
public void preInit(FMLPreInitializationEvent event) {
UConfig.init(event.getModConfigurationDirectory());
UClient.instance().preInit(event);
UClient.instance().preInit();
UWorld.instance().init();
MinecraftForge.TERRAIN_GEN_BUS.register(Unicopia.class);
}
@FUF(reason = "Why u no run!?!??!")
@SubscribeEvent
public static void onStructureGenStatic(PopulateChunkEvent.Populate event) {
if (event.getType() == EventType.DUNGEON) {
UWorld.instance().generateStructures(event.getWorld(), event.getChunkX(), event.getChunkZ(), event.getGen());
}
@EventHandler
public void onServerStart(FMLServerStartingEvent event) {
Commands.init(event);
}
@EventHandler
@ -125,7 +93,7 @@ public class Unicopia implements IGuiHandler {
NetworkRegistry.INSTANCE.registerGuiHandler(this, this);
UClient.instance().init(event);
UClient.instance().init();
}
@EventHandler
@ -142,181 +110,9 @@ public class Unicopia implements IGuiHandler {
Pages.instance().load();
Biome.REGISTRY.forEach(UEntities::registerSpawnEntries);
UClient.instance().posInit(event);
UClient.instance().posInit();
UItems.fixRecipes();
MapGenStructureIO.registerStructure(CloudGen.Start.class, "unicopia:clouds");
MapGenStructureIO.registerStructure(StructuresGen.Start.class, "unicopia:ruins");
MapGenStructureIO.registerStructureComponent(CloudDungeon.class, "unicopia:cloud_dungeon");
MapGenStructureIO.registerStructureComponent(GroundDungeon.class, "unicopia:ground_dungeon");
}
public static CraftingManager getCraftingManager() {
return craftingManager;
}
@SubscribeEvent
public static void registerItems(RegistryEvent.Register<Item> event) {
UItems.init(event.getRegistry());
}
@SubscribeEvent
public static void registerBlocks(RegistryEvent.Register<Block> event) {
UBlocks.init(event.getRegistry());
}
@SubscribeEvent
public static void registerPotions(RegistryEvent.Register<Potion> event) {
UEffects.init(event.getRegistry());
}
@SubscribeEvent
public static void registerSounds(RegistryEvent.Register<SoundEvent> event) {
USounds.init(event.getRegistry());
}
@SubscribeEvent
public static void registerEntities(RegistryEvent.Register<EntityEntry> event) {
UEntities.init(event.getRegistry());
}
@SubscribeEvent
public static void onBlockHarvested(BlockEvent.HarvestDropsEvent event) {
Block block = event.getState().getBlock();
int fortuneFactor = 1 + event.getFortuneLevel() * 15;
if (block == Blocks.STONE) {
if (event.getWorld().rand.nextInt(500 / fortuneFactor) == 0) {
for (int i = 0; i < 1 + event.getFortuneLevel(); i++) {
if (event.getWorld().rand.nextInt(10) > 3) {
event.getDrops().add(new ItemStack(UItems.curse));
} else {
event.getDrops().add(new ItemStack(UItems.spell));
}
}
}
if (event.getWorld().rand.nextInt(5000) == 0) {
event.getDrops().add(SpellRegistry.instance().enchantStack(new ItemStack(UItems.spell), "awkward"));
}
} else if (block instanceof BlockTallGrass) {
if (event.getWorld().rand.nextInt(25 / fortuneFactor) == 0) {
for (int i = 0; i < 1 + event.getFortuneLevel(); i++) {
int chance = event.getWorld().rand.nextInt(3);
if (chance == 0) {
event.getDrops().add(new ItemStack(UItems.alfalfa_seeds));
} else if (chance == 1) {
event.getDrops().add(new ItemStack(UItems.apple_seeds));
} else {
event.getDrops().add(new ItemStack(UItems.tomato_seeds));
}
}
}
}
}
@SubscribeEvent
public static void onBlockTilled(UseHoeEvent event) {
BlockPos pos = event.getPos();
World world = event.getWorld();
IBlockState state = world.getBlockState(pos);
if (state.getBlock() instanceof ITillable) {
ITillable farm = ((ITillable)state.getBlock());
if (farm.canBeTilled(event.getCurrent(), event.getEntityPlayer(), world, state, pos)) {
world.setBlockState(pos, farm.getFarmlandState(event.getCurrent(), event.getEntityPlayer(), world, state, pos));
event.setResult(Result.ALLOW);
}
}
}
@SubscribeEvent
public static void onWorldTick(TickEvent.WorldTickEvent event) {
if (event.phase == Phase.START) {
UWorld.tick(event.world);
}
}
@SubscribeEvent
public static void onPlayerTick(TickEvent.PlayerTickEvent event) {
if (event.phase == Phase.END) {
PlayerSpeciesList.instance().getPlayer(event.player).onUpdate(event.player);
} else {
PlayerSpeciesList.instance().getPlayer(event.player).beforeUpdate(event.player);
}
}
@SubscribeEvent
public static void onProjectileHit(ProjectileImpactEvent event) {
RayTraceResult ray = event.getRayTraceResult();
if (ray.typeOfHit == RayTraceResult.Type.ENTITY && ray.entityHit instanceof EntityPlayer) {
if (!PlayerSpeciesList.instance().getPlayer((EntityPlayer)ray.entityHit).onProjectileImpact(event.getEntity())) {
event.setCanceled(true);
}
}
}
@SubscribeEvent
public static void onPlayerTossItem(ItemTossEvent event) {
Race race = PlayerSpeciesList.instance().getPlayer(event.getPlayer()).getPlayerSpecies();
PlayerSpeciesList.instance().getEntity(event.getEntityItem()).setPlayerSpecies(race);
}
@SubscribeEvent
public static void onPlayerDropItems(PlayerDropsEvent event) {
Race race = PlayerSpeciesList.instance().getPlayer(event.getEntityPlayer()).getPlayerSpecies();
event.getDrops().stream()
.map(PlayerSpeciesList.instance()::getEntity)
.forEach(item -> item.setPlayerSpecies(race));
}
@SubscribeEvent
public static void onPlayerFall(PlayerFlyableFallEvent event) {
PlayerSpeciesList.instance()
.getPlayer(event.getEntityPlayer())
.onFall(event.getDistance(), event.getMultiplier());
}
@EventHandler
public void onServerStart(FMLServerStartingEvent event) {
Commands.init(event);
}
@SubscribeEvent
public static void onItemUseBegin(LivingEntityUseItemEvent.Start event) {
Entity e = event.getEntity();
if (!event.isCanceled() && e instanceof EntityPlayer) {
PlayerSpeciesList.instance().getPlayer((EntityPlayer)e).getFood().begin(event.getItem());
}
}
@SubscribeEvent
public static void onItemUseCancel(LivingEntityUseItemEvent.Stop event) {
Entity e = event.getEntity();
if (!event.isCanceled() && e instanceof EntityPlayer) {
PlayerSpeciesList.instance().getPlayer((EntityPlayer)e).getFood().end();
}
}
@SubscribeEvent
public static void onItemUseFinish(LivingEntityUseItemEvent.Finish event) {
Entity e = event.getEntity();
if (!event.isCanceled() && e instanceof EntityPlayer) {
PlayerSpeciesList.instance().getPlayer((EntityPlayer)e).getFood().finish();
}
}
@Override

View file

@ -8,12 +8,12 @@ import javax.annotation.Nullable;
import com.minelittlepony.jumpingcastle.api.Target;
import com.minelittlepony.unicopia.entity.EntityFakeClientPlayer;
import com.minelittlepony.unicopia.hud.UHud;
import com.minelittlepony.unicopia.init.UEntities;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.input.Keyboard;
import com.minelittlepony.unicopia.inventory.gui.GuiOfHolding;
import com.minelittlepony.unicopia.network.MsgRequestCapabilities;
import com.minelittlepony.unicopia.player.IPlayer;
import com.minelittlepony.unicopia.player.IView;
import com.minelittlepony.unicopia.player.PlayerSpeciesList;
import com.minelittlepony.unicopia.render.DisguiseRenderer;
import com.minelittlepony.util.gui.ButtonGridLayout;
@ -24,33 +24,14 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiOptions;
import net.minecraft.client.gui.GuiShareToLan;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.SoundEvents;
import net.minecraft.world.IInteractionObject;
import net.minecraftforge.client.event.ColorHandlerEvent;
import net.minecraftforge.client.event.EntityViewRenderEvent;
import net.minecraftforge.client.event.FOVUpdateEvent;
import net.minecraftforge.client.event.GuiScreenEvent;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
import net.minecraftforge.client.event.RenderLivingEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent.Phase;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import static com.minelittlepony.util.gui.ButtonGridLayout.*;
@EventBusSubscriber(Side.CLIENT)
public class UnicopiaClient extends UClient {
/**
@ -64,7 +45,7 @@ public class UnicopiaClient extends UClient {
private static Race clientPlayerRace = getclientPlayerRace();
private static Race getclientPlayerRace() {
if (!UConfig.getInstance().ignoresMineLittlePony()
if (!UConfig.instance().ignoresMineLittlePony()
&& Minecraft.getMinecraft().player != null) {
Race race = MineLP.getPlayerPonyRace();
@ -74,9 +55,38 @@ public class UnicopiaClient extends UClient {
}
return UConfig.getInstance().getPrefferedRace();
return UConfig.instance().getPrefferedRace();
}
static void addUniButton(List<GuiButton> buttons) {
ButtonGridLayout layout = new ButtonGridLayout(buttons);
GuiButton uni = new UButton(layout.getNextButtonId(), 0, 0, 150, 20, I18n.format("gui.unicopia"), b -> {
Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.BLOCK_ANVIL_USE, 1));
b.displayString = "<< WIP >>";
return false;
});
List<Integer> possibleXCandidates = list(layout.getColumns());
List<Integer> possibleYCandidates = list(layout.getRows());
uni.y = last(possibleYCandidates, 1);
if (layout.getRows()
.filter(y -> layout.getRow(y).size() == 1).count() < 2) {
uni.y += 25;
uni.x = first(possibleXCandidates, 0);
layout.getRow(last(possibleYCandidates, 0)).forEach(button -> {
button.y = Math.max(button.y, uni.y + uni.height + 13);
});
} else {
uni.x = first(possibleXCandidates, 2);
}
layout.getElements().add(uni);
}
@Override
public void displayGuiToPlayer(EntityPlayer player, IInteractionObject inventory) {
@ -130,121 +140,40 @@ public class UnicopiaClient extends UClient {
return Minecraft.getMinecraft().gameSettings.thirdPersonView;
}
@SideOnly(Side.CLIENT)
@SubscribeEvent
public static void onDisplayGui(GuiScreenEvent.InitGuiEvent.Post event) {
if (event.getGui() instanceof GuiOptions || event.getGui() instanceof GuiShareToLan) {
addUniButton(event);
}
}
@Override
public boolean renderEntity(Entity entity, float renderPartialTicks) {
static void addUniButton(GuiScreenEvent.InitGuiEvent.Post event) {
ButtonGridLayout layout = new ButtonGridLayout(event.getButtonList());
GuiButton uni = new UButton(layout.getNextButtonId(), 0, 0, 150, 20, I18n.format("gui.unicopia"), b -> {
Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.BLOCK_ANVIL_USE, 1));
b.displayString = "<< WIP >>";
return false;
});
List<Integer> possibleXCandidates = list(layout.getColumns());
List<Integer> possibleYCandidates = list(layout.getRows());
uni.y = last(possibleYCandidates, 1);
if (layout.getRows()
.filter(y -> layout.getRow(y).size() == 1).count() < 2) {
uni.y += 25;
uni.x = first(possibleXCandidates, 0);
layout.getRow(last(possibleYCandidates, 0)).forEach(button -> {
button.y = Math.max(button.y, uni.y + uni.height + 13);
});
} else {
uni.x = first(possibleXCandidates, 2);
}
layout.getElements().add(uni);
}
@SideOnly(Side.CLIENT)
@SubscribeEvent
public static void preEntityRender(RenderLivingEvent.Pre<?> event) {
Entity entity = event.getEntity();
if (DisguiseRenderer.instance().renderDisguise(entity, event.getPartialRenderTick())) {
event.setCanceled(true);
if (DisguiseRenderer.instance().renderDisguise(entity, renderPartialTicks)) {
return true;
}
if (entity instanceof EntityPlayer) {
IPlayer iplayer = PlayerSpeciesList.instance().getPlayer((EntityPlayer)entity);
if (iplayer.isInvisible()) {
event.setCanceled(true);
}
if (DisguiseRenderer.instance().renderDisguiseToGui(iplayer)) {
event.setCanceled(true);
return true;
}
if (iplayer.isInvisible()) {
return true;
}
}
@SideOnly(Side.CLIENT)
@SubscribeEvent
public static void postEntityRender(RenderLivingEvent.Post<?> event) {
// This fixes lighting errors on the armour slots.
// #MahjongPls
// @FUF(reason = "Forge should fix this. Cancelling their event skips neccessary state resetting at the end of the render method")
GlStateManager.enableAlpha();
return false;
}
@SideOnly(Side.CLIENT)
@Override
public void preInit(FMLPreInitializationEvent event) {
public void preInit() {
UEntities.preInit();
UParticles.init();
}
@SideOnly(Side.CLIENT)
@Override
public void init(FMLInitializationEvent event) {
public void init() {
clientPlayerRace = getclientPlayerRace();
}
@SideOnly(Side.CLIENT)
@SubscribeEvent
public static void registerItemColours(ColorHandlerEvent.Item event) {
UItems.registerColors(event.getItemColors());
UBlocks.registerColors(event.getItemColors(), event.getBlockColors());
}
@SideOnly(Side.CLIENT)
@SubscribeEvent
public static void onRenderHud(RenderGameOverlayEvent.Post event) {
if (event.getType() != ElementType.ALL) {
return;
}
Minecraft mc = Minecraft.getMinecraft();
if (mc.player != null && mc.world != null) {
IPlayer player = PlayerSpeciesList.instance().getPlayer(mc.player);
UHud.instance.renderHud(player, event.getResolution());
}
}
@SideOnly(Side.CLIENT)
@SubscribeEvent
public static void modifyFOV(FOVUpdateEvent event) {
event.setNewfov(PlayerSpeciesList.instance().getPlayer(event.getEntity()).getCamera().calculateFieldOfView(event.getFov()));
}
@SideOnly(Side.CLIENT)
@SubscribeEvent
public static void onGameTick(TickEvent.ClientTickEvent event) {
if (event.phase == Phase.END) {
public void tick() {
EntityPlayer player = UClient.instance().getPlayer();
if (player != null && !player.isDead) {
@ -253,26 +182,10 @@ public class UnicopiaClient extends UClient {
if (newRace != clientPlayerRace) {
clientPlayerRace = newRace;
Unicopia.channel.send(new MsgRequestCapabilities(player, clientPlayerRace), Target.SERVER);
Unicopia.getConnection().send(new MsgRequestCapabilities(player, clientPlayerRace), Target.SERVER);
}
}
Keyboard.getKeyHandler().onKeyInput();
}
}
@SideOnly(Side.CLIENT)
@SubscribeEvent
public static void setupPlayerCamera(EntityViewRenderEvent.CameraSetup event) {
EntityPlayer player = UClient.instance().getPlayer();
if (player != null) {
IView view = PlayerSpeciesList.instance().getPlayer(player).getCamera();
event.setRoll(view.calculateRoll());
event.setPitch(view.calculatePitch(event.getPitch()));
event.setYaw(view.calculateYaw(event.getYaw()));
}
}
}

View file

@ -4,7 +4,7 @@ import java.util.Random;
import javax.annotation.Nullable;
import com.minelittlepony.unicopia.UItems;
import com.minelittlepony.unicopia.init.UItems;
import net.minecraft.block.BlockCrops;
import net.minecraft.block.properties.PropertyEnum;

View file

@ -5,7 +5,7 @@ import java.util.List;
import javax.annotation.Nullable;
import com.minelittlepony.unicopia.CloudType;
import com.minelittlepony.unicopia.UBlocks;
import com.minelittlepony.unicopia.init.UBlocks;
import com.minelittlepony.unicopia.player.PlayerSpeciesList;
import net.minecraft.block.Block;

View file

@ -3,7 +3,7 @@ package com.minelittlepony.unicopia.block;
import java.util.Random;
import com.minelittlepony.unicopia.CloudType;
import com.minelittlepony.unicopia.UItems;
import com.minelittlepony.unicopia.init.UItems;
import net.minecraft.block.BlockDoor;
import net.minecraft.block.SoundType;

View file

@ -5,7 +5,7 @@ import java.util.List;
import javax.annotation.Nullable;
import com.minelittlepony.unicopia.CloudType;
import com.minelittlepony.unicopia.UBlocks;
import com.minelittlepony.unicopia.init.UBlocks;
import net.minecraft.block.SoundType;
import net.minecraft.block.state.IBlockState;

View file

@ -5,7 +5,7 @@ import java.util.List;
import javax.annotation.Nullable;
import com.minelittlepony.unicopia.CloudType;
import com.minelittlepony.unicopia.UMaterials;
import com.minelittlepony.unicopia.init.UMaterials;
import net.minecraft.block.BlockFence;
import net.minecraft.block.SoundType;

View file

@ -6,7 +6,7 @@ import java.util.Random;
import javax.annotation.Nullable;
import com.minelittlepony.unicopia.CloudType;
import com.minelittlepony.unicopia.UBlocks;
import com.minelittlepony.unicopia.init.UBlocks;
import net.minecraft.block.BlockSlab;
import net.minecraft.block.BlockStairs;

View file

@ -3,8 +3,8 @@ package com.minelittlepony.unicopia.block;
import java.util.Random;
import com.minelittlepony.unicopia.CloudType;
import com.minelittlepony.unicopia.UItems;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.init.UItems;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.particle.Particles;
import net.minecraft.block.BlockTorch;

View file

@ -2,7 +2,7 @@ package com.minelittlepony.unicopia.block;
import java.util.Random;
import com.minelittlepony.unicopia.UItems;
import com.minelittlepony.unicopia.init.UItems;
import net.minecraft.block.BlockCrops;
import net.minecraft.block.SoundType;

View file

@ -6,8 +6,8 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UEffects;
import com.minelittlepony.unicopia.forgebullshit.IMultiItem;
import com.minelittlepony.unicopia.init.UEffects;
import com.minelittlepony.unicopia.player.PlayerSpeciesList;
import net.minecraft.advancements.CriteriaTriggers;

View file

@ -5,7 +5,7 @@ import java.util.ArrayList;
import com.google.common.collect.Lists;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.minelittlepony.unicopia.UItems;
import com.minelittlepony.unicopia.init.UItems;
import com.minelittlepony.unicopia.inventory.InventorySpellBook;
import com.minelittlepony.unicopia.spell.SpellRegistry;

View file

@ -4,10 +4,10 @@ import java.util.Map;
import com.minelittlepony.unicopia.Predicates;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UBlocks;
import com.minelittlepony.unicopia.UItems;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.forgebullshit.FUF;
import com.minelittlepony.unicopia.init.UBlocks;
import com.minelittlepony.unicopia.init.UItems;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.particle.Particles;
import com.minelittlepony.unicopia.player.PlayerSpeciesList;

View file

@ -6,7 +6,7 @@ import org.apache.commons.lang3.StringUtils;
import com.minelittlepony.unicopia.Predicates;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UItems;
import com.minelittlepony.unicopia.init.UItems;
import com.minelittlepony.unicopia.item.ICastable;
import com.minelittlepony.unicopia.network.EffectSync;
import com.minelittlepony.unicopia.spell.ICaster;

View file

@ -1,8 +1,8 @@
package com.minelittlepony.unicopia.entity;
import com.minelittlepony.unicopia.Predicates;
import com.minelittlepony.unicopia.UItems;
import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.init.UItems;
import net.minecraft.block.SoundType;
import net.minecraft.entity.EntityLiving;

View file

@ -0,0 +1,17 @@
package com.minelittlepony.unicopia.init;
import net.minecraftforge.client.event.ColorHandlerEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;
@EventBusSubscriber(Side.CLIENT)
class ClientHooks {
@SubscribeEvent
public static void registerItemColours(ColorHandlerEvent.Item event) {
UItems.registerColors(event.getItemColors());
UBlocks.registerColors(event.getItemColors(), event.getBlockColors());
}
}

View file

@ -0,0 +1,39 @@
package com.minelittlepony.unicopia.init;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.potion.Potion;
import net.minecraft.util.SoundEvent;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.registry.EntityEntry;
@EventBusSubscriber
class Hooks {
@SubscribeEvent
public static void registerItems(RegistryEvent.Register<Item> event) {
UItems.init(event.getRegistry());
}
@SubscribeEvent
public static void registerBlocks(RegistryEvent.Register<Block> event) {
UBlocks.init(event.getRegistry());
}
@SubscribeEvent
public static void registerPotions(RegistryEvent.Register<Potion> event) {
UEffects.init(event.getRegistry());
}
@SubscribeEvent
public static void registerSounds(RegistryEvent.Register<SoundEvent> event) {
USounds.init(event.getRegistry());
}
@SubscribeEvent
public static void registerEntities(RegistryEvent.Register<EntityEntry> event) {
UEntities.init(event.getRegistry());
}
}

View file

@ -1,5 +1,6 @@
package com.minelittlepony.unicopia;
package com.minelittlepony.unicopia.init;
import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.block.BlockAlfalfa;
import com.minelittlepony.unicopia.block.BlockFruitLeaves;
import com.minelittlepony.unicopia.block.BlockGlowingGem;

View file

@ -1,5 +1,6 @@
package com.minelittlepony.unicopia;
package com.minelittlepony.unicopia.init;
import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.potion.UPotion;
import net.minecraft.init.MobEffects;

View file

@ -1,5 +1,6 @@
package com.minelittlepony.unicopia;
package com.minelittlepony.unicopia.init;
import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.entity.EntityCloud;
import com.minelittlepony.unicopia.entity.EntityConstructionCloud;
import com.minelittlepony.unicopia.entity.EntityRacingCloud;
@ -44,7 +45,7 @@ public class UEntities {
);
}
static void preInit() {
public static void preInit() {
RenderingRegistry.registerEntityRenderingHandler(EntityCloud.class, RenderCloud::new);
RenderingRegistry.registerEntityRenderingHandler(EntitySpell.class, RenderGem::new);
RenderingRegistry.registerEntityRenderingHandler(EntityProjectile.class, RenderProjectile::new);
@ -52,7 +53,7 @@ public class UEntities {
RenderingRegistry.registerEntityRenderingHandler(EntityRainbow.class, RenderRainbow::new);
}
static void registerSpawnEntries(Biome biome) {
public static void registerSpawnEntries(Biome biome) {
if (!(biome instanceof BiomeHell || biome instanceof BiomeEnd)) {
BiomeBS.addSpawnEntry(biome, EnumCreatureType.AMBIENT, EntityWildCloud.class, b ->
@ -61,6 +62,4 @@ public class UEntities {
BiomeBS.addSpawnEntry(biome, EnumCreatureType.CREATURE, EntityRainbow.Spawner.class, b -> EntityRainbow.SPAWN_ENTRY);
}
}
}

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia;
package com.minelittlepony.unicopia.init;
import com.minelittlepony.unicopia.item.ItemApple;
import com.minelittlepony.unicopia.item.ItemAppleMultiType;
@ -43,6 +43,9 @@ import net.minecraftforge.registries.IForgeRegistry;
import static com.minelittlepony.unicopia.Predicates.*;
import com.minelittlepony.unicopia.CloudType;
import com.minelittlepony.unicopia.UClient;
import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.edibles.BushToxicityDeterminent;
import com.minelittlepony.unicopia.edibles.CookedToxicityDeterminent;
import com.minelittlepony.unicopia.edibles.FlowerToxicityDeterminent;
@ -262,7 +265,7 @@ public class UItems {
FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(juice), new ItemStack(burned_juice), 0);
}
static void fixRecipes() {
public static void fixRecipes() {
new OreReplacer()
.registerAll(stack -> stack.getItem().getRegistryName().equals(red_apple.getRegistryName()))
.done();

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia;
package com.minelittlepony.unicopia.init;
import net.minecraft.block.material.MapColor;
import net.minecraft.block.material.Material;

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia;
package com.minelittlepony.unicopia.init;
import com.minelittlepony.unicopia.particle.Particles;
import com.minelittlepony.unicopia.particle.client.ParticleUnicornMagic;
@ -21,7 +21,7 @@ public class UParticles {
public static int DISK;
@SideOnly(Side.CLIENT)
static void init() {
public static void init() {
UNICORN_MAGIC = Particles.instance().registerParticle(ParticleUnicornMagic::new);
RAIN_DROPS = Particles.instance().registerParticle(ParticleRaindrops::new);
CHANGELING_MAGIC = Particles.instance().registerParticle(ParticleChanglingMagic::new);

View file

@ -1,4 +1,6 @@
package com.minelittlepony.unicopia;
package com.minelittlepony.unicopia.init;
import com.minelittlepony.unicopia.Unicopia;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.SoundEvent;

View file

@ -5,9 +5,9 @@ import java.util.function.Supplier;
import javax.annotation.Nullable;
import com.minelittlepony.unicopia.UItems;
import com.minelittlepony.unicopia.edibles.IEdible;
import com.minelittlepony.unicopia.edibles.Toxicity;
import com.minelittlepony.unicopia.init.UItems;
import com.minelittlepony.util.collection.Pool;
import com.minelittlepony.util.collection.Weighted;

View file

@ -1,6 +1,6 @@
package com.minelittlepony.unicopia.item;
import com.minelittlepony.unicopia.UBlocks;
import com.minelittlepony.unicopia.init.UBlocks;
import net.minecraft.advancements.CriteriaTriggers;
import net.minecraft.block.SoundType;

View file

@ -0,0 +1,90 @@
package com.minelittlepony.unicopia.player;
import com.minelittlepony.unicopia.Race;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.math.RayTraceResult;
import net.minecraftforge.event.entity.ProjectileImpactEvent;
import net.minecraftforge.event.entity.item.ItemTossEvent;
import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent;
import net.minecraftforge.event.entity.player.PlayerDropsEvent;
import net.minecraftforge.event.entity.player.PlayerFlyableFallEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent.Phase;
@EventBusSubscriber
class Hooks {
@SubscribeEvent
public static void onPlayerTick(TickEvent.PlayerTickEvent event) {
if (event.phase == Phase.END) {
PlayerSpeciesList.instance().getPlayer(event.player).onUpdate();
} else {
PlayerSpeciesList.instance().getPlayer(event.player).beforeUpdate();
}
}
@SubscribeEvent
public static void onPlayerTossItem(ItemTossEvent event) {
Race race = PlayerSpeciesList.instance().getPlayer(event.getPlayer()).getPlayerSpecies();
PlayerSpeciesList.instance().getEntity(event.getEntityItem()).setPlayerSpecies(race);
}
@SubscribeEvent
public static void onPlayerDropItems(PlayerDropsEvent event) {
Race race = PlayerSpeciesList.instance().getPlayer(event.getEntityPlayer()).getPlayerSpecies();
event.getDrops().stream()
.map(PlayerSpeciesList.instance()::getEntity)
.forEach(item -> item.setPlayerSpecies(race));
}
@SubscribeEvent
public static void onPlayerFall(PlayerFlyableFallEvent event) {
PlayerSpeciesList.instance().getPlayer(event.getEntityPlayer()).onFall(event.getDistance(), event.getMultiplier());
}
@SubscribeEvent
public static void onProjectileHit(ProjectileImpactEvent event) {
RayTraceResult ray = event.getRayTraceResult();
if (!event.isCanceled()
&& ray.typeOfHit == RayTraceResult.Type.ENTITY
&& ray.entityHit instanceof EntityPlayer
&& !PlayerSpeciesList.instance().getPlayer((EntityPlayer)ray.entityHit).onProjectileImpact(event.getEntity())) {
event.setCanceled(true);
}
}
@SubscribeEvent
public static void onItemUseBegin(LivingEntityUseItemEvent.Start event) {
Entity e = event.getEntity();
if (!event.isCanceled() && e instanceof EntityPlayer) {
PlayerSpeciesList.instance().getPlayer((EntityPlayer)e).getFood().begin(event.getItem());
}
}
@SubscribeEvent
public static void onItemUseCancel(LivingEntityUseItemEvent.Stop event) {
Entity e = event.getEntity();
if (!event.isCanceled() && e instanceof EntityPlayer) {
PlayerSpeciesList.instance().getPlayer((EntityPlayer)e).getFood().end();
}
}
@SubscribeEvent
public static void onItemUseFinish(LivingEntityUseItemEvent.Finish event) {
Entity e = event.getEntity();
if (!event.isCanceled() && e instanceof EntityPlayer) {
PlayerSpeciesList.instance().getPlayer((EntityPlayer)e).getFood().finish();
}
}
}

View file

@ -122,11 +122,6 @@ public interface IPlayer extends ICaster<EntityPlayer>, IRaceContainer<EntityPla
*/
boolean onProjectileImpact(Entity projectile);
/**
* Called at the beginning of a player's update cycle.
*/
void beforeUpdate(EntityPlayer entity);
/**
* Returns true if this player is the use.
*/

View file

@ -10,10 +10,20 @@ import net.minecraft.entity.Entity;
*
* @param <T> The type of owner
*/
public interface IRaceContainer<T extends Entity> extends InbtSerialisable, IUpdatable<T> {
public interface IRaceContainer<T extends Entity> extends InbtSerialisable {
Race getPlayerSpecies();
void setPlayerSpecies(Race race);
void onDimensionalTravel(int destinationDimension);
/**
* Called to update this container's logic
*/
void onUpdate();
/**
* Called at the beginning of a player's update cycle.
*/
void beforeUpdate();
}

View file

@ -1,7 +1,5 @@
package com.minelittlepony.unicopia.player;
import net.minecraft.entity.Entity;
public interface IUpdatable<T extends Entity> {
void onUpdate(T entity);
public interface IUpdatable<T> {
void onUpdate(T sender);
}

View file

@ -12,7 +12,12 @@ class ItemCapabilities implements IRaceContainer<EntityItem>, IOwned<EntityItem>
private EntityItem owner;
@Override
public void onUpdate(EntityItem entity) {
public void onUpdate() {
}
@Override
public void beforeUpdate() {
}

View file

@ -159,7 +159,7 @@ class PlayerAbilityDelegate implements IAbilityReceiver, IUpdatable<EntityPlayer
IData data = ability.tryActivate(player);
if (data != null) {
Unicopia.channel.send(new MsgPlayerAbility(player.getOwner(), ability, data), Target.SERVER);
Unicopia.getConnection().send(new MsgPlayerAbility(player.getOwner(), ability, data), Target.SERVER);
}
return data != null;

View file

@ -8,9 +8,9 @@ import com.google.common.collect.Maps;
import com.minelittlepony.model.anim.BasicEasingInterpolator;
import com.minelittlepony.model.anim.IInterpolator;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UEffects;
import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.enchanting.PageState;
import com.minelittlepony.unicopia.init.UEffects;
import com.minelittlepony.unicopia.network.EffectSync;
import com.minelittlepony.unicopia.network.MsgPlayerCapabilities;
import com.minelittlepony.unicopia.spell.IMagicEffect;
@ -146,9 +146,9 @@ class PlayerCapabilities implements IPlayer {
if (!getWorld().isRemote) {
if (full) {
Unicopia.channel.broadcast(new MsgPlayerCapabilities(this));
Unicopia.getConnection().broadcast(new MsgPlayerCapabilities(this));
} else {
Unicopia.channel.broadcast(new MsgPlayerCapabilities(getPlayerSpecies(), getOwner()));
Unicopia.getConnection().broadcast(new MsgPlayerCapabilities(getPlayerSpecies(), getOwner()));
}
}
}
@ -181,7 +181,7 @@ class PlayerCapabilities implements IPlayer {
}
@Override
public void beforeUpdate(EntityPlayer entity) {
public void beforeUpdate() {
if (entity.world.isRemote) {
if (entity.isRiding() && entity.isSneaking()) {
@ -197,7 +197,7 @@ class PlayerCapabilities implements IPlayer {
}
@Override
public void onUpdate(EntityPlayer entity) {
public void onUpdate() {
powers.onUpdate(entity);
gravity.onUpdate(entity);

View file

@ -1,7 +1,7 @@
package com.minelittlepony.unicopia.player;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.USounds;
import com.minelittlepony.unicopia.init.USounds;
import com.minelittlepony.unicopia.mixin.MixinEntity;
import com.minelittlepony.unicopia.spell.IMagicEffect;
import com.minelittlepony.unicopia.util.serialisation.InbtSerialisable;

View file

@ -21,17 +21,17 @@ public class PlayerSpeciesList {
}
public boolean whiteListRace(Race race) {
boolean result = UConfig.getInstance().getSpeciesWhiteList().add(race);
boolean result = UConfig.instance().getSpeciesWhiteList().add(race);
UConfig.getInstance().save();
UConfig.instance().save();
return result;
}
public boolean unwhiteListRace(Race race) {
boolean result = UConfig.getInstance().getSpeciesWhiteList().remove(race);
boolean result = UConfig.instance().getSpeciesWhiteList().remove(race);
UConfig.getInstance().save();
UConfig.instance().save();
return result;
}
@ -41,7 +41,7 @@ public class PlayerSpeciesList {
return false;
}
return race.isDefault() || UConfig.getInstance().getSpeciesWhiteList().isEmpty() || UConfig.getInstance().getSpeciesWhiteList().contains(race);
return race.isDefault() || UConfig.instance().getSpeciesWhiteList().isEmpty() || UConfig.instance().getSpeciesWhiteList().contains(race);
}
public Race validate(Race race, EntityPlayer sender) {
@ -69,7 +69,7 @@ public class PlayerSpeciesList {
}
@Nullable
public IPlayer getPlayer(EntityPlayer player) {
public IPlayer getPlayer(@Nullable EntityPlayer player) {
if (player == null) {
return null;
}

View file

@ -3,8 +3,8 @@ package com.minelittlepony.unicopia.power;
import org.lwjgl.input.Keyboard;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.entity.EntityCloud;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.player.IPlayer;
import com.minelittlepony.unicopia.power.data.Numeric;
import com.minelittlepony.util.vector.VecHelper;

View file

@ -6,8 +6,8 @@ import javax.annotation.Nullable;
import org.lwjgl.input.Keyboard;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.entity.IInAnimate;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.player.IPlayer;
import com.minelittlepony.unicopia.player.PlayerSpeciesList;
import com.minelittlepony.unicopia.power.data.Hit;

View file

@ -8,7 +8,7 @@ import javax.annotation.Nullable;
import org.lwjgl.input.Keyboard;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.player.IPlayer;
import com.minelittlepony.unicopia.power.data.Hit;
import com.minelittlepony.util.MagicalDamageSource;

View file

@ -3,7 +3,7 @@ package com.minelittlepony.unicopia.power;
import org.lwjgl.input.Keyboard;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.player.IPlayer;
import com.minelittlepony.unicopia.power.data.Location;
import com.minelittlepony.util.WorldEvent;

View file

@ -3,7 +3,7 @@ package com.minelittlepony.unicopia.power;
import org.lwjgl.input.Keyboard;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.player.IPlayer;
import com.minelittlepony.unicopia.power.data.Hit;
import com.minelittlepony.unicopia.spell.SpellShield;

View file

@ -3,7 +3,7 @@ package com.minelittlepony.unicopia.power;
import org.lwjgl.input.Keyboard;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.player.IPlayer;
import com.minelittlepony.unicopia.power.data.Location;
import com.minelittlepony.util.vector.VecHelper;

View file

@ -2,7 +2,7 @@ package com.minelittlepony.unicopia.spell;
import java.util.function.Supplier;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.init.UParticles;
public class GenericSpell extends AbstractSpell {

View file

@ -1,7 +1,7 @@
package com.minelittlepony.unicopia.spell;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.entity.EntitySpell;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.particle.Particles;
import com.minelittlepony.util.shape.IShape;
import com.minelittlepony.util.shape.Line;

View file

@ -3,8 +3,8 @@ package com.minelittlepony.unicopia.spell;
import java.util.Random;
import java.util.function.Consumer;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.entity.EntitySpell;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.particle.Particles;
import com.minelittlepony.util.MagicalDamageSource;
import com.minelittlepony.util.PosHelper;

View file

@ -7,7 +7,7 @@ import javax.annotation.Nullable;
import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UClient;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.mixin.MixinEntity;
import com.minelittlepony.unicopia.player.IFlyingPredicate;
import com.minelittlepony.unicopia.player.IOwned;

View file

@ -1,6 +1,6 @@
package com.minelittlepony.unicopia.spell;
import com.minelittlepony.unicopia.UMaterials;
import com.minelittlepony.unicopia.init.UMaterials;
import com.minelittlepony.util.MagicalDamageSource;
import com.minelittlepony.util.PosHelper;
import com.minelittlepony.util.collection.IStateMapping;

View file

@ -7,9 +7,9 @@ import java.util.UUID;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.entity.EntitySpell;
import com.minelittlepony.unicopia.entity.IMagicals;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.particle.Particles;
import com.minelittlepony.unicopia.player.IPlayer;
import com.minelittlepony.unicopia.player.PlayerSpeciesList;

View file

@ -1,6 +1,6 @@
package com.minelittlepony.unicopia.spell;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.particle.Particles;
import com.minelittlepony.util.shape.IShape;
import com.minelittlepony.util.shape.Sphere;

View file

@ -1,7 +1,7 @@
package com.minelittlepony.unicopia.spell;
import com.minelittlepony.unicopia.Predicates;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.particle.ParticleConnection;
import com.minelittlepony.unicopia.particle.Particles;
import com.minelittlepony.unicopia.player.IPlayer;

View file

@ -1,6 +1,6 @@
package com.minelittlepony.unicopia.spell;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.particle.Particles;
import com.minelittlepony.unicopia.player.PlayerSpeciesList;
import com.minelittlepony.util.MagicalDamageSource;

View file

@ -0,0 +1,72 @@
package com.minelittlepony.unicopia.world;
import java.util.List;
import com.minelittlepony.unicopia.block.ITillable;
import com.minelittlepony.unicopia.init.UItems;
import com.minelittlepony.unicopia.spell.SpellRegistry;
import net.minecraft.block.Block;
import net.minecraft.block.BlockTallGrass;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public class BlockInteractions {
public boolean onBlockTilled(World world, BlockPos pos, EntityPlayer player, ItemStack hoe) {
IBlockState state = world.getBlockState(pos);
if (!(state.getBlock() instanceof ITillable)) {
return false;
}
ITillable farm = ((ITillable)state.getBlock());
if (!farm.canBeTilled(hoe, player, world, state, pos)) {
return false;
}
world.setBlockState(pos, farm.getFarmlandState(hoe, player, world, state, pos));
return true;
}
public void addAuxiliaryDrops(World world, IBlockState state, BlockPos pos, List<ItemStack> drops, int fortune) {
Block block = state.getBlock();
int fortuneFactor = 1 + fortune * 15;
if (block == Blocks.STONE) {
if (world.rand.nextInt(500 / fortuneFactor) == 0) {
for (int i = 0; i < 1 + fortune; i++) {
if (world.rand.nextInt(10) > 3) {
drops.add(new ItemStack(UItems.curse));
} else {
drops.add(new ItemStack(UItems.spell));
}
}
}
if (world.rand.nextInt(5000) == 0) {
drops.add(SpellRegistry.instance().enchantStack(new ItemStack(UItems.spell), "awkward"));
}
} else if (block instanceof BlockTallGrass) {
if (world.rand.nextInt(25 / fortuneFactor) == 0) {
for (int i = 0; i < 1 + fortune; i++) {
int chance = world.rand.nextInt(3);
if (chance == 0) {
drops.add(new ItemStack(UItems.alfalfa_seeds));
} else if (chance == 1) {
drops.add(new ItemStack(UItems.apple_seeds));
} else {
drops.add(new ItemStack(UItems.tomato_seeds));
}
}
}
}
}
}

View file

@ -0,0 +1,41 @@
package com.minelittlepony.unicopia.world;
import net.minecraftforge.event.entity.player.UseHoeEvent;
import net.minecraftforge.event.terraingen.PopulateChunkEvent;
import net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.eventhandler.Event.Result;
import net.minecraftforge.fml.common.gameevent.TickEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent.Phase;
@EventBusSubscriber
class Hooks {
@SubscribeEvent
public static void onBlockHarvested(BlockEvent.HarvestDropsEvent event) {
UWorld.instance().getBlocks().addAuxiliaryDrops(event.getWorld(), event.getState(), event.getPos(), event.getDrops(), event.getFortuneLevel());
}
@SubscribeEvent
public static void onBlockTilled(UseHoeEvent event) {
if (UWorld.instance().getBlocks().onBlockTilled(event.getWorld(), event.getPos(), event.getEntityPlayer(), event.getCurrent())) {
event.setResult(Result.ALLOW);
}
}
@SubscribeEvent
public static void onStructureGen(PopulateChunkEvent.Populate event) {
if (event.getType() == EventType.DUNGEON) {
UWorld.instance().generateStructures(event.getWorld(), event.getChunkX(), event.getChunkZ(), event.getGen());
}
}
@SubscribeEvent
public static void onWorldTick(TickEvent.WorldTickEvent event) {
if (event.phase == Phase.START) {
UWorld.instance().onUpdate(event.world);
}
}
}

View file

@ -6,6 +6,9 @@ import java.util.Random;
import com.google.common.collect.Queues;
import com.minelittlepony.jumpingcastle.Exceptions;
import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.player.IUpdatable;
import com.minelittlepony.unicopia.structure.CloudDungeon;
import com.minelittlepony.unicopia.structure.GroundDungeon;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.world.World;
@ -13,10 +16,11 @@ import net.minecraft.world.chunk.ChunkPrimer;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.ChunkGeneratorOverworld;
import net.minecraft.world.gen.IChunkGenerator;
import net.minecraft.world.gen.structure.MapGenStructureIO;
import net.minecraftforge.fml.common.IWorldGenerator;
import net.minecraftforge.fml.common.registry.GameRegistry;
public class UWorld implements IWorldGenerator {
public class UWorld implements IWorldGenerator, IUpdatable<World> {
private static final UWorld instance = new UWorld();
@ -28,7 +32,28 @@ public class UWorld implements IWorldGenerator {
private static final Object locker = new Object();
public static void tick(World world) {
public static void enqueueTask(Runnable task) {
synchronized (locker) {
tickTasks.add(task);
}
}
private final BlockInteractions blocks = new BlockInteractions();
private final CloudGen cloudsGen = new CloudGen();
private final StructuresGen structuresGen = new StructuresGen();
public void init() {
GameRegistry.registerWorldGenerator(this, 1);
MapGenStructureIO.registerStructure(CloudGen.Start.class, "unicopia:clouds");
MapGenStructureIO.registerStructure(StructuresGen.Start.class, "unicopia:ruins");
MapGenStructureIO.registerStructureComponent(CloudDungeon.class, "unicopia:cloud_dungeon");
MapGenStructureIO.registerStructureComponent(GroundDungeon.class, "unicopia:ground_dungeon");
}
@Override
public void onUpdate(World world) {
synchronized (locker) {
Runnable task;
while ((task = tickTasks.poll()) != null) {
@ -37,17 +62,8 @@ public class UWorld implements IWorldGenerator {
}
}
public static void enqueueTask(Runnable task) {
synchronized (locker) {
tickTasks.add(task);
}
}
private CloudGen cloudsGen = new CloudGen();
private StructuresGen structuresGen = new StructuresGen();
public void init() {
GameRegistry.registerWorldGenerator(this, 1);
public BlockInteractions getBlocks() {
return blocks;
}
public void generateStructures(World world, int chunkX, int chunkZ, IChunkGenerator gen) {