Formatting!
This commit is contained in:
parent
d240daf958
commit
8c4eff0d81
|
@ -169,7 +169,7 @@ public class ConfigHandler
|
||||||
config.addCustomCategoryComment(category, "Block blacklisting");
|
config.addCustomCategoryComment(category, "Block blacklisting");
|
||||||
teleposerBlacklisting = config.getStringList("teleposerBlacklist", category, new String[] { "minecraft:bedrock", "minecraft:mob_spawner" }, "Stops specified blocks from being teleposed. Put entries on new lines. Valid syntax is:\nmodid:blockname:meta");
|
teleposerBlacklisting = config.getStringList("teleposerBlacklist", category, new String[] { "minecraft:bedrock", "minecraft:mob_spawner" }, "Stops specified blocks from being teleposed. Put entries on new lines. Valid syntax is:\nmodid:blockname:meta");
|
||||||
buildBlacklist(teleposerBlacklisting, teleposerBlacklist);
|
buildBlacklist(teleposerBlacklisting, teleposerBlacklist);
|
||||||
teleposerBlacklistEntity = Arrays.asList(config.getStringList("teleposerBlacklistEntity", category, new String[]{}, "Entity class names listed here will not be able to be teleposed."));
|
teleposerBlacklistEntity = Arrays.asList(config.getStringList("teleposerBlacklistEntity", category, new String[] {}, "Entity class names listed here will not be able to be teleposed."));
|
||||||
|
|
||||||
category = "Transposition Sigil Blacklist";
|
category = "Transposition Sigil Blacklist";
|
||||||
config.addCustomCategoryComment(category, "Block blacklisting");
|
config.addCustomCategoryComment(category, "Block blacklisting");
|
||||||
|
@ -291,7 +291,7 @@ public class ConfigHandler
|
||||||
config.addCustomCategoryComment(category, "Client only settings");
|
config.addCustomCategoryComment(category, "Client only settings");
|
||||||
alwaysRenderRoutingLines = config.getBoolean("alwaysRenderRoutingLines", category, false, "Always renders the beams between routing nodes. If false, only renders while a Node Router is being held.");
|
alwaysRenderRoutingLines = config.getBoolean("alwaysRenderRoutingLines", category, false, "Always renders the beams between routing nodes. If false, only renders while a Node Router is being held.");
|
||||||
invisibleSpectralBlocks = config.get(category, "invisibleSpectralBlocks", true, "Spectral Blocks (Used by the Suppression Sigil to store fluids) will not render at all. If false, a see through texture will render. [default: true]").setRequiresMcRestart(true).getBoolean();
|
invisibleSpectralBlocks = config.get(category, "invisibleSpectralBlocks", true, "Spectral Blocks (Used by the Suppression Sigil to store fluids) will not render at all. If false, a see through texture will render. [default: true]").setRequiresMcRestart(true).getBoolean();
|
||||||
sigilHoldingSkipsEmptySlots = config.getBoolean( "sigilHoldingSkipsEmptySlots", category, false, "The Sigil of Holding will skip empty sigil slots if set to true.");
|
sigilHoldingSkipsEmptySlots = config.getBoolean("sigilHoldingSkipsEmptySlots", category, false, "The Sigil of Holding will skip empty sigil slots if set to true.");
|
||||||
|
|
||||||
category = "Compatibility";
|
category = "Compatibility";
|
||||||
config.addCustomCategoryComment(category, "Compatibility settings");
|
config.addCustomCategoryComment(category, "Compatibility settings");
|
||||||
|
|
|
@ -11,5 +11,6 @@ import java.lang.annotation.Target;
|
||||||
*/
|
*/
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
@Target(ElementType.TYPE)
|
@Target(ElementType.TYPE)
|
||||||
public @interface Handler {
|
public @interface Handler
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -151,14 +151,14 @@ public class BloodMagicAPI
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to add a {@link BlockStack} to the Transposition blacklist that cannot
|
* Used to add a {@link BlockStack} to the Transposition blacklist that
|
||||||
* be changed via Configuration files.
|
* cannot be changed via Configuration files.
|
||||||
*
|
*
|
||||||
* IMC:
|
* IMC:
|
||||||
* {@code FMLInterModComs.sendMessage("BloodMagic", "transpositionBlacklist", ItemStack)}
|
* {@code FMLInterModComs.sendMessage("BloodMagic", "transpositionBlacklist", ItemStack)}
|
||||||
* Example:
|
* Example:
|
||||||
* {@code FMLInterModComs.sendMessage("BloodMagic", "transpositionBlacklist", new ItemStack(Blocks.bedrock))}
|
* {@code FMLInterModComs.sendMessage("BloodMagic", "transpositionBlacklist", new ItemStack(Blocks.bedrock))}
|
||||||
*
|
*
|
||||||
* @param blockStack
|
* @param blockStack
|
||||||
* - The BlockStack to blacklist.
|
* - The BlockStack to blacklist.
|
||||||
*/
|
*/
|
||||||
|
@ -170,7 +170,7 @@ public class BloodMagicAPI
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see #addToTranspositionBlacklist(BlockStack)
|
* @see #addToTranspositionBlacklist(BlockStack)
|
||||||
*
|
*
|
||||||
* @param block
|
* @param block
|
||||||
* - The block to blacklist
|
* - The block to blacklist
|
||||||
* @param meta
|
* @param meta
|
||||||
|
@ -183,7 +183,7 @@ public class BloodMagicAPI
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see #addToTranspositionBlacklist(BlockStack)
|
* @see #addToTranspositionBlacklist(BlockStack)
|
||||||
*
|
*
|
||||||
* @param block
|
* @param block
|
||||||
* - The block to blacklist
|
* - The block to blacklist
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -46,8 +46,8 @@ public class TeleposeEvent extends Event
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fired when a Teleposer attempts to move an Entity between locations. Can be cancelled to
|
* Fired when a Teleposer attempts to move an Entity between locations. Can
|
||||||
* stop transposition.
|
* be cancelled to stop transposition.
|
||||||
*/
|
*/
|
||||||
@Cancelable
|
@Cancelable
|
||||||
public static class Ent extends TeleposeEvent
|
public static class Ent extends TeleposeEvent
|
||||||
|
@ -76,9 +76,11 @@ public class TeleposeEvent extends Event
|
||||||
/**
|
/**
|
||||||
* Called after the entity has been transposed.
|
* Called after the entity has been transposed.
|
||||||
*/
|
*/
|
||||||
public static class Post extends Ent {
|
public static class Post extends Ent
|
||||||
|
{
|
||||||
|
|
||||||
public Post(Entity entity, World initialWorld, BlockPos initialBlockPos, World finalWorld, BlockPos finalBlockPos) {
|
public Post(Entity entity, World initialWorld, BlockPos initialBlockPos, World finalWorld, BlockPos finalBlockPos)
|
||||||
|
{
|
||||||
super(entity, initialWorld, initialBlockPos, finalWorld, finalBlockPos);
|
super(entity, initialWorld, initialBlockPos, finalWorld, finalBlockPos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,24 +11,27 @@ import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Marks blocks as one that is documented.
|
* Marks blocks as one that is documented.
|
||||||
*
|
*
|
||||||
* This documentation can be read by an {@link WayofTime.bloodmagic.item.ItemSanguineBook} (or child)
|
* This documentation can be read by an
|
||||||
|
* {@link WayofTime.bloodmagic.item.ItemSanguineBook} (or child)
|
||||||
*/
|
*/
|
||||||
public interface IDocumentedBlock
|
public interface IDocumentedBlock
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Provides the documentation to provide to the player. Usually a short'n'sweet description about basic usage.
|
* Provides the documentation to provide to the player. Usually a
|
||||||
*
|
* short'n'sweet description about basic usage.
|
||||||
|
*
|
||||||
* @param player
|
* @param player
|
||||||
* - The EntityPlayer attempting to view the Documentation.
|
* - The EntityPlayer attempting to view the Documentation.
|
||||||
* @param world
|
* @param world
|
||||||
* - The World interaction is happening in.
|
* - The World interaction is happening in.
|
||||||
* @param pos
|
* @param pos
|
||||||
* - The BlockPos being interacted at.
|
* - The BlockPos being interacted at.
|
||||||
* @param state
|
* @param state
|
||||||
* - The IBlockState of the interacted Block.
|
* - The IBlockState of the interacted Block.
|
||||||
*
|
*
|
||||||
* @return - A list of formatted ITextComponent to provide to the player. Provide an empty list if there is no available documentation.
|
* @return - A list of formatted ITextComponent to provide to the player.
|
||||||
|
* Provide an empty list if there is no available documentation.
|
||||||
*/
|
*/
|
||||||
@Nonnull
|
@Nonnull
|
||||||
List<ITextComponent> getDocumentation(EntityPlayer player, World world, BlockPos pos, IBlockState state);
|
List<ITextComponent> getDocumentation(EntityPlayer player, World world, BlockPos pos, IBlockState state);
|
||||||
|
|
|
@ -19,7 +19,8 @@ public enum EnumRuneType implements IStringSerializable
|
||||||
|
|
||||||
public final TextFormatting colorCode;
|
public final TextFormatting colorCode;
|
||||||
|
|
||||||
EnumRuneType(TextFormatting colorCode) {
|
EnumRuneType(TextFormatting colorCode)
|
||||||
|
{
|
||||||
this.colorCode = colorCode;
|
this.colorCode = colorCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,8 @@ public class BlockPhantom extends BlockContainer implements IVariantProvider
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public boolean shouldSideBeRendered(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) {
|
public boolean shouldSideBeRendered(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side)
|
||||||
|
{
|
||||||
return world.getBlockState(pos.offset(side)) != state || state.getBlock() != this && super.shouldSideBeRendered(state, world, pos, side);
|
return world.getBlockState(pos.offset(side)) != state || state.getBlock() != this && super.shouldSideBeRendered(state, world, pos, side);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,8 @@ public class BlockSpectral extends BlockContainer implements IVariantProvider
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public boolean shouldSideBeRendered(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) {
|
public boolean shouldSideBeRendered(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side)
|
||||||
|
{
|
||||||
return world.getBlockState(pos.offset(side)) != state || state.getBlock() != this && super.shouldSideBeRendered(state, world, pos, side);
|
return world.getBlockState(pos.offset(side)) != state || state.getBlock() != this && super.shouldSideBeRendered(state, world, pos, side);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,8 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
public abstract class HUDElement {
|
public abstract class HUDElement
|
||||||
|
{
|
||||||
|
|
||||||
private int xOffset;
|
private int xOffset;
|
||||||
private int yOffset;
|
private int yOffset;
|
||||||
|
@ -20,7 +21,8 @@ public abstract class HUDElement {
|
||||||
private final int yOffsetDefault;
|
private final int yOffsetDefault;
|
||||||
private final RenderGameOverlayEvent.ElementType elementType;
|
private final RenderGameOverlayEvent.ElementType elementType;
|
||||||
|
|
||||||
public HUDElement(int xOffset, int yOffset, RenderGameOverlayEvent.ElementType elementType) {
|
public HUDElement(int xOffset, int yOffset, RenderGameOverlayEvent.ElementType elementType)
|
||||||
|
{
|
||||||
this.xOffset = xOffset;
|
this.xOffset = xOffset;
|
||||||
this.xOffsetDefault = xOffset;
|
this.xOffsetDefault = xOffset;
|
||||||
this.yOffset = yOffset;
|
this.yOffset = yOffset;
|
||||||
|
@ -34,25 +36,28 @@ public abstract class HUDElement {
|
||||||
|
|
||||||
public abstract boolean shouldRender(Minecraft minecraft);
|
public abstract boolean shouldRender(Minecraft minecraft);
|
||||||
|
|
||||||
public void onPositionChanged() {
|
public void onPositionChanged()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void resetToDefault() {
|
public void resetToDefault()
|
||||||
|
{
|
||||||
this.xOffset = xOffsetDefault;
|
this.xOffset = xOffsetDefault;
|
||||||
this.yOffset = yOffsetDefault;
|
this.yOffset = yOffsetDefault;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void drawTexturedModalRect(int x, int y, int textureX, int textureY, int width, int height) {
|
public void drawTexturedModalRect(int x, int y, int textureX, int textureY, int width, int height)
|
||||||
|
{
|
||||||
float f = 0.00390625F;
|
float f = 0.00390625F;
|
||||||
float f1 = 0.00390625F;
|
float f1 = 0.00390625F;
|
||||||
Tessellator tessellator = Tessellator.getInstance();
|
Tessellator tessellator = Tessellator.getInstance();
|
||||||
VertexBuffer vertexbuffer = tessellator.getBuffer();
|
VertexBuffer vertexbuffer = tessellator.getBuffer();
|
||||||
vertexbuffer.begin(7, DefaultVertexFormats.POSITION_TEX);
|
vertexbuffer.begin(7, DefaultVertexFormats.POSITION_TEX);
|
||||||
vertexbuffer.pos((double)(x + 0), (double)(y + height), 0).tex((double)((float)(textureX + 0) * f), (double)((float)(textureY + height) * f1)).endVertex();
|
vertexbuffer.pos((double) (x + 0), (double) (y + height), 0).tex((double) ((float) (textureX + 0) * f), (double) ((float) (textureY + height) * f1)).endVertex();
|
||||||
vertexbuffer.pos((double)(x + width), (double)(y + height), 0).tex((double)((float)(textureX + width) * f), (double)((float)(textureY + height) * f1)).endVertex();
|
vertexbuffer.pos((double) (x + width), (double) (y + height), 0).tex((double) ((float) (textureX + width) * f), (double) ((float) (textureY + height) * f1)).endVertex();
|
||||||
vertexbuffer.pos((double)(x + width), (double)(y + 0), 0).tex((double)((float)(textureX + width) * f), (double)((float)(textureY + 0) * f1)).endVertex();
|
vertexbuffer.pos((double) (x + width), (double) (y + 0), 0).tex((double) ((float) (textureX + width) * f), (double) ((float) (textureY + 0) * f1)).endVertex();
|
||||||
vertexbuffer.pos((double)(x + 0), (double)(y + 0), 0).tex((double)((float)(textureX + 0) * f), (double)((float)(textureY + 0) * f1)).endVertex();
|
vertexbuffer.pos((double) (x + 0), (double) (y + 0), 0).tex((double) ((float) (textureX + 0) * f), (double) ((float) (textureY + 0) * f1)).endVertex();
|
||||||
tessellator.draw();
|
tessellator.draw();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,14 +14,17 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class HUDElementHolding extends HUDElement {
|
public class HUDElementHolding extends HUDElement
|
||||||
|
{
|
||||||
|
|
||||||
public HUDElementHolding() {
|
public HUDElementHolding()
|
||||||
|
{
|
||||||
super(0, 0, RenderGameOverlayEvent.ElementType.HOTBAR);
|
super(0, 0, RenderGameOverlayEvent.ElementType.HOTBAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(Minecraft minecraft, ScaledResolution resolution, float partialTicks) {
|
public void render(Minecraft minecraft, ScaledResolution resolution, float partialTicks)
|
||||||
|
{
|
||||||
ItemStack sigilHolding = minecraft.thePlayer.getHeldItemMainhand();
|
ItemStack sigilHolding = minecraft.thePlayer.getHeldItemMainhand();
|
||||||
// TODO - Clean this mess
|
// TODO - Clean this mess
|
||||||
// Check mainhand for Sigil of Holding
|
// Check mainhand for Sigil of Holding
|
||||||
|
@ -59,7 +62,8 @@ public class HUDElementHolding extends HUDElement {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean shouldRender(Minecraft minecraft) {
|
public boolean shouldRender(Minecraft minecraft)
|
||||||
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,21 +13,26 @@ import net.minecraft.inventory.EntityEquipmentSlot;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
public class LayerBloodElytra implements LayerRenderer<AbstractClientPlayer> {
|
public class LayerBloodElytra implements LayerRenderer<AbstractClientPlayer>
|
||||||
|
{
|
||||||
|
|
||||||
private static final ResourceLocation TEXTURE_BLOOD_ELYTRA = new ResourceLocation("bloodmagic", "textures/entities/bloodElytra.png");
|
private static final ResourceLocation TEXTURE_BLOOD_ELYTRA = new ResourceLocation("bloodmagic", "textures/entities/bloodElytra.png");
|
||||||
private final RenderPlayer renderPlayer;
|
private final RenderPlayer renderPlayer;
|
||||||
private final ModelElytra modelElytra = new ModelElytra();
|
private final ModelElytra modelElytra = new ModelElytra();
|
||||||
|
|
||||||
public LayerBloodElytra(RenderPlayer renderPlayer) {
|
public LayerBloodElytra(RenderPlayer renderPlayer)
|
||||||
|
{
|
||||||
this.renderPlayer = renderPlayer;
|
this.renderPlayer = renderPlayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doRenderLayer(AbstractClientPlayer clientPlayer, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) {
|
public void doRenderLayer(AbstractClientPlayer clientPlayer, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale)
|
||||||
if (LivingArmour.hasFullSet(clientPlayer)) {
|
{
|
||||||
|
if (LivingArmour.hasFullSet(clientPlayer))
|
||||||
|
{
|
||||||
ItemStack chestStack = clientPlayer.getItemStackFromSlot(EntityEquipmentSlot.CHEST);
|
ItemStack chestStack = clientPlayer.getItemStackFromSlot(EntityEquipmentSlot.CHEST);
|
||||||
if (ItemLivingArmour.hasUpgrade(Constants.Mod.MODID + ".upgrade.elytra", chestStack)) {
|
if (ItemLivingArmour.hasUpgrade(Constants.Mod.MODID + ".upgrade.elytra", chestStack))
|
||||||
|
{
|
||||||
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
|
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
|
||||||
GlStateManager.enableBlend();
|
GlStateManager.enableBlend();
|
||||||
|
|
||||||
|
@ -47,7 +52,8 @@ public class LayerBloodElytra implements LayerRenderer<AbstractClientPlayer> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean shouldCombineTextures() {
|
public boolean shouldCombineTextures()
|
||||||
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,24 +153,24 @@ public class RenderAltar extends TileEntitySpecialRenderer<TileAltar>
|
||||||
|
|
||||||
switch (altarComponent.getComponent())
|
switch (altarComponent.getComponent())
|
||||||
{
|
{
|
||||||
case BLOODRUNE:
|
case BLOODRUNE:
|
||||||
texture = ClientHandler.blankBloodRune;
|
texture = ClientHandler.blankBloodRune;
|
||||||
break;
|
break;
|
||||||
case NOTAIR:
|
case NOTAIR:
|
||||||
texture = ClientHandler.stoneBrick;
|
texture = ClientHandler.stoneBrick;
|
||||||
break;
|
break;
|
||||||
case GLOWSTONE:
|
case GLOWSTONE:
|
||||||
texture = ClientHandler.glowstone;
|
texture = ClientHandler.glowstone;
|
||||||
break;
|
break;
|
||||||
case BLOODSTONE:
|
case BLOODSTONE:
|
||||||
texture = ClientHandler.bloodStoneBrick;
|
texture = ClientHandler.bloodStoneBrick;
|
||||||
break;
|
break;
|
||||||
case BEACON:
|
case BEACON:
|
||||||
texture = ClientHandler.beacon;
|
texture = ClientHandler.beacon;
|
||||||
break;
|
break;
|
||||||
case CRYSTAL:
|
case CRYSTAL:
|
||||||
texture = ClientHandler.crystalCluster;
|
texture = ClientHandler.crystalCluster;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderFakeBlocks.drawFakeBlock(texture, minX, minY, minZ, world);
|
RenderFakeBlocks.drawFakeBlock(texture, minX, minY, minZ, world);
|
||||||
|
|
|
@ -50,24 +50,28 @@ public class SubCommandNetwork extends SubCommandBase
|
||||||
{
|
{
|
||||||
EntityPlayer player = CommandBase.getPlayer(server, commandSender, args[1]);
|
EntityPlayer player = CommandBase.getPlayer(server, commandSender, args[1]);
|
||||||
|
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
ValidCommands command = ValidCommands.valueOf(args[0].toUpperCase(Locale.ENGLISH));
|
ValidCommands command = ValidCommands.valueOf(args[0].toUpperCase(Locale.ENGLISH));
|
||||||
command.run(player, commandSender, isBounded(0, 2, args.length), args);
|
command.run(player, commandSender, isBounded(0, 2, args.length), args);
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e)
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
} catch (PlayerNotFoundException e)
|
} catch (PlayerNotFoundException e)
|
||||||
{
|
{
|
||||||
displayErrorString(commandSender, e.getLocalizedMessage());
|
displayErrorString(commandSender, e.getLocalizedMessage());
|
||||||
}
|
}
|
||||||
} else {
|
} else
|
||||||
|
{
|
||||||
displayErrorString(commandSender, "commands.error.arg.missing");
|
displayErrorString(commandSender, "commands.error.arg.missing");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private enum ValidCommands
|
private enum ValidCommands
|
||||||
{
|
{
|
||||||
SYPHON("commands.network.syphon.help") {
|
SYPHON("commands.network.syphon.help")
|
||||||
|
{
|
||||||
@Override
|
@Override
|
||||||
public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args)
|
public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args)
|
||||||
{
|
{
|
||||||
|
@ -94,7 +98,8 @@ public class SubCommandNetwork extends SubCommandBase
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ADD("commands.network.add.help") {
|
ADD("commands.network.add.help")
|
||||||
|
{
|
||||||
@Override
|
@Override
|
||||||
public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args)
|
public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args)
|
||||||
{
|
{
|
||||||
|
@ -123,7 +128,8 @@ public class SubCommandNetwork extends SubCommandBase
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
SET("commands.network.set.help") {
|
SET("commands.network.set.help")
|
||||||
|
{
|
||||||
@Override
|
@Override
|
||||||
public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args)
|
public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args)
|
||||||
{
|
{
|
||||||
|
@ -152,7 +158,8 @@ public class SubCommandNetwork extends SubCommandBase
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
GET("commands.network.get.help") {
|
GET("commands.network.get.help")
|
||||||
|
{
|
||||||
@Override
|
@Override
|
||||||
public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args)
|
public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args)
|
||||||
{
|
{
|
||||||
|
@ -169,9 +176,11 @@ public class SubCommandNetwork extends SubCommandBase
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
FILL("commands.network.fill.help") {
|
FILL("commands.network.fill.help")
|
||||||
|
{
|
||||||
@Override
|
@Override
|
||||||
public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args) {
|
public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args)
|
||||||
|
{
|
||||||
if (displayHelp)
|
if (displayHelp)
|
||||||
{
|
{
|
||||||
displayHelpString(sender, this.help, Integer.MAX_VALUE);
|
displayHelpString(sender, this.help, Integer.MAX_VALUE);
|
||||||
|
@ -187,9 +196,11 @@ public class SubCommandNetwork extends SubCommandBase
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
CAP("commands.network.cap.help") {
|
CAP("commands.network.cap.help")
|
||||||
|
{
|
||||||
@Override
|
@Override
|
||||||
public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args) {
|
public void run(EntityPlayer player, ICommandSender sender, boolean displayHelp, String... args)
|
||||||
|
{
|
||||||
if (displayHelp)
|
if (displayHelp)
|
||||||
{
|
{
|
||||||
displayHelpString(sender, this.help);
|
displayHelpString(sender, this.help);
|
||||||
|
|
|
@ -14,8 +14,6 @@ public class CategoryAlchemy
|
||||||
Map<ResourceLocation, EntryAbstract> entries = new LinkedHashMap<ResourceLocation, EntryAbstract>();
|
Map<ResourceLocation, EntryAbstract> entries = new LinkedHashMap<ResourceLocation, EntryAbstract>();
|
||||||
String keyBase = Constants.Mod.DOMAIN + "alchemy_";
|
String keyBase = Constants.Mod.DOMAIN + "alchemy_";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return entries;
|
return entries;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,8 +15,6 @@ public class CategorySpell
|
||||||
Map<ResourceLocation, EntryAbstract> entries = new LinkedHashMap<ResourceLocation, EntryAbstract>();
|
Map<ResourceLocation, EntryAbstract> entries = new LinkedHashMap<ResourceLocation, EntryAbstract>();
|
||||||
String keyBase = Constants.Mod.DOMAIN + "spell_";
|
String keyBase = Constants.Mod.DOMAIN + "spell_";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return entries;
|
return entries;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,19 +16,23 @@ import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class EntryText extends EntryResourceLocation {
|
public class EntryText extends EntryResourceLocation
|
||||||
|
{
|
||||||
|
|
||||||
public EntryText(List<IPage> pageList, String unlocEntryName, boolean unicode) {
|
public EntryText(List<IPage> pageList, String unlocEntryName, boolean unicode)
|
||||||
|
{
|
||||||
super(pageList, unlocEntryName, new ResourceLocation("bloodmagicguide", "textures/gui/bullet_point.png"), unicode);
|
super(pageList, unlocEntryName, new ResourceLocation("bloodmagicguide", "textures/gui/bullet_point.png"), unicode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public EntryText(List<IPage> pageList, String unlocEntryName) {
|
public EntryText(List<IPage> pageList, String unlocEntryName)
|
||||||
|
{
|
||||||
this(pageList, unlocEntryName, false);
|
this(pageList, unlocEntryName, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public void drawExtras(Book book, CategoryAbstract category, int entryX, int entryY, int entryWidth, int entryHeight, int mouseX, int mouseY, GuiBase guiBase, FontRenderer fontRendererObj) {
|
public void drawExtras(Book book, CategoryAbstract category, int entryX, int entryY, int entryWidth, int entryHeight, int mouseX, int mouseY, GuiBase guiBase, FontRenderer fontRendererObj)
|
||||||
|
{
|
||||||
Minecraft.getMinecraft().getTextureManager().bindTexture(image);
|
Minecraft.getMinecraft().getTextureManager().bindTexture(image);
|
||||||
GuiHelper.drawSizedIconWithoutColor(entryX + 4, entryY + 2, 8, 8, 1F);
|
GuiHelper.drawSizedIconWithoutColor(entryX + 4, entryY + 2, 8, 8, 1F);
|
||||||
|
|
||||||
|
@ -42,7 +46,8 @@ public class EntryText extends EntryResourceLocation {
|
||||||
if (strWidth > guiBase.xSize - 80 && strWidth > fontRendererObj.getStringWidth("..."))
|
if (strWidth > guiBase.xSize - 80 && strWidth > fontRendererObj.getStringWidth("..."))
|
||||||
cutString = true;
|
cutString = true;
|
||||||
|
|
||||||
if (GuiHelper.isMouseBetween(mouseX, mouseY, entryX, entryY, entryWidth, entryHeight) && cutString) {
|
if (GuiHelper.isMouseBetween(mouseX, mouseY, entryX, entryY, entryWidth, entryHeight) && cutString)
|
||||||
|
{
|
||||||
|
|
||||||
guiBase.drawHoveringText(Collections.singletonList(getLocalizedName()), entryX, entryY + 12);
|
guiBase.drawHoveringText(Collections.singletonList(getLocalizedName()), entryX, entryY + 12);
|
||||||
fontRendererObj.setUnicodeFlag(unicode);
|
fontRendererObj.setUnicodeFlag(unicode);
|
||||||
|
|
|
@ -31,21 +31,24 @@ public class OrbRecipeRenderer implements IRecipeRenderer
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(Book book, CategoryAbstract category, EntryAbstract entry, int guiLeft, int guiTop, int mouseX, int mouseY, GuiBase guiBase, FontRenderer fontRenderer) {
|
public void draw(Book book, CategoryAbstract category, EntryAbstract entry, int guiLeft, int guiTop, int mouseX, int mouseY, GuiBase guiBase, FontRenderer fontRenderer)
|
||||||
|
{
|
||||||
Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("gudieapi", "textures/gui/recipe_elements.png"));
|
Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("gudieapi", "textures/gui/recipe_elements.png"));
|
||||||
guiBase.drawTexturedModalRect(guiLeft + 42, guiTop + 53, 0, 0, 105, 65);
|
guiBase.drawTexturedModalRect(guiLeft + 42, guiTop + 53, 0, 0, 105, 65);
|
||||||
|
|
||||||
guiBase.drawCenteredString(fontRenderer, TextHelper.localize("text.recipe.shapedOrb"), guiLeft + guiBase.xSize / 2, guiTop + 12, 0);
|
guiBase.drawCenteredString(fontRenderer, TextHelper.localize("text.recipe.shapedOrb"), guiLeft + guiBase.xSize / 2, guiTop + 12, 0);
|
||||||
if(recipe instanceof ShapelessBloodOrbRecipe)
|
if (recipe instanceof ShapelessBloodOrbRecipe)
|
||||||
{
|
{
|
||||||
ShapelessBloodOrbRecipe shapelessBloodOrbRecipe = (ShapelessBloodOrbRecipe) recipe;
|
ShapelessBloodOrbRecipe shapelessBloodOrbRecipe = (ShapelessBloodOrbRecipe) recipe;
|
||||||
List<Object> list = shapelessBloodOrbRecipe.getInput();
|
List<Object> list = shapelessBloodOrbRecipe.getInput();
|
||||||
|
|
||||||
int width = 3;
|
int width = 3;
|
||||||
int height = 3;
|
int height = 3;
|
||||||
for (int y = 0; y < height; y++) {
|
for (int y = 0; y < height; y++)
|
||||||
for (int x = 0; x < width; x++) {
|
{
|
||||||
if(list.size() - 1 < y * width + x)
|
for (int x = 0; x < width; x++)
|
||||||
|
{
|
||||||
|
if (list.size() - 1 < y * width + x)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -54,21 +57,29 @@ public class OrbRecipeRenderer implements IRecipeRenderer
|
||||||
int stackY = (y + 1) * 18 + (guiTop + guiBase.ySize / 5);
|
int stackY = (y + 1) * 18 + (guiTop + guiBase.ySize / 5);
|
||||||
|
|
||||||
Object component = list.get(y * width + x);
|
Object component = list.get(y * width + x);
|
||||||
if (component != null) {
|
if (component != null)
|
||||||
if (component instanceof ItemStack) {
|
{
|
||||||
|
if (component instanceof ItemStack)
|
||||||
|
{
|
||||||
GuiHelper.drawItemStack((ItemStack) component, stackX, stackY);
|
GuiHelper.drawItemStack((ItemStack) component, stackX, stackY);
|
||||||
if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15)) {
|
if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15))
|
||||||
|
{
|
||||||
guiBase.renderToolTip((ItemStack) component, stackX, stackY);
|
guiBase.renderToolTip((ItemStack) component, stackX, stackY);
|
||||||
}
|
}
|
||||||
} else if (component instanceof Integer) {
|
} else if (component instanceof Integer)
|
||||||
|
{
|
||||||
GuiHelper.drawItemStack(OrbRegistry.getOrbsForTier((Integer) component).get(0), stackX, stackY);
|
GuiHelper.drawItemStack(OrbRegistry.getOrbsForTier((Integer) component).get(0), stackX, stackY);
|
||||||
if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15)) {
|
if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15))
|
||||||
|
{
|
||||||
guiBase.renderToolTip(OrbRegistry.getOrbsForTier((Integer) component).get(0), stackX, stackY);
|
guiBase.renderToolTip(OrbRegistry.getOrbsForTier((Integer) component).get(0), stackX, stackY);
|
||||||
}
|
}
|
||||||
} else {
|
} else
|
||||||
if (((ArrayList<ItemStack>) component).isEmpty()) return;
|
{
|
||||||
|
if (((ArrayList<ItemStack>) component).isEmpty())
|
||||||
|
return;
|
||||||
GuiHelper.drawItemStack(((ArrayList<ItemStack>) component).get(0), stackX, stackY);
|
GuiHelper.drawItemStack(((ArrayList<ItemStack>) component).get(0), stackX, stackY);
|
||||||
if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15)) {
|
if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15))
|
||||||
|
{
|
||||||
guiBase.renderToolTip(((ArrayList<ItemStack>) component).get(0), stackX, stackY);
|
guiBase.renderToolTip(((ArrayList<ItemStack>) component).get(0), stackX, stackY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -78,34 +89,45 @@ public class OrbRecipeRenderer implements IRecipeRenderer
|
||||||
int outputX = (5 * 18) + (guiLeft + guiBase.xSize / 7);
|
int outputX = (5 * 18) + (guiLeft + guiBase.xSize / 7);
|
||||||
int outputY = (2 * 18) + (guiTop + guiBase.xSize / 5);
|
int outputY = (2 * 18) + (guiTop + guiBase.xSize / 5);
|
||||||
GuiHelper.drawItemStack(shapelessBloodOrbRecipe.getRecipeOutput(), outputX, outputY);
|
GuiHelper.drawItemStack(shapelessBloodOrbRecipe.getRecipeOutput(), outputX, outputY);
|
||||||
if (GuiHelper.isMouseBetween(mouseX, mouseY, outputX, outputY, 15, 15)) {
|
if (GuiHelper.isMouseBetween(mouseX, mouseY, outputX, outputY, 15, 15))
|
||||||
|
{
|
||||||
guiBase.renderToolTip(shapelessBloodOrbRecipe.getRecipeOutput(), outputX, outputY);
|
guiBase.renderToolTip(shapelessBloodOrbRecipe.getRecipeOutput(), outputX, outputY);
|
||||||
}
|
}
|
||||||
}else if (recipe instanceof ShapedBloodOrbRecipe)
|
} else if (recipe instanceof ShapedBloodOrbRecipe)
|
||||||
{
|
{
|
||||||
ShapedBloodOrbRecipe shapedBloodOrbRecipe = (ShapedBloodOrbRecipe) recipe;
|
ShapedBloodOrbRecipe shapedBloodOrbRecipe = (ShapedBloodOrbRecipe) recipe;
|
||||||
int width = ReflectionHelper.getPrivateValue(ShapedBloodOrbRecipe.class, shapedBloodOrbRecipe, 4);
|
int width = ReflectionHelper.getPrivateValue(ShapedBloodOrbRecipe.class, shapedBloodOrbRecipe, 4);
|
||||||
int height = ReflectionHelper.getPrivateValue(ShapedBloodOrbRecipe.class, shapedBloodOrbRecipe, 5);
|
int height = ReflectionHelper.getPrivateValue(ShapedBloodOrbRecipe.class, shapedBloodOrbRecipe, 5);
|
||||||
for (int y = 0; y < height; y++) {
|
for (int y = 0; y < height; y++)
|
||||||
for (int x = 0; x < width; x++) {
|
{
|
||||||
|
for (int x = 0; x < width; x++)
|
||||||
|
{
|
||||||
int stackX = (x + 1) * 18 + (guiLeft + guiBase.xSize / 7);
|
int stackX = (x + 1) * 18 + (guiLeft + guiBase.xSize / 7);
|
||||||
int stackY = (y + 1) * 18 + (guiTop + guiBase.ySize / 5);
|
int stackY = (y + 1) * 18 + (guiTop + guiBase.ySize / 5);
|
||||||
Object component = shapedBloodOrbRecipe.getInput()[y * width + x];
|
Object component = shapedBloodOrbRecipe.getInput()[y * width + x];
|
||||||
if (component != null) {
|
if (component != null)
|
||||||
if (component instanceof ItemStack) {
|
{
|
||||||
|
if (component instanceof ItemStack)
|
||||||
|
{
|
||||||
GuiHelper.drawItemStack((ItemStack) component, stackX, stackY);
|
GuiHelper.drawItemStack((ItemStack) component, stackX, stackY);
|
||||||
if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15)) {
|
if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15))
|
||||||
|
{
|
||||||
guiBase.renderToolTip((ItemStack) component, stackX, stackY);
|
guiBase.renderToolTip((ItemStack) component, stackX, stackY);
|
||||||
}
|
}
|
||||||
} else if (component instanceof Integer) {
|
} else if (component instanceof Integer)
|
||||||
|
{
|
||||||
GuiHelper.drawItemStack(OrbRegistry.getOrbsForTier((Integer) component).get(0), stackX, stackY);
|
GuiHelper.drawItemStack(OrbRegistry.getOrbsForTier((Integer) component).get(0), stackX, stackY);
|
||||||
if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15)) {
|
if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15))
|
||||||
|
{
|
||||||
guiBase.renderToolTip(OrbRegistry.getOrbsForTier((Integer) component).get(0), stackX, stackY);
|
guiBase.renderToolTip(OrbRegistry.getOrbsForTier((Integer) component).get(0), stackX, stackY);
|
||||||
}
|
}
|
||||||
} else {
|
} else
|
||||||
if (((ArrayList<ItemStack>) component).isEmpty()) return;
|
{
|
||||||
|
if (((ArrayList<ItemStack>) component).isEmpty())
|
||||||
|
return;
|
||||||
GuiHelper.drawItemStack(((ArrayList<ItemStack>) component).get(0), stackX, stackY);
|
GuiHelper.drawItemStack(((ArrayList<ItemStack>) component).get(0), stackX, stackY);
|
||||||
if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15)) {
|
if (GuiHelper.isMouseBetween(mouseX, mouseY, stackX, stackY, 15, 15))
|
||||||
|
{
|
||||||
guiBase.renderToolTip(((ArrayList<ItemStack>) component).get(0), stackX, stackY);
|
guiBase.renderToolTip(((ArrayList<ItemStack>) component).get(0), stackX, stackY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -115,14 +137,16 @@ public class OrbRecipeRenderer implements IRecipeRenderer
|
||||||
int outputX = (5 * 18) + (guiLeft + guiBase.xSize / 7);
|
int outputX = (5 * 18) + (guiLeft + guiBase.xSize / 7);
|
||||||
int outputY = (2 * 18) + (guiTop + guiBase.xSize / 5);
|
int outputY = (2 * 18) + (guiTop + guiBase.xSize / 5);
|
||||||
GuiHelper.drawItemStack(shapedBloodOrbRecipe.getRecipeOutput(), outputX, outputY);
|
GuiHelper.drawItemStack(shapedBloodOrbRecipe.getRecipeOutput(), outputX, outputY);
|
||||||
if (GuiHelper.isMouseBetween(mouseX, mouseY, outputX, outputY, 15, 15)) {
|
if (GuiHelper.isMouseBetween(mouseX, mouseY, outputX, outputY, 15, 15))
|
||||||
|
{
|
||||||
guiBase.renderToolTip(shapedBloodOrbRecipe.getRecipeOutput(), outputX, outputY);
|
guiBase.renderToolTip(shapedBloodOrbRecipe.getRecipeOutput(), outputX, outputY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawExtras(Book book, CategoryAbstract category, EntryAbstract entry, int guiLeft, int guiTop, int mouseX, int mouseY, GuiBase guiBase, FontRenderer fontRenderer) {
|
public void drawExtras(Book book, CategoryAbstract category, EntryAbstract entry, int guiLeft, int guiTop, int mouseX, int mouseY, GuiBase guiBase, FontRenderer fontRenderer)
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,7 +120,8 @@ public class DataProviderBloodAltar implements IWailaDataProvider
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean holdingSeerSigil(EntityPlayer player) {
|
private static boolean holdingSeerSigil(EntityPlayer player)
|
||||||
|
{
|
||||||
if (player.getHeldItemMainhand() != null && player.getHeldItemMainhand().getItem() instanceof ItemSigilSeer)
|
if (player.getHeldItemMainhand() != null && player.getHeldItemMainhand().getItem() instanceof ItemSigilSeer)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -130,7 +131,8 @@ public class DataProviderBloodAltar implements IWailaDataProvider
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean holdingDivinationSigil(EntityPlayer player) {
|
private static boolean holdingDivinationSigil(EntityPlayer player)
|
||||||
|
{
|
||||||
if (player.getHeldItemMainhand() != null && player.getHeldItemMainhand().getItem() instanceof ItemSigilDivination)
|
if (player.getHeldItemMainhand() != null && player.getHeldItemMainhand().getItem() instanceof ItemSigilDivination)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
|
@ -92,7 +92,6 @@ public class ItemBoundShovel extends ItemBoundTool implements IMeshProvider
|
||||||
if (MinecraftForge.EVENT_BUS.post(event) || event.getResult() == Event.Result.DENY)
|
if (MinecraftForge.EVENT_BUS.post(event) || event.getResult() == Event.Result.DENY)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
||||||
if (blockStack.getBlock() != null && blockStack.getBlock().getBlockHardness(blockStack.getState(), world, blockPos) != -1)
|
if (blockStack.getBlock() != null && blockStack.getBlock().getBlockHardness(blockStack.getState(), world, blockPos) != -1)
|
||||||
{
|
{
|
||||||
float strengthVsBlock = getStrVsBlock(stack, blockStack.getState());
|
float strengthVsBlock = getStrVsBlock(stack, blockStack.getState());
|
||||||
|
|
|
@ -90,7 +90,7 @@ public class ItemRitualDiviner extends Item implements IVariantProvider
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a single rune to the ritual.
|
* Adds a single rune to the ritual.
|
||||||
*
|
*
|
||||||
* @param stack
|
* @param stack
|
||||||
* - The Ritual Diviner stack
|
* - The Ritual Diviner stack
|
||||||
* @param world
|
* @param world
|
||||||
|
@ -99,7 +99,7 @@ public class ItemRitualDiviner extends Item implements IVariantProvider
|
||||||
* - Block Position of the MRS.
|
* - Block Position of the MRS.
|
||||||
* @param player
|
* @param player
|
||||||
* - The Player attempting to place the ritual
|
* - The Player attempting to place the ritual
|
||||||
*
|
*
|
||||||
* @return - True if a rune was successfully added
|
* @return - True if a rune was successfully added
|
||||||
*/
|
*/
|
||||||
public boolean addRuneToRitual(ItemStack stack, World world, BlockPos pos, EntityPlayer player)
|
public boolean addRuneToRitual(ItemStack stack, World world, BlockPos pos, EntityPlayer player)
|
||||||
|
@ -413,7 +413,7 @@ public class ItemRitualDiviner extends Item implements IVariantProvider
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cycles the selected ritual to the next available ritual that is enabled.
|
* Cycles the selected ritual to the next available ritual that is enabled.
|
||||||
*
|
*
|
||||||
* @param stack
|
* @param stack
|
||||||
* - The ItemStack of the ritual diviner
|
* - The ItemStack of the ritual diviner
|
||||||
* @param player
|
* @param player
|
||||||
|
@ -466,7 +466,7 @@ public class ItemRitualDiviner extends Item implements IVariantProvider
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Does the same as cycleRitual but instead cycles backwards.
|
* Does the same as cycleRitual but instead cycles backwards.
|
||||||
*
|
*
|
||||||
* @param stack
|
* @param stack
|
||||||
* @param player
|
* @param player
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -477,7 +477,8 @@ public class ItemLivingArmour extends ItemArmor implements ISpecialArmor, IMeshP
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasUpgrade(String id, ItemStack stack) {
|
public static boolean hasUpgrade(String id, ItemStack stack)
|
||||||
|
{
|
||||||
if (!armourMap.containsKey(stack))
|
if (!armourMap.containsKey(stack))
|
||||||
armourMap.put(stack, getLivingArmour(stack));
|
armourMap.put(stack, getLivingArmour(stack));
|
||||||
|
|
||||||
|
|
|
@ -41,8 +41,7 @@ public class ContainerHolding extends Container
|
||||||
if (actionBarIndex == currentSlotHeldIn)
|
if (actionBarIndex == currentSlotHeldIn)
|
||||||
{
|
{
|
||||||
this.addSlotToContainer(new SlotDisabled(player.inventory, actionBarIndex, 8 + actionBarIndex * 18, 99));
|
this.addSlotToContainer(new SlotDisabled(player.inventory, actionBarIndex, 8 + actionBarIndex * 18, 99));
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
{
|
{
|
||||||
this.addSlotToContainer(new Slot(player.inventory, actionBarIndex, 8 + actionBarIndex * 18, 99));
|
this.addSlotToContainer(new Slot(player.inventory, actionBarIndex, 8 + actionBarIndex * 18, 99));
|
||||||
}
|
}
|
||||||
|
@ -97,13 +96,11 @@ public class ContainerHolding extends Container
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
} else if (!this.mergeItemStack(stackInSlot, 0, ItemSigilHolding.inventorySize, false))
|
||||||
else if (!this.mergeItemStack(stackInSlot, 0, ItemSigilHolding.inventorySize, false))
|
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
} else if (stack.getItem() instanceof ItemSigilHolding)
|
||||||
else if (stack.getItem() instanceof ItemSigilHolding)
|
|
||||||
{
|
{
|
||||||
if (slotIndex < ItemSigilHolding.inventorySize + (PLAYER_INVENTORY_ROWS * PLAYER_INVENTORY_COLUMNS))
|
if (slotIndex < ItemSigilHolding.inventorySize + (PLAYER_INVENTORY_ROWS * PLAYER_INVENTORY_COLUMNS))
|
||||||
{
|
{
|
||||||
|
@ -111,8 +108,7 @@ public class ContainerHolding extends Container
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
} else if (!this.mergeItemStack(stackInSlot, ItemSigilHolding.inventorySize, ItemSigilHolding.inventorySize + (PLAYER_INVENTORY_ROWS * PLAYER_INVENTORY_COLUMNS), false))
|
||||||
else if (!this.mergeItemStack(stackInSlot, ItemSigilHolding.inventorySize, ItemSigilHolding.inventorySize + (PLAYER_INVENTORY_ROWS * PLAYER_INVENTORY_COLUMNS), false))
|
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -226,7 +226,8 @@ public class ItemSigilHolding extends ItemSigilBase implements IKeybindable, IAl
|
||||||
ItemStack[] itemStacks = getInternalInventory(itemStack);
|
ItemStack[] itemStacks = getInternalInventory(itemStack);
|
||||||
if (itemStacks != null)
|
if (itemStacks != null)
|
||||||
return itemStacks[slot == 5 ? 4 : slot];
|
return itemStacks[slot == 5 ? 4 : slot];
|
||||||
else return null;
|
else
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -301,8 +302,7 @@ public class ItemSigilHolding extends ItemSigilBase implements IKeybindable, IAl
|
||||||
index = next(index);
|
index = next(index);
|
||||||
currentItemStack = getItemStackInSlot(itemStack, index);
|
currentItemStack = getItemStackInSlot(itemStack, index);
|
||||||
}
|
}
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
{
|
{
|
||||||
index = prev(currentIndex);
|
index = prev(currentIndex);
|
||||||
currentItemStack = getItemStackInSlot(itemStack, index);
|
currentItemStack = getItemStackInSlot(itemStack, index);
|
||||||
|
@ -320,7 +320,8 @@ public class ItemSigilHolding extends ItemSigilBase implements IKeybindable, IAl
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Pair<Integer, String>> getVariants() {
|
public List<Pair<Integer, String>> getVariants()
|
||||||
|
{
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,24 +90,23 @@ public class ClientProxy extends CommonProxy
|
||||||
@Override
|
@Override
|
||||||
public void init()
|
public void init()
|
||||||
{
|
{
|
||||||
Minecraft.getMinecraft().getItemColors().registerItemColorHandler(
|
Minecraft.getMinecraft().getItemColors().registerItemColorHandler(new IItemColor()
|
||||||
new IItemColor()
|
{
|
||||||
|
@Override
|
||||||
|
public int getColorFromItemstack(ItemStack stack, int tintIndex)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
@Override
|
if (stack.hasTagCompound() && stack.getTagCompound().hasKey(Constants.NBT.COLOR))
|
||||||
public int getColorFromItemstack(ItemStack stack, int tintIndex)
|
if (tintIndex == 1)
|
||||||
{
|
return Color.decode(stack.getTagCompound().getString(Constants.NBT.COLOR)).getRGB();
|
||||||
try {
|
} catch (NumberFormatException e)
|
||||||
if (stack.hasTagCompound() && stack.getTagCompound().hasKey(Constants.NBT.COLOR))
|
{
|
||||||
if (tintIndex == 1)
|
return -1;
|
||||||
return Color.decode(stack.getTagCompound().getString(Constants.NBT.COLOR)).getRGB();
|
}
|
||||||
} catch (NumberFormatException e) {
|
return -1;
|
||||||
return -1;
|
}
|
||||||
}
|
}, ModItems.sigilHolding);
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ModItems.sigilHolding
|
|
||||||
);
|
|
||||||
|
|
||||||
addElytraLayer();
|
addElytraLayer();
|
||||||
}
|
}
|
||||||
|
@ -149,13 +148,16 @@ public class ClientProxy extends CommonProxy
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addElytraLayer() {
|
private void addElytraLayer()
|
||||||
|
{
|
||||||
RenderManager renderManager = Minecraft.getMinecraft().getRenderManager();
|
RenderManager renderManager = Minecraft.getMinecraft().getRenderManager();
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
RenderPlayer renderPlayer = ObfuscationReflectionHelper.getPrivateValue(RenderManager.class, renderManager, "playerRenderer", "field_178637_m");
|
RenderPlayer renderPlayer = ObfuscationReflectionHelper.getPrivateValue(RenderManager.class, renderManager, "playerRenderer", "field_178637_m");
|
||||||
renderPlayer.addLayer(new LayerBloodElytra(renderPlayer));
|
renderPlayer.addLayer(new LayerBloodElytra(renderPlayer));
|
||||||
BloodMagic.instance.getLogger().info("Elytra layer added");
|
BloodMagic.instance.getLogger().info("Elytra layer added");
|
||||||
} catch (Exception e) {
|
} catch (Exception e)
|
||||||
|
{
|
||||||
BloodMagic.instance.getLogger().error("Failed to set custom Elytra Layer for Elytra Living Armour Upgrade.");
|
BloodMagic.instance.getLogger().error("Failed to set custom Elytra Layer for Elytra Living Armour Upgrade.");
|
||||||
BloodMagic.instance.getLogger().error(e.getLocalizedMessage());
|
BloodMagic.instance.getLogger().error(e.getLocalizedMessage());
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,7 +93,8 @@ public class Utils
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String toFancyCasing(String input) {
|
public static String toFancyCasing(String input)
|
||||||
|
{
|
||||||
return String.valueOf(input.charAt(0)).toUpperCase(Locale.ENGLISH) + input.substring(1);
|
return String.valueOf(input.charAt(0)).toUpperCase(Locale.ENGLISH) + input.substring(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -731,43 +732,44 @@ public class Utils
|
||||||
{
|
{
|
||||||
spawnPos.offset(pushDirection);
|
spawnPos.offset(pushDirection);
|
||||||
|
|
||||||
switch (pushDirection) {
|
switch (pushDirection)
|
||||||
case DOWN:
|
{
|
||||||
{
|
case DOWN:
|
||||||
entityItem.motionY = -velocity;
|
{
|
||||||
entityItem.setPosition(spawnPos.getX() + 0.5D, spawnPos.getY() - 1.0D, spawnPos.getZ() + 0.5D);
|
entityItem.motionY = -velocity;
|
||||||
break;
|
entityItem.setPosition(spawnPos.getX() + 0.5D, spawnPos.getY() - 1.0D, spawnPos.getZ() + 0.5D);
|
||||||
}
|
break;
|
||||||
case UP:
|
}
|
||||||
{
|
case UP:
|
||||||
entityItem.motionY = velocity;
|
{
|
||||||
entityItem.setPosition(spawnPos.getX() + 0.5D, spawnPos.getY() + 1.0D, spawnPos.getZ() + 0.5D);
|
entityItem.motionY = velocity;
|
||||||
break;
|
entityItem.setPosition(spawnPos.getX() + 0.5D, spawnPos.getY() + 1.0D, spawnPos.getZ() + 0.5D);
|
||||||
}
|
break;
|
||||||
case NORTH:
|
}
|
||||||
{
|
case NORTH:
|
||||||
entityItem.motionZ = -velocity;
|
{
|
||||||
entityItem.setPosition(spawnPos.getX() + 0.5D, spawnPos.getY() + 0.5D, spawnPos.getZ() - 1.0D);
|
entityItem.motionZ = -velocity;
|
||||||
break;
|
entityItem.setPosition(spawnPos.getX() + 0.5D, spawnPos.getY() + 0.5D, spawnPos.getZ() - 1.0D);
|
||||||
}
|
break;
|
||||||
case SOUTH:
|
}
|
||||||
{
|
case SOUTH:
|
||||||
entityItem.motionZ = velocity;
|
{
|
||||||
entityItem.setPosition(spawnPos.getX() + 0.5D, spawnPos.getY() + 0.5D, spawnPos.getZ() + 1.0D);
|
entityItem.motionZ = velocity;
|
||||||
break;
|
entityItem.setPosition(spawnPos.getX() + 0.5D, spawnPos.getY() + 0.5D, spawnPos.getZ() + 1.0D);
|
||||||
}
|
break;
|
||||||
case WEST:
|
}
|
||||||
{
|
case WEST:
|
||||||
entityItem.motionX = -velocity;
|
{
|
||||||
entityItem.setPosition(spawnPos.getX() - 1.0D, spawnPos.getY() + 0.5D, spawnPos.getZ() + 0.5D);
|
entityItem.motionX = -velocity;
|
||||||
break;
|
entityItem.setPosition(spawnPos.getX() - 1.0D, spawnPos.getY() + 0.5D, spawnPos.getZ() + 0.5D);
|
||||||
}
|
break;
|
||||||
case EAST:
|
}
|
||||||
{
|
case EAST:
|
||||||
entityItem.motionX = velocity;
|
{
|
||||||
entityItem.setPosition(spawnPos.getX() + 1.0D, spawnPos.getY() + 0.5D, spawnPos.getZ() + 0.5D);
|
entityItem.motionX = velocity;
|
||||||
break;
|
entityItem.setPosition(spawnPos.getX() + 1.0D, spawnPos.getY() + 0.5D, spawnPos.getZ() + 0.5D);
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -918,14 +920,18 @@ public class Utils
|
||||||
return largerStack ? stack : null;
|
return largerStack ? stack : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerHandlers(Set<ASMDataTable.ASMData> eventHandlers) {
|
public static void registerHandlers(Set<ASMDataTable.ASMData> eventHandlers)
|
||||||
for (ASMDataTable.ASMData data : eventHandlers) {
|
{
|
||||||
try {
|
for (ASMDataTable.ASMData data : eventHandlers)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
Class<?> handlerClass = Class.forName(data.getClassName());
|
Class<?> handlerClass = Class.forName(data.getClassName());
|
||||||
Object handlerImpl = handlerClass.newInstance();
|
Object handlerImpl = handlerClass.newInstance();
|
||||||
MinecraftForge.EVENT_BUS.register(handlerImpl);
|
MinecraftForge.EVENT_BUS.register(handlerImpl);
|
||||||
BloodMagic.instance.getLogger().debug("Registering event handler for class {}", data.getClassName());
|
BloodMagic.instance.getLogger().debug("Registering event handler for class {}", data.getClassName());
|
||||||
} catch (Exception e) {
|
} catch (Exception e)
|
||||||
|
{
|
||||||
// No-op
|
// No-op
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,8 @@ public class IMCHandler
|
||||||
if (message.key.equals("transpositionBlacklist") && message.isItemStackMessage())
|
if (message.key.equals("transpositionBlacklist") && message.isItemStackMessage())
|
||||||
{
|
{
|
||||||
ItemStack stack = message.getItemStackValue();
|
ItemStack stack = message.getItemStackValue();
|
||||||
if (stack.getItem() instanceof ItemBlock) {
|
if (stack.getItem() instanceof ItemBlock)
|
||||||
|
{
|
||||||
Block block = Block.getBlockFromItem(stack.getItem());
|
Block block = Block.getBlockFromItem(stack.getItem());
|
||||||
BloodMagicAPI.addToTranspositionBlacklist(block, stack.getItemDamage());
|
BloodMagicAPI.addToTranspositionBlacklist(block, stack.getItemDamage());
|
||||||
}
|
}
|
||||||
|
|
|
@ -138,8 +138,7 @@ public class ClientHandler
|
||||||
renderRitualStones(mrsHoloTile, event.getPartialTicks());
|
renderRitualStones(mrsHoloTile, event.getPartialTicks());
|
||||||
else
|
else
|
||||||
ClientHandler.setRitualHolo(null, null, EnumFacing.NORTH, false);
|
ClientHandler.setRitualHolo(null, null, EnumFacing.NORTH, false);
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
{
|
{
|
||||||
ClientHandler.setRitualHolo(null, null, EnumFacing.NORTH, false);
|
ClientHandler.setRitualHolo(null, null, EnumFacing.NORTH, false);
|
||||||
}
|
}
|
||||||
|
@ -335,27 +334,27 @@ public class ClientHandler
|
||||||
|
|
||||||
switch (ritualComponent.getRuneType())
|
switch (ritualComponent.getRuneType())
|
||||||
{
|
{
|
||||||
case BLANK:
|
case BLANK:
|
||||||
texture = ritualStoneBlank;
|
texture = ritualStoneBlank;
|
||||||
break;
|
break;
|
||||||
case WATER:
|
case WATER:
|
||||||
texture = ritualStoneWater;
|
texture = ritualStoneWater;
|
||||||
break;
|
break;
|
||||||
case FIRE:
|
case FIRE:
|
||||||
texture = ritualStoneFire;
|
texture = ritualStoneFire;
|
||||||
break;
|
break;
|
||||||
case EARTH:
|
case EARTH:
|
||||||
texture = ritualStoneEarth;
|
texture = ritualStoneEarth;
|
||||||
break;
|
break;
|
||||||
case AIR:
|
case AIR:
|
||||||
texture = ritualStoneAir;
|
texture = ritualStoneAir;
|
||||||
break;
|
break;
|
||||||
case DAWN:
|
case DAWN:
|
||||||
texture = ritualStoneDawn;
|
texture = ritualStoneDawn;
|
||||||
break;
|
break;
|
||||||
case DUSK:
|
case DUSK:
|
||||||
texture = ritualStoneDusk;
|
texture = ritualStoneDusk;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderFakeBlocks.drawFakeBlock(texture, minX, minY, minZ, world);
|
RenderFakeBlocks.drawFakeBlock(texture, minX, minY, minZ, world);
|
||||||
|
|
|
@ -25,7 +25,8 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Handler
|
@Handler
|
||||||
public class CraftingHandler {
|
public class CraftingHandler
|
||||||
|
{
|
||||||
|
|
||||||
// Sets the uses of crafted Inscription Tools to 10
|
// Sets the uses of crafted Inscription Tools to 10
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
@ -42,7 +43,8 @@ public class CraftingHandler {
|
||||||
event.getOutput().getTagCompound().setInteger(Constants.NBT.USES, 10);
|
event.getOutput().getTagCompound().setInteger(Constants.NBT.USES, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.getOutput().getItem() == ForgeModContainer.getInstance().universalBucket && event.getAltarRecipe().getSyphon() == 1000) {
|
if (event.getOutput().getItem() == ForgeModContainer.getInstance().universalBucket && event.getAltarRecipe().getSyphon() == 1000)
|
||||||
|
{
|
||||||
NBTTagCompound bucketTags = UniversalBucket.getFilledBucket(ForgeModContainer.getInstance().universalBucket, BloodMagicAPI.getLifeEssence()).getTagCompound();
|
NBTTagCompound bucketTags = UniversalBucket.getFilledBucket(ForgeModContainer.getInstance().universalBucket, BloodMagicAPI.getLifeEssence()).getTagCompound();
|
||||||
event.getOutput().setTagCompound(bucketTags);
|
event.getOutput().setTagCompound(bucketTags);
|
||||||
}
|
}
|
||||||
|
@ -68,8 +70,10 @@ public class CraftingHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.getLeft().getItem() == ModItems.sigilHolding) {
|
if (event.getLeft().getItem() == ModItems.sigilHolding)
|
||||||
if (event.getRight().getItem() == Items.NAME_TAG) {
|
{
|
||||||
|
if (event.getRight().getItem() == Items.NAME_TAG)
|
||||||
|
{
|
||||||
ItemStack output = event.getLeft().copy();
|
ItemStack output = event.getLeft().copy();
|
||||||
if (!output.hasTagCompound())
|
if (!output.hasTagCompound())
|
||||||
output.setTagCompound(new NBTTagCompound());
|
output.setTagCompound(new NBTTagCompound());
|
||||||
|
@ -81,7 +85,8 @@ public class CraftingHandler {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.getRight().getItem() == Items.DYE) {
|
if (event.getRight().getItem() == Items.DYE)
|
||||||
|
{
|
||||||
EnumDyeColor dyeColor = ItemBanner.getBaseColor(event.getRight());
|
EnumDyeColor dyeColor = ItemBanner.getBaseColor(event.getRight());
|
||||||
ItemStack output = event.getLeft().copy();
|
ItemStack output = event.getLeft().copy();
|
||||||
if (!output.hasTagCompound())
|
if (!output.hasTagCompound())
|
||||||
|
|
|
@ -27,7 +27,8 @@ import net.minecraftforge.fml.common.eventhandler.EventPriority;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
|
||||||
@Handler
|
@Handler
|
||||||
public class LivingArmourHandler {
|
public class LivingArmourHandler
|
||||||
|
{
|
||||||
|
|
||||||
// Applies: Grim Reaper
|
// Applies: Grim Reaper
|
||||||
@SubscribeEvent(priority = EventPriority.HIGHEST)
|
@SubscribeEvent(priority = EventPriority.HIGHEST)
|
||||||
|
|
|
@ -17,11 +17,14 @@ import java.util.UUID;
|
||||||
|
|
||||||
// Migrates from the old data storage system to the cleaner new one
|
// Migrates from the old data storage system to the cleaner new one
|
||||||
@Handler
|
@Handler
|
||||||
public class MigrateNetworkDataHandler {
|
public class MigrateNetworkDataHandler
|
||||||
|
{
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void playerJoin(EntityJoinWorldEvent event) {
|
public void playerJoin(EntityJoinWorldEvent event)
|
||||||
if (!event.getWorld().isRemote && event.getEntity() instanceof EntityPlayer) {
|
{
|
||||||
|
if (!event.getWorld().isRemote && event.getEntity() instanceof EntityPlayer)
|
||||||
|
{
|
||||||
EntityPlayer player = (EntityPlayer) event.getEntity();
|
EntityPlayer player = (EntityPlayer) event.getEntity();
|
||||||
UUID playerId = PlayerHelper.getUUIDFromPlayer(player);
|
UUID playerId = PlayerHelper.getUUIDFromPlayer(player);
|
||||||
Stopwatch stopwatch = Stopwatch.createStarted();
|
Stopwatch stopwatch = Stopwatch.createStarted();
|
||||||
|
|
Loading…
Reference in a new issue