185 lines
6.0 KiB
Java
185 lines
6.0 KiB
Java
/*
|
|
* Minecraft Forge
|
|
* Copyright (c) 2016-2018.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation version 2.1
|
|
* of the License.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
package net.minecraftforge.debug.gameplay;
|
|
|
|
import java.awt.image.BufferedImage;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
|
|
import javax.imageio.ImageIO;
|
|
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.renderer.BannerTextures;
|
|
import net.minecraft.creativetab.CreativeTabs;
|
|
import net.minecraft.item.EnumDyeColor;
|
|
import net.minecraft.item.ItemBanner;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.nbt.NBTTagList;
|
|
import net.minecraft.tileentity.BannerPattern;
|
|
import net.minecraft.util.NonNullList;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraftforge.client.MinecraftForgeClient;
|
|
import net.minecraftforge.common.util.EnumHelper;
|
|
import net.minecraftforge.fml.common.Mod;
|
|
import net.minecraftforge.fml.common.SidedProxy;
|
|
import net.minecraftforge.fml.event.FMLPreInitializationEvent;
|
|
import net.minecraftforge.fml.relauncher.Side;
|
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
|
|
|
@Mod(modid = DynamicBannerTest.MODID, name = "ForgeDebugDynamicBanner", version = DynamicBannerTest.VERSION, acceptableRemoteVersions = "*")
|
|
public class DynamicBannerTest
|
|
{
|
|
private static final boolean ENABLE = false;
|
|
public static final String MODID = "forgedebugdynamicbanner";
|
|
public static final String VERSION = "1.0";
|
|
|
|
public static CreativeTabs bannerTab;
|
|
@SidedProxy
|
|
public static CommonProxy proxy = null;
|
|
|
|
@Mod.EventHandler
|
|
public void preInit(FMLPreInitializationEvent event)
|
|
{
|
|
if (ENABLE)
|
|
{
|
|
BannerPattern pattern = addBasicPattern("Y");
|
|
proxy.registerSupplier(new ResourceLocation("textures/entity/banner/" + pattern.getFileName() + ".png"));
|
|
proxy.registerSupplier(new ResourceLocation("textures/entity/shield/" + pattern.getFileName() + ".png"));
|
|
bannerTab = new CreativeTabBanners("dynbanner.banners");
|
|
}
|
|
}
|
|
|
|
public static abstract class CommonProxy
|
|
{
|
|
public void registerSupplier(ResourceLocation location)
|
|
{
|
|
}
|
|
}
|
|
|
|
public static final class ServerProxy extends CommonProxy
|
|
{
|
|
}
|
|
|
|
public static final class ClientProxy extends CommonProxy
|
|
{
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void registerSupplier(ResourceLocation location)
|
|
{
|
|
MinecraftForgeClient.registerImageLayerSupplier(location, () -> {
|
|
return createBufferedImage();
|
|
});
|
|
}
|
|
}
|
|
|
|
public static BannerPattern addBasicPattern(String name)
|
|
{
|
|
final Class<?>[] paramTypes = { String.class, String.class };
|
|
final Object[] paramValues = { MODID + "_" + name, MODID + "." + name };
|
|
return EnumHelper.addEnum(BannerPattern.class, name.toUpperCase(), paramTypes, paramValues);
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
private static BufferedImage createBufferedImage()
|
|
{
|
|
BufferedImage baseImage = buildBackground();
|
|
|
|
int width = 11;
|
|
int height = 30;
|
|
int startX = 5;
|
|
int startY = 5;
|
|
|
|
for (int xx = startX; xx <= startX + width; xx++)
|
|
{
|
|
for (int yy = startY; yy <= startY + height; yy++)
|
|
{
|
|
baseImage.setRGB(xx, yy, 0xFF000000); // Black
|
|
}
|
|
}
|
|
return baseImage;
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
private static BufferedImage buildBackground()
|
|
{
|
|
ResourceLocation originalBackground = BannerTextures.BANNER_BASE_TEXTURE;
|
|
try (InputStream is = Minecraft.getMinecraft().getResourceManager().getResource(originalBackground).getInputStream())
|
|
{
|
|
return ImageIO.read(is);
|
|
}
|
|
catch (IOException exc)
|
|
{
|
|
throw new RuntimeException("Couldn't find or open the page background image.", exc);
|
|
}
|
|
}
|
|
|
|
public static NBTTagList makePatternNBTList(BannerPattern pattern, EnumDyeColor color)
|
|
{
|
|
final NBTTagList patterns = new NBTTagList();
|
|
final NBTTagCompound tag = new NBTTagCompound();
|
|
tag.setString("Pattern", pattern.getHashname());
|
|
tag.setInteger("Color", color.getDyeDamage());
|
|
patterns.appendTag(tag);
|
|
return patterns;
|
|
}
|
|
|
|
public static class CreativeTabBanners extends CreativeTabs
|
|
{
|
|
private static ItemStack DISPLAY = null;
|
|
|
|
public CreativeTabBanners(String id)
|
|
{
|
|
super(id);
|
|
this.setBackgroundImageName("item_search.png");
|
|
}
|
|
|
|
@Override
|
|
public ItemStack getTabIconItem()
|
|
{
|
|
return this.getIconItemStack();
|
|
}
|
|
|
|
@Override
|
|
public ItemStack getIconItemStack()
|
|
{
|
|
if (DISPLAY == null)
|
|
DISPLAY = ItemBanner.makeBanner(EnumDyeColor.WHITE, makePatternNBTList(BannerPattern.CREEPER, EnumDyeColor.GREEN));
|
|
|
|
return DISPLAY;
|
|
}
|
|
|
|
@Override
|
|
public boolean hasSearchBar()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void displayAllRelevantItems(NonNullList<ItemStack> itemList)
|
|
{
|
|
super.displayAllRelevantItems(itemList);
|
|
|
|
for (final BannerPattern pattern : BannerPattern.values())
|
|
itemList.add(ItemBanner.makeBanner(EnumDyeColor.WHITE, makePatternNBTList(pattern, EnumDyeColor.BLACK)));
|
|
}
|
|
}
|
|
}
|