added a nuke

This commit is contained in:
2026-06-18 22:59:24 -05:00
parent 0c10c9bf4e
commit 69a23ff8aa
14 changed files with 1760 additions and 41 deletions

1320
src/lang/en_US_Mod.lang Normal file

File diff suppressed because it is too large Load Diff

63
src/lang/languages.txt Normal file
View File

@@ -0,0 +1,63 @@
af_ZA=Afrikaans (ZA)
ar_SA=العربية (العالم العربي)
bg_BG=Български (BG)
ca_ES=Català (CAT)
cs_CZ=Čeština (CZ)
cy_GB=Cymraeg (Cymru)
da_DK=Dansk (DK)
de_DE=Deutsch (Deutschland)
el_GR=Ελληνικά (El)
en_AU=Australian English (Australia)
en_CA=Canadian English (CA)
en_GB=English (UK)
en_PT=Pirate Speak (PIRATE)
eo_UY=Esperanto (Mondo)
es_AR=Español (Argentina)
es_ES=Español (España)
es_MX=Español (México)
es_UY=Español (Uruguay)
es_VE=Español (Venezuela)
et_EE=Eesti (ET)
eu_ES=Euskara (EH)
fi_FI=suomi (FI)
fr_FR=Français (France)
fr_CA=Français (CA)
ga_IE=Gaeilge (Éire)
gl_ES=Galego (Galicia)
he_IL=אנגלית (IL)
hi_IN=अंग्रेज़ी (भारत)
hr_HR=Hrvatski (HR)
hu_HU=Magyar (HU)
id_ID=Bahasa Indonesia (ID)
is_IS=Íslenska (IS)
it_IT=Italiano (Italia)
ja_JP=日本語 (日本)
ka_GE=ქართული (საქართველო)
ko_KR=한국어 (KR)
kw_GB=Kernowek (Cornwall)
lt_LT=Lietuvių (Lietuva)
lv_LV=Latviešu (Latvija)
ms_MY=Bahasa Melayu (MS)
mt_MT=Malti (MT)
nl_NL=Nederlands (Nederland)
nn_NO=Norsk nynorsk (Noreg)
no_NO=Norsk (NO)
pl_PL=Polski (Polska)
pt_BR=Português (BR)
pt_PT=Português (Portugal)
qya_AA=Quenya (Arda)
ro_RO=Română (RO)
ru_RU=Русский (Россия)
sk_SK=Slovenčina (SK)
sl_SI=Slovenščina (SLO)
sr_SP=Српски (Србија)
sv_SE=Svenska (Sverige)
th_TH=ภาษาไทย (TH)
tlh_AA=tlhIngan Hol (US)
tr_TR=Türkçe (TR)
uk_UA=Українська (Україна)
vi_VN=Tiếng Việt (VN)
zh_CN=简体中文 (中国)
zh_TW=繁體中文 (台灣)
en_US_Mod=English (US) (MML Modded LangFile)

View File

@@ -3,6 +3,7 @@ package net.minecraft.src;
import java.util.List;
import java.util.Random;
import net.minecraft.src.mml.BlockLoader;
import net.minecraft.src.mml.Blocks.BlockNuke;
public class Block {
private CreativeTabs displayOnCreativeTab;
@@ -185,6 +186,9 @@ public class Block {
public static BlockLoader Loader = new BlockLoader();
public static final Block test = Loader.registerBlock(159, Material.ground, "test", CreativeTabs.tabDebug);
public static final Block nuke = (new BlockNuke(160)).setHardness(0.0F).setStepSound(soundGrassFootstep).setUnlocalizedName("nuke");
public final int blockID;
protected float blockHardness;

View File

@@ -0,0 +1,11 @@
package net.minecraft.src;
final class CreativeTabTest extends CreativeTabs {
CreativeTabTest(int var1, String var2) {
super(var1, var2);
}
public int getTabIconItemIndex() {
return Block.brick.blockID;
}
}

View File

@@ -1,9 +1,12 @@
package net.minecraft.src;
import net.minecraft.src.mml.CreativeTabs.CreativeTabDebug;
import java.util.List;
public class CreativeTabs {
public static final CreativeTabs[] creativeTabArray = new CreativeTabs[12];
public static final CreativeTabs[] creativeTabArray = new CreativeTabs[13];
public static final CreativeTabs tabBlock = new CreativeTabBlock(0, "buildingBlocks");
public static final CreativeTabs tabDecorations = new CreativeTabDeco(1, "decorations");
public static final CreativeTabs tabRedstone = new CreativeTabRedstone(2, "redstone");
@@ -16,6 +19,8 @@ public class CreativeTabs {
public static final CreativeTabs tabBrewing = new CreativeTabBrewing(9, "brewing");
public static final CreativeTabs tabMaterials = new CreativeTabMaterial(10, "materials");
public static final CreativeTabs tabInventory = (new CreativeTabInventory(11, "inventory")).setBackgroundImageName("survival_inv.png").setNoScrollbar().setNoTitle();
public static final CreativeTabs tabDebug = new CreativeTabDebug(12, "debug");
private final int tabIndex;
private final String tabLabel;
private String backgroundImageName = "list_items.png";
@@ -76,21 +81,35 @@ public class CreativeTabs {
}
public int getTabColumn() {
if (tabIndex > 11) {
return((tabIndex -12) % 10) % 5;
}
return this.tabIndex % 6;
}
public boolean isTabInFirstRow() {
if (tabIndex > 11) {
return((tabIndex -12) % 10) < 5;
}
return this.tabIndex < 6;
}
public void displayAllReleventItems(List var1) {
Item[] var2 = Item.itemsList;
int var3 = var2.length;
for(int var4 = 0; var4 < var3; ++var4) {
for (int var4 = 0; var4 < var3; ++var4) {
Item var5 = var2[var4];
if(var5 != null && var5.getCreativeTab() == this) {
var5.getSubItems(var5.itemID, this, var1);
if (var5 == null) {
continue;
}
for (CreativeTabs tab : var5.getCreativeTabs()) {
if (tab == this) {
var5.getSubItems(var5.itemID, this, var1);
}
}
}
@@ -118,4 +137,19 @@ public class CreativeTabs {
}
}
public int getTabPage() {
if (tabIndex > 11) {
return ((tabIndex - 12) / 10 ) + 1;
}
return 0;
}
public static int getNextID(){
return creativeTabArray.length;
}
public ItemStack getIconItemStack() {
return new ItemStack(getTabIconItem());
}
}

View File

@@ -20,6 +20,9 @@ public class GuiContainerCreative extends InventoryEffectRenderer {
private boolean field_74234_w = false;
private CreativeCrafting field_82324_x;
private static int currentPage = 0;
private int maxPages = ((CreativeTabs.creativeTabArray.length - 12) / 10) + 1;
public GuiContainerCreative(EntityPlayer var1) {
super(new ContainerCreative(var1));
var1.openContainer = this.inventorySlots;
@@ -172,6 +175,13 @@ public class GuiContainerCreative extends InventoryEffectRenderer {
this.setCurrentCreativeTab(CreativeTabs.creativeTabArray[var1]);
this.field_82324_x = new CreativeCrafting(this.mc);
this.mc.thePlayer.inventoryContainer.addCraftingToCrafters(this.field_82324_x);
if (maxPages > 0) {
// Button ID 101 for Previous, Button ID 102 for Next
this.buttonList.add(new GuiButton(101, this.guiLeft, this.guiTop - 50, 20, 20, "<"));
this.buttonList.add(new GuiButton(102, this.guiLeft + this.xSize - 20, this.guiTop - 50, 20, 20, ">"));
}
} else {
this.mc.displayGuiScreen(new GuiInventory(this.mc.thePlayer));
}
@@ -278,6 +288,13 @@ public class GuiContainerCreative extends InventoryEffectRenderer {
for(int var8 = 0; var8 < var7; ++var8) {
CreativeTabs var9 = var6[var8];
if (var9 == null) continue; // Safety check
// FILTER: Ignore clicks on tabs that aren't on the current page
if (var9.getTabPage() != currentPage) {
continue;
}
if(this.func_74232_a(var9, var4, var5)) {
return;
}
@@ -441,12 +458,20 @@ public class GuiContainerCreative extends InventoryEffectRenderer {
for(int var13 = 0; var13 < var12; ++var13) {
CreativeTabs var14 = var11[var13];
if (var14 == null) continue; // Safety check
// FILTER: Skip checking hover text if the tab isn't on the active page
if (var14.getTabPage() != currentPage) {
continue;
}
if(this.renderCreativeInventoryHoveringText(var14, var1, var2)) {
break;
}
}
if(this.field_74235_v != null && selectedTabIndex == CreativeTabs.tabInventory.getTabIndex() && this.isPointInRegion(this.field_74235_v.xDisplayPosition, this.field_74235_v.yDisplayPosition, 16, 16, var1, var2)) {
// FILTER: Only show the survival inventory bin slot tooltip if the survival tab is on the active page
if(this.field_74235_v != null && selectedTabIndex == CreativeTabs.tabInventory.getTabIndex() && CreativeTabs.tabInventory.getTabPage() == currentPage && this.isPointInRegion(this.field_74235_v.xDisplayPosition, this.field_74235_v.yDisplayPosition, 16, 16, var1, var2)) {
this.drawCreativeTabHoveringText(StringTranslate.getInstance().translateKey("inventory.binSlot"), var1, var2);
}
@@ -464,12 +489,20 @@ public class GuiContainerCreative extends InventoryEffectRenderer {
int var7;
for(var7 = 0; var7 < var6; ++var7) {
CreativeTabs var8 = var5[var7];
if (var8 == null) continue; // Safety check for null tabs
// FILTER: Only draw the background tab if it's on the current page
if (var8.getTabPage() != currentPage) {
continue;
}
this.mc.renderEngine.bindTexture("/gui/allitems.png");
if(var8.getTabIndex() != selectedTabIndex) {
this.renderCreativeTab(var8);
}
}
// Draw the main large inventory background texture
this.mc.renderEngine.bindTexture("/gui/creative_inv/" + var4.getBackgroundImageName());
this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize);
this.searchField.drawTextBox();
@@ -482,14 +515,24 @@ public class GuiContainerCreative extends InventoryEffectRenderer {
this.drawTexturedModalRect(var9, var6 + (int)((float)(var7 - var6 - 17) * this.currentScroll), 232 + (this.needsScrollBars() ? 0 : 12), 0, 12, 15);
}
this.renderCreativeTab(var4);
if(var4 == CreativeTabs.tabInventory) {
GuiInventory.drawPlayerOnGui(this.mc, this.guiLeft + 43, this.guiTop + 45, 20, (float)(this.guiLeft + 43 - var2), (float)(this.guiTop + 45 - 30 - var3));
// FILTER: Only draw the foreground/selected tab if it's on the current page
if (var4.getTabPage() == currentPage) {
this.renderCreativeTab(var4);
}
if(var4 == CreativeTabs.tabInventory && var4.getTabPage() == currentPage) {
GuiInventory.drawPlayerOnGui(this.mc, this.guiLeft + 43, this.guiTop + 45, 20, (float)(this.guiLeft + 43 - var2), (float)(this.guiTop + 45 - 30 - var3));
}
}
protected boolean func_74232_a(CreativeTabs var1, int var2, int var3) {
if (var1 == null) return false;
// FILTER: If the tab isn't on the active page, its bounding box shouldn't exist
if (var1.getTabPage() != currentPage) {
return false;
}
int var4 = var1.getTabColumn();
int var5 = 28 * var4;
byte var6 = 0;
@@ -585,6 +628,17 @@ public class GuiContainerCreative extends InventoryEffectRenderer {
this.mc.displayGuiScreen(new GuiStats(this, this.mc.statFileWriter));
}
if (var1.id == 101) { // Previous Page
if (currentPage > 0) {
currentPage--;
}
} else if (var1.id == 102) { // Next Page
if (currentPage < maxPages) {
currentPage++;
}
}
super.actionPerformed(var1);
}
public int func_74230_h() {

View File

@@ -292,6 +292,10 @@ public class Item {
return this;
}
public CreativeTabs[] getCreativeTabs() {
return new CreativeTabs[]{getCreativeTab()};
}
public String getLocalizedName(ItemStack var1) {
String var2 = this.getUnlocalizedName(var1);
return var2 == null ? "" : StatCollector.translateToLocal(var2);

View File

@@ -14,7 +14,7 @@ public class StringTranslate {
private static StringTranslate instance = new StringTranslate("en_US");
private Properties translateTable = new Properties();
private TreeMap languageList;
private TreeMap field_94521_d = new TreeMap();
private TreeMap VarTreeMap = new TreeMap();
private String currentLanguage;
private boolean isUnicode;
@@ -54,8 +54,8 @@ public class StringTranslate {
private void loadLanguage(Properties var1, String var2) throws IOException {
BufferedReader var3 = null;
if(this.field_94521_d.containsKey(var2)) {
var3 = new BufferedReader(new FileReader((File)this.field_94521_d.get(var2)));
if(this.VarTreeMap.containsKey(var2)) {
var3 = new BufferedReader(new FileReader((File)this.VarTreeMap.get(var2)));
} else {
var3 = new BufferedReader(new InputStreamReader(StringTranslate.class.getResourceAsStream("/lang/" + var2 + ".lang"), "UTF-8"));
}
@@ -161,7 +161,7 @@ public class StringTranslate {
var1 = var1.substring(0, var3);
}
this.field_94521_d.put(var1, var2);
this.VarTreeMap.put(var1, var2);
if(var1.contains(this.currentLanguage)) {
this.setLanguage(this.currentLanguage, true);
}

View File

@@ -1650,8 +1650,8 @@ public abstract class World implements IBlockAccess {
return false;
}
public Explosion createExplosion(Entity var1, double var2, double var4, double var6, float var8, boolean var9) {
return this.newExplosion(var1, var2, var4, var6, var8, false, var9);
public Explosion createExplosion(Entity entity, double X, double Y, double Z, float Power, boolean explode) {
return this.newExplosion(entity, X, Y, Z, Power, false, explode);
}
public Explosion newExplosion(Entity var1, double var2, double var4, double var6, float var8, boolean var9, boolean var10) {

View File

@@ -5,9 +5,9 @@ import net.minecraft.src.CreativeTabs;
import net.minecraft.src.Material;
public class BlockLoader {
public Block registerBlock(int BlockID, Material material, String unlocalizedName) {
public Block registerBlock(int BlockID, Material material, String unlocalizedName, CreativeTabs creativeTab) {
Block InternalBlock = (new Block(BlockID, material));
InternalBlock.setCreativeTab(CreativeTabs.tabBlock);
InternalBlock.setCreativeTab(creativeTab);
InternalBlock.setUnlocalizedName(unlocalizedName);
return InternalBlock;
}

View File

@@ -0,0 +1,97 @@
package net.minecraft.src.mml.Blocks;
import net.minecraft.src.*;
import net.minecraft.src.mml.Entities.EntityNukePrimed;
import java.util.Random;
public class BlockNuke extends Block {
private Icon TextureTop;
private Icon TextureBottom;
public BlockNuke(int BlockID) {
super(BlockID, Material.tnt);
this.setCreativeTab(CreativeTabs.tabDebug);
}
public Icon getIcon(int side, int var2) {
return side == 0 ? this.TextureBottom : (side == 1 ? this.TextureTop : this.blockIcon);
}
public void onBlockAdded(World var1, int var2, int var3, int var4) {
super.onBlockAdded(var1, var2, var3, var4);
if(var1.isBlockIndirectlyGettingPowered(var2, var3, var4)) {
this.onBlockDestroyedByPlayer(var1, var2, var3, var4, 1);
var1.setBlockToAir(var2, var3, var4);
}
this.BlowupNuke(var1, var2, var3, var4, 1, (EntityLiving) null);
}
public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
if(var1.isBlockIndirectlyGettingPowered(var2, var3, var4)) {
this.onBlockDestroyedByPlayer(var1, var2, var3, var4, 1);
var1.setBlockToAir(var2, var3, var4);
}
}
public int quantityDropped(Random var1) {
return 1;
}
public void onBlockDestroyedByExplosion(World var1, int var2, int var3, int var4, Explosion var5) {
if(!var1.isRemote) {
EntityNukePrimed NukeEntity = new EntityNukePrimed(var1, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), var5.func_94613_c());
NukeEntity.fuse = 0;
var1.spawnEntityInWorld(NukeEntity);
}
}
public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) {
this.BlowupNuke(var1, var2, var3, var4, var5, (EntityLiving)null);
}
public void BlowupNuke(World var1, int var2, int var3, int var4, int var5, EntityLiving var6) {
if(!var1.isRemote) {
if((var5 & 1) == 1) {
EntityNukePrimed var7 = new EntityNukePrimed(var1, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), var6);
var1.spawnEntityInWorld(var7);
var1.playSoundAtEntity(var7, "random.fuse", 1.0F, 1.0F);
}
}
}
public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) {
if(var5.getCurrentEquippedItem() != null && var5.getCurrentEquippedItem().itemID == Item.flintAndSteel.itemID) {
this.BlowupNuke(var1, var2, var3, var4, 1, var5);
var1.setBlockToAir(var2, var3, var4);
return true;
} else {
return super.onBlockActivated(var1, var2, var3, var4, var5, var6, var7, var8, var9);
}
}
public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) {
if(var5 instanceof EntityArrow && !var1.isRemote) {
EntityArrow var6 = (EntityArrow)var5;
if(var6.isBurning()) {
this.BlowupNuke(var1, var2, var3, var4, 1, var6.shootingEntity instanceof EntityLiving ? (EntityLiving)var6.shootingEntity : null);
var1.setBlockToAir(var2, var3, var4);
}
}
}
public boolean canDropFromExplosion(Explosion var1) {
return false;
}
public void registerIcons(IconRegister var1) {
this.blockIcon = var1.registerIcon("tnt_side");
this.TextureTop = var1.registerIcon("tnt_top");
this.TextureBottom = var1.registerIcon("tnt_bottom");
}
}

View File

@@ -0,0 +1,14 @@
package net.minecraft.src.mml.CreativeTabs;
import net.minecraft.src.Block;
import net.minecraft.src.CreativeTabs;
public final class CreativeTabDebug extends CreativeTabs {
public CreativeTabDebug(int var1, String var2) {
super(var1, var2);
}
public int getTabIconItemIndex() {
return Block.test.blockID;
}
}

View File

@@ -0,0 +1,93 @@
package net.minecraft.src.mml.Entities;
import net.minecraft.src.Entity;
import net.minecraft.src.EntityLiving;
import net.minecraft.src.NBTTagCompound;
import net.minecraft.src.World;
public class EntityNukePrimed extends Entity {
private EntityLiving tntPlacedBy;
public int fuse;
public EntityNukePrimed(World gameWorld) {
super(gameWorld);
this.preventEntitySpawning = true;
this.setSize(0.98F, 0.98F);
this.yOffset = this.height / 2.0F;
}
public EntityNukePrimed(World gameWorld, double X, double Y, double Z, EntityLiving entityLiving) {
this(gameWorld);
this.setPosition(X, Y, Z);
float var9 = (float)(Math.random() * (double)((float)Math.PI) * 2.0D);
this.motionX = (double)(-((float)Math.sin((double)var9)) * 0.02F);
this.motionY = (double)0.2F;
this.motionZ = (double)(-((float)Math.cos((double)var9)) * 0.02F);
this.prevPosX = X;
this.prevPosY = Y;
this.prevPosZ = Z;
this.tntPlacedBy = entityLiving;
this.fuse = 200;
}
protected void entityInit() {
}
protected boolean canTriggerWalking() {
return false;
}
public boolean canBeCollidedWith() {
return !this.isDead;
}
public void onUpdate() {
this.prevPosX = this.posX; // get the position and set it
this.prevPosY = this.posY;
this.prevPosZ = this.posZ;
this.moveEntity(this.motionX, this.motionY, this.motionZ);
this.motionX *= (double)0.98F;
this.motionY *= (double)0.98F;
this.motionZ *= (double)0.98F;
if (this.onGround) {
this.motionX *= (double)0.7F;
this.motionZ *= (double)0.7F;
this.motionY *= -0.5D;
}
if (this.fuse-- <= 0) {
this.setDead();
if (!this.worldObj.isRemote) {
this.explode();
} else {
this.worldObj.spawnParticle("smoke", this.posX, this.posY + 0.5D, this.posZ , 0.0D, 0.0D, 0.0D);
}
}
}
private void explode() {
float explosionPower = 40.0F;
this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, explosionPower, true);
}
protected void writeEntityToNBT(NBTTagCompound var1) {
}
protected void readEntityFromNBT(NBTTagCompound var1) {
}
public float getShadowSize() {
return 0.0F;
}
public EntityLiving getTntPlacedBy() {
return this.tntPlacedBy;
}
}