base mod created
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
package net.minecraft.client.settings;
|
||||
|
||||
import java.io.File;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.nbt.CompressedStreamTools;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class CreativeSettings
|
||||
{
|
||||
private static final Logger LOGGER = LogManager.getLogger();
|
||||
protected Minecraft minecraft;
|
||||
private final File dataFile;
|
||||
private final HotbarSnapshot[] hotbarSnapshots = new HotbarSnapshot[9];
|
||||
|
||||
public CreativeSettings(Minecraft minecraftIn, File dataDir)
|
||||
{
|
||||
this.minecraft = minecraftIn;
|
||||
this.dataFile = new File(dataDir, "hotbar.nbt");
|
||||
|
||||
for (int i = 0; i < 9; ++i)
|
||||
{
|
||||
this.hotbarSnapshots[i] = new HotbarSnapshot();
|
||||
}
|
||||
|
||||
this.read();
|
||||
}
|
||||
|
||||
public void read()
|
||||
{
|
||||
try
|
||||
{
|
||||
NBTTagCompound nbttagcompound = CompressedStreamTools.read(this.dataFile);
|
||||
|
||||
if (nbttagcompound == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 9; ++i)
|
||||
{
|
||||
this.hotbarSnapshots[i].fromTag(nbttagcompound.getTagList(String.valueOf(i), 10));
|
||||
}
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
LOGGER.error("Failed to load creative mode options", (Throwable)exception);
|
||||
}
|
||||
}
|
||||
|
||||
public void write()
|
||||
{
|
||||
try
|
||||
{
|
||||
NBTTagCompound nbttagcompound = new NBTTagCompound();
|
||||
|
||||
for (int i = 0; i < 9; ++i)
|
||||
{
|
||||
nbttagcompound.setTag(String.valueOf(i), this.hotbarSnapshots[i].createTag());
|
||||
}
|
||||
|
||||
CompressedStreamTools.write(nbttagcompound, this.dataFile);
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
LOGGER.error("Failed to save creative mode options", (Throwable)exception);
|
||||
}
|
||||
}
|
||||
|
||||
public HotbarSnapshot getHotbarSnapshot(int p_192563_1_)
|
||||
{
|
||||
return this.hotbarSnapshots[p_192563_1_];
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,58 @@
|
||||
package net.minecraft.client.settings;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class HotbarSnapshot extends ArrayList<ItemStack>
|
||||
{
|
||||
public static final int HOTBAR_SIZE = InventoryPlayer.getHotbarSize();
|
||||
|
||||
public HotbarSnapshot()
|
||||
{
|
||||
this.ensureCapacity(HOTBAR_SIZE);
|
||||
|
||||
for (int i = 0; i < HOTBAR_SIZE; ++i)
|
||||
{
|
||||
this.add(ItemStack.EMPTY);
|
||||
}
|
||||
}
|
||||
|
||||
public NBTTagList createTag()
|
||||
{
|
||||
NBTTagList nbttaglist = new NBTTagList();
|
||||
|
||||
for (int i = 0; i < HOTBAR_SIZE; ++i)
|
||||
{
|
||||
nbttaglist.appendTag(((ItemStack)this.get(i)).writeToNBT(new NBTTagCompound()));
|
||||
}
|
||||
|
||||
return nbttaglist;
|
||||
}
|
||||
|
||||
public void fromTag(NBTTagList p_192833_1_)
|
||||
{
|
||||
for (int i = 0; i < HOTBAR_SIZE; ++i)
|
||||
{
|
||||
this.set(i, new ItemStack(p_192833_1_.getCompoundTagAt(i)));
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isEmpty()
|
||||
{
|
||||
for (int i = 0; i < HOTBAR_SIZE; ++i)
|
||||
{
|
||||
if (!((ItemStack)this.get(i)).isEmpty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,335 @@
|
||||
package net.minecraft.client.settings;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.Supplier;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.util.IntHashMap;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
import org.lwjgl.input.Keyboard;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class KeyBinding implements Comparable<KeyBinding>
|
||||
{
|
||||
private static final Map<String, KeyBinding> KEYBIND_ARRAY = Maps.<String, KeyBinding>newHashMap();
|
||||
private static final net.minecraftforge.client.settings.KeyBindingMap HASH = new net.minecraftforge.client.settings.KeyBindingMap();
|
||||
private static final Set<String> KEYBIND_SET = Sets.<String>newHashSet();
|
||||
/** A map that assigns priorities to all categories, for ordering purposes. */
|
||||
private static final Map<String, Integer> CATEGORY_ORDER = Maps.<String, Integer>newHashMap();
|
||||
private final String keyDescription;
|
||||
private final int keyCodeDefault;
|
||||
private final String keyCategory;
|
||||
private int keyCode;
|
||||
/** Is the key held down? */
|
||||
private boolean pressed;
|
||||
private int pressTime;
|
||||
|
||||
public static void onTick(int keyCode)
|
||||
{
|
||||
if (keyCode != 0)
|
||||
{
|
||||
KeyBinding keybinding = HASH.lookupActive(keyCode);
|
||||
|
||||
if (keybinding != null)
|
||||
{
|
||||
++keybinding.pressTime;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void setKeyBindState(int keyCode, boolean pressed)
|
||||
{
|
||||
if (keyCode != 0)
|
||||
{
|
||||
for (KeyBinding keybinding : HASH.lookupAll(keyCode))
|
||||
|
||||
if (keybinding != null)
|
||||
{
|
||||
keybinding.pressed = pressed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Completely recalculates whether any keybinds are held, from scratch.
|
||||
*/
|
||||
public static void updateKeyBindState()
|
||||
{
|
||||
for (KeyBinding keybinding : KEYBIND_ARRAY.values())
|
||||
{
|
||||
try
|
||||
{
|
||||
setKeyBindState(keybinding.keyCode, keybinding.keyCode < 256 && Keyboard.isKeyDown(keybinding.keyCode));
|
||||
}
|
||||
catch (IndexOutOfBoundsException var3)
|
||||
{
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void unPressAllKeys()
|
||||
{
|
||||
for (KeyBinding keybinding : KEYBIND_ARRAY.values())
|
||||
{
|
||||
keybinding.unpressKey();
|
||||
}
|
||||
}
|
||||
|
||||
public static void resetKeyBindingArrayAndHash()
|
||||
{
|
||||
HASH.clearMap();
|
||||
|
||||
for (KeyBinding keybinding : KEYBIND_ARRAY.values())
|
||||
{
|
||||
HASH.addKey(keybinding.keyCode, keybinding);
|
||||
}
|
||||
}
|
||||
|
||||
public static Set<String> getKeybinds()
|
||||
{
|
||||
return KEYBIND_SET;
|
||||
}
|
||||
|
||||
public KeyBinding(String description, int keyCode, String category)
|
||||
{
|
||||
this.keyDescription = description;
|
||||
this.keyCode = keyCode;
|
||||
this.keyCodeDefault = keyCode;
|
||||
this.keyCategory = category;
|
||||
KEYBIND_ARRAY.put(description, this);
|
||||
HASH.addKey(keyCode, this);
|
||||
KEYBIND_SET.add(category);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the key is pressed (used for continuous querying). Should be used in tickers.
|
||||
*/
|
||||
public boolean isKeyDown()
|
||||
{
|
||||
return this.pressed && getKeyConflictContext().isActive() && getKeyModifier().isActive(getKeyConflictContext());
|
||||
}
|
||||
|
||||
public String getKeyCategory()
|
||||
{
|
||||
return this.keyCategory;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true on the initial key press. For continuous querying use {@link isKeyDown()}. Should be used in key
|
||||
* events.
|
||||
*/
|
||||
public boolean isPressed()
|
||||
{
|
||||
if (this.pressTime == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
--this.pressTime;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private void unpressKey()
|
||||
{
|
||||
this.pressTime = 0;
|
||||
this.pressed = false;
|
||||
}
|
||||
|
||||
public String getKeyDescription()
|
||||
{
|
||||
return this.keyDescription;
|
||||
}
|
||||
|
||||
public int getKeyCodeDefault()
|
||||
{
|
||||
return this.keyCodeDefault;
|
||||
}
|
||||
|
||||
public int getKeyCode()
|
||||
{
|
||||
return this.keyCode;
|
||||
}
|
||||
|
||||
public void setKeyCode(int keyCode)
|
||||
{
|
||||
this.keyCode = keyCode;
|
||||
}
|
||||
|
||||
public int compareTo(KeyBinding p_compareTo_1_)
|
||||
{
|
||||
if (this.keyCategory.equals(p_compareTo_1_.keyCategory)) return I18n.format(this.keyDescription).compareTo(I18n.format(p_compareTo_1_.keyDescription));
|
||||
Integer tCat = CATEGORY_ORDER.get(this.keyCategory);
|
||||
Integer oCat = CATEGORY_ORDER.get(p_compareTo_1_.keyCategory);
|
||||
if (tCat == null && oCat != null) return 1;
|
||||
if (tCat != null && oCat == null) return -1;
|
||||
if (tCat == null && oCat == null) return I18n.format(this.keyCategory).compareTo(I18n.format(p_compareTo_1_.keyCategory));
|
||||
return tCat.compareTo(oCat);
|
||||
}
|
||||
|
||||
/****************** Forge Start *****************************/
|
||||
private net.minecraftforge.client.settings.KeyModifier keyModifierDefault = net.minecraftforge.client.settings.KeyModifier.NONE;
|
||||
private net.minecraftforge.client.settings.KeyModifier keyModifier = net.minecraftforge.client.settings.KeyModifier.NONE;
|
||||
private net.minecraftforge.client.settings.IKeyConflictContext keyConflictContext = net.minecraftforge.client.settings.KeyConflictContext.UNIVERSAL;
|
||||
|
||||
/**
|
||||
* Convenience constructor for creating KeyBindings with keyConflictContext set.
|
||||
*/
|
||||
public KeyBinding(String description, net.minecraftforge.client.settings.IKeyConflictContext keyConflictContext, int keyCode, String category)
|
||||
{
|
||||
this(description, keyConflictContext, net.minecraftforge.client.settings.KeyModifier.NONE, keyCode, category);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience constructor for creating KeyBindings with keyConflictContext and keyModifier set.
|
||||
*/
|
||||
public KeyBinding(String description, net.minecraftforge.client.settings.IKeyConflictContext keyConflictContext, net.minecraftforge.client.settings.KeyModifier keyModifier, int keyCode, String category)
|
||||
{
|
||||
this.keyDescription = description;
|
||||
this.keyCode = keyCode;
|
||||
this.keyCodeDefault = keyCode;
|
||||
this.keyCategory = category;
|
||||
this.keyConflictContext = keyConflictContext;
|
||||
this.keyModifier = keyModifier;
|
||||
this.keyModifierDefault = keyModifier;
|
||||
if (this.keyModifier.matches(keyCode))
|
||||
{
|
||||
this.keyModifier = net.minecraftforge.client.settings.KeyModifier.NONE;
|
||||
}
|
||||
KEYBIND_ARRAY.put(description, this);
|
||||
HASH.addKey(keyCode, this);
|
||||
KEYBIND_SET.add(category);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks that the key conflict context and modifier are active, and that the keyCode matches this binding.
|
||||
*/
|
||||
public boolean isActiveAndMatches(int keyCode)
|
||||
{
|
||||
return keyCode != 0 && keyCode == this.getKeyCode() && getKeyConflictContext().isActive() && getKeyModifier().isActive(getKeyConflictContext());
|
||||
}
|
||||
|
||||
public void setKeyConflictContext(net.minecraftforge.client.settings.IKeyConflictContext keyConflictContext)
|
||||
{
|
||||
this.keyConflictContext = keyConflictContext;
|
||||
}
|
||||
|
||||
public net.minecraftforge.client.settings.IKeyConflictContext getKeyConflictContext()
|
||||
{
|
||||
return keyConflictContext;
|
||||
}
|
||||
|
||||
public net.minecraftforge.client.settings.KeyModifier getKeyModifierDefault()
|
||||
{
|
||||
return keyModifierDefault;
|
||||
}
|
||||
|
||||
public net.minecraftforge.client.settings.KeyModifier getKeyModifier()
|
||||
{
|
||||
return keyModifier;
|
||||
}
|
||||
|
||||
public void setKeyModifierAndCode(net.minecraftforge.client.settings.KeyModifier keyModifier, int keyCode)
|
||||
{
|
||||
this.keyCode = keyCode;
|
||||
if (keyModifier.matches(keyCode))
|
||||
{
|
||||
keyModifier = net.minecraftforge.client.settings.KeyModifier.NONE;
|
||||
}
|
||||
HASH.removeKey(this);
|
||||
this.keyModifier = keyModifier;
|
||||
HASH.addKey(keyCode, this);
|
||||
}
|
||||
|
||||
public void setToDefault()
|
||||
{
|
||||
setKeyModifierAndCode(getKeyModifierDefault(), getKeyCodeDefault());
|
||||
}
|
||||
|
||||
public boolean isSetToDefaultValue()
|
||||
{
|
||||
return getKeyCode() == getKeyCodeDefault() && getKeyModifier() == getKeyModifierDefault();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true when the other keyBinding conflicts with this one
|
||||
*/
|
||||
public boolean conflicts(KeyBinding other)
|
||||
{
|
||||
if (getKeyConflictContext().conflicts(other.getKeyConflictContext()) || other.getKeyConflictContext().conflicts(getKeyConflictContext()))
|
||||
{
|
||||
net.minecraftforge.client.settings.KeyModifier keyModifier = getKeyModifier();
|
||||
net.minecraftforge.client.settings.KeyModifier otherKeyModifier = other.getKeyModifier();
|
||||
if (keyModifier.matches(other.getKeyCode()) || otherKeyModifier.matches(getKeyCode()))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (getKeyCode() == other.getKeyCode())
|
||||
{
|
||||
return keyModifier == otherKeyModifier ||
|
||||
// IN_GAME key contexts have a conflict when at least one modifier is NONE.
|
||||
// For example: If you hold shift to crouch, you can still press E to open your inventory. This means that a Shift+E hotkey is in conflict with E.
|
||||
// GUI and other key contexts do not have this limitation.
|
||||
(getKeyConflictContext().conflicts(net.minecraftforge.client.settings.KeyConflictContext.IN_GAME) &&
|
||||
(keyModifier == net.minecraftforge.client.settings.KeyModifier.NONE || otherKeyModifier == net.minecraftforge.client.settings.KeyModifier.NONE));
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true when one of the bindings' key codes conflicts with the other's modifier.
|
||||
*/
|
||||
public boolean hasKeyCodeModifierConflict(KeyBinding other)
|
||||
{
|
||||
if (getKeyConflictContext().conflicts(other.getKeyConflictContext()) || other.getKeyConflictContext().conflicts(getKeyConflictContext()))
|
||||
{
|
||||
if (getKeyModifier().matches(other.getKeyCode()) || other.getKeyModifier().matches(getKeyCode()))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public String getDisplayName()
|
||||
{
|
||||
return getKeyModifier().getLocalizedComboName(getKeyCode());
|
||||
}
|
||||
/****************** Forge End *****************************/
|
||||
|
||||
/**
|
||||
* Returns a supplier which gets a keybind's current binding (eg, <code>key.forward</code> returns <samp>W</samp> by
|
||||
* default), or the keybind's name if no such keybind exists (eg, <code>key.invalid</code> returns
|
||||
* <samp>key.invalid</samp>)
|
||||
*
|
||||
* @param key The description of the key (eg, <code>key.forward</code>).
|
||||
*/
|
||||
public static Supplier<String> getDisplayString(String key)
|
||||
{
|
||||
KeyBinding keybinding = KEYBIND_ARRAY.get(key);
|
||||
return keybinding == null ? () ->
|
||||
{
|
||||
return key;
|
||||
} : () ->
|
||||
{
|
||||
return keybinding.getDisplayName();
|
||||
};
|
||||
}
|
||||
|
||||
static
|
||||
{
|
||||
CATEGORY_ORDER.put("key.categories.movement", Integer.valueOf(1));
|
||||
CATEGORY_ORDER.put("key.categories.gameplay", Integer.valueOf(2));
|
||||
CATEGORY_ORDER.put("key.categories.inventory", Integer.valueOf(3));
|
||||
CATEGORY_ORDER.put("key.categories.creative", Integer.valueOf(4));
|
||||
CATEGORY_ORDER.put("key.categories.multiplayer", Integer.valueOf(5));
|
||||
CATEGORY_ORDER.put("key.categories.ui", Integer.valueOf(6));
|
||||
CATEGORY_ORDER.put("key.categories.misc", Integer.valueOf(7));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
// Auto generated package-info by MCP
|
||||
@ParametersAreNonnullByDefault
|
||||
@MethodsReturnNonnullByDefault
|
||||
package net.minecraft.client.settings;
|
||||
|
||||
import mcp.MethodsReturnNonnullByDefault;
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
Reference in New Issue
Block a user